@vechain/vebetterdao-contracts
Version:
Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.
807 lines • 57.9 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ThunderFactory",
"sourceName": "contracts/mocks/VechainNodes/ThunderFactory.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "_auctionId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "AuctionCancelled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "_person",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "_op",
"type": "bool"
}
],
"name": "BlackListUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "_owner",
"type": "address"
}
],
"name": "CancelUpgrade",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"indexed": false,
"internalType": "enum ThunderFactory.strengthLevel",
"name": "_fromLevel",
"type": "uint8"
},
{
"indexed": false,
"internalType": "enum ThunderFactory.strengthLevel",
"name": "_toLevel",
"type": "uint8"
}
],
"name": "LevelChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "_applier",
"type": "address"
},
{
"indexed": false,
"internalType": "enum ThunderFactory.strengthLevel",
"name": "_level",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint64",
"name": "_applyTime",
"type": "uint64"
},
{
"indexed": false,
"internalType": "uint64",
"name": "_applyBlockno",
"type": "uint64"
}
],
"name": "NewUpgradeApply",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "_op",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "_enabled",
"type": "bool"
}
],
"name": "OperatorUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "Pause",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "_saleAuction",
"type": "address"
}
],
"name": "ProtocolUpgrade",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "Unpause",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "_operator",
"type": "address"
}
],
"name": "addOperator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_badGuy",
"type": "address"
}
],
"name": "addToBlackList",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_addr",
"type": "address"
},
{
"internalType": "enum ThunderFactory.strengthLevel",
"name": "_lvl",
"type": "uint8"
},
{
"internalType": "bool",
"name": "_onUpgrade",
"type": "bool"
},
{
"internalType": "uint64",
"name": "_applyUpgradeTime",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "_applyUpgradeBlockno",
"type": "uint64"
}
],
"name": "addToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum ThunderFactory.strengthLevel",
"name": "_toLvl",
"type": "uint8"
}
],
"name": "applyUpgrade",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "blackList",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "canTransfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "cancelUpgrade",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "enum ThunderFactory.strengthLevel",
"name": "_toLvl",
"type": "uint8"
}
],
"name": "downgradeTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "getMetadata",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "enum ThunderFactory.strengthLevel",
"name": "",
"type": "uint8"
},
{
"internalType": "bool",
"name": "",
"type": "bool"
},
{
"internalType": "bool",
"name": "",
"type": "bool"
},
{
"internalType": "uint64",
"name": "",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum ThunderFactory.strengthLevel",
"name": "_level",
"type": "uint8"
}
],
"name": "getTokenParams",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "idToOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_target",
"type": "address"
}
],
"name": "isNormalToken",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_target",
"type": "address"
}
],
"name": "isToken",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_target",
"type": "address"
}
],
"name": "isX",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "leadTime",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "normalTokenCount",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "operators",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "ownerToId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_innocent",
"type": "address"
}
],
"name": "removeFromBlackList",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_operator",
"type": "address"
}
],
"name": "removeOperator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "saleAuction",
"outputs": [
{
"internalType": "contract ClockAuction",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "sendBonusTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "_leadtime",
"type": "uint64"
}
],
"name": "setLeadTime",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "_cooldown",
"type": "uint64"
}
],
"name": "setTransferCooldown",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "transferCooldown",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "enum ThunderFactory.strengthLevel",
"name": "_toLvl",
"type": "uint8"
}
],
"name": "upgradeTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "xTokenCount",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60806040526000805460ff60a01b19169055600380546102a360a71b600160a01b600160e01b0319909116179055600480546001600160401b03191661384017905534801561004d57600080fd5b50600080546001600160a01b031916331781556040805160a08101825282815260208101838152918101838152606082018481526080830185905260068054600181018255955282517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9095018054945192511515600160801b0260ff60801b196001600160401b0394851668010000000000000000026001600160801b031990971694909716939093179490941794851682178455519193839160ff60881b191661ffff60801b1990911617600160881b8360078111156101315761013161081b565b021790555060808201518160000160126101000a8154816001600160401b0302191690836001600160401b031602179055505050604051806080016040528069d3c21bcecceda10000008152602001600a6001600160401b0316815260200160006001600160401b0316815260200160646001600160401b031681525060056000600160ff1681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010160086101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160010160106101000a8154816001600160401b0302191690836001600160401b0316021790555090505060405180608001604052806a0422ca8b0a00a425000000815260200160146001600160401b0316815260200160006001600160401b0316815260200160966001600160401b031681525060056000600260ff1681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010160086101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160010160106101000a8154816001600160401b0302191690836001600160401b0316021790555090505060405180608001604052806a0c685fa11e01ec6f0000008152602001601e6001600160401b0316815260200160006001600160401b0316815260200160c86001600160401b031681525060056000600360ff1681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010160086101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160010160106101000a8154816001600160401b0302191690836001600160401b031602179055509050506040518060800160405280697f0e10af47c1c7000000815260200160006001600160401b0316815260200160196001600160401b0316815260200160006001600160401b031681525060056000600460ff1681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010160086101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160010160106101000a8154816001600160401b0302191690836001600160401b0316021790555090505060405180608001604052806a0152d02c7e14af680000008152602001601e6001600160401b0316815260200160646001600160401b0316815260200160646001600160401b031681525060056000600560ff1681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010160086101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160010160106101000a8154816001600160401b0302191690836001600160401b0316021790555090505060405180608001604052806a04a1d89bb94865ec0000008152602001603c6001600160401b0316815260200160966001600160401b0316815260200160966001600160401b031681525060056000600660ff1681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010160086101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160010160106101000a8154816001600160401b0302191690836001600160401b0316021790555090505060405180608001604052806a0ce76db1cd49ae360000008152602001605a6001600160401b0316815260200160c86001600160401b0316815260200160c86001600160401b031681525060056000600760ff1681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010160086101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160010160106101000a8154816001600160401b0302191690836001600160401b03160217905550905050610831565b634e487b7160e01b600052602160045260246000fd5b6123e2806108406000396000f3fe608060405234801561001057600080fd5b50600436106101805760003560e01c80630324529c1461018557806307fa65f91461019a57806313e7c9d8146101c257806319f37361146101e5578063287e8495146101f85780632c12cc9f1461023a5780633f4ba83a1461024d578063417c73a7146102555780634838d165146102685780634a49ac4c1461028b5780634d4f6ea91461029e5780635c975abb146102b157806360836166146102c557806368f16293146102d8578063795125131461030a5780637aaed8991461031d5780638456cb59146103305780638c8d04a7146103385780638da5cb5b1461034b5780639870d7fe14610376578063a574cea414610389578063ac8a584a146103af578063b03e02c2146103c2578063ba2a954d146103d5578063ba6f2e65146103e8578063bfc206ed146103fb578063d415614814610424578063e6cbe3511461043e578063e729e3a414610451578063f2fde38b1461047f578063f7e6e60c14610492578063f9574c69146104a5575b600080fd5b610198610193366004611e7f565b6104b8565b005b6101ad6101a8366004611eab565b6105c2565b60405190151581526020015b60405180910390f35b6101ad6101d0366004611eab565b60016020526000908152604090205460ff1681565b6101ad6101f3366004611eab565b6105e5565b61020b610206366004611edc565b610641565b604080519485526001600160401b039384166020860152918316918401919091521660608201526080016101b9565b610198610248366004611f0c565b6106c9565b6101ad61071a565b610198610263366004611eab565b6107d0565b6101ad610276366004611eab565b60026020526000908152604090205460ff1681565b610198610299366004611eab565b610875565b6101ad6102ac366004611f29565b610907565b6000546101ad90600160a01b900460ff1681565b6101986102d3366004611f42565b6109dc565b6003546102f290600160a01b90046001600160401b031681565b6040516001600160401b0390911681526020016101b9565b610198610318366004611edc565b610b46565b61019861032b366004611f7c565b610e1d565b6101ad610ff9565b6004546102f2906001600160401b031681565b60005461035e906001600160a01b031681565b6040516001600160a01b0390911681526020016101b9565b610198610384366004611eab565b61108e565b61039c610397366004611f29565b611126565b6040516101b99796959493929190612023565b6101986103bd366004611eab565b6112a5565b6101986103d0366004611f42565b611337565b6101986103e3366004611f29565b611524565b6101986103f6366004611f0c565b6116c6565b61035e610409366004611f29565b6008602052600090815260409020546001600160a01b031681565b6007546102f290600160401b90046001600160401b031681565b60035461035e906001600160a01b031681565b61047161045f366004611eab565b60096020526000908152604090205481565b6040519081526020016101b9565b61019861048d366004611eab565b611721565b6007546102f2906001600160401b031681565b6101ad6104b3366004611eab565b6117cc565b3360009081526001602052604090205460ff166104f05760405162461bcd60e51b81526004016104e790612075565b60405180910390fd5b6001600160a01b0382166105165760405162461bcd60e51b81526004016104e7906120a0565b600081116105575760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b60448201526064016104e7565b60405163a9059cbb60e01b81526001600160a01b03831660048201526024810182905265456e657267799063a9059cbb906044015b600060405180830381600087803b1580156105a657600080fd5b505af11580156105ba573d6000803e3d6000fd5b505050505050565b60006105cd826105e5565b80156105df57506105dd826117cc565b155b92915050565b6001600160a01b038116600090815260096020526040812054600680548392908110610613576106136120c9565b600091825260209091200154600160881b900460ff16600781111561063a5761063a611feb565b1192915050565b60008060008060006005600087600781111561065f5761065f611feb565b60ff1681526020808201929092526040908101600020815160808101835281548082526001909201546001600160401b03808216958301869052600160401b82048116948301859052600160801b9091041660609091018190529099929850909650945092505050565b3360009081526001602052604090205460ff166106f85760405162461bcd60e51b81526004016104e790612075565b600480546001600160401b0319166001600160401b0392909216919091179055565b600080546001600160a01b031633146107455760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff166107965760405162461bcd60e51b81526020600482015260156024820152741b9959591cc81c1c9bdd1bd8dbdb081c185d5cd959605a1b60448201526064016104e7565b6000805460ff60a01b191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a150600190565b6000546001600160a01b031633146107fa5760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff16156108245760405162461bcd60e51b81526004016104e790612103565b6001600160a01b03811660009081526002602052604090819020805460ff19166001908117909155905160008051602061236d8339815191529161086a91849190612130565b60405180910390a150565b6000546001600160a01b0316331461089f5760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff16156108c95760405162461bcd60e51b81526004016104e790612103565b6001600160a01b038116600090815260026020526040808220805460ff191690555160008051602061236d8339815191529161086a91849190612130565b60006109128261182a565b801561094457506006828154811061092c5761092c6120c9565b600091825260209091200154600160801b900460ff16155b801561097557506000828152600860209081526040808320546001600160a01b03168352600290915290205460ff16155b80156105df5750600360149054906101000a90046001600160401b0316600683815481106109a5576109a56120c9565b6000918252602090912001546109cb9190600160901b90046001600160401b0316612161565b6001600160401b0316421192915050565b3360009081526001602052604090205460ff16610a0b5760405162461bcd60e51b81526004016104e790612075565b806007811115610a1d57610a1d611feb565b60068381548110610a3057610a306120c9565b600091825260209091200154600160881b900460ff166007811115610a5757610a57611feb565b10610a745760405162461bcd60e51b81526004016104e790612188565b6003546040516337e246ad60e01b8152600481018490526001600160a01b03909116906337e246ad90602401602060405180830381865afa158015610abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae191906121af565b15610afe5760405162461bcd60e51b81526004016104e7906121cc565b600060068381548110610b1357610b136120c9565b60009182526020909120018054911515600160801b0260ff60801b19909216919091179055610b428282611847565b5050565b600054600160a01b900460ff1615610b705760405162461bcd60e51b81526004016104e790612103565b3360009081526009602052604081205490819003610b9757610b9433600080611b43565b90505b600060068281548110610bac57610bac6120c9565b60009182526020909120018054909150600160801b900460ff1615610c055760405162461bcd60e51b815260206004820152600f60248201526e7374696c6c20757067726164696e6760881b60448201526064016104e7565b6003546040516337e246ad60e01b8152600481018490526001600160a01b03909116906337e246ad90602401602060405180830381865afa158015610c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7291906121af565b15610c8f5760405162461bcd60e51b81526004016104e7906121cc565b826007811115610ca157610ca1611feb565b815460ff91821691600160881b909104166007811115610cc357610cc3611feb565b610cce9060016121fa565b60ff16148015610cf057506004836007811115610ced57610ced611feb565b14155b8015610d0e57506007836007811115610d0b57610d0b611feb565b11155b610d4b5760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a590817dd1bd31d9b60921b60448201526064016104e7565b60056000846007811115610d6157610d61611feb565b60ff16815260208101919091526040016000205433311015610dbc5760405162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b60448201526064016104e7565b80546001600160401b0342908116600160401b02600160401b600160881b031990921691909117600160801b1782556040513391849160008051602061234d83398151915291610e10918891904390612213565b60405180910390a3505050565b3360009081526001602052604090205460ff16610e4c5760405162461bcd60e51b81526004016104e790612075565b6001600160a01b03851660009081526009602052604090205415610ead5760405162461bcd60e51b81526020600482015260186024820152773cb7ba9030b63932b0b23c903437b6321030903a37b5b2b760411b60448201526064016104e7565b6000610eba868686611b43565b9050846007811115610ece57610ece611feb565b600111158015610ef057506003856007811115610eed57610eed611feb565b11155b15610f3857600780546001600160401b0316906000610f0e83612243565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050610fb7565b846007811115610f4a57610f4a611feb565b600411158015610f6c57506007856007811115610f6957610f69611feb565b11155b15610fb75760078054600160401b90046001600160401b0316906008610f9183612243565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b83156105ba57856001600160a01b03168160008051602061234d833981519152878686604051610fe993929190612213565b60405180910390a3505050505050565b600080546001600160a01b031633146110245760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff161561104e5760405162461bcd60e51b81526004016104e790612103565b6000805460ff60a01b1916600160a01b1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a150600190565b6000546001600160a01b031633146110b85760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff16156110e25760405162461bcd60e51b81526004016104e790612103565b6001600160a01b038116600090815260016020819052604091829020805460ff191682179055905160008051602061238d8339815191529161086a91849190612130565b600080600080600080600061113a8861182a565b1561129a57600060068981548110611154576111546120c9565b60009182526020918290206040805160a0810182529190920180546001600160401b038082168452600160401b8204169483019490945260ff600160801b85048116151593830193909352909290916060840191600160881b90041660078111156111c1576111c1611feb565b60078111156111d2576111d2611feb565b81529054600160901b90046001600160401b031660209182015260008b815260089091526040908190205460608301518383015160035493516337e246ad60e01b8152600481018f90529495506001600160a01b03928316949193909216906337e246ad90602401602060405180830381865afa158015611257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127b91906121af565b8460800151856000015186602001519750975097509750975097509750505b919395979092949650565b6000546001600160a01b031633146112cf5760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff16156112f95760405162461bcd60e51b81526004016104e790612103565b6001600160a01b038116600090815260016020526040808220805460ff191690555160008051602061238d8339815191529161086a91849190612130565b3360009081526001602052604090205460ff166113665760405162461bcd60e51b81526004016104e790612075565b80600781111561137857611378611feb565b6006838154811061138b5761138b6120c9565b600091825260209091200154600160881b900460ff1660078111156113b2576113b2611feb565b116113cf5760405162461bcd60e51b81526004016104e790612188565b600454600680546001600160401b0390921691849081106113f2576113f26120c9565b6000918252602090912001546114189190600160901b90046001600160401b0316612161565b6001600160401b031642116114685760405162461bcd60e51b815260206004820152601660248201527531b0b73737ba103237bbb733b930b232903a37b5b2b760511b60448201526064016104e7565b6003546040516337e246ad60e01b8152600481018490526001600160a01b03909116906337e246ad90602401602060405180830381865afa1580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d591906121af565b156114e3576114e382611ceb565b600682815481106114f6576114f66120c9565b600091825260209091200154600160801b900460ff161561151a5761151a82611524565b610b428282611847565b61152d8161182a565b61156b5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08195e1a5cdd608a1b60448201526064016104e7565b600060068281548110611580576115806120c9565b600091825260208083208584526008909152604090922054910180549092506001600160a01b0390911690600160801b900460ff166115f45760405162461bcd60e51b815260206004820152601060248201526f6e6f74206f6e20757067726164696e6760801b60448201526064016104e7565b6001600160a01b03811633148061161a57503360009081526001602052604090205460ff165b6116365760405162461bcd60e51b81526004016104e790612075565b60008254600160881b900460ff16600781111561165557611655611feb565b036116685761166383611ddb565b61168b565b8154600160401b600160881b031916600160401b426001600160401b0316021782555b6040516001600160a01b0382169084907fddc99f00cc50e9442de66784f25bd218c8c63f4c4103b817692da0a63fb80a9690600090a3505050565b3360009081526001602052604090205460ff166116f55760405162461bcd60e51b81526004016104e790612075565b600380546001600160401b03909216600160a01b02600160a01b600160e01b0319909216919091179055565b6000546001600160a01b0316331461174b5760405162461bcd60e51b81526004016104e7906120df565b6001600160a01b0381166117715760405162461bcd60e51b81526004016104e7906120a0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260096020526040812054600680546004929081106117fb576117fb6120c9565b600091825260209091200154600160881b900460ff16600781111561182257611822611feb565b101592915050565b6000908152600860205260409020546001600160a01b0316151590565b600082815260086020526040812054600680546001600160a01b03909216929185908110611877576118776120c9565b600091825260208220018054909250600160881b900460ff16908460078111156118a3576118a3611feb565b036118b6576118b185611ddb565b611902565b81548490839060ff60881b1916600160881b8360078111156118da576118da611feb565b02179055508154600160401b600160801b031916600160401b426001600160401b0316021782555b80600781111561191457611914611feb565b6001111580156119365750600381600781111561193357611933611feb565b11155b1561197e57600780546001600160401b031690600061195483612271565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550506119fd565b80600781111561199057611990611feb565b6004111580156119b2575060078160078111156119af576119af611feb565b11155b156119fd5760078054600160401b90046001600160401b03169060086119d783612271565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b836007811115611a0f57611a0f611feb565b600111158015611a3157506003846007811115611a2e57611a2e611feb565b11155b15611a7957600780546001600160401b0316906000611a4f83612243565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611af8565b836007811115611a8b57611a8b611feb565b600411158015611aad57506007846007811115611aaa57611aaa611feb565b11155b15611af85760078054600160401b90046001600160401b0316906008611ad283612243565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b826001600160a01b0316857fb6fd4b2356bc13ccc82da8b790e9bf9bdcfd4743d32dd10aa48189ec53f6bc008387604051611b34929190612294565b60405180910390a35050505050565b6000806040518060a00160405280426001600160401b03168152602001426001600160401b031681526020018415158152602001856007811115611b8957611b89611feb565b81526001600160401b034281166020928301526006805460018101825560009190915283517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180549385015160408601511515600160801b0260ff60801b19918516600160401b026001600160801b0319909616939094169290921793909317908116821783556060840151939450849391839160ff60881b1990911661ffff60801b1990911617600160881b836007811115611c4b57611c4b611feb565b02179055506080919091015181546001600160401b03909116600160901b02600160901b600160d01b0319909116179055600654600090611c8e906001906122af565b6001600160a01b0387166000818152600960209081526040808320859055848352600890915280822080546001600160a01b0319168417905551929350839260008051602061232d833981519152908290a49150505b9392505050565b6000818152600a6020526040902080546001600160a01b03191690556003546040516378bd793560e01b8152600481018390526000916001600160a01b0316906378bd79359060240160c060405180830381865afa158015611d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7591906122c2565b5050505050905081817fdb9cc99dc874f9afbae71151f737e51547d3d412b52922793437d86607050c3c60405160405180910390a36003546040516396b5a75560e01b8152600481018490526001600160a01b03909116906396b5a7559060240161058c565b600081815260086020908152604080832080546001600160a01b031981169091556001600160a01b031680845260099092528220919091556006805483908110611e2757611e276120c9565b6000918252602082200180546001600160d01b03191690556040518391906001600160a01b0384169060008051602061232d833981519152908390a45050565b6001600160a01b0381168114611e7c57600080fd5b50565b60008060408385031215611e9257600080fd5b8235611e9d81611e67565b946020939093013593505050565b600060208284031215611ebd57600080fd5b8135611ce481611e67565b803560088110611ed757600080fd5b919050565b600060208284031215611eee57600080fd5b611ce482611ec8565b6001600160401b0381168114611e7c57600080fd5b600060208284031215611f1e57600080fd5b8135611ce481611ef7565b600060208284031215611f3b57600080fd5b5035919050565b60008060408385031215611f5557600080fd5b82359150611f6560208401611ec8565b90509250929050565b8015158114611e7c57600080fd5b600080600080600060a08688031215611f9457600080fd5b8535611f9f81611e67565b9450611fad60208701611ec8565b93506040860135611fbd81611f6e565b92506060860135611fcd81611ef7565b91506080860135611fdd81611ef7565b809150509295509295909350565b634e487b7160e01b600052602160045260246000fd5b6008811061201f57634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b038816815260e081016120406020830189612001565b951515604082015293151560608501526001600160401b03928316608085015290821660a08401521660c09091015292915050565b6020808252601190820152701c195c9b5a5cdcda5bdb8819195b9a5959607a1b604082015260600190565b6020808252600f908201526e696e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600a908201526937b7363c9037bbb732b960b11b604082015260600190565b6020808252601390820152721c1c9bdd1bd8dbdb081a185cc81c185d5cd959606a1b604082015260600190565b6001600160a01b039290921682521515602082015260400190565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156121815761218161214b565b5092915050565b6020808252600d908201526c1a5b9d985b1a59081b195d995b609a1b604082015260600190565b6000602082840312156121c157600080fd5b8151611ce481611f6e565b60208082526014908201527318d85b98d95b08185d58dd1a5bdb88199a5c9cdd60621b604082015260600190565b60ff81811683821601908111156105df576105df61214b565b606081016122218286612001565b6001600160401b03938416602083015291909216604090920191909152919050565b60006001600160401b038281166002600160401b031981016122675761226761214b565b6001019392505050565b60006001600160401b0382168061228a5761228a61214b565b6000190192915050565b604081016122a28285612001565b611ce46020830184612001565b818103818111156105df576105df61214b565b60008060008060008060c087890312156122db57600080fd5b8651955060208701516122ed81611e67565b809550506040870151935060608701519250608087015161230d81611ef7565b60a088015190925061231e81611ef7565b80915050929550929550929556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe925483a08461d851abfcfd476ed282a68d87b23cc45add5a8dc7f1ad7825ce90baadf7b35b83c7d3a00874b5406dca58c60d0ff7d8c825ad02ec55484beb455966c160e1c4dbc7df8d69af4ace01e9297c3cf016397b7914971f2fbfa32672da2646970667358221220eac4d10a3cfc39a0fdbea558a1377c6cc9569e414306f9010076fc58cc74bd5564736f6c63430008140033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101805760003560e01c80630324529c1461018557806307fa65f91461019a57806313e7c9d8146101c257806319f37361146101e5578063287e8495146101f85780632c12cc9f1461023a5780633f4ba83a1461024d578063417c73a7146102555780634838d165146102685780634a49ac4c1461028b5780634d4f6ea91461029e5780635c975abb146102b157806360836166146102c557806368f16293146102d8578063795125131461030a5780637aaed8991461031d5780638456cb59146103305780638c8d04a7146103385780638da5cb5b1461034b5780639870d7fe14610376578063a574cea414610389578063ac8a584a146103af578063b03e02c2146103c2578063ba2a954d146103d5578063ba6f2e65146103e8578063bfc206ed146103fb578063d415614814610424578063e6cbe3511461043e578063e729e3a414610451578063f2fde38b1461047f578063f7e6e60c14610492578063f9574c69146104a5575b600080fd5b610198610193366004611e7f565b6104b8565b005b6101ad6101a8366004611eab565b6105c2565b60405190151581526020015b60405180910390f35b6101ad6101d0366004611eab565b60016020526000908152604090205460ff1681565b6101ad6101f3366004611eab565b6105e5565b61020b610206366004611edc565b610641565b604080519485526001600160401b039384166020860152918316918401919091521660608201526080016101b9565b610198610248366004611f0c565b6106c9565b6101ad61071a565b610198610263366004611eab565b6107d0565b6101ad610276366004611eab565b60026020526000908152604090205460ff1681565b610198610299366004611eab565b610875565b6101ad6102ac366004611f29565b610907565b6000546101ad90600160a01b900460ff1681565b6101986102d3366004611f42565b6109dc565b6003546102f290600160a01b90046001600160401b031681565b6040516001600160401b0390911681526020016101b9565b610198610318366004611edc565b610b46565b61019861032b366004611f7c565b610e1d565b6101ad610ff9565b6004546102f2906001600160401b031681565b60005461035e906001600160a01b031681565b6040516001600160a01b0390911681526020016101b9565b610198610384366004611eab565b61108e565b61039c610397366004611f29565b611126565b6040516101b99796959493929190612023565b6101986103bd366004611eab565b6112a5565b6101986103d0366004611f42565b611337565b6101986103e3366004611f29565b611524565b6101986103f6366004611f0c565b6116c6565b61035e610409366004611f29565b6008602052600090815260409020546001600160a01b031681565b6007546102f290600160401b90046001600160401b031681565b60035461035e906001600160a01b031681565b61047161045f366004611eab565b60096020526000908152604090205481565b6040519081526020016101b9565b61019861048d366004611eab565b611721565b6007546102f2906001600160401b031681565b6101ad6104b3366004611eab565b6117cc565b3360009081526001602052604090205460ff166104f05760405162461bcd60e51b81526004016104e790612075565b60405180910390fd5b6001600160a01b0382166105165760405162461bcd60e51b81526004016104e7906120a0565b600081116105575760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b60448201526064016104e7565b60405163a9059cbb60e01b81526001600160a01b03831660048201526024810182905265456e657267799063a9059cbb906044015b600060405180830381600087803b1580156105a657600080fd5b505af11580156105ba573d6000803e3d6000fd5b505050505050565b60006105cd826105e5565b80156105df57506105dd826117cc565b155b92915050565b6001600160a01b038116600090815260096020526040812054600680548392908110610613576106136120c9565b600091825260209091200154600160881b900460ff16600781111561063a5761063a611feb565b1192915050565b60008060008060006005600087600781111561065f5761065f611feb565b60ff1681526020808201929092526040908101600020815160808101835281548082526001909201546001600160401b03808216958301869052600160401b82048116948301859052600160801b9091041660609091018190529099929850909650945092505050565b3360009081526001602052604090205460ff166106f85760405162461bcd60e51b81526004016104e790612075565b600480546001600160401b0319166001600160401b0392909216919091179055565b600080546001600160a01b031633146107455760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff166107965760405162461bcd60e51b81526020600482015260156024820152741b9959591cc81c1c9bdd1bd8dbdb081c185d5cd959605a1b60448201526064016104e7565b6000805460ff60a01b191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a150600190565b6000546001600160a01b031633146107fa5760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff16156108245760405162461bcd60e51b81526004016104e790612103565b6001600160a01b03811660009081526002602052604090819020805460ff19166001908117909155905160008051602061236d8339815191529161086a91849190612130565b60405180910390a150565b6000546001600160a01b0316331461089f5760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff16156108c95760405162461bcd60e51b81526004016104e790612103565b6001600160a01b038116600090815260026020526040808220805460ff191690555160008051602061236d8339815191529161086a91849190612130565b60006109128261182a565b801561094457506006828154811061092c5761092c6120c9565b600091825260209091200154600160801b900460ff16155b801561097557506000828152600860209081526040808320546001600160a01b03168352600290915290205460ff16155b80156105df5750600360149054906101000a90046001600160401b0316600683815481106109a5576109a56120c9565b6000918252602090912001546109cb9190600160901b90046001600160401b0316612161565b6001600160401b0316421192915050565b3360009081526001602052604090205460ff16610a0b5760405162461bcd60e51b81526004016104e790612075565b806007811115610a1d57610a1d611feb565b60068381548110610a3057610a306120c9565b600091825260209091200154600160881b900460ff166007811115610a5757610a57611feb565b10610a745760405162461bcd60e51b81526004016104e790612188565b6003546040516337e246ad60e01b8152600481018490526001600160a01b03909116906337e246ad90602401602060405180830381865afa158015610abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae191906121af565b15610afe5760405162461bcd60e51b81526004016104e7906121cc565b600060068381548110610b1357610b136120c9565b60009182526020909120018054911515600160801b0260ff60801b19909216919091179055610b428282611847565b5050565b600054600160a01b900460ff1615610b705760405162461bcd60e51b81526004016104e790612103565b3360009081526009602052604081205490819003610b9757610b9433600080611b43565b90505b600060068281548110610bac57610bac6120c9565b60009182526020909120018054909150600160801b900460ff1615610c055760405162461bcd60e51b815260206004820152600f60248201526e7374696c6c20757067726164696e6760881b60448201526064016104e7565b6003546040516337e246ad60e01b8152600481018490526001600160a01b03909116906337e246ad90602401602060405180830381865afa158015610c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7291906121af565b15610c8f5760405162461bcd60e51b81526004016104e7906121cc565b826007811115610ca157610ca1611feb565b815460ff91821691600160881b909104166007811115610cc357610cc3611feb565b610cce9060016121fa565b60ff16148015610cf057506004836007811115610ced57610ced611feb565b14155b8015610d0e57506007836007811115610d0b57610d0b611feb565b11155b610d4b5760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a590817dd1bd31d9b60921b60448201526064016104e7565b60056000846007811115610d6157610d61611feb565b60ff16815260208101919091526040016000205433311015610dbc5760405162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b60448201526064016104e7565b80546001600160401b0342908116600160401b02600160401b600160881b031990921691909117600160801b1782556040513391849160008051602061234d83398151915291610e10918891904390612213565b60405180910390a3505050565b3360009081526001602052604090205460ff16610e4c5760405162461bcd60e51b81526004016104e790612075565b6001600160a01b03851660009081526009602052604090205415610ead5760405162461bcd60e51b81526020600482015260186024820152773cb7ba9030b63932b0b23c903437b6321030903a37b5b2b760411b60448201526064016104e7565b6000610eba868686611b43565b9050846007811115610ece57610ece611feb565b600111158015610ef057506003856007811115610eed57610eed611feb565b11155b15610f3857600780546001600160401b0316906000610f0e83612243565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050610fb7565b846007811115610f4a57610f4a611feb565b600411158015610f6c57506007856007811115610f6957610f69611feb565b11155b15610fb75760078054600160401b90046001600160401b0316906008610f9183612243565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b83156105ba57856001600160a01b03168160008051602061234d833981519152878686604051610fe993929190612213565b60405180910390a3505050505050565b600080546001600160a01b031633146110245760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff161561104e5760405162461bcd60e51b81526004016104e790612103565b6000805460ff60a01b1916600160a01b1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a150600190565b6000546001600160a01b031633146110b85760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff16156110e25760405162461bcd60e51b81526004016104e790612103565b6001600160a01b038116600090815260016020819052604091829020805460ff191682179055905160008051602061238d8339815191529161086a91849190612130565b600080600080600080600061113a8861182a565b1561129a57600060068981548110611154576111546120c9565b60009182526020918290206040805160a0810182529190920180546001600160401b038082168452600160401b8204169483019490945260ff600160801b85048116151593830193909352909290916060840191600160881b90041660078111156111c1576111c1611feb565b60078111156111d2576111d2611feb565b81529054600160901b90046001600160401b031660209182015260008b815260089091526040908190205460608301518383015160035493516337e246ad60e01b8152600481018f90529495506001600160a01b03928316949193909216906337e246ad90602401602060405180830381865afa158015611257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127b91906121af565b8460800151856000015186602001519750975097509750975097509750505b919395979092949650565b6000546001600160a01b031633146112cf5760405162461bcd60e51b81526004016104e7906120df565b600054600160a01b900460ff16156112f95760405162461bcd60e51b81526004016104e790612103565b6001600160a01b038116600090815260016020526040808220805460ff191690555160008051602061238d8339815191529161086a91849190612130565b3360009081526001602052604090205460ff166113665760405162461bcd60e51b81526004016104e790612075565b80600781111561137857611378611feb565b6006838154811061138b5761138b6120c9565b600091825260209091200154600160881b900460ff1660078111156113b2576113b2611feb565b116113cf5760405162461bcd60e51b81526004016104e790612188565b600454600680546001600160401b0390921691849081106113f2576113f26120c9565b6000918252602090912001546114189190600160901b90046001600160401b0316612161565b6001600160401b031642116114685760405162461bcd60e51b815260206004820152601660248201527531b0b73737ba103237bbb733b930b232903a37b5b2b760511b60448201526064016104e7565b6003546040516337e246ad60e01b8152600481018490526001600160a01b03909116906337e246ad906024016020604