0 txs
0 calls
constructor
constructor((address timelockAddress, address operatorAddress, address frxEthAddress, uint32 initialQueueLengthSeconds) _params) payable
functions
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
FEE_PRECISION
viewfunction FEE_PRECISION() view returns (uint64)
feeRecipient
viewfunction feeRecipient() view returns (address)
FRX_ETH
viewfunction FRX_ETH() view returns (address)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
maxOperatorQueueLengthSeconds
viewfunction maxOperatorQueueLengthSeconds() view returns (uint256)
name
viewfunction name() view returns (string)
nftInformation
viewfunction nftInformation(uint256 nftId) view returns (bool hasBeenRedeemed, uint64 maturity, uint120 amount, uint64 earlyExitFee)
operatorAddress
viewfunction operatorAddress() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
pendingTimelockAddress
viewfunction pendingTimelockAddress() view returns (address)
redemptionQueueAccounting
viewfunction redemptionQueueAccounting() view returns (uint128 etherLiabilities, uint128 unclaimedFees)
redemptionQueueState
viewfunction redemptionQueueState() view returns (uint64 nextNftId, uint64 queueLengthSecs, uint64 redemptionFee, uint64 earlyExitFee)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
timelockAddress
viewfunction timelockAddress() view returns (address)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
acceptTransferTimelock
nonpayablefunction acceptTransferTimelock()
approve
nonpayablefunction approve(address to, uint256 tokenId)
burnRedemptionTicketNft
nonpayablefunction burnRedemptionTicketNft(uint256 _nftId, address _recipient)
collectRedemptionFees
nonpayablefunction collectRedemptionFees(uint128 _collectAmount)
earlyBurnRedemptionTicketNft
nonpayablefunction earlyBurnRedemptionTicketNft(address _recipient, uint256 _nftId) returns (uint120 _frxEthOut)
enterRedemptionQueue
nonpayablefunction enterRedemptionQueue(address _recipient, uint120 _amountToRedeem)
enterRedemptionQueueWithPermit
nonpayablefunction enterRedemptionQueueWithPermit(uint120 _amountToRedeem, address _recipient, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s)
recoverErc20
nonpayablefunction recoverErc20(address _tokenAddress, uint256 _tokenAmount)
recoverEther
nonpayablefunction recoverEther(uint256 _amount)
renounceTimelock
nonpayablefunction renounceTimelock()
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setEarlyExitFee
nonpayablefunction setEarlyExitFee(uint64 _newFee)
setFeeRecipient
nonpayablefunction setFeeRecipient(address _newFeeRecipient)
setMaxOperatorQueueLengthSeconds
nonpayablefunction setMaxOperatorQueueLengthSeconds(uint256 _newMaxQueueLengthSeconds)
setOperator
nonpayablefunction setOperator(address _newOperator)
setQueueLengthSeconds
nonpayablefunction setQueueLengthSeconds(uint64 _newLength)
setRedemptionFee
nonpayablefunction setRedemptionFee(uint64 _newFee)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
transferTimelock
nonpayablefunction transferTimelock(address _newTimelock)
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
BurnRedemptionTicketNft
event BurnRedemptionTicketNft(uint256 indexed nftId, address indexed sender, address indexed recipient, uint120 amountOut)
CollectRedemptionFees
event CollectRedemptionFees(address recipient, uint128 collectAmount)
EarlyBurnRedemptionTicketNft
event EarlyBurnRedemptionTicketNft(uint256 indexed nftId, address indexed sender, address indexed recipient, uint120 frxEthOut, uint120 earlyExitFeeAmount)
EnterRedemptionQueue
event EnterRedemptionQueue(uint256 indexed nftId, address indexed sender, address indexed recipient, uint256 amountFrxEthRedeemed, uint120 redemptionFeeAmount, uint64 maturityTimestamp, uint256 earlyExitFee)
OperatorTransferred
event OperatorTransferred(address indexed previousOperator, address indexed newOperator)
RecoverErc20
event RecoverErc20(address recipient, address token, uint256 amount)
RecoverEther
event RecoverEther(address recipient, uint256 amount)
SetEarlyExitFee
event SetEarlyExitFee(uint64 oldEarlyExitFee, uint64 newEarlyExitFee)
SetFeeRecipient
event SetFeeRecipient(address oldFeeRecipient, address newFeeRecipient)
SetMaxOperatorQueueLengthSeconds
event SetMaxOperatorQueueLengthSeconds(uint256 oldMaxQueueLengthSecs, uint256 newMaxQueueLengthSecs)
SetQueueLengthSeconds
event SetQueueLengthSeconds(uint64 oldQueueLength, uint64 newQueueLength)
SetRedemptionFee
event SetRedemptionFee(uint64 oldRedemptionFee, uint64 newRedemptionFee)
TimelockTransferred
event TimelockTransferred(address indexed previousTimelock, address indexed newTimelock)
TimelockTransferStarted
event TimelockTransferStarted(address indexed previousTimelock, address indexed newTimelock)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
errors
AddressIsNotOperator
error AddressIsNotOperator(address operatorAddress, address actualAddress)
AddressIsNotPendingTimelock
error AddressIsNotPendingTimelock(address pendingTimelockAddress, address actualAddress)
AddressIsNotTimelock
error AddressIsNotTimelock(address timelockAddress, address actualAddress)
Erc721CallerNotOwnerOrApproved
error Erc721CallerNotOwnerOrApproved()
ExceedsCollectedFees
error ExceedsCollectedFees(uint128 collectAmount, uint128 accruedAmount)
ExceedsMaxEarlyExitFee
error ExceedsMaxEarlyExitFee(uint64 providedFee, uint64 maxFee)
ExceedsMaxQueueLengthSecs
error ExceedsMaxQueueLengthSecs(uint64 providedLength, uint256 maxLength)
ExceedsMaxRedemptionFee
error ExceedsMaxRedemptionFee(uint64 providedFee, uint64 maxFee)
InvalidEthTransfer
error InvalidEthTransfer()
NotMatureYet
error NotMatureYet(uint256 currentTime, uint64 maturity)
NotTimelockOrOperator
error NotTimelockOrOperator()
creation bytecode
0x60a0601f1962003eed38819003601f8181018416850194909390926001600160401b0392908487108488111762000459578160809286926040998a528339810103126200046f57845191608083018381108282111762000459578652620000668462000494565b908184526020956200007a87870162000494565b96878187015260606200008f8a890162000494565b978a880198895201519563ffffffff871687036200046f57606001958652620000b762000474565b94601686527f467278455448526564656d7074696f6e5469636b65740000000000000000000082870152620000eb62000474565b91601e83527f46727845544820526564656d7074696f6e205175657565205469636b657400008184015286519185831162000459576000928354986001998a81811c911680156200044e575b858210146200043a57908188849311620003e7575b508490888311600114620003865786926200037a575b5050600019600383901b1c191690891b1783555b8351958611620003665787548881811c911680156200035b575b83821014620003475790818688979695949311620002ec575b508194861160011462000288575050926200027c575b5050600019600383901b1c191690831b1782555b600780546001600160a01b03199081166001600160a01b039384161790915560088054909116958216959095179094556009556283d600600d5551600a8054600160401b600160801b03191691851b6bffffffff000000000000000016919091179055511660805251613a439081620004aa823960805181818161105b015281816110f50152818161173901528181611a3501528181611b3e0152818161211a015261248d0152f35b015190503880620001bf565b8883528183208997909594939116915b828210620002d25750508411620002b8575b505050811b018255620001d3565b015160001960f88460031b161c19169055388080620002aa565b848401518655899790950194938401939081019062000298565b909192939495508884528284208680890160051c820192858a106200033d575b9189988c929897969594930160051c01915b8281106200032e575050620001a9565b8581558998508b91016200031e565b925081926200030c565b634e487b7160e01b84526022600452602484fd5b90607f169062000190565b634e487b7160e01b83526041600452602483fd5b01519050388062000162565b90848c94169187805286882092885b88828210620003d05750508411620003b6575b505050811b01835562000176565b015160001960f88460031b161c19169055388080620003a8565b8385015186558f9790950194938401930162000395565b9091508580528486208880850160051c82019287861062000430575b918d91869594930160051c01915b828110620004215750506200014c565b8881558594508d910162000411565b9250819262000403565b634e487b7160e01b86526022600452602486fd5b90607f169062000137565b634e487b7160e01b600052604160045260246000fd5b600080fd5b60408051919082016001600160401b038111838210176200045957604052565b51906001600160a01b03821682036200046f5756fe60808060405260049081361015610020575b5050361561001e57600080fd5b005b600091823560e01c91826301ffc9a7146129415750816306fdde0314612863578163081812fc14612827578163090f3f50146127d5578163095ea7b3146125cf5781630a5334e514612331578163103cf9e3146122d8578163127effb2146122865781631494ef631461222257816316b796391461219e57816323b872dd14612179578163420a553814611ed957816342842e0e14611ea65781634501409514611df75781634690484014611da55781634bc66f3214611d535781634f4798ae14611cf65781634f8b4ae714611c215781636352211e14611bc757816364cb168814611a595781636ae3535e146119ea57816370a08231146118fa578163738a8ce614611840578163838f3b6814610fe357816395d89b4114610e965781639ac9302214610d53578163a22cb46514610c14578163b3ab15fb14610b68578163b88d4fde14610a96578163bbe9ea7414610a24578163bc7aed03146108d9578163c3d3148714610821578163c87b56dd14610579578163cfbdd6a01461043f57508063e63a391f14610403578063e74b981b14610345578063e985e9c5146102c5578063f6ccaad41461021b5763f737c276146101dd5780610011565b3461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576020600d54604051908152f35b80fd5b503461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576102526133ba565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008060065416600655600754903373ffffffffffffffffffffffffffffffffffffffff83167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc6600080a316331760075580f35b50346102185760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576102fd612a94565b6040610307612ab7565b9273ffffffffffffffffffffffffffffffffffffffff80931681526005602052209116600052602052602060ff604060002054166040519015158152f35b50346102185760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185761037d612a94565b610385613348565b600e546040805173ffffffffffffffffffffffffffffffffffffffff8084168252848116602083015292937fffffffffffffffffffffffff0000000000000000000000000000000000000000939290917fd9d6b85b6d670cd443496fc6d03390f739bbff47f96a8e33fb0cdd52ad26f5c29190a116911617600e5580f35b503461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576020604051620f42408152f35b9050346105755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105755780359067ffffffffffffffff821680830361057157620f424090610492613348565b116105245750600a546040805160c083901c815267ffffffffffffffff84166020820152919277ffffffffffffffffffffffffffffffffffffffffffffffff927fffffffffffffffff000000000000000000000000000000000000000000000000927fdd215094dcc7fc3147958e850323a46d15cef79a2796cc4f81822309216cf80391a160c01b16911617600a5580f35b604080517f54f3d55600000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909316918301918252620f424060208301528291010390fd5b0390fd5b8380fd5b5080fd5b90503461057557602091827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857829082356105e56105e082600052600260205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b612c4c565b604051936105f285612bb5565b82855282156108065781829184937a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000090818110156107f8575b5050856d04ee2d6d415b85acef8100000000808510156107ea575b5050662386f26fc10000808410156107db575b506305f5e100808410156107cc575b50612710808410156107be575b505060648210156107ae575b600a809210156107a4575b600190816021818601956106b361069d88612c12565b976106ab604051998a612bd1565b808952612c12565b977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a89019901368a3750860101905b610743575b5050505092610729929161071d94604051958361070e8895518092888089019101612a2e565b84019151809386840190612a2e565b01038084520182612bd1565b905b61073f604051928284938452830190612a51565b0390f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff849101917f30313233343536373839616263646566000000000000000000000000000000008282061a83530491821561079f579190826106e3565b6106e8565b9160010191610687565b919060646002910491019161067c565b930192909104903880610670565b60089194930492019238610663565b60109194930492019238610654565b940193909204918538610641565b604095500492503880610626565b505050505060405161081781612bb5565b600081529061072b565b9050346105755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105755780359061085d613348565b8280808085335af161086d6130db565b50156108b157506040805133815260208101929092527fbcc06820cb477a1e01547e0f03ed1720e794fe5961b9e55d956a75ff8ffdb3419190819081015b0390a180f35b6040517f96ac6a68000000000000000000000000000000000000000000000000000000008152fd5b9050346105755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261057557803567ffffffffffffffff91828216808303610a20576109286139a9565b73ffffffffffffffffffffffffffffffffffffffff6007541633141580610a15575b6109dc575050600a546040805182821c9490941667ffffffffffffffff90811685528316602085015290927fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff926fffffffffffffffff00000000000000009290917f8852de94b41fa50f0eb4f40fab8a113bd62ac4c4736671d68ed7a337948faaac9190a160401b16911617600a5580f35b60449250600d5490604051927fc3e95ba00000000000000000000000000000000000000000000000000000000084528301526024820152fd5b50600d54811161094a565b8480fd5b9050346105755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105755735610a5e613348565b7fc6fbedb9b757f1809295c76da1eef8c2ca78593d2fccf59b5323cb253cedc9d16040600d548151908152836020820152a1600d5580f35b9050346105755760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261057557610acf612a94565b610ad7612ab7565b906044356064359367ffffffffffffffff8511610b645736602386011215610b645784013592610b0684612c12565b92610b146040519485612bd1565b84845286366024878901011161021857602086610b5c976024610b619a018389013786010152610b4c610b478433612e51565b612d3a565b610b57838383612f57565b6132c1565b612dc5565b80f35b8580fd5b82346102185760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857610ba0612a94565b610ba8613348565b7fffffffffffffffffffffffff000000000000000000000000000000000000000060085473ffffffffffffffffffffffffffffffffffffffff809316809382167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed8680a3161760085580f35b9050346105755760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261057557610c4d612a94565b60243580151591828203610a205773ffffffffffffffffffffffffffffffffffffffff1692833314610cf55750610cc6903385526005602052604085208460005260205260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b6040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b6064906020604051917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b9050346105755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261057557803567ffffffffffffffff91828216808303610a2057620f424090610da7613348565b11610e4d575077ffffffffffffffff00000000000000000000000000000000817f220a87070dd39806f4303c6b65a7576e200ea96a7bb966175aef96a648fece397fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff93600a5495610e3d6040519283928960801c168390602090939293604083019467ffffffffffffffff809216845216910152565b0390a160801b16911617600a5580f35b604080517fe395eda100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909316918301918252620f424060208301528291010390fd5b823461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857604051908060019182549283811c92818516948515610fd9575b6020958686108114610fad57858852879493929187908215610f6c575050600114610f13575b505061072b92500383612bd1565b908592508082527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b858310610f5457505061072b93508201018580610f05565b80548389018501528794508693909201918101610f3c565b9150935061072b9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201018580610f05565b60248360228b7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b93607f1693610edf565b82346102185760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576effffffffffffffffffffffffffffff8235818116810361183b57611036612ab7565b60643560ff8116809103610a205773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a2057604051907fd505accf000000000000000000000000000000000000000000000000000000008252338783015230602483015284841660448301526044356064830152608482015260843560a482015260a43560c4820152848160e4818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156118305790859161181c575b505061112f613769565b60405161113b81612b3a565b600a5467ffffffffffffffff8116825267ffffffffffffffff8160401c16602083015267ffffffffffffffff8160801c16604083015260c01c60608201526111816136e2565b916111a9620f42406111a367ffffffffffffffff604086015116888816613711565b0461383d565b856111b48287613724565b16916fffffffffffffffffffffffffffffffff6111d48482885116613745565b1685526fffffffffffffffffffffffffffffffff6111fa88841682602089015116613745565b16602086015267ffffffffffffffff60208501511667ffffffffffffffff4216019267ffffffffffffffff84116117f0576113509067ffffffffffffffff806060880151166040519261124c84612b3a565b8c84528c6112ad60406020870192868c16845281880194855260608801958652868d51168152600c6020522095511515869060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b51907fffffffffffffffff0000000000000000000000000000000000000000000000ff68ffffffffffffffff0077ffffffffffffffffffffffffffffff0000000000000000008754935160481b169360081b16911617178355511677ffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffff00000000000000000000000000000000000000000000000083549260c01b169116179055565b67ffffffffffffffff8451166040519061136982612bb5565b89825273ffffffffffffffffffffffffffffffffffffffff83161561179257610b5c73ffffffffffffffffffffffffffffffffffffffff9392826113dc6113d661148795600052600260205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b156137d8565b61140c6113d682600052600260205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b8585168d52600360205260408d2060018154019055808d52600260205260408d208686167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055808d878716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a48461310b565b67ffffffffffffffff8551169367ffffffffffffffff80606088015116918a60405196818c168852166020870152166040850152606084015216917f6d276369c2c335a7a5cd8eeda9c75ea535f37c65e580d36fd3ab8ce3d1297a0060803393a467ffffffffffffffff81511667ffffffffffffffff8114611766576fffffffffffffffffffffffffffffffff60206117229461164f67ffffffffffffffff606061175e9a99978260016116d89901168082527fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600a541617600a556115ae8387830151167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff0000000000000000600a549260401b16911617600a55565b611602836040830151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff00000000000000000000000000000000600a549260801b16911617600a55565b01511677ffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffff000000000000000000000000000000000000000000000000600a549260c01b16911617600a55565b611693838251166fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff00000000000000000000000000000000600b541617600b55565b0151166fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff00000000000000000000000000000000600b549260801b16911617600b55565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015292166064808401919091528252608482612bd1565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166134e6565b600160095580f35b6024866011897f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60648b6020604051917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b60248960118c7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b61182590612b85565b610571578386611125565b6040513d87823e3d90fd5b600080fd5b82346102185760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218577f8707eabf0aab8fc872bdb95c17ebd24c4311fc70326f8ac9c4e121449c2aa4dd611899612a94565b602435906118a5613348565b6118c6823373ffffffffffffffffffffffffffffffffffffffff841661347d565b6040805133815273ffffffffffffffffffffffffffffffffffffffff909216602083015281019190915280606081016108ab565b9050346105755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105755773ffffffffffffffffffffffffffffffffffffffff611948612a94565b16908115611966576020604084848152600383522054604051908152f35b6084906020604051917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152fd5b823461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346105755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610575578035906fffffffffffffffffffffffffffffffff80831692838103610a2057611ab16139a9565b600b54928360801c90818611611b765750917fffffffffffffffffffffffffffffffff00000000000000000000000000000000611b13604095937f80352cad384db4ac5f719c28fc1f7d83351c3fbbf124ef6759a7f2b1d35aeff4979561342c565b60801b16911617600b5573ffffffffffffffffffffffffffffffffffffffff611b638282600e5416837f00000000000000000000000000000000000000000000000000000000000000001661347d565b600e54169082519182526020820152a180f35b604080517fcf1950de0000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9485169281019283529390921660208201528291010390fd5b82346102185760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576020611c038335612cb1565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b823461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857611c58613348565b611c606133ba565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008060065416600655600754600073ffffffffffffffffffffffffffffffffffffffff821681817f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8280a37f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68280a31660075580f35b82346102185760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857611d2e612a94565b6024356effffffffffffffffffffffffffffff91828216820361183b5761112f613769565b823461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857602073ffffffffffffffffffffffffffffffffffffffff60075416604051908152f35b823461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857602073ffffffffffffffffffffffffffffffffffffffff600e5416604051908152f35b82346102185760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857611e2f612a94565b611e37613348565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff00000000000000000000000000000000000000006006541617600655600754167f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a600080a380f35b823461021857610b61610b5c611ebb36612ada565b9060405192611ec984612bb5565b868452610b4c610b478433612e51565b9050346105755760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261057557611f12612a94565b9160243591611f1f613769565b611f298333612e51565b156121515750611f376136e2565b90828152602093600c8552604082209160405192611f5484612b3a565b549060ff82161515845267ffffffffffffffff91828160081c16888601526effffffffffffffffffffffffffffff92838260481c16958660408201526060019160c01c82526fffffffffffffffffffffffffffffffff918287818a511690611fbb9161342c565b1688525116611fca9086613711565b620f42409004611fd99061383d565b81848216968a89019282898186511690611ff291613745565b168452611ffe91613724565b976120088a6138dd565b511661204b906fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff00000000000000000000000000000000600b541617600b55565b5116612093906fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff00000000000000000000000000000000600b549260801b16911617600b55565b858152600c87526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff809216938491604051911695869485835288830152339160407f05fa421df00cc659f6fe545d6a78481efccaa067455be4034e79037060d1868691a47f000000000000000000000000000000000000000000000000000000000000000016916121449261347d565b6001600955604051908152f35b6040517fe8162744000000000000000000000000000000000000000000000000000000008152fd5b823461021857610b6161218b36612ada565b91612199610b478433612e51565b612f57565b9050346105755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261057557608091604091358152600c60205220546040519060ff81161515825267ffffffffffffffff8160081c1660208301526effffffffffffffffffffffffffffff8160481c16604083015260c01c6060820152f35b823461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576080600a546040519067ffffffffffffffff8082168352808260401c16602084015281841c16604083015260c01c6060820152f35b823461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857602073ffffffffffffffffffffffffffffffffffffffff60085416604051908152f35b823461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857600b54604080516fffffffffffffffffffffffffffffffff8316815260809290921c602083015290f35b9050346105755760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261057557803561236c612ab7565b612374613769565b61237e8233612e51565b156125a657818452600c602052604084206040519061239c82612b3a565b549160ff83161515825267ffffffffffffffff8360081c16806020840152604083019260606effffffffffffffffffffffffffffff95868160481c16865260c01c91015280421061256f5750828251167fffffffffffffffffffffffffffffffff00000000000000000000000000000000600b549161242e6fffffffffffffffffffffffffffffffff9182851661342c565b16911617600b5561243e846138dd565b838652600c6020526040862060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff9086827f0000000000000000000000000000000000000000000000000000000000000000168585511690803b1561256b576024839260405194859384927f42966c680000000000000000000000000000000000000000000000000000000084528d8401525af180156125605761254d575b5016938580808086865116895af161250f6130db565b50156108b157505116906040519182527f0d2adb99657ac2de89adc7a48f29ffe7f24d0bfb8a77215e9006a8c4dc94a06160203393a4600160095580f35b61255990979197612b85565b95386124f9565b6040513d8a823e3d90fd5b8280fd5b85604491604051917f375394cb00000000000000000000000000000000000000000000000000000000835242908301526024820152fd5b826040517fe8162744000000000000000000000000000000000000000000000000000000008152fd5b9050346105755760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261057557612608612a94565b6024359173ffffffffffffffffffffffffffffffffffffffff90818061262d86612cb1565b1693169280841461275157803314908115612730575b50156126ac5783855260205260408420827fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905561268483612cb1565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258480a480f35b6084906020604051917f08c379a0000000000000000000000000000000000000000000000000000000008352820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b9050855260056020526040852033865260205260ff60408620541638612643565b6084826020604051917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b823461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b82346102185760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576020611c038335612ce3565b823461021857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576040519080805491600183811c92818516948515612937575b6020958686108114610fad57858852879493929187908215610f6c5750506001146128de57505061072b92500383612bd1565b908592508180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061291f57505061072b93508201018580610f05565b80548389018501528794508693909201918101612907565b93607f16936128ab565b91503461256b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261256b57357fffffffff00000000000000000000000000000000000000000000000000000000811680910361256b57602092507f80ac58cd000000000000000000000000000000000000000000000000000000008114908115612a04575b81156129da575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014386129d3565b7f5b5e139f00000000000000000000000000000000000000000000000000000000811491506129cc565b60005b838110612a415750506000910152565b8181015183820152602001612a31565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612a8d81518092818752878088019101612a2e565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361183b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361183b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261183b5773ffffffffffffffffffffffffffffffffffffffff90600435828116810361183b5791602435908116810361183b579060443590565b6080810190811067ffffffffffffffff821117612b5657604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111612b5657604052565b6040810190811067ffffffffffffffff821117612b5657604052565b6020810190811067ffffffffffffffff821117612b5657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612b5657604052565b67ffffffffffffffff8111612b5657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b15612c5357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152fd5b600052600260205273ffffffffffffffffffffffffffffffffffffffff60406000205416612ce0811515612c4c565b90565b612d136105e082600052600260205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b600052600460205273ffffffffffffffffffffffffffffffffffffffff6040600020541690565b15612d4157565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152fd5b15612dcc57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b9073ffffffffffffffffffffffffffffffffffffffff8080612e7284612cb1565b16931691838314938415612ea5575b508315612e8f575b50505090565b612e9b91929350612ce3565b1614388080612e89565b909350600052600560205260406000208260005260205260ff604060002054169238612e81565b15612ed357565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152fd5b90612f8c91612f6584612cb1565b9173ffffffffffffffffffffffffffffffffffffffff938493848094169485911614612ecc565b169182156130585781612fa991612fa286612cb1565b1614612ecc565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60008481526004602052604081207fffffffffffffffffffffffff0000000000000000000000000000000000000000908181541690558382526003602052604082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81540190558482526040822060018154019055858252600260205284604083209182541617905580a4565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b3d15613106573d906130ec82612c12565b916130fa6040519384612bd1565b82523d6000602084013e565b606090565b9091600091803b156132b85761318460209173ffffffffffffffffffffffffffffffffffffffff93856040519586809581947f150b7a02000000000000000000000000000000000000000000000000000000009b8c84523360048501528560248501526044840152608060648401526084830190612a51565b0393165af190829082613258575b5050613232576131a06130db565b8051908161322d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000161490565b909192506020813d82116132b0575b8161327460209383612bd1565b810103126105755751907fffffffff00000000000000000000000000000000000000000000000000000000821682036102185750903880613192565b3d9150613267565b50505050600190565b91926000929190813b1561333e5760209161318491856040519586809581947f150b7a02000000000000000000000000000000000000000000000000000000009b8c845233600485015273ffffffffffffffffffffffffffffffffffffffff80951660248501526044840152608060648401526084830190612a51565b5050505050600190565b73ffffffffffffffffffffffffffffffffffffffff6007541680330361336b5750565b6040517f443dc2b400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152336024820152604490fd5b73ffffffffffffffffffffffffffffffffffffffff600654168033036133dd5750565b6040517fbe5a953700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152336024820152604490fd5b6fffffffffffffffffffffffffffffffff918216908216039190821161344e57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9290921660248301526044808301939093529181526134e4916134df606483612bd1565b6134e6565b565b73ffffffffffffffffffffffffffffffffffffffff169061355360405161350c81612b99565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af161354d6130db565b91613616565b8051918215918483156135f2575b50505090501561356e5750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b91938180945001031261057557820151908115158203610218575080388084613561565b91929015613691575081511561362a575090565b3b156136335790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156136a45750805190602001fd5b61056d906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190612a51565b604051906136ef82612b99565b600b546fffffffffffffffffffffffffffffffff8116835260801c6020830152565b8181029291811591840414171561344e57565b6effffffffffffffffffffffffffffff918216908216039190821161344e57565b9190916fffffffffffffffffffffffffffffffff8080941691160191821161344e57565b60026009541461377a576002600955565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b156137df57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152fd5b6effffffffffffffffffffffffffffff90818111613859571690565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32302062697473000000000000000000000000000000000000000000000000006064820152fd5b6138e681612cb1565b506138f081612cb1565b600090828252600460205273ffffffffffffffffffffffffffffffffffffffff60408320917fffffffffffffffffffffffff00000000000000000000000000000000000000009283815416905516908183526003602052604083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81540190558383526002602052604083209081541690557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4565b73ffffffffffffffffffffffffffffffffffffffff806007541633149081156139ff575b50156139d557565b60046040517f559bf54c000000000000000000000000000000000000000000000000000000008152fd5b9050600854163314386139cd56fea2646970667358221220fbe101ea61f16d41fdf6c9e5109511bf8edf8327f647f54affaedb9453f7dbc364736f6c63430008130033000000000000000000000000b1748c79709f4ba2dd82834b8c82d4a505003f270000000000000000000000005180db0237291a6449dda9ed33ad90a38787621c0000000000000000000000005e8422345238f34275888049021821e8e08caa1f0000000000000000000000000000000000000000000000000000000000093a80