3 txs
339.7k calls
constructor
constructor()
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
Bascule
viewfunction Bascule() view returns (address)
calcUnstakeRequestAmount
viewfunction calcUnstakeRequestAmount(bytes scriptPubkey, uint256 amount) view returns (uint256 amountAfterFee, bool isAboveDust)
consortium
viewfunction consortium() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getBurnCommission
viewfunction getBurnCommission() view returns (uint64)
getDustFeeRate
viewfunction getDustFeeRate() view returns (uint256)
getMintFee
viewfunction getMintFee() view returns (uint256)
getTreasury
viewfunction getTreasury() view returns (address)
isClaimer
viewfunction isClaimer(address claimer) view returns (bool)
isMinter
viewfunction isMinter(address minter) view returns (bool)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
operator
viewfunction operator() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pauser
viewfunction pauser() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
addClaimer
nonpayablefunction addClaimer(address newClaimer)
addMinter
nonpayablefunction addMinter(address newMinter)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
batchMint
nonpayablefunction batchMint(address[] to, uint256[] amount)
batchMint
nonpayablefunction batchMint(bytes[] payload, bytes[] proof)
batchMintWithFee
nonpayablefunction batchMintWithFee(bytes[] mintPayload, bytes[] proof, bytes[] feePayload, bytes[] userSignature)
burn
nonpayablefunction burn(address from, uint256 amount)
burn
nonpayablefunction burn(uint256 amount)
changeBascule
nonpayablefunction changeBascule(address newVal)
changeBurnCommission
nonpayablefunction changeBurnCommission(uint64 newValue)
changeConsortium
nonpayablefunction changeConsortium(address newVal)
changeDustFeeRate
nonpayablefunction changeDustFeeRate(uint256 newRate)
changeNameAndSymbol
nonpayablefunction changeNameAndSymbol(string name_, string symbol_)
changeTreasuryAddress
nonpayablefunction changeTreasuryAddress(address newValue)
initialize
nonpayablefunction initialize(address consortium_, uint64 burnCommission_, address treasury, address owner_)
mint
nonpayablefunction mint(address to, uint256 amount)
mint
nonpayablefunction mint(bytes payload, bytes proof)
mintWithFee
nonpayablefunction mintWithFee(bytes mintPayload, bytes proof, bytes feePayload, bytes userSignature)
pause
nonpayablefunction pause()
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
redeem
nonpayablefunction redeem(bytes scriptPubkey, uint256 amount)
reinitialize
nonpayablefunction reinitialize()
removeClaimer
nonpayablefunction removeClaimer(address oldClaimer)
removeMinter
nonpayablefunction removeMinter(address oldMinter)
renounceOwnership
nonpayablefunction renounceOwnership()
setMintFee
nonpayablefunction setMintFee(uint256 fee)
toggleWithdrawals
nonpayablefunction toggleWithdrawals()
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOperatorRole
nonpayablefunction transferOperatorRole(address newOperator)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
transferPauserRole
nonpayablefunction transferPauserRole(address newPauser)
unpause
nonpayablefunction unpause()
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
BasculeChanged
event BasculeChanged(address indexed prevVal, address indexed newVal)
BatchMintSkipped
event BatchMintSkipped(bytes32 indexed payloadHash, bytes payload)
BridgeChanged
event BridgeChanged(address indexed prevVal, address indexed newVal)
BurnCommissionChanged
event BurnCommissionChanged(uint64 indexed prevValue, uint64 indexed newValue)
ClaimerUpdated
event ClaimerUpdated(address indexed claimer, bool isClaimer)
ConsortiumChanged
event ConsortiumChanged(address indexed prevVal, address indexed newVal)
DustFeeRateChanged
event DustFeeRateChanged(uint256 indexed oldRate, uint256 indexed newRate)
EIP712DomainChanged
event EIP712DomainChanged()
FeeChanged
event FeeChanged(uint256 indexed oldFee, uint256 indexed newFee)
FeeCharged
event FeeCharged(uint256 indexed fee, bytes userSignature)
Initialized
event Initialized(uint64 version)
MinterUpdated
event MinterUpdated(address indexed minter, bool isMinter)
MintProofConsumed
event MintProofConsumed(address indexed recipient, bytes32 indexed payloadHash, bytes payload)
NameAndSymbolChanged
event NameAndSymbolChanged(string name, string symbol)
OperatorRoleTransferred
event OperatorRoleTransferred(address indexed previousOperator, address indexed newOperator)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PauserRoleTransferred
event PauserRoleTransferred(address indexed previousPauser, address indexed newPauser)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
TreasuryAddressChanged
event TreasuryAddressChanged(address indexed prevValue, address indexed newValue)
Unpaused
event Unpaused(address account)
UnstakeRequest
event UnstakeRequest(address indexed fromAddress, bytes scriptPubKey, uint256 amount)
WithdrawalsEnabled
event WithdrawalsEnabled(bool)
errors
Actions_ZeroAddress
error Actions_ZeroAddress()
AmountBelowDustLimit
error AmountBelowDustLimit(uint256 dustLimit)
AmountLessThanCommission
error AmountLessThanCommission(uint256 fee)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EnforcedPause
error EnforcedPause()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
ERC2612InvalidSigner
error ERC2612InvalidSigner(address signer, address owner)
ExpectedPause
error ExpectedPause()
FeeGreaterThanAmount
error FeeGreaterThanAmount()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidDustFeeRate
error InvalidDustFeeRate()
InvalidInitialization
error InvalidInitialization()
InvalidInputLength
error InvalidInputLength()
InvalidMintAmount
error InvalidMintAmount()
InvalidUserSignature
error InvalidUserSignature()
KnownDestination
error KnownDestination()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PayloadAlreadyUsed
error PayloadAlreadyUsed()
PayloadTooLarge
error PayloadTooLarge()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
ScriptPubkeyUnsupported
error ScriptPubkeyUnsupported()
UnauthorizedAccount
error UnauthorizedAccount(address account)
UnexpectedAction
error UnexpectedAction(bytes4 action)
UnknownDestination
error UnknownDestination()
UserSignatureExpired
error UserSignatureExpired(uint256 expiry)
WithdrawalsDisabled
error WithdrawalsDisabled()
WrongChainId
error WrongChainId()
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
ZeroChainId
error ZeroChainId()
ZeroContractHash
error ZeroContractHash()
ZeroFee
error ZeroFee()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6141ee80620000e66000396000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c806379ba5097116101de578063a3622bf01161010f578063d6a02b6a116100ad578063eddd0d9c1161007c578063eddd0d9c14610731578063f0490b8a14610744578063f216acfb14610757578063f2fde38b1461077757600080fd5b8063d6a02b6a146106fb578063dd62ed3e14610703578063e30c397814610716578063e3248f9a1461071e57600080fd5b8063aa271e1a116100e9578063aa271e1a146106ba578063bad383a6146106cd578063d239f003146106e0578063d505accf146106e857600080fd5b8063a3622bf014610681578063a6f353f014610694578063a9059cbb146106a757600080fd5b80638da5cb5b1161017c5780639ad18765116101565780639ad187651461064b5780639b914470146106535780639dc29fac146106665780639fd0506d1461067957600080fd5b80638da5cb5b1461062857806395d89b4114610630578063983b2d561461063857600080fd5b80637f56945e116101b85780637f56945e146105ca57806380e787df146105dd5780638456cb591461060557806384b0196e1461060d57600080fd5b806379ba5097146105a75780637a5caab3146105af5780637ecebe00146105b757600080fd5b80633b19e84a116102b85780635c975abb116102565780636bc63893116102305780636bc63893146105715780636c2eb3501461058457806370a082311461058c578063715018a61461059f57600080fd5b80635c975abb146105335780636294c3111461054b578063685731071461055e57600080fd5b806342966c681161029257806342966c68146104f25780635671213914610505578063570ca7351461051857806359aae4ba1461052057600080fd5b80633b19e84a146104b75780633f4ba83a146104d757806340c10f19146104df57600080fd5b80631721c6bc116103255780632ea66401116102ff5780632ea664011461047a5780633092afd51461048d578063313ce567146104a05780633644e515146104af57600080fd5b80631721c6bc1461042a57806318160ddd1461044057806323b872dd1461046757600080fd5b8063089bb99a11610361578063089bb99a146103ce578063095ea7b3146103e15780630d1213371461040457806310a8aecd1461041757600080fd5b806301d4038714610388578063066894951461039d57806306fdde03146103b0575b600080fd5b61039b610396366004613700565b61078a565b005b61039b6103ab366004613761565b6107fd565b6103b8610866565b6040516103c5919061386a565b60405180910390f35b61039b6103dc36600461387d565b610901565b6103f46103ef3660046138fd565b610982565b60405190151581526020016103c5565b61039b610412366004613929565b61099c565b6103f4610425366004613929565b6109d7565b610432610a06565b6040519081526020016103c5565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610432565b6103f4610475366004613946565b610a19565b61039b610488366004613929565b610a3f565b61039b61049b366004613929565b610a52565b604051600881526020016103c5565b610432610a65565b6104bf610a74565b6040516001600160a01b0390911681526020016103c5565b61039b610a90565b61039b6104ed3660046138fd565b610aa2565b61039b610500366004613700565b610ad9565b61039b610513366004613929565b610ae3565b6104bf610af4565b61039b61052e3660046139cb565b610b10565b6000805160206141798339815191525460ff166103f4565b61039b610559366004613a96565b610d93565b61039b61056c366004613af0565b610f7f565b61039b61057f36600461387d565b61102a565b61039b611102565b61043261059a366004613929565b61120b565b61039b61123e565b61039b611250565b610432611295565b6104326105c5366004613929565b6112a8565b61039b6105d8366004613929565b6112b3565b6105f06105eb366004613b4f565b6112c4565b604080519283529015156020830152016103c5565b61039b611301565b610615611311565b6040516103c59796959493929190613b9a565b6104bf6113bd565b6103b86113f2565b61039b610646366004613929565b61140a565b6104bf61141d565b61039b610661366004613af0565b61143e565b61039b6106743660046138fd565b61162d565b6104bf611660565b61039b61068f366004613b4f565b61167c565b61039b6106a2366004613929565b611796565b6103f46106b53660046138fd565b6117a7565b6103f46106c8366004613929565b6117b5565b61039b6106db366004613929565b6117e4565b61039b61181c565b61039b6106f6366004613c33565b611882565b6104bf6119db565b610432610711366004613caa565b6119f7565b6104bf611a41565b61039b61072c366004613ce3565b611a6a565b61039b61073f366004613700565b611a7b565b61039b610752366004613929565b611ae6565b61075f611af9565b6040516001600160401b0390911681526020016103c5565b61039b610785366004613929565b611b15565b610792611b9a565b806000036107b35760405163a3a6ed8760e01b815260040160405180910390fd5b60006107bd611bcc565b600e810180549084905560405191925090839082907f78739e78c1e8bc1416322baf73f3397a683d656e9425f621050e243dc73ea03d90600090a3505050565b610805611bcc565b336000908152601291909101602052604090205460ff1661084c57335b6040516332b2baa360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b61085c8888888888888888611bf0565b5050505050505050565b6060610870611bcc565b600101805461087e90613cfe565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90613cfe565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b610909611b9a565b61097c84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f88018190048102820181019092528681529250869150859081908401838280828437600092019190915250611e5e92505050565b50505050565b600033610990818585611ec6565b60019150505b92915050565b6109a4611b9a565b6001600160a01b0381166109cb5760405163d92e233d60e01b815260040160405180910390fd5b6109d481611ed8565b50565b60006109e1611bcc565b6001600160a01b03909216600090815260129290920160205250604090205460ff1690565b6000610a10611bcc565b600e0154905090565b600033610a27858285611f38565b610a32858585611f98565b60019150505b9392505050565b610a47611b9a565b6109d4816001611ff7565b610a5a611b9a565b6109d4816000612095565b6000610a6f612127565b905090565b6000610a7e611bcc565b600501546001600160a01b0316919050565b610a98612131565b610aa061214e565b565b610aaa611bcc565b336000908152601191909101602052604090205460ff16610acb5733610822565b610ad582826121a8565b5050565b6109d433826121de565b610aeb611b9a565b6109d481612214565b6000610afe611bcc565b601501546001600160a01b0316919050565b610b18611bcc565b336000908152601291909101602052604090205460ff16610b395733610822565b868581141580610b495750808414155b80610b545750808214155b15610b7257604051637db491eb60e01b815260040160405180910390fd5b6000610b7c611bcc565b905060005b89811015610d8657600060028c8c84818110610b9f57610b9f613d38565b9050602002810190610bb19190613d4e565b604051610bbf929190613d94565b602060405180830381855afa158015610bdc573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610bff9190613da4565b600081815260148501602052604090205490915060ff1680610c7d57508260008d8d85818110610c3157610c31613d38565b9050602002810190610c439190613d4e565b610c51916004908290613dbd565b604051610c5f929190613d94565b604080519182900390912082526020820192909252016000205460ff165b15610ce457807f199445030f34ba18eca81d4647be9cf6943287dd1a58d150f9cf093111240bff8d8d85818110610cb657610cb6613d38565b9050602002810190610cc89190613d4e565b604051610cd6929190613e10565b60405180910390a250610d7e565b610d7c8c8c84818110610cf957610cf9613d38565b9050602002810190610d0b9190613d4e565b8c8c86818110610d1d57610d1d613d38565b9050602002810190610d2f9190613d4e565b8c8c88818110610d4157610d41613d38565b9050602002810190610d539190613d4e565b8c8c8a818110610d6557610d65613d38565b9050602002810190610d779190613d4e565b611bf0565b505b600101610b81565b5050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610dd85750825b90506000826001600160401b03166001148015610df45750303b155b905081158015610e02575080155b15610e205760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610e4a57845460ff60401b1916600160401b1785555b610e7260405180602001604052806000815250604051806020016040528060008152506122b3565b610e7a6122c5565b610e83866122d5565b610e8b6122e6565b610e936122ee565b610eea604051806040016040528060168152602001752637b6b130b9321029ba30b5b2b2102134ba31b7b4b760511b815250604051806040016040528060048152602001634c42544360e01b8152508b8a8c6122fe565b6000610ef4611bcc565b610bb8600e8201819055604051919250906000907f78739e78c1e8bc1416322baf73f3397a683d656e9425f621050e243dc73ea03d908290a3508315610f7457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b610f87611bcc565b336000908152601191909101602052604090205460ff16610fa85733610822565b828114610fc857604051637db491eb60e01b815260040160405180910390fd5b60005b838110156110235761101b858583818110610fe857610fe8613d38565b9050602002016020810190610ffd9190613929565b84848481811061100f5761100f613d38565b905060200201356121a8565b600101610fcb565b5050505050565b61103261232b565b633cb9cfdf60e21b6110448486613e2c565b6001600160e01b031916146110835761105d8385613e2c565b60405163f3c2729f60e01b81526001600160e01b03199091166004820152602401610843565b60006110cf6110958560048189613dbd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061236392505050565b602081015160408201519192506110ea91808888888861247f565b5061097c600160008051602061419983398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061114b575080546001600160401b03808416911610155b156111695760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556040805180820190915260168152752637b6b130b9321029ba30b5b2b2102134ba31b7b4b760511b60208201526111c090612676565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6000806000805160206141398339815191525b6001600160a01b0390931660009081526020939093525050604090205490565b611246611b9a565b610aa060006126a1565b338061125a611a41565b6001600160a01b03161461128c5760405163118cdaa760e01b81526001600160a01b0382166004820152602401610843565b6109d4816126a1565b600061129f611bcc565b60130154905090565b6000610996826126d9565b6112bb611b9a565b6109d481612702565b60008060006112d1611bcc565b600d8101549091506112f1908790879087906001600160401b031661276f565b9299929850919650505050505050565b611309612131565b610aa061282c565b60006060808280808381600080516020614159833981519152805490915015801561133e57506001810154155b6113825760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610843565b61138a612875565b611392612938565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b60606113fc611bcc565b600201805461087e90613cfe565b611412611b9a565b6109d4816001612095565b6000611427611bcc565b6003015461010090046001600160a01b0316919050565b82811461145e57604051637db491eb60e01b815260040160405180910390fd5b6000611468611bcc565b905060005b84811015611625576000600287878481811061148b5761148b613d38565b905060200281019061149d9190613d4e565b6040516114ab929190613d94565b602060405180830381855afa1580156114c8573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114eb9190613da4565b600081815260148501602052604090205490915060ff1680611569575082600088888581811061151d5761151d613d38565b905060200281019061152f9190613d4e565b61153d916004908290613dbd565b60405161154b929190613d94565b604080519182900390912082526020820192909252016000205460ff165b156115d057807f199445030f34ba18eca81d4647be9cf6943287dd1a58d150f9cf093111240bff8888858181106115a2576115a2613d38565b90506020028101906115b49190613d4e565b6040516115c2929190613e10565b60405180910390a25061161d565b61161b8787848181106115e5576115e5613d38565b90506020028101906115f79190613d4e565b87878681811061160957611609613d38565b905060200281019061057f9190613d4e565b505b60010161146d565b505050505050565b611635611bcc565b336000908152601191909101602052604090205460ff166116565733610822565b610ad582826121de565b600061166a611bcc565b601001546001600160a01b0316919050565b6000611686611bcc565b600381015490915060ff166116ae576040516346ee9e3560e01b815260040160405180910390fd5b600d8101546001600160401b031660008080806116cd8989898861276f565b9350935093509350826116fe57604051630a01b54160e11b81526001600160401b0386166004820152602401610843565b8061171f576040516335558cfd60e21b815260048101839052602401610843565b3361173b8161172c610a74565b886001600160401b0316611f98565b61174581866121de565b806001600160a01b03167f48396c786750ed570cc1b02085ad1b3c1ffb59fd39686c23a263c1e0d974af1b8b8b8860405161178293929190613e72565b60405180910390a250505050505050505050565b61179e611b9a565b6109d481612977565b600033610990818585611f98565b60006117bf611bcc565b6001600160a01b03909216600090815260119290920160205250604090205460ff1690565b6117ec611b9a565b6001600160a01b0381166118135760405163d92e233d60e01b815260040160405180910390fd5b6109d4816129fe565b611824611b9a565b600061182e611bcc565b60038101805460ff8082161560ff1990921682179092556040519116151581529091507f45e7e6146471a396eb58b618e88efd46f5c95bd1815b282ed75c5220a559ab10906020015b60405180910390a150565b834211156118a65760405163313c898160e11b815260048101859052602401610843565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886119128c6001600160a01b031660009081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061196d82612a5e565b9050600061197d82878787612a8b565b9050896001600160a01b0316816001600160a01b0316146119c4576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610843565b6119cf8a8a8a611ec6565b50505050505050505050565b60006119e5611bcc565b600f01546001600160a01b0316919050565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006113e2565b611a72611b9a565b6109d481612ab9565b33611a84611bcc565b601501546001600160a01b031614611a9c5733610822565b6000611aa6611bcc565b6013810180549084905560405191925090839082907f5fc463da23c1b063e66f9e352006a7fbe8db7223c455dc429e881a2dfe2f94f190600090a3505050565b611aee611b9a565b6109d4816000611ff7565b6000611b03611bcc565b600d01546001600160401b0316919050565b611b1d611b9a565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b0383169081178255611b616113bd565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b33611ba36113bd565b6001600160a01b031614610aa05760405163118cdaa760e01b8152336004820152602401610843565b7fa9a2395ec4edf6682d754acb293b04902817fdb5829dd13adb0367ab3a26c70090565b611bf861232b565b633cb9cfdf60e21b611c0a888a613e2c565b6001600160e01b03191614611c235761105d8789613e2c565b6000611c35611095896004818d613dbd565b905063205d72a560e21b611c498587613e2c565b6001600160e01b03191614611c625761105d8486613e2c565b6000611cae611c74866004818a613dbd565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b1a92505050565b90506000611cba611bcc565b6013810154835191925090811115611cd0575081515b83604001518110611cf457604051632405ab8160e11b815260040160405180910390fd5b8251602080850151604051600093611d6693611d4b937f40ac9f6aa27075e64c1ed1ea2e831b20b8c25efdeb6b79fd0cf683c9a9c50725934693920193845260208401929092526040830152606082015260800190565b60405160208183030381529060405280519060200120612a5e565b9050611dad85602001518289898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612bd292505050565b611dca576040516338fed95f60e21b815260040160405180910390fd5b50611df18460200151828660400151611de39190613eac565b86604001518f8f8f8f61247f565b6005820154611e09906001600160a01b0316826121a8565b807fcd0d4a9ad4b364951764307d0ae7b0d2ea482965b258e2e2452ef396c53b20f08787604051611e3b929190613e10565b60405180910390a25050505061085c600160008051602061419983398151915255565b6000611e68611bcc565b905060018101611e788482613f07565b5060028101611e878382613f07565b507f4d807d72b2a493ff2c4e338967d3f82d3352481258457d12a4506a1762a44c698383604051611eb9929190613fc6565b60405180910390a1505050565b611ed38383836001612ca5565b505050565b6000611ee2611bcc565b6015810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907fd90d696290df8da2e089fb9f5467201dc45d6fa26d4d8e7c8a239b745f510c6c90600090a3505050565b6000611f4484846119f7565b9050600019811461097c5781811015611f8957604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610843565b61097c84848484036000612ca5565b6001600160a01b038316611fc257604051634b637e8f60e11b815260006004820152602401610843565b6001600160a01b038216611fec5760405163ec442f0560e01b815260006004820152602401610843565b611ed3838383612d8c565b6001600160a01b03821661201e5760405163d92e233d60e01b815260040160405180910390fd5b80612027611bcc565b6001600160a01b0384166000818152601292909201602052604091829020805493151560ff1990941693909317909255517f0d4de5cd7f05b154b7f42e4f1dd68f5c27ea0edaf9bd084309201cfa52e859269061208990841515815260200190565b60405180910390a25050565b6001600160a01b0382166120bc5760405163d92e233d60e01b815260040160405180910390fd5b806120c5611bcc565b6001600160a01b0384166000818152601192909201602052604091829020805493151560ff1990941693909317909255517fb21afb9ce9be0a676f8f317ff0ca072fb89a4f8ce2d1b6fe80f8755c14f1cb199061208990841515815260200190565b6000610a6f612d97565b3361213a611660565b6001600160a01b031614610aa05733610822565b612156612e0b565b600080516020614179833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001611877565b6001600160a01b0382166121d25760405163ec442f0560e01b815260006004820152602401610843565b610ad560008383612d8c565b6001600160a01b03821661220857604051634b637e8f60e11b815260006004820152602401610843565b610ad582600083612d8c565b6001600160a01b03811661223b5760405163d92e233d60e01b815260040160405180910390fd5b6000612245611bcc565b60038101546040519192506001600160a01b038085169261010090920416907f146dd8feba84cdc776f012478adc764591d6c0c9570adbc49ff09c648282a0a090600090a360030180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6122bb612e3b565b610ad58282612e84565b6122cd612e3b565b610aa0612ed5565b6122dd612e3b565b6109d481612ef6565b610aa0612e3b565b6122f6612e3b565b610aa0612f28565b612306612e3b565b6123108585611e5e565b61231983612214565b61232282612977565b61102381612ab9565b60008051602061419983398151915280546001190161235d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015290612398906005613ff4565b8251146123b85760405163492f620d60e01b815260040160405180910390fd5b6000806000806000868060200190518101906123d4919061400b565b945094509450945094504685146123fd576040516217e1ef60ea1b815260040160405180910390fd5b6001600160a01b038416612424576040516351de9ae360e11b815260040160405180910390fd5b8260000361244557604051631f2a200560e01b815260040160405180910390fd5b6040805160a0810182529586526001600160a01b03909416602086015292840191909152606083015263ffffffff16608082015292915050565b6000612489611bcc565b9050858711156124ac5760405163199f5a0360e31b815260040160405180910390fd5b6000600286866040516124c0929190613d94565b602060405180830381855afa1580156124dd573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125009190613da4565b90506000612511866004818a613dbd565b60405161251f929190613d94565b6040805191829003909120600084815260148601602052919091205490915060ff168061255a575060008181526020849052604090205460ff165b1561257857604051637c4b379b60e01b815260040160405180910390fd5b6003830154604051631f68c5f560e11b81526101009091046001600160a01b031690633ed18bea906125b29085908990899060040161406c565b60006040518083038186803b1580156125ca57600080fd5b505afa1580156125de573d6000803e3d6000fd5b50505060008381526014850160205260409020805460ff191660011790555061260883828a612f30565b6126128a8a6121a8565b818a6001600160a01b03167f91f5c148b0f5ac9ddafe7030867f0d968adec49652c7ea760cf51fa233424b14898960405161264e929190613e10565b60405180910390a350505050505050505050565b600160008051602061419983398151915255565b61267e612e3b565b6109d481604051806040016040528060018152602001603160f81b815250612fa1565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319168155610ad582613002565b6000807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0061121e565b600061270c611bcc565b600f8101546040519192506001600160a01b03808516929116907fa0317ebf02283589c190260fcd549e3a6de71bef31204aeb5417c07fb65c089490600090a3600f0180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006127818989613073565b9050600081600381111561279757612797614086565b036127b557604051632695fabb60e01b815260040160405180910390fd5b856001600160401b031687116127d957600080600080945094509450945050612821565b60006127e3611bcc565b905060006127fa6001600160401b0389168a613eac565b9050600061280e848d8d86600e01546131e1565b9197506001965090945050508285119150505b945094509450949050565b61283461328f565b600080516020614179833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612190565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020614159833981519152916128b490613cfe565b80601f01602080910402602001604051908101604052809291908181526020018280546128e090613cfe565b801561292d5780601f106129025761010080835404028352916020019161292d565b820191906000526020600020905b81548152906001019060200180831161291057829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020614159833981519152916128b490613cfe565b6001600160a01b03811661299e5760405163d92e233d60e01b815260040160405180910390fd5b60006129a8611bcc565b6005810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f4fc6e7a37aea21888550b60360992adb6a9b3b4da644d63e9f3a420c2d86e28290600090a3505050565b6000612a08611bcc565b6010810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907ffb34c91b8734ef26ee8085a0fa11d2692042c6edac57dc40d8850cad2f1bc3ef90600090a3505050565b6000610996612a6b612127565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080612a9d888888886132c0565b925092509250612aad828261338f565b50909695505050505050565b6000612ac3611bcc565b600d810180546001600160401b0385811667ffffffffffffffff1983168117909355604051939450169182907f2e7c1540076270015f38f524150bcb5d6ba9db14aca34c2e6d32e6ffad37941a90600090a3505050565b6040805180820190915260008082526020820152612b3a60206002613ff4565b825114612b5a5760405163492f620d60e01b815260040160405180910390fd5b60008083806020019051810190612b71919061409c565b9150915080421115612b995760405163954aba7160e01b815260048101829052602401610843565b81600003612bba5760405163af13986d60e01b815260040160405180910390fd5b60408051808201909152918252602082015292915050565b60006001600160a01b0384163b15612c7157604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e90612c1490879087906004016140c0565b602060405180830381865afa158015612c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5591906140d9565b6001600160e01b03191614612c6c57506000610a38565b612c9b565b836001600160a01b0316612c858484613448565b6001600160a01b031614612c9b57506000610a38565b5060019392505050565b6000805160206141398339815191526001600160a01b038516612cde5760405163e602df0560e01b815260006004820152602401610843565b6001600160a01b038416612d0857604051634a1406b160e11b815260006004820152602401610843565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561102357836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051612d7d91815260200190565b60405180910390a35050505050565b611ed3838383613472565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612dc2613485565b612dca6134ef565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000805160206141798339815191525460ff16610aa057604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610aa057604051631afcd79f60e31b815260040160405180910390fd5b612e8c612e3b565b6000805160206141398339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03612ec68482613f07565b506004810161097c8382613f07565b612edd612e3b565b600080516020614179833981519152805460ff19169055565b612efe612e3b565b6001600160a01b03811661128c57604051631e4fbdf760e01b815260006004820152602401610843565b612662612e3b565b600f8301546001600160a01b0316801561097c57604051632f0d338d60e11b815260048101849052602481018390526001600160a01b03821690635e1a671a90604401600060405180830381600087803b158015612f8d57600080fd5b505af115801561085c573d6000803e3d6000fd5b612fa9612e3b565b6000805160206141598339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102612fe38482613f07565b5060038101612ff28382613f07565b5060008082556001909101555050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006016821480156130a8575060008383828161309257613092613d38565b9050013560f81c60f81b6001600160f81b031916145b80156130dd5750600560fa1b838360018181106130c7576130c7613d38565b9050013560f81c60f81b6001600160f81b031916145b156130ea57506002610996565b6022821480156131215750605160f81b838360008161310b5761310b613d38565b9050013560f81c60f81b6001600160f81b031916145b80156131565750600160fd1b8383600181811061314057613140613d38565b9050013560f81c60f81b6001600160f81b031916145b1561316357506001610996565b602282148015613196575060008383828161318057613180613d38565b9050013560f81c60f81b6001600160f81b031916145b80156131cb5750600160fd1b838360018181106131b5576131b5613d38565b9050013560f81c60f81b6001600160f81b031916145b156131d857506003610996565b50600092915050565b6000603160018660038111156131f9576131f9614086565b14806132165750600286600381111561321457613214614086565b145b806132325750600386600381111561323057613230614086565b145b1561325657613242601a82614103565b905061324f600182614103565b9050613264565b613261606b82614103565b90505b61326e8482614103565b905061328561327d8483613ff4565b6103e8613533565b9695505050505050565b6000805160206141798339815191525460ff1615610aa05760405163d93c066560e01b815260040160405180910390fd5b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156132fb5750600091506003905082613385565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561334f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661337b57506000925060019150829050613385565b9250600091508190505b9450945094915050565b60008260038111156133a3576133a3614086565b036133ac575050565b60018260038111156133c0576133c0614086565b036133de5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156133f2576133f2614086565b036134135760405163fce698f760e01b815260048101829052602401610843565b600382600381111561342757613427614086565b03610ad5576040516335e2f38360e21b815260048101829052602401610843565b6000806000806134588686613575565b925092509250613468828261338f565b5090949350505050565b61347a61328f565b611ed38383836135c2565b60006000805160206141598339815191528161349f612875565b8051909150156134b757805160209091012092915050565b815480156134c6579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600060008051602061415983398151915281613509612938565b80519091501561352157805160209091012092915050565b600182015480156134c6579392505050565b60008160000361354e576135478284614116565b9050610996565b82156131d85781613560600185613eac565b61356a9190614116565b610a38906001614103565b600080600083516041036135af5760208401516040850151606086015160001a6135a1888285856132c0565b9550955095505050506135bb565b50508151600091506002905b9250925092565b6000805160206141398339815191526001600160a01b0384166135fe57818160020160008282546135f39190614103565b909155506136709050565b6001600160a01b038416600090815260208290526040902054828110156136515760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610843565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661368e5760028101805483900390556136ad565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136f291815260200190565b60405180910390a350505050565b60006020828403121561371257600080fd5b5035919050565b60008083601f84011261372b57600080fd5b5081356001600160401b0381111561374257600080fd5b60208301915083602082850101111561375a57600080fd5b9250929050565b6000806000806000806000806080898b03121561377d57600080fd5b88356001600160401b038082111561379457600080fd5b6137a08c838d01613719565b909a50985060208b01359150808211156137b957600080fd5b6137c58c838d01613719565b909850965060408b01359150808211156137de57600080fd5b6137ea8c838d01613719565b909650945060608b013591508082111561380357600080fd5b506138108b828c01613719565b999c989b5096995094979396929594505050565b6000815180845260005b8181101561384a5760208185018101518683018201520161382e565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610a386020830184613824565b6000806000806040858703121561389357600080fd5b84356001600160401b03808211156138aa57600080fd5b6138b688838901613719565b909650945060208701359150808211156138cf57600080fd5b506138dc87828801613719565b95989497509550505050565b6001600160a01b03811681146109d457600080fd5b6000806040838503121561391057600080fd5b823561391b816138e8565b946020939093013593505050565b60006020828403121561393b57600080fd5b8135610a38816138e8565b60008060006060848603121561395b57600080fd5b8335613966816138e8565b92506020840135613976816138e8565b929592945050506040919091013590565b60008083601f84011261399957600080fd5b5081356001600160401b038111156139b057600080fd5b6020830191508360208260051b850101111561375a57600080fd5b6000806000806000806000806080898b0312156139e757600080fd5b88356001600160401b03808211156139fe57600080fd5b613a0a8c838d01613987565b909a50985060208b0135915080821115613a2357600080fd5b613a2f8c838d01613987565b909850965060408b0135915080821115613a4857600080fd5b613a548c838d01613987565b909650945060608b0135915080821115613a6d57600080fd5b506138108b828c01613987565b80356001600160401b0381168114613a9157600080fd5b919050565b60008060008060808587031215613aac57600080fd5b8435613ab7816138e8565b9350613ac560208601613a7a565b92506040850135613ad5816138e8565b91506060850135613ae5816138e8565b939692955090935050565b60008060008060408587031215613b0657600080fd5b84356001600160401b0380821115613b1d57600080fd5b613b2988838901613987565b90965094506020870135915080821115613b4257600080fd5b506138dc87828801613987565b600080600060408486031215613b6457600080fd5b83356001600160401b03811115613b7a57600080fd5b613b8686828701613719565b909790965060209590950135949350505050565b60ff60f81b881681526000602060e06020840152613bbb60e084018a613824565b8381036040850152613bcd818a613824565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613c2157835183529284019291840191600101613c05565b50909c9b505050505050505050505050565b600080600080600080600060e0888a031215613c4e57600080fd5b8735613c59816138e8565b96506020880135613c69816138e8565b95506040880135945060608801359350608088013560ff81168114613c8d57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215613cbd57600080fd5b8235613cc8816138e8565b91506020830135613cd8816138e8565b809150509250929050565b600060208284031215613cf557600080fd5b610a3882613a7a565b600181811c90821680613d1257607f821691505b602082108103613d3257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112613d6557600080fd5b8301803591506001600160401b03821115613d7f57600080fd5b60200191503681900382131561375a57600080fd5b8183823760009101908152919050565b600060208284031215613db657600080fd5b5051919050565b60008085851115613dcd57600080fd5b83861115613dda57600080fd5b5050820193919092039150565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000613e24602083018486613de7565b949350505050565b6001600160e01b03198135818116916004851015613e545780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604081526000613e86604083018587613de7565b9050826020830152949350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561099657610996613e96565b601f821115611ed3576000816000526020600020601f850160051c81016020861015613ee85750805b601f850160051c820191505b8181101561162557828155600101613ef4565b81516001600160401b03811115613f2057613f20613e5c565b613f3481613f2e8454613cfe565b84613ebf565b602080601f831160018114613f695760008415613f515750858301515b600019600386901b1c1916600185901b178555611625565b600085815260208120601f198616915b82811015613f9857888601518255948401946001909101908401613f79565b5085821015613fb65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000613fd96040830185613824565b8281036020840152613feb8185613824565b95945050505050565b808202811582820484141761099657610996613e96565b600080600080600060a0868803121561402357600080fd5b855194506020860151614035816138e8565b809450506040860151925060608601519150608086015163ffffffff8116811461405e57600080fd5b809150509295509295909350565b838152604060208201526000613feb604083018486613de7565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156140af57600080fd5b505080516020909101519092909150565b828152604060208201526000613e246040830184613824565b6000602082840312156140eb57600080fd5b81516001600160e01b031981168114610a3857600080fd5b8082018082111561099657610996613e96565b60008261413357634e487b7160e01b600052601260045260246000fd5b50049056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220259bfd8ad3cd38a9d03380231dd777a57dd7292a7e2b48a052817cb49f587f1364736f6c63430008180033