864 txs
7.2k calls
constructor
constructor(address _earlyLiquidityAddress, address _vestingContract, address _gcaAndMinerPoolAddress, address _vetoCouncilAddress, address _grantsTreasuryAddress, address _owner, address _usdg, address _uniswapV2Factory, address _gccContract) payable
functions
accountUnstakedPositionPointers
viewfunction accountUnstakedPositionPointers(address account) view returns (tuple)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
allowlistedContracts
viewfunction allowlistedContracts(address) view returns (bool)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
EARLY_LIQUIDITY_ADDRESS
viewfunction EARLY_LIQUIDITY_ADDRESS() view returns (address)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
EMERGENCY_COOLDOWN_PERIOD
viewfunction EMERGENCY_COOLDOWN_PERIOD() view returns (uint256)
emergencyLastUnstakeTimestamp
viewfunction emergencyLastUnstakeTimestamp(address) view returns (uint256)
GCA_AND_MINER_POOL_ADDRESS
viewfunction GCA_AND_MINER_POOL_ADDRESS() view returns (address)
GCA_AND_MINER_POOL_INFLATION_PER_SECOND
viewfunction GCA_AND_MINER_POOL_INFLATION_PER_SECOND() view returns (uint256)
gcaAndMinerPoolLastClaimedTimestamp
viewfunction gcaAndMinerPoolLastClaimedTimestamp() view returns (uint256)
gcaInflationData
viewfunction gcaInflationData() view returns (uint256, uint256 totalAlreadyClaimed, uint256 totalToClaim)
GENESIS_TIMESTAMP
viewfunction GENESIS_TIMESTAMP() view returns (uint256)
glowUnlocker
viewfunction glowUnlocker() view returns (address)
GRANTS_TREASURY_ADDRESS
viewfunction GRANTS_TREASURY_ADDRESS() view returns (address)
GRANTS_TREASURY_INFLATION_PER_SECOND
viewfunction GRANTS_TREASURY_INFLATION_PER_SECOND() view returns (uint256)
grantsTreasuryInflationData
viewfunction grantsTreasuryInflationData() view returns (uint256, uint256 totalAlreadyClaimed, uint256 totalToClaim)
grantsTreasuryLastClaimedTimestamp
viewfunction grantsTreasuryLastClaimedTimestamp() view returns (uint256)
MAX_UNSTAKES_BEFORE_EMERGENCY_COOLDOWN
viewfunction MAX_UNSTAKES_BEFORE_EMERGENCY_COOLDOWN() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
numStaked
viewfunction numStaked(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
permanentlyFreezeTransfers
viewfunction permanentlyFreezeTransfers() view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
unstakedPositionsOf
viewfunction unstakedPositionsOf(address account, uint256 start, uint256 end) view returns (tuple[])
unstakedPositionsOf
viewfunction unstakedPositionsOf(address account) view returns (tuple[])
USDG
viewfunction USDG() view returns (address)
VETO_COUNCIL_ADDRESS
viewfunction VETO_COUNCIL_ADDRESS() view returns (address)
VETO_COUNCIL_INFLATION_PER_SECOND
viewfunction VETO_COUNCIL_INFLATION_PER_SECOND() view returns (uint256)
vetoCouncilInflationData
viewfunction vetoCouncilInflationData() view returns (uint256, uint256 totalAlreadyClaimed, uint256 totalToClaim)
vetoCouncilLastClaimedTimestamp
viewfunction vetoCouncilLastClaimedTimestamp() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
claimGLWFromGCAAndMinerPool
nonpayablefunction claimGLWFromGCAAndMinerPool() returns (uint256)
claimGLWFromGrantsTreasury
nonpayablefunction claimGLWFromGrantsTreasury() returns (uint256)
claimGLWFromVetoCouncil
nonpayablefunction claimGLWFromVetoCouncil() returns (uint256)
claimUnstakedTokens
nonpayablefunction claimUnstakedTokens(uint256 amount)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 requestedDecrease) returns (bool)
freezeContract
nonpayablefunction freezeContract()
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
renounceOwnership
nonpayablefunction renounceOwnership()
stake
nonpayablefunction stake(uint256 stakeAmount)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unstake
nonpayablefunction unstake(uint256 amount)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
ClaimUnstakedGLW
event ClaimUnstakedGLW(address indexed user, uint256 amount)
EIP712DomainChanged
event EIP712DomainChanged()
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PermanentFreeze
event PermanentFreeze()
Stake
event Stake(address indexed user, uint256 amount)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unstake
event Unstake(address indexed user, uint256 amount)
errors
AddressAlreadySet
error AddressAlreadySet()
AddressNotSet
error AddressNotSet()
CallerNotGCA
error CallerNotGCA()
CallerNotGrantsTreasury
error CallerNotGrantsTreasury()
CallerNotVetoCouncil
error CallerNotVetoCouncil()
CannotClaimZeroTokens
error CannotClaimZeroTokens()
CannotStakeZeroTokens
error CannotStakeZeroTokens()
CannotUnstakeZeroTokens
error CannotUnstakeZeroTokens()
DuplicateAddressNotAllowed
error DuplicateAddressNotAllowed()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC20FailedDecreaseAllowance
error ERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease)
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)
ErrIsContract
error ErrIsContract()
ErrNotVetoCouncilMember
error ErrNotVetoCouncilMember()
ErrPermanentlyFrozen
error ErrPermanentlyFrozen()
InsufficientClaimableBalance
error InsufficientClaimableBalance()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidShortString
error InvalidShortString()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
StringTooLong
error StringTooLong(string str)
UnstakeAmountExceedsStakedBalance
error UnstakeAmountExceedsStakedBalance()
UnstakingOnEmergencyCooldown
error UnstakingOnEmergencyCooldown()
ZeroAddressNotAllowed
error ZeroAddressNotAllowed()
creation bytecode
0x6102006040526040516200448d3803806200448d833981016040819052620000279162000891565b83898989898960405180604001604052806004815260200163476c6f7760e01b81525080604051806040016040528060018152602001603160f81b81525060405180604001604052806004815260200163476c6f7760e01b81525060405180604001604052806008815260200167474c572d4245544160c01b8152508160039081620000b4919062000a0c565b506004620000c3828262000a0c565b50620000d59150839050600562000371565b61012052620000e681600662000371565b61014052815160208084019190912060e052815190820120610100524660a0526200017460e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0385811661016052838116610180528281166101a05281166101c052620001ae858583620003aa565b5050505050620001c481620003dd60201b60201c565b503060008181526011602081905260408083208054600160ff1991821681179092556001600160a01b038f168552918420805490921681179091559290919062000211908690886200042f565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790558b82168152601184528281208054861660019081179091558b8316825283822080548716821790558a83168252838220805490961617909455815163486a8eb960e11b81529151908516926390d51d7292600480820193918290030181865afa158015620002b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d7919062000ad8565b90506001600160a01b0381166200033f5760405162461bcd60e51b815260206004820152602160248201527f476c6f773a20636172626f6e43726564697441756374696f6e206973207a65726044820152606f60f81b60648201526084015b60405180910390fd5b6001600160a01b03166000908152601160205260409020805460ff191660011790555062000b96975050505050505050565b60006020835110156200039157620003898362000446565b9050620003a4565b816200039e848262000a0c565b5060ff90505b92915050565b620003c1836a09ed194db19b238c00000062000489565b620003d8816a04f68ca6d8cd91c600000062000489565b505050565b600f80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006200043e848484620004c7565b949350505050565b600080829050601f8151111562000474578260405163305a27a960e01b815260040162000336919062000aff565b8051620004818262000b4f565b179392505050565b6001600160a01b038216620004b55760405163ec442f0560e01b81526000600482015260240162000336565b620004c360008383620005b0565b5050565b60008080620004d7858562000606565b6040516001600160601b0319606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016200058e9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b600f54600160a01b900460ff1615620005dc57604051637d01ae8d60e11b815260040160405180910390fd5b8215620005f957620005ee8362000703565b620005f98262000703565b620003d883838362000748565b600080826001600160a01b0316846001600160a01b0316036200067a5760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b606482015260840162000336565b826001600160a01b0316846001600160a01b0316106200069c5782846200069f565b83835b90925090506001600160a01b038216620006fc5760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015260640162000336565b9250929050565b803b1562000745576001600160a01b03811660009081526011602052604090205460ff166200074557604051637d3bdde560e01b815260040160405180910390fd5b50565b6001600160a01b038316620007775780600260008282546200076b919062000b74565b90915550620007eb9050565b6001600160a01b03831660009081526020819052604090205481811015620007cc5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000336565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620008095760028054829003905562000828565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200086e91815260200190565b60405180910390a3505050565b6001600160a01b03811681146200074557600080fd5b60008060008060008060008060006101208a8c031215620008b157600080fd5b8951620008be816200087b565b60208b0151909950620008d1816200087b565b60408b0151909850620008e4816200087b565b60608b0151909750620008f7816200087b565b60808b01519096506200090a816200087b565b60a08b01519095506200091d816200087b565b60c08b015190945062000930816200087b565b60e08b015190935062000943816200087b565b6101008b015190925062000957816200087b565b809150509295985092959850929598565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200099357607f821691505b602082108103620009b457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d857600081815260208120601f850160051c81016020861015620009e35750805b601f850160051c820191505b8181101562000a0457828155600101620009ef565b505050505050565b81516001600160401b0381111562000a285762000a2862000968565b62000a408162000a3984546200097e565b84620009ba565b602080601f83116001811462000a78576000841562000a5f5750858301515b600019600386901b1c1916600185901b17855562000a04565b600085815260208120601f198616915b8281101562000aa95788860151825594840194600190910190840162000a88565b508582101562000ac85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000aeb57600080fd5b815162000af8816200087b565b9392505050565b600060208083528351808285015260005b8181101562000b2e5785810183015185820160400152820162000b10565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620009b45760001960209190910360031b1b16919050565b80820180821115620003a457634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161380a62000c8360003960006105de0152600081816103b301528181610eba01528181610f1e01528181610fd4015261217801526000818161077c015281816115270152818161169f015281816123b30152818161241701526124cd01526000818161053a015281816109360152818161099a01528181610a5001526110160152600061058c01526000612a8a01526000612a5d0152600061293b015260006129130152600061286e01526000612898015260006128c2015261380a6000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c806370a08231116101b2578063a694fc3a116100f9578063cad46940116100a2578063de41f6731161007c578063de41f673146107ff578063f175339914610808578063f19a1eea14610810578063f2fde38b1461083357600080fd5b8063cad469401461079e578063d505accf146107a6578063dd62ed3e146107b957600080fd5b8063b5f96236116100d3578063b5f9623614610751578063bbdf5cea14610764578063c17ca8471461077757600080fd5b8063a694fc3a14610722578063a9059cbb14610735578063ab92dbab1461074857600080fd5b80638fd1c6dd1161015b578063a457c2d711610135578063a457c2d7146106e2578063a46ba7f9146106f5578063a584a9b51461071a57600080fd5b80638fd1c6dd146106b257806395d89b41146106ba57806396859a6c146106c257600080fd5b806384b0196e1161018c57806384b0196e14610659578063864db6f9146106745780638da5cb5b1461069457600080fd5b806370a0823114610608578063715018a61461063e5780637ecebe001461064657600080fd5b80632660bff3116102815780633a80ccfe1161022a57806354c292901161020457806354c29290146105ae57806357263d9f146105b657806357ae3a9f146105d95780635e150ea01461060057600080fd5b80633a80ccfe146105775780633c3c0fa21461057f57806345ac66c71461058757600080fd5b8063349967511161025b57806334996751146105355780633644e5151461055c578063395093511461056457600080fd5b80632660bff3146105095780632e17de7814610511578063313ce5671461052657600080fd5b8063123271bd116102e35780631cd99adf116102bd5780631cd99adf1461043557806323b872dd1461043f57806326000b391461045257600080fd5b8063123271bd1461040457806318160ddd1461040d5780631bd38fa01461041557600080fd5b8063095ea7b311610314578063095ea7b31461038b57806309bd3f3a146103ae5780630c204d44146103fa57600080fd5b8063055a7c761461033b57806306fdde031461035657806308ee0c741461036b575b600080fd5b610343610846565b6040519081526020015b60405180910390f35b61035e610860565b60405161034d9190613284565b6103436103793660046132c0565b600b6020526000908152604090205481565b61039e6103993660046132db565b6108f2565b604051901515815260200161034d565b6103d57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034d565b6365595000610343565b610343600a5481565b600254610343565b6103436104233660046132c0565b600e6020526000908152604090205481565b6103436201518081565b61039e61044d366004613305565b61090c565b6104d96104603660046132c0565b60408051808201909152600080825260208201525073ffffffffffffffffffffffffffffffffffffffff166000908152600d60209081526040918290208251808401909352546fffffffffffffffffffffffffffffffff8082168452700100000000000000000000000000000000909104169082015290565b6040805182516fffffffffffffffffffffffffffffffff908116825260209384015116928101929092520161034d565b610343610932565b61052461051f366004613341565b610a7d565b005b6040516012815260200161034d565b6103d57f000000000000000000000000000000000000000000000000000000000000000081565b610343610e5b565b61039e6105723660046132db565b610e6a565b610343610eb6565b610343610ff9565b6103d57f000000000000000000000000000000000000000000000000000000000000000081565b610343606481565b6105be611010565b6040805193845260208401929092529082015260600161034d565b6103d57f000000000000000000000000000000000000000000000000000000000000000081565b6103436110c7565b6103436106163660046132c0565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6105246110de565b6103436106543660046132c0565b6110f2565b61066161111d565b60405161034d979695949392919061335a565b610687610682366004613419565b61117f565b60405161034d919061344c565b600f5473ffffffffffffffffffffffffffffffffffffffff166103d5565b6105be611521565b61035e6115b1565b6010546103d59073ffffffffffffffffffffffffffffffffffffffff1681565b61039e6106f03660046132db565b6115c0565b600f5461039e9074010000000000000000000000000000000000000000900460ff1681565b610524611671565b610524610730366004613341565b6117bf565b61039e6107433660046132db565b611ab5565b61034360095481565b61052461075f366004613341565b611ac3565b6106876107723660046132c0565b611e82565b6103d57f000000000000000000000000000000000000000000000000000000000000000081565b6105be612172565b6105246107b43660046134bf565b612202565b6103436107c7366004613532565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61034360085481565b6103436123af565b61039e61081e3660046132c0565b60116020526000908152604090205460ff1681565b6105246108413660046132c0565b6124f2565b61085d62093a8069010f0cf064dd59200000613594565b81565b60606003805461086f906135cf565b80601f016020809104026020016040519081016040528092919081815260200182805461089b906135cf565b80156108e85780601f106108bd576101008083540402835291602001916108e8565b820191906000526020600020905b8154815290600101906020018083116108cb57829003601f168201915b5050505050905090565b600033610900818585612556565b60019150505b92915050565b60003361091a858285612568565b610925858585612637565b60019150505b9392505050565b60007f0000000000000000000000000000000000000000000000000000000000000000610982576109827f126860a4000000000000000000000000000000000000000000000000000000006126e2565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109e8576109e87fe6db6490000000000000000000000000000000000000000000000000000000006126e2565b600854600081156109f957816109ff565b63655950005b90506000610a0d8242613622565b90506000610a2862093a8069272cdebe93fde1a00000613594565b610a329083613635565b905080600003610a4757600094505050505090565b42600855610a757f0000000000000000000000000000000000000000000000000000000000000000826126ec565b949350505050565b80600003610aae57610aae7f895076c0000000000000000000000000000000000000000000000000000000006126e2565b336000908152600b602052604090205480821115610aef57610aef7fac990dde000000000000000000000000000000000000000000000000000000006126e2565b336000908152600d602090815260408083208151808301909252546fffffffffffffffffffffffffffffffff80821680845270010000000000000000000000000000000090920416928201839052909291610b4a919061364c565b610b5590600161367c565b6fffffffffffffffffffffffffffffffff169050600082602001516001610b7c919061367c565b6fffffffffffffffffffffffffffffffff16905082600001516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff1603610c3057336000908152600c60209081526040808320868301516fffffffffffffffffffffffffffffffff16845290915281205477ffffffffffffffffffffffffffffffffffffffffffffffff169003610c3057505060208101516000906fffffffffffffffffffffffffffffffff165b6064610c3d8360026136a5565b1115610cc957336000908152600e602052604081205490819003610c7257336000908152600e60205260409020429055610cc7565b62015180610c808242613622565b1015610cb457610caf7f8d7f78f4000000000000000000000000000000000000000000000000000000006126e2565b610cc7565b336000908152600e602052604090204290555b505b610cd38585613622565b336000908152600b60205260409081902091909155805180820190915280610cfa8761274c565b77ffffffffffffffffffffffffffffffffffffffffffffffff168152602001610d2f610d2a6309660180426136a5565b6127ae565b67ffffffffffffffff908116909152336000908152600c6020908152604080832086845282529182902084519482015190931678010000000000000000000000000000000000000000000000000277ffffffffffffffffffffffffffffffffffffffffffffffff90941693909317909155805180820190915284516fffffffffffffffffffffffffffffffff168152908101610dca836127fe565b6fffffffffffffffffffffffffffffffff908116909152336000818152600d602090815260409182902085519186015185167001000000000000000000000000000000000291909416179092559051919450907f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd90610e4c9088815260200190565b60405180910390a25050505050565b6000610e65612854565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906109009082908690610eb19087906136a5565b612556565b60007f0000000000000000000000000000000000000000000000000000000000000000610f0657610f067f126860a4000000000000000000000000000000000000000000000000000000006126e2565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610f6c57610f6c7f864a6163000000000000000000000000000000000000000000000000000000006126e2565b600a5460008115610f7d5781610f83565b63655950005b90506000610f918242613622565b90506000610fac62093a80690878678326eac9000000613594565b610fb69083613635565b905080600003610fcb57600094505050505090565b42600a55610a757f0000000000000000000000000000000000000000000000000000000000000000826126ec565b61085d62093a8069272cdebe93fde1a00000613594565b600080807f0000000000000000000000000000000000000000000000000000000000000000611062576110627f126860a4000000000000000000000000000000000000000000000000000000006126e2565b600854600081156110735781611079565b63655950005b905060006110878242613622565b90506110a062093a8069272cdebe93fde1a00000613594565b6110aa9082613635565b93506110ba636559500083613622565b9450829550505050909192565b61085d62093a80690878678326eac9000000613594565b6110e661298c565b6110f060006129df565b565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260076020526040812054610906565b600060608060008060006060611131612a56565b611139612a83565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600d60209081526040918290208251808401909352546fffffffffffffffffffffffffffffffff8082168085527001000000000000000000000000000000009092041691830191909152606091906111f390856136a5565b8151909450611214906fffffffffffffffffffffffffffffffff16846136a5565b925080602001516001611227919061367c565b6fffffffffffffffffffffffffffffffff1683111561126557602081015161125090600161367c565b6fffffffffffffffffffffffffffffffff1692505b8284106112b25760408051600080825260208201909252906112a9565b60408051808201909152600080825260208201528152602001906001900390816112825790505b5091505061092b565b60006112be8585613622565b67ffffffffffffffff8111156112d6576112d66136b8565b60405190808252806020026020018201604052801561131b57816020015b60408051808201909152600080825260208201528152602001906001900390816112f45790505b50905081602001516fffffffffffffffffffffffffffffffff1682600001516fffffffffffffffffffffffffffffffff160361142c5773ffffffffffffffffffffffffffffffffffffffff86166000908152600c60209081526040808320858301516fffffffffffffffffffffffffffffffff168452825280832081518083019092525477ffffffffffffffffffffffffffffffffffffffffffffffff8116808352780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169282019290925291036113ff575060008152915061092b9050565b8082600081518110611413576114136136e7565b60200260200101819052508561142890613716565b9550505b845b848110156115175773ffffffffffffffffffffffffffffffffffffffff87166000908152600c60209081526040808320848452825280832081518083019092525477ffffffffffffffffffffffffffffffffffffffffffffffff811682527801000000000000000000000000000000000000000000000000900467ffffffffffffffff1691810191909152908290036114ee57805177ffffffffffffffffffffffffffffffffffffffffffffffff166000036114ee576000835250611517565b808388840381518110611503576115036136e7565b60209081029190910101525060010161142e565b5095945050505050565b600080807f0000000000000000000000000000000000000000000000000000000000000000611573576115737f126860a4000000000000000000000000000000000000000000000000000000006126e2565b60095460008115611584578161158a565b63655950005b905060006115988242613622565b90506110a062093a8069010f0cf064dd59200000613594565b60606004805461086f906135cf565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015611659576040517fa60f030c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015260248101829052604481018590526064015b60405180910390fd5b6116668286868403612556565b506001949350505050565b6040517febd7dc520000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ebd7dc5290602401602060405180830381865afa1580156116fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171f919061374e565b611755576040517f611e185700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517fb901bee11718c35d0b5ecb003f82e92281569daeafdb28796e4f33a86f7d499890600090a1565b806000036117f0576117f07fc3b6aa62000000000000000000000000000000000000000000000000000000006126e2565b336000908152600d602090815260408083208151808301909252546fffffffffffffffffffffffffffffffff808216808452700100000000000000000000000000000000909204169282018390529092908290815b8181106119df57336000908152600c6020908152604080832084845282529182902082518084019093525477ffffffffffffffffffffffffffffffffffffffffffffffff8116808452780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16918301919091526118c690866136a5565b945087850361190f57816000036118fb57336000908152600c6020908152604080832083805290915281208190559350611909565b611906600183613622565b93505b506119df565b8785111561199a5760006119238987613622565b90508294506119318161274c565b336000908152600c60209081526040808320878452909152902080547fffffffffffffffff0000000000000000000000000000000000000000000000001677ffffffffffffffffffffffffffffffffffffffffffffffff92909216919091179055506119df9050565b8282036119ce57848811156119c557336000908152600c602090815260408083208684529091528120555b829350506119df565b506119d881613770565b9050611845565b50838214611a31576119f0826127fe565b336000908152600d6020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790555b82861115611a54576000611a458488613622565b9050611a52333083612637565b505b336000908152600b602052604081208054889290611a739084906136a5565b909155505060405186815233907febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9060200160405180910390a2505050505050565b600033610900818585612637565b80600003611af457611af47fcd6064a4000000000000000000000000000000000000000000000000000000006126e2565b336000908152600d602090815260408083208151808301909252546fffffffffffffffffffffffffffffffff8082168084527001000000000000000000000000000000009092041692820183905290919080805b838111611e5057336000908152600c602090815260408083208484529091529020805442780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1610611bc157611bc17f3e9283f4000000000000000000000000000000000000000000000000000000006126e2565b8054611be79077ffffffffffffffffffffffffffffffffffffffffffffffff16886136a5565b9650878703611ce857611bfb8260016136a5565b925084831115611c09578492505b6040518060400160405280611c1d856127fe565b6fffffffffffffffffffffffffffffffff168152602001611c3d876127fe565b6fffffffffffffffffffffffffffffffff908116909152336000818152600d602090815260408083208651968301518616700100000000000000000000000000000000029690951695909517909355600c835283812086825290925291812055611ca99030908a612637565b60405188815233907f881786f21dd38e37f9050dd2e5de277a3c0adb0506912db72844e625a9b2502f9060200160405180910390a25050505050505050565b87871115611e2457819250838314611d7e576040518060400160405280611d0e856127fe565b6fffffffffffffffffffffffffffffffff168152602001611d2e876127fe565b6fffffffffffffffffffffffffffffffff908116909152336000908152600d6020908152604090912083519390910151821670010000000000000000000000000000000002929091169190911790555b6000611d8a8989613622565b9050611d958161274c565b82547fffffffffffffffff0000000000000000000000000000000000000000000000001677ffffffffffffffffffffffffffffffffffffffffffffffff91909116178255611de430338b612637565b60405189815233907f881786f21dd38e37f9050dd2e5de277a3c0adb0506912db72844e625a9b2502f9060200160405180910390a2505050505050505050565b50336000908152600c60209081526040808320848452909152812055611e4981613716565b9050611b48565b50611e7a7f3e9283f4000000000000000000000000000000000000000000000000000000006126e2565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d602090815260408083208151808301909252546fffffffffffffffffffffffffffffffff808216808452700100000000000000000000000000000000909204169282018390526060939192909190611ef990600161367c565b6fffffffffffffffffffffffffffffffff1690506000611f198383613622565b67ffffffffffffffff811115611f3157611f316136b8565b604051908082528060200260200182016040528015611f7657816020015b6040805180820190915260008082526020820152815260200190600190039081611f4f5790505b50905083602001516fffffffffffffffffffffffffffffffff1684600001516fffffffffffffffffffffffffffffffff16036120875773ffffffffffffffffffffffffffffffffffffffff86166000908152600c60209081526040808320878301516fffffffffffffffffffffffffffffffff168452825280832081518083019092525477ffffffffffffffffffffffffffffffffffffffffffffffff8116808352780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1692820192909252910361205a57506000815295945050505050565b808260008151811061206e5761206e6136e7565b60200260200101819052508361208390613716565b9350505b825b828110156115175773ffffffffffffffffffffffffffffffffffffffff87166000908152600c60209081526040808320848452825280832081518083019092525477ffffffffffffffffffffffffffffffffffffffffffffffff811682527801000000000000000000000000000000000000000000000000900467ffffffffffffffff16918101919091529082900361214957805177ffffffffffffffffffffffffffffffffffffffffffffffff16600003612149576000835250611517565b80838684038151811061215e5761215e6136e7565b602090810291909101015250600101612089565b600080807f00000000000000000000000000000000000000000000000000000000000000006121c4576121c47f126860a4000000000000000000000000000000000000000000000000000000006126e2565b600a54600081156121d557816121db565b63655950005b905060006121e98242613622565b90506110a062093a80690878678326eac9000000613594565b8342111561223f576040517f6279130200000000000000000000000000000000000000000000000000000000815260048101859052602401611650565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886122998c73ffffffffffffffffffffffffffffffffffffffff16600090815260076020526040902080546001810190915590565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061230182612ab0565b9050600061231182878787612af8565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612398576040517f4b800e4600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528b166024820152604401611650565b6123a38a8a8a612556565b50505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006123ff576123ff7f126860a4000000000000000000000000000000000000000000000000000000006126e2565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612465576124657f2bacdf67000000000000000000000000000000000000000000000000000000006126e2565b60095460008115612476578161247c565b63655950005b9050600061248a8242613622565b905060006124a562093a8069010f0cf064dd59200000613594565b6124af9083613635565b9050806000036124c457600094505050505090565b42600955610a757f0000000000000000000000000000000000000000000000000000000000000000826126ec565b6124fa61298c565b73ffffffffffffffffffffffffffffffffffffffff811661254a576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401611650565b612553816129df565b50565b6125638383836001612b26565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126315781811015612622576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401611650565b61263184848484036000612b26565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316612687576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401611650565b73ffffffffffffffffffffffffffffffffffffffff82166126d7576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401611650565b612563838383612c6e565b8060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff821661273c576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401611650565b61274860008383612c6e565b5050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff8211156127aa576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260c0600482015260248101839052604401611650565b5090565b600067ffffffffffffffff8211156127aa57604080517f6dfcc650000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604401611650565b60006fffffffffffffffffffffffffffffffff8211156127aa576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401611650565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156128ba57507f000000000000000000000000000000000000000000000000000000000000000046145b156128e457507f000000000000000000000000000000000000000000000000000000000000000090565b610e65604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600f5473ffffffffffffffffffffffffffffffffffffffff1633146110f0576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401611650565b600f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060610e657f00000000000000000000000000000000000000000000000000000000000000006005612ce6565b6060610e657f00000000000000000000000000000000000000000000000000000000000000006006612ce6565b6000610906612abd612854565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080612b0a88888888612d91565b925092509250612b1a8282612e8b565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416612b76576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401611650565b73ffffffffffffffffffffffffffffffffffffffff8316612bc6576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401611650565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602090815260408083209387168352929052208290558015612631578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612c6091815260200190565b60405180910390a350505050565b600f5474010000000000000000000000000000000000000000900460ff1615612cc3576040517ffa035d1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8215612cdb57612cd283612f8f565b612cdb82612f8f565b612563838383612ff5565b606060ff8314612d0057612cf9836131a0565b9050610906565b818054612d0c906135cf565b80601f0160208091040260200160405190810160405280929190818152602001828054612d38906135cf565b8015612d855780601f10612d5a57610100808354040283529160200191612d85565b820191906000526020600020905b815481529060010190602001808311612d6857829003601f168201915b50505050509050610906565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612dcc5750600091506003905082612e81565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612e20573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612e7757506000925060019150829050612e81565b9250600091508190505b9450945094915050565b6000826003811115612e9f57612e9f6137a5565b03612ea8575050565b6001826003811115612ebc57612ebc6137a5565b03612ef3576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612f0757612f076137a5565b03612f41576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401611650565b6003826003811115612f5557612f556137a5565b03612748576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611650565b803b156125535773ffffffffffffffffffffffffffffffffffffffff811660009081526011602052604090205460ff16612553576040517f7d3bdde500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831661302d57806002600082825461302291906136a5565b909155506130df9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156130b3576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401611650565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661310857600280548290039055613134565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161319391815260200190565b60405180910390a3505050565b606060006131ad836131df565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610906576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815180845260005b818110156132465760208185018101518683018201520161322a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061092b6020830184613220565b803573ffffffffffffffffffffffffffffffffffffffff811681146132bb57600080fd5b919050565b6000602082840312156132d257600080fd5b61092b82613297565b600080604083850312156132ee57600080fd5b6132f783613297565b946020939093013593505050565b60008060006060848603121561331a57600080fd5b61332384613297565b925061333160208501613297565b9150604084013590509250925092565b60006020828403121561335357600080fd5b5035919050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e08184015261339660e084018a613220565b83810360408501526133a8818a613220565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015613407578351835292840192918401916001016133eb565b50909c9b505050505050505050505050565b60008060006060848603121561342e57600080fd5b61343784613297565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b828110156134b2578151805177ffffffffffffffffffffffffffffffffffffffffffffffff16855286015167ffffffffffffffff16868501529284019290850190600101613469565b5091979650505050505050565b600080600080600080600060e0888a0312156134da57600080fd5b6134e388613297565b96506134f160208901613297565b95506040880135945060608801359350608088013560ff8116811461351557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561354557600080fd5b61354e83613297565b915061355c60208401613297565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826135ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c908216806135e357607f821691505b60208210810361361c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8181038181111561090657610906613565565b808202811582820484141761090657610906613565565b6fffffffffffffffffffffffffffffffff82811682821603908082111561367557613675613565565b5092915050565b6fffffffffffffffffffffffffffffffff81811683821601908082111561367557613675613565565b8082018082111561090657610906613565565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361374757613747613565565b5060010190565b60006020828403121561376057600080fd5b8151801515811461092b57600080fd5b60008161377f5761377f613565565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220a506fc24679fd6e4b7f987a785113e9cec522b994b853850cff8c784b0bd892964736f6c63430008150033000000000000000000000000d5abe236d2f2f5d10231c054e078788ea3447dfc000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000006fa8c7a89b22bf3212392b778905b12f3dbaf5c4000000000000000000000000a3a32d3c9a5a593bc35d69bacbe2df5ea2c3cf5c0000000000000000000000000116da066517f010e59b32274bf18083af34e1080000000000000000000000005a57a85b5162136026874aef76249af1f5149e5e000000000000000000000000e010ec500720be9ef3f82129e7ed2ee1fb7955f20000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f00000000000000000000000021c46173591f39afc1d2b634b74c98f0576a272b