@cheethas/splits-sdk
Version:
Fork of the splits SDK for the 0xSplits protocol, testing experimental features
782 lines • 70.1 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "SplitMain",
"sourceName": "contracts/SplitMain.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "Create2Error",
"type": "error"
},
{
"inputs": [],
"name": "CreateError",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "newController",
"type": "address"
}
],
"name": "InvalidNewController",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "accountsLength",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "allocationsLength",
"type": "uint256"
}
],
"name": "InvalidSplit__AccountsAndAllocationsMismatch",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "InvalidSplit__AccountsOutOfOrder",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "InvalidSplit__AllocationMustBePositive",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "allocationsSum",
"type": "uint32"
}
],
"name": "InvalidSplit__InvalidAllocationsSum",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "distributorFee",
"type": "uint32"
}
],
"name": "InvalidSplit__InvalidDistributorFee",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "hash",
"type": "bytes32"
}
],
"name": "InvalidSplit__InvalidHash",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "accountsLength",
"type": "uint256"
}
],
"name": "InvalidSplit__TooFewAccounts",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "Unauthorized",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "split",
"type": "address"
}
],
"name": "CancelControlTransfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "split",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "previousController",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newController",
"type": "address"
}
],
"name": "ControlTransfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "split",
"type": "address"
},
{
"indexed": false,
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint32[]",
"name": "percentAllocations",
"type": "uint32[]"
},
{
"indexed": false,
"internalType": "uint32",
"name": "distributorFee",
"type": "uint32"
},
{
"indexed": false,
"internalType": "address",
"name": "controller",
"type": "address"
}
],
"name": "CreateSplit",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "split",
"type": "address"
},
{
"indexed": true,
"internalType": "contract ERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "distributorAddress",
"type": "address"
}
],
"name": "DistributeERC20",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "split",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "distributorAddress",
"type": "address"
}
],
"name": "DistributeETH",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "split",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newPotentialController",
"type": "address"
}
],
"name": "InitiateControlTransfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "split",
"type": "address"
},
{
"indexed": false,
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint32[]",
"name": "percentAllocations",
"type": "uint32[]"
},
{
"indexed": false,
"internalType": "uint32",
"name": "distributorFee",
"type": "uint32"
}
],
"name": "UpdateSplit",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "ethAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "contract ERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "tokenAmounts",
"type": "uint256[]"
}
],
"name": "Withdrawal",
"type": "event"
},
{
"inputs": [],
"name": "PERCENTAGE_SCALE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
}
],
"name": "acceptControl",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
}
],
"name": "cancelControlTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint32[]",
"name": "percentAllocations",
"type": "uint32[]"
},
{
"internalType": "uint32",
"name": "distributorFee",
"type": "uint32"
},
{
"internalType": "address",
"name": "controller",
"type": "address"
}
],
"name": "createSplit",
"outputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
},
{
"internalType": "contract ERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint32[]",
"name": "percentAllocations",
"type": "uint32[]"
},
{
"internalType": "uint32",
"name": "distributorFee",
"type": "uint32"
},
{
"internalType": "address",
"name": "distributorAddress",
"type": "address"
}
],
"name": "distributeERC20",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
},
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint32[]",
"name": "percentAllocations",
"type": "uint32[]"
},
{
"internalType": "uint32",
"name": "distributorFee",
"type": "uint32"
},
{
"internalType": "address",
"name": "distributorAddress",
"type": "address"
}
],
"name": "distributeETH",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
}
],
"name": "getController",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "contract ERC20",
"name": "token",
"type": "address"
}
],
"name": "getERC20Balance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "getETHBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
}
],
"name": "getHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
}
],
"name": "getNewPotentialController",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
}
],
"name": "makeSplitImmutable",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint32[]",
"name": "percentAllocations",
"type": "uint32[]"
},
{
"internalType": "uint32",
"name": "distributorFee",
"type": "uint32"
}
],
"name": "predictImmutableSplitAddress",
"outputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
},
{
"internalType": "address",
"name": "newController",
"type": "address"
}
],
"name": "transferControl",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
},
{
"internalType": "contract ERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint32[]",
"name": "percentAllocations",
"type": "uint32[]"
},
{
"internalType": "uint32",
"name": "distributorFee",
"type": "uint32"
},
{
"internalType": "address",
"name": "distributorAddress",
"type": "address"
}
],
"name": "updateAndDistributeERC20",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
},
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint32[]",
"name": "percentAllocations",
"type": "uint32[]"
},
{
"internalType": "uint32",
"name": "distributorFee",
"type": "uint32"
},
{
"internalType": "address",
"name": "distributorAddress",
"type": "address"
}
],
"name": "updateAndDistributeETH",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "split",
"type": "address"
},
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint32[]",
"name": "percentAllocations",
"type": "uint32[]"
},
{
"internalType": "uint32",
"name": "distributorFee",
"type": "uint32"
}
],
"name": "updateSplit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "walletImplementation",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "withdrawETH",
"type": "uint256"
},
{
"internalType": "contract ERC20[]",
"name": "tokens",
"type": "address[]"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60a06040523480156200001157600080fd5b50604051620000209062000054565b604051809103906000f0801580156200003d573d6000803e3d6000fd5b5060601b6001600160601b03191660805262000062565b6103a0806200323283390190565b60805160601c61319c62000096600039600081816102b001528181610c1a0152818161106c015261109d015261319c6000f3fe6080604052600436106101185760003560e01c806377b1e4e9116100a0578063c7de644011610064578063c7de64401461034e578063d0e4b2f41461036e578063e10e51d61461038e578063e61cb05e146103cb578063ecef0ace146103eb57600080fd5b806377b1e4e91461027e5780638117abc11461029e57806388c662aa146102d2578063a5e3909e1461030e578063c3a8962c1461032e57600080fd5b80633bb66a7b116100e75780633bb66a7b146101cf5780633f26479e146101ef57806352844dd3146102065780636e5f69191461023e5780637601f7821461025e57600080fd5b80631267c6da146101245780631581130214610146578063189cbaa0146101665780631da0b8fc1461018657600080fd5b3661011f57005b600080fd5b34801561013057600080fd5b5061014461013f366004612ae7565b61040b565b005b34801561015257600080fd5b50610144610161366004612c81565b6104a6565b34801561017257600080fd5b50610144610181366004612ae7565b61081a565b34801561019257600080fd5b506101bc6101a1366004612ae7565b6001600160a01b031660009081526002602052604090205490565b6040519081526020015b60405180910390f35b3480156101db57600080fd5b506101bc6101ea366004612ae7565b6108e5565b3480156101fb57600080fd5b506101bc620f424081565b34801561021257600080fd5b50610226610221366004612d92565b61093e565b6040516001600160a01b0390911681526020016101c6565b34801561024a57600080fd5b50610144610259366004612d38565b610c4d565b34801561026a57600080fd5b50610226610279366004612e10565b610d82565b34801561028a57600080fd5b50610144610299366004612c81565b611160565b3480156102aa57600080fd5b506102267f000000000000000000000000000000000000000000000000000000000000000081565b3480156102de57600080fd5b506102266102ed366004612ae7565b6001600160a01b039081166000908152600260205260409020600101541690565b34801561031a57600080fd5b50610144610329366004612bca565b6114a3565b34801561033a57600080fd5b506101bc610349366004612c6f565b6117c6565b34801561035a57600080fd5b50610144610369366004612ae7565b61189a565b34801561037a57600080fd5b50610144610389366004612b03565b611969565b34801561039a57600080fd5b506102266103a9366004612ae7565b6001600160a01b03908116600090815260026020819052604090912001541690565b3480156103d757600080fd5b506101446103e6366004612bca565b611a3b565b3480156103f757600080fd5b50610144610406366004612b3b565b611d8b565b6001600160a01b0381811660009081526002602052604090206001015482911633146104515760405163472511eb60e11b81523360048201526024015b60405180910390fd5b6001600160a01b038216600081815260026020819052604080832090910180546001600160a01b0319169055517f6c2460a415b84be3720c209fe02f2cad7a6bcba21e8637afe8957b7ec4b6ef879190a25050565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050610535578251604051630e8c626560e41b815260040161044891815260200190565b8151835114610564578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f42406105718361203c565b63ffffffff16146105a7576105858261203c565b60405163fcc487c160e01b815263ffffffff9091166004820152602401610448565b82516000190160005b8181101561069e578481600101815181106105db57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031685828151811061060c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161061063e5760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff1684828151811061066657634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff16141561069657604051630db7e4c760e01b815260048101829052602401610448565b6001016105b0565b50600063ffffffff168382815181106106c757634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff1614156106f757604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff16111561072a5760405163308440e360e21b815263ffffffff82166004820152602401610448565b61079a8b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b925061208f915050565b61080d8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c92508b91506120e19050565b5050505050505050505050565b6001600160a01b03818116600090815260026020526040902060010154829116331461085b5760405163472511eb60e11b8152336004820152602401610448565b6001600160a01b03808316600081815260026020819052604080832091820180546001600160a01b0319169055600190910154905191931691907f943d69cf2bbe08a9d44b3c4ce6da17d939d758739370620871ce99a6437866d0908490a4506001600160a01b0316600090815260026020526040902060010180546001600160a01b0319169055565b6001600160a01b038116600090815260026020526040812054610909576000610915565b816001600160a01b0316315b6001600160a01b03831660009081526020819052604090205461093891906130e1565b92915050565b6000858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284376000920191909152505083518692506002111590506109cf578251604051630e8c626560e41b815260040161044891815260200190565b81518351146109fe578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f4240610a0b8361203c565b63ffffffff1614610a1f576105858261203c565b82516000190160005b81811015610b1657848160010181518110610a5357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316858281518110610a8457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031610610ab65760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110610ade57634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff161415610b0e57604051630db7e4c760e01b815260048101829052602401610448565b600101610a28565b50600063ffffffff16838281518110610b3f57634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff161415610b6f57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115610ba25760405163308440e360e21b815263ffffffff82166004820152602401610448565b6000610c138a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92506123bb915050565b9050610c3f7f0000000000000000000000000000000000000000000000000000000000000000826123f1565b9a9950505050505050505050565b60008167ffffffffffffffff811115610c7657634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c9f578160200160208202803683370190505b50905060008415610cb657610cb386612496565b90505b60005b83811015610d3257610cff87868684818110610ce557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610cfa9190612ae7565b6124e9565b838281518110610d1f57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600101610cb9565b50856001600160a01b03167fa9e30bf144f83390a4fe47562a4e16892108102221c674ff538da0b72a83d17482868686604051610d729493929190613051565b60405180910390a2505050505050565b600086868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250508351879250600211159050610e13578251604051630e8c626560e41b815260040161044891815260200190565b8151835114610e42578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f4240610e4f8361203c565b63ffffffff1614610e63576105858261203c565b82516000190160005b81811015610f5a57848160010181518110610e9757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316858281518110610ec857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031610610efa5760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110610f2257634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff161415610f5257604051630db7e4c760e01b815260048101829052602401610448565b600101610e6c565b50600063ffffffff16838281518110610f8357634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff161415610fb357604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115610fe65760405163308440e360e21b815263ffffffff82166004820152602401610448565b60006110578b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c92506123bb915050565b90506001600160a01b038616611098576110917f000000000000000000000000000000000000000000000000000000000000000082612555565b94506110f5565b6110c17f0000000000000000000000000000000000000000000000000000000000000000612605565b6001600160a01b03818116600090815260026020526040902060010180546001600160a01b03191691891691909117905594505b6001600160a01b03851660008181526002602052604090819020839055517fd2bcf51a5767c814cfe0266a99141f75a32103bbf8c400fbc1ac0c3b73ce25e89061114a908e908e908e908e908e908e90613000565b60405180910390a2505050509695505050505050565b6001600160a01b0388811660009081526002602052604090206001015489911633146111a15760405163472511eb60e11b8152336004820152602401610448565b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250508351879250600211159050611230578251604051630e8c626560e41b815260040161044891815260200190565b815183511461125f578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f424061126c8361203c565b63ffffffff1614611280576105858261203c565b82516000190160005b81811015611377578481600101815181106112b457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03168582815181106112e557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316106113175760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff1684828151811061133f57634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff16141561136f57604051630db7e4c760e01b815260048101829052602401610448565b600101611289565b50600063ffffffff168382815181106113a057634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff1614156113d057604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff1611156114035760405163308440e360e21b815263ffffffff82166004820152602401610448565b6114118c8b8b8b8b8b6126b4565b6114958c8c8c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508d92508c91506120e19050565b505050505050505050505050565b6001600160a01b0387811660009081526002602052604090206001015488911633146114e45760405163472511eb60e11b8152336004820152602401610448565b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250508351879250600211159050611573578251604051630e8c626560e41b815260040161044891815260200190565b81518351146115a2578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f42406115af8361203c565b63ffffffff16146115c3576105858261203c565b82516000190160005b818110156116ba578481600101815181106115f757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031685828151811061162857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161061165a5760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff1684828151811061168257634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff1614156116b257604051630db7e4c760e01b815260048101829052602401610448565b6001016115cc565b50600063ffffffff168382815181106116e357634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff16141561171357604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff1611156117465760405163308440e360e21b815263ffffffff82166004820152602401610448565b6117548b8b8b8b8b8b6126b4565b61080d8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c92508b915061278d9050565b6001600160a01b0382166000908152600260205260408120546117ea576000611863565b6040516370a0823160e01b81526001600160a01b0384811660048301528316906370a082319060240160206040518083038186803b15801561182b57600080fd5b505afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118639190612ea1565b6001600160a01b0380841660009081526001602090815260408083209388168352929052205461189391906130e1565b9392505050565b6001600160a01b038181166000908152600260208190526040909120015482911633146118dc5760405163472511eb60e11b8152336004820152602401610448565b6001600160a01b03808316600081815260026020819052604080832091820180546001600160a01b0319169055600190910154905133949190911692917f943d69cf2bbe08a9d44b3c4ce6da17d939d758739370620871ce99a6437866d091a4506001600160a01b0316600090815260026020526040902060010180546001600160a01b03191633179055565b6001600160a01b0382811660009081526002602052604090206001015483911633146119aa5760405163472511eb60e11b8152336004820152602401610448565b816001600160a01b0381166119dd5760405163c369130760e01b81526001600160a01b0382166004820152602401610448565b6001600160a01b03848116600081815260026020819052604080832090910180546001600160a01b0319169488169485179055517f107cf6ea8668d533df1aab5bb8b6315bb0c25f0b6c955558d09368f290668fc79190a350505050565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050611aca578251604051630e8c626560e41b815260040161044891815260200190565b8151835114611af9578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f4240611b068361203c565b63ffffffff1614611b1a576105858261203c565b82516000190160005b81811015611c1157848160010181518110611b4e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316858281518110611b7f57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031610611bb15760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110611bd957634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff161415611c0957604051630db7e4c760e01b815260048101829052602401610448565b600101611b23565b50600063ffffffff16838281518110611c3a57634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff161415611c6a57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115611c9d5760405163308440e360e21b815263ffffffff82166004820152602401610448565b611d0d8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b925061208f915050565b611d7f8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92508a915061278d9050565b50505050505050505050565b6001600160a01b038681166000908152600260205260409020600101548791163314611dcc5760405163472511eb60e11b8152336004820152602401610448565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050611e5b578251604051630e8c626560e41b815260040161044891815260200190565b8151835114611e8a578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f4240611e978361203c565b63ffffffff1614611eab576105858261203c565b82516000190160005b81811015611fa257848160010181518110611edf57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316858281518110611f1057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031610611f425760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110611f6a57634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff161415611f9a57604051630db7e4c760e01b815260048101829052602401610448565b600101611eb4565b50600063ffffffff16838281518110611fcb57634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff161415611ffb57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff16111561202e5760405163308440e360e21b815263ffffffff82166004820152602401610448565b611d7f8a8a8a8a8a8a6126b4565b8051600090815b818110156120885783818151811061206b57634e487b7160e01b600052603260045260246000fd5b60200260200101518361207e91906130f9565b9250600101612043565b5050919050565b600061209c8484846123bb565b6001600160a01b03861660009081526002602052604090205490915081146120da5760405163dd5ff45760e01b815260048101829052602401610448565b5050505050565b6001600160a01b038581166000818152600160209081526040808320948b16808452949091528082205490516370a0823160e01b815260048101949094529092909183916370a082319060240160206040518083038186803b15801561214657600080fd5b505afa15801561215a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217e9190612ea1565b9050801561218b57600019015b8115612198576001820391505b818101925081156121cc576001600160a01b038089166000908152600160208181526040808420948e168452939052919020555b836001600160a01b0316886001600160a01b03168a6001600160a01b03167fb5ee5dc3d2c31a019bbf2c787e0e9c97971c96aceea1c38c12fc8fd25c536d468660405161221b91815260200190565b60405180910390a463ffffffff85161561228d576001600160a01b038881166000908152600160205260408120620f424063ffffffff89168702049283929088166122665733612268565b875b6001600160a01b03168152602081019190915260400160002080549091019055909203915b865160005b81811015612345576122d6858983815181106122be57634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff16620f424091020490565b6001600160a01b038b1660009081526001602052604081208b519091908c908590811061231357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b0316825281019190915260400160002080549091019055600101612292565b505080156123b057604051633e0f9fff60e11b81526001600160a01b038981166004830152602482018390528a1690637c1f3ffe90604401600060405180830381600087803b15801561239757600080fd5b505af11580156123ab573d6000803e3d6000fd5b505050505b505050505050505050565b60008383836040516020016123d293929190612f39565b6040516020818303038152906040528051906020012090509392505050565b6000611893838330604051723d605d80600a3d3981f336603057343d52307f60681b81527f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160138201527260203da23d3df35b3d3d3d3d363d3d37363d7360681b6033820152606093841b60468201526d5af43d3d93803e605b57fd5bf3ff60901b605a820152921b6068830152607c8201526067808220609c830152605591012090565b6001600160a01b0381166000908152602081905260408120546124bb90600190613121565b6001600160a01b0383166000818152602081905260409020600190559091506124e4908261296f565b919050565b6001600160a01b038082166000908152600160208181526040808420948716845293905291812054909161251c91613121565b6001600160a01b038084166000818152600160208181526040808420958a168452949052929020919091559091506109389084836129c5565b6000604051723d605d80600a3d3981f336603057343d52307f60681b81527f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160138201527260203da23d3df35b3d3d3d3d363d3d37363d7360681b60338201528360601b60468201526c5af43d3d93803e605b57fd5bf360981b605a820152826067826000f59150506001600160a01b0381166109385760405163380bbe1360e01b815260040160405180910390fd5b6000604051723d605d80600a3d3981f336603057343d52307f60681b81527f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160138201527260203da23d3df35b3d3d3d3d363d3d37363d7360681b60338201528260601b60468201526c5af43d3d93803e605b57fd5bf360981b605a8201526067816000f09150506001600160a01b0381166124e457604051630985da9b60e41b815260040160405180910390fd5b600061272586868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284376000920191909152508792506123bb915050565b6001600160a01b0388166000818152600260205260409081902083905551919250907fce55a01ad467ce2f3080a2cef6eb951b65f489b97956f76c2c04bcddab92aaa99061277c9089908990899089908990612fc0565b60405180910390a250505050505050565b6001600160a01b03851660008181526020819052604081205491319082156127b6576001830392505b5081810182156127dd576001600160a01b0388166000908152602081905260409020600190555b836001600160a01b0316886001600160a01b03167f87c3ca0a87d9b82033e4bc55e6d30621f8d7e0c9d8ca7988edfde8932787b77b8360405161282291815260200190565b60405180910390a363ffffffff85161561288157620f424063ffffffff8616820204806000806001600160a01b03881661285c573361285e565b875b6001600160a01b0316815260208101919091526040016000208054909101905590035b865160005b81811015612907576128b2838983815181106122be57634e487b7160e01b600052603260045260246000fd5b6000808b84815181106128d557634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b0316825281019190915260400160002080549091019055600101612886565b5050811561296557604051632ac3affd60e21b8152600481018390526001600160a01b0389169063ab0ebff490602401600060405180830381600087803b15801561295157600080fd5b505af1158015611495573d6000803e3d6000fd5b5050505050505050565b600080600080600085875af19050806129c05760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610448565b505050565b600060405163a9059cbb60e01b81526001600160a01b03841660048201528260248201526000806044836000895af1915050612a0081612a44565b612a3e5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610448565b50505050565b60003d82612a5657806000803e806000fd5b8060208114612a6e578015612a7f5760009250612088565b816000803e60005115159250612088565b5060019392505050565b60008083601f840112612a9a578182fd5b50813567ffffffffffffffff811115612ab1578182fd5b6020830191508360208260051b8501011115612acc57600080fd5b9250929050565b803563ffffffff811681146124e457600080fd5b600060208284031215612af8578081fd5b81356118938161314e565b60008060408385031215612b15578081fd5b8235612b208161314e565b91506020830135612b308161314e565b809150509250929050565b60008060008060008060808789031215612b53578182fd5b8635612b5e8161314e565b9550602087013567ffffffffffffffff80821115612b7a578384fd5b612b868a838b01612a89565b90975095506040890135915080821115612b9e578384fd5b50612bab89828a01612a89565b9094509250612bbe905060608801612ad3565b90509295509295509295565b600080600080600080600060a0888a031215612be4578081fd5b8735612bef8161314e565b9650602088013567ffffffffffffffff80821115612c0b578283fd5b612c178b838c01612a89565b909850965060408a0135915080821115612c2f578283fd5b50612c3c8a828b01612a89565b9095509350612c4f905060608901612ad3565b91506080880135612c5f8161314e565b8091505092959891949750929550565b60008060408385031215612b15578182fd5b60008060008060008060008060c0898b031215612c9c578081fd5b8835612ca78161314e565b97506020890135612cb78161314e565b9650604089013567ffffffffffffffff80821115612cd3578283fd5b612cdf8c838d01612a89565b909850965060608b0135915080821115612cf7578283fd5b50612d048b828c01612a89565b9095509350612d17905060808a01612ad3565b915060a0890135612d278161314e565b809150509295985092959890939650565b60008060008060608587031215612d4d578384fd5b8435612d588161314e565b935060208501359250604085013567ffffffffffffffff811115612d7a578283fd5b612d8687828801612a89565b95989497509550505050565b600080600080600060608688031215612da9578081fd5b853567ffffffffffffffff80821115612dc0578283fd5b612dcc89838a01612a89565b90975095506020880135915080821115612de4578283fd5b50612df188828901612a89565b9094509250612e04905060408701612ad3565b90509295509295909350565b60008060008060008060808789031215612e28578182fd5b863567ffffffffffffffff80821115612e3f578384fd5b612e4b8a838b01612a89565b90985096506020890135915080821115612e63578384fd5b50612e7089828a01612a89565b9095509350612e83905060408801612ad3565b91506060870135612e938161314e565b809150509295509295509295565b600060208284031215612eb2578081fd5b5051919050565b81835260006020808501945082825b85811015612ef6578135612edb8161314e565b6001600160a01b031687529582019590820190600101612ec8565b509495945050505050565b81835260006020808501945082825b85811015612ef65763ffffffff612f2683612ad3565b1687529582019590820190600101612f10565b835160009082906020808801845b83811015612f6c5781516001600160a01b031685529382019390820190600101612f47565b50508651818801939250845b81811015612f9a57845163ffffffff1684529382019392820192600101612f78565b505050612fb3818660e01b6001600160e01b0319169052565b6004019695505050505050565b606081526000612fd4606083018789612eb9565b8281036020840152612fe7818688612f01565b91505063ffffffff831660408301529695505050505050565b60808152600061301460808301888a612eb9565b8281036020840152613027818789612f01565b63ffffffff95909516604084015250506001600160a01b0391909116606090910152949350505050565b84815260606020808301829052908201849052600090859060808401835b8781101561309d5783356130828161314e565b6001600160a01b03168252928201929082019060010161306f565b5084810360408601528551808252908201925081860190845b818110156130d2578251855293830193918301916001016130b6565b50929998505050505050505050565b600082198211156130f4576130f4613138565b500190565b600063ffffffff80831681851680830382111561311857613118613138565b01949350505050565b60008282101561313357613133613138565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461316357600080fd5b5056fea2646970667358221220e9325cf15dd6031aeedffbd7fc8a0dba57af230e427ad6f1099a977b399b2d0964736f6c6343000804003360a060405234801561001057600080fd5b5033606081901b60805261035461004c60003960008181604b0152818160bc015281816101080152818161013c015261018601526103546000f3fe6080604052600436106100345760003560e01c80630e769b2b146100395780637c1f3ffe14610089578063ab0ebff41461009e575b600080fd5b34801561004557600080fd5b5061006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61009c6100973660046102d0565b6100b1565b005b61009c6100ac366004610306565b610131565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100f9576040516282b42960e81b815260040160405180910390fd5b61012d6001600160a01b0383167f0000000000000000000000000000000000000000000000000000000000000000836101af565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610179576040516282b42960e81b815260040160405180910390fd5b6101ac6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682610233565b50565b600060405163a9059cbb60e01b81526001600160a01b03841660048201528260248201526000806044836000895af19150506101ea81610289565b61022d5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064015b60405180910390fd5b50505050565b600080600080600085875af19050806102845760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610224565b505050565b60003d8261029b57806000803e806000fd5b80602081146102b35780156102c457600092506102c9565b816000803e600051151592506102c9565b600192505b5050919050565b600080604083850312156102e2578182fd5b82356001600160a01b03811681146102f8578283fd5b946020939093013593505050565b600060208284031215610317578081fd5b503591905056fea2646970667358221220def78b294d6b6603231a559c8366ba0d4f86b7f8e62b7e36307ace99c6f117d064736f6c63430008040033",
"deployedBytecode": "0x6080604052600436106101185760003560e01c806377b1e4e9116100a0578063c7de644011610064578063c7de64401461034e578063d0e4b2f41461036e578063e10e51d61461038e578063e61cb05e146103cb578063ecef0ace146103eb57600080fd5b806377b1e4e91461027e5780638117abc11461029e57806388c662aa146102d2578063a5e3909e1461030e578063c3a8962c1461032e57600080fd5b80633bb66a7b116100e75780633bb66a7b146101cf5780633f26479e146101ef57806352844dd3146102065780636e5f69191461023e5780637601f7821461025e57600080fd5b80631267c6da146101245780631581130214610146578063189cbaa0146101665780631da0b8fc1461018657600080fd5b3661011f57005b600080fd5b34801561013057600080fd5b5061014461013f366004612ae7565b61040b565b005b34801561015257600080fd5b50610144610161366004612c81565b6104a6565b34801561017257600080fd5b50610144610181366004612ae7565b61081a565b34801561019257600080fd5b506101bc6101a1366004612ae7565b6001600160a01b031660009081526002602052604090205490565b6040519081526020015b60405180910390f35b3480156101db57600080fd5b506101bc6101ea366004612ae7565b6108e5565b3480156101fb57600080fd5b506101bc620f424081565b34801561021257600080fd5b50610226610221366004612d92565b61093e565b6040516001600160a01b0390911681526020016101c6565b34801561024a57600080fd5b50610144610259366004612d38565b610c4d565b34801561026a57600080fd5b50610226610279366004612e10565b610d82565b34801561028a57600080fd5b50610144610299366004612c81565b611160565b3480156102aa57600080fd5b506102267f000000000000000000000000000000000000000000000000000000000000000081565b3480156102de57600080fd5b506102266102ed366004612ae7565b6001600160a01b039081166000908152600260205260409020600101541690565b34801561031a57600080fd5b50610144610329366004612bca565b6114a3565b34801561033a57600080fd5b506101bc610349366004612c6f565b6117c6565b34801561035a57600080fd5b50610144610369366004612ae7565b61189a565b34801561037a57600080fd5b50610144610389366004612b03565b611969565b34801561039a57600080fd5b506102266103a9366004612ae7565b6001600160a01b03908116600090815260026020819052604090912001541690565b3480156103d757600080fd5b506101446103e6366004612bca565b611a3b565b3480156103f757600080fd5b50610144610406366004612b3b565b611d8b565b6001600160a01b0381811660009081526002602052604090206001015482911633146104515760405163472511eb60e11b81523360048201526024015b60405180910390fd5b6001600160a01b038216600081815260026020819052604080832090910180546001600160a01b0319169055517f6c2460a415b84be3720c209fe02f2cad7a6bcba21e8637afe8957b7ec4b6ef879190a25050565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050610535578251604051630e8c626560e41b815260040161044891815260200190565b8151835114610564578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f42406105718361203c565b63ffffffff16146105a7576105858261203c565b60405163fcc487c160e01b815263ffffffff9091166004820152602401610448565b82516000190160005b8181101561069e578481600101815181106105db57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031685828151811061060c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161061063e5760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff1684828151811061066657634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff16141561069657604051630db7e4c760e01b815260048101829052602401610448565b6001016105b0565b50600063ffffffff168382815181106106c757634e487b7160e01b600052603260045260246000fd5b602002602001015163ffffffff1614156106f757604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff16111561072a5760405163308440e360e21b815263ffffffff82166004820152602401610448565b61079a8b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b925061208f915050565b61080d8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c92508b91506120e19050565b5050505050505050505050565b6001600160a01b03818116600090815260026020526040902060010154829116331461085b5760405163472511eb60e11b8152336004820152602401610448565b6001600160a01b03808316600081815260026020819052604080832091820180546001600160a01b0319169055600190910154905191931691907f943d69cf2bbe08a9d44b3c4ce6da17d939d758739370620871ce99a6437866d0908490a4506001600160a01b0316600090815260026020526040902060010180546001600160a01b0319169055565b6001600160a01b038116600090815260026020526040812054610909576000610915565b816001600160a01b0316315b6001600160a01b03831660009081526020819052604090205461093891906130e1565b92915050565b6000858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284376000920191909152505083518692506002111590506109cf578251604051630e8c626560e41b815260040161044891815260200190565b81518351146109fe578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f4240610a0b8361203c565b63ffffffff1614610a1f576105858261203c565b82516000190160005b81811015610b1657848160010181518110610a5357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316858281518110610a8457634e487b7160e01b600052603260045260246000fd5b60