21 txs
235 calls
constructor
constructor(address _gcaAndMinerPoolContract, address _governance, address _glowToken, address _usdg, address _vetoCouncilAddress, address _uniswapRouter, address _uniswapFactory) payable
functions
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)
CARBON_CREDIT_AUCTION
viewfunction CARBON_CREDIT_AUCTION() view returns (address)
COMMIT_PERMIT_TYPEHASH
viewfunction COMMIT_PERMIT_TYPEHASH() view returns (bytes32)
commitAllowance
viewfunction commitAllowance(address account, address spender) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
domainSeparatorV4
viewfunction domainSeparatorV4() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
GCA_AND_MINER_POOL_CONTRACT
viewfunction GCA_AND_MINER_POOL_CONTRACT() view returns (address)
GLOW
viewfunction GLOW() view returns (address)
GOVERNANCE
viewfunction GOVERNANCE() view returns (address)
IMPACT_CATALYST
viewfunction IMPACT_CATALYST() view returns (address)
isBucketMinted
viewfunction isBucketMinted(uint256 bucketId) view returns (bool)
name
viewfunction name() view returns (string)
nextCommitNonce
viewfunction nextCommitNonce(address) view returns (uint256)
permanentlyFreezeTransfers
viewfunction permanentlyFreezeTransfers() view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalImpactPowerEarned
viewfunction totalImpactPowerEarned(address) view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
UNISWAP_ROUTER
viewfunction UNISWAP_ROUTER() view returns (address)
USDC
viewfunction USDC() view returns (address)
VETO_COUNCIL_ADDRESS
viewfunction VETO_COUNCIL_ADDRESS() view returns (address)
allowlistPostConstructionContracts
nonpayablefunction allowlistPostConstructionContracts()
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
burn
nonpayablefunction burn(uint256 value)
burnFrom
nonpayablefunction burnFrom(address account, uint256 value)
commitGCC
nonpayablefunction commitGCC(uint256 amount, address rewardAddress, address referralAddress, uint256 minImpactPower) returns (uint256 usdcEffect, uint256 impactPower)
commitGCC
nonpayablefunction commitGCC(uint256 amount, address rewardAddress, uint256 minImpactPower) returns (uint256, uint256)
commitGCCFor
nonpayablefunction commitGCCFor(address from, address rewardAddress, uint256 amount, address referralAddress, uint256 minImpactPower) returns (uint256 usdcEffect, uint256 impactPower)
commitGCCFor
nonpayablefunction commitGCCFor(address from, address rewardAddress, uint256 amount, uint256 minImpactPower) returns (uint256, uint256)
commitGCCForAuthorized
nonpayablefunction commitGCCForAuthorized(address from, address rewardAddress, uint256 amount, uint256 deadline, bytes signature, address referralAddress, uint256 minImpactPower) returns (uint256, uint256)
commitGCCForAuthorized
nonpayablefunction commitGCCForAuthorized(address from, address rewardAddress, uint256 amount, uint256 deadline, bytes signature, uint256 minImpactPower) returns (uint256 usdcEffect, uint256 impactPower)
commitUSDC
nonpayablefunction commitUSDC(uint256 amount, address rewardAddress, address referralAddress, uint256 minImpactPower) returns (uint256 impactPower)
commitUSDC
nonpayablefunction commitUSDC(uint256 amount, address rewardAddress, uint256 minImpactPower) returns (uint256)
commitUSDCSignature
nonpayablefunction commitUSDCSignature(uint256 amount, address rewardAddress, address referralAddress, uint256 deadline, uint8 v, bytes32 r, bytes32 s, uint256 minImpactPower) returns (uint256 impactPower)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 requestedDecrease) returns (bool)
decreaseAllowances
nonpayablefunction decreaseAllowances(address spender, uint256 requestedDecrease)
decreaseCommitAllowance
nonpayablefunction decreaseCommitAllowance(address spender, uint256 amount)
freezeContract
nonpayablefunction freezeContract()
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
increaseAllowances
nonpayablefunction increaseAllowances(address spender, uint256 addedValue)
increaseCommitAllowance
nonpayablefunction increaseCommitAllowance(address spender, uint256 amount)
mintToCarbonCreditAuction
nonpayablefunction mintToCarbonCreditAuction(uint256 bucketId, uint256 amount)
setAllowances
nonpayablefunction setAllowances(address spender, uint256 transferAllowance, uint256 committingAllowance)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
CommitGCCAllowance
event CommitGCCAllowance(address indexed account, address indexed spender, uint256 value)
EIP712DomainChanged
event EIP712DomainChanged()
GCCCommitted
event GCCCommitted(address indexed account, address indexed rewardAddress, uint256 gccAmount, uint256 usdcEffect, uint256 impactPower, address referralAddress)
PermanentFreeze
event PermanentFreeze()
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
USDCCommitted
event USDCCommitted(address indexed account, address indexed rewardAddress, uint256 amount, uint256 impactPower, address referralAddress)
errors
BucketAlreadyMinted
error BucketAlreadyMinted()
CallerNotGCAContract
error CallerNotGCAContract()
CannotReferSelf
error CannotReferSelf()
CommitAllowanceUnderflow
error CommitAllowanceUnderflow()
CommitPermitSignatureExpired
error CommitPermitSignatureExpired()
CommitSignatureInvalid
error CommitSignatureInvalid()
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)
ErrIsContract
error ErrIsContract()
ErrNotVetoCouncilMember
error ErrNotVetoCouncilMember()
ErrPermanentlyFrozen
error ErrPermanentlyFrozen()
InvalidShortString
error InvalidShortString()
MustIncreaseCommitAllowanceByAtLeastOne
error MustIncreaseCommitAllowanceByAtLeastOne()
StringTooLong
error StringTooLong(string str)
creation bytecode
0x61026060405260405162006e8f38038062006e8f83398101604081905262000027916200087e565b86868686856040518060400160405280601781526020017f476c6f7720436172626f6e204365727469666963617465000000000000000000815250604051806040016040528060018152602001603160f81b8152506040518060400160405280601781526020017f476c6f7720436172626f6e204365727469666963617465000000000000000000815250604051806040016040528060088152602001674743432d4245544160c01b8152508160039081620000e49190620009b7565b506004620000f38282620009b7565b506200010591508390506005620003bf565b6101205262000116816006620003bf565b61014052815160208084019190912060e052815190820120610100524660a052620001a460e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c08190526001600160a01b038381166102205286811661018052828116610200528581166101a05284166101c0526040516000918591620186a090620001f19062000845565b6001600160a01b0393841681529290911660208301526040820152606001604051809103906000f0801580156200022c573d6000803e3d6000fd5b509050806001600160a01b0316610160816001600160a01b0316815250506000610200516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b4919062000a83565b90506000620002c48286620003f8565b905046600103620002e357620002e332670f43fc2c04ee00006200040e565b84848383604051620002f59062000853565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156200033a573d6000803e3d6000fd5b506001600160a01b039081166101e0528b16610240525050306000908152600c602081905260408220805460ff19166001908117909155975095509350620003899250869150899050620003f8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555062000b3895505050505050565b6000602083511015620003df57620003d78362000450565b9050620003f2565b81620003ec8482620009b7565b5060ff90505b92915050565b60006200040783833062000493565b9392505050565b6001600160a01b0382166200043e5760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b6200044c600083836200057c565b5050565b600080829050601f815111156200047e578260405163305a27a960e01b815260040162000435919062000aa1565b80516200048b8262000af1565b179392505050565b60008080620004a38585620005d0565b6040516001600160601b0319606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016200055a9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b600b5460ff1615620005a157604051637d01ae8d60e11b815260040160405180910390fd5b8215620005be57620005b383620006cd565b620005be82620006cd565b620005cb83838362000712565b505050565b600080826001600160a01b0316846001600160a01b031603620006445760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b606482015260840162000435565b826001600160a01b0316846001600160a01b0316106200066657828462000669565b83835b90925090506001600160a01b038216620006c65760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015260640162000435565b9250929050565b803b156200070f576001600160a01b0381166000908152600c602052604090205460ff166200070f57604051637d3bdde560e01b815260040160405180910390fd5b50565b6001600160a01b0383166200074157806002600082825462000735919062000b16565b90915550620007b59050565b6001600160a01b03831660009081526020819052604090205481811015620007965760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000435565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620007d357600280548290039055620007f2565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200083891815260200190565b60405180910390a3505050565b610dd8806200406083390190565b6120578062004e3883390190565b80516001600160a01b03811681146200087957600080fd5b919050565b600080600080600080600060e0888a0312156200089a57600080fd5b620008a58862000861565b9650620008b56020890162000861565b9550620008c56040890162000861565b9450620008d56060890162000861565b9350620008e56080890162000861565b9250620008f560a0890162000861565b91506200090560c0890162000861565b905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200093e57607f821691505b6020821081036200095f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005cb57600081815260208120601f850160051c810160208610156200098e5750805b601f850160051c820191505b81811015620009af578281556001016200099a565b505050505050565b81516001600160401b03811115620009d357620009d362000913565b620009eb81620009e4845462000929565b8462000965565b602080601f83116001811462000a23576000841562000a0a5750858301515b600019600386901b1c1916600185901b178555620009af565b600085815260208120601f198616915b8281101562000a545788860151825594840194600190910190840162000a33565b508582101562000a735787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a9657600080fd5b620004078262000861565b600060208083528351808285015260005b8181101562000ad05785810183015185820160400152820162000ab2565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200095f5760001960209190910360031b1b16919050565b80820180821115620003f257634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051610240516133db62000c8560003960008181610703015261113701526000818161065f015281816108ff015281816113350152818161141501526114ed015260006107760152600081816105ce0152818161082a01528181611308015281816113e3015281816114c2015281816115a101528181611646015281816116cc0152818161177301526117ce0152600061039d0152600081816103fe01528181612145015281816122490152818161239a015261249e0152600081816107e30152610b4701526000818161056e0152818161068601528181610bd30152610c49015260006120c10152600061209401526000611e3e01526000611e1601526000611d7101526000611d9b01526000611dc501526133db6000f3fe608060405234801561001057600080fd5b50600436106103155760003560e01c80637ee0e685116101a7578063c6067ce3116100ee578063df0818a311610097578063f19a1eea11610071578063f19a1eea1461084c578063f6d4f0041461086f578063fa09df60146108b557600080fd5b8063df0818a3146107de578063ecee84fc14610805578063ed2b1cc01461082557600080fd5b8063d489ebe7116100c8578063d489ebe71461075e578063d826492014610771578063dd62ed3e1461079857600080fd5b8063c6067ce314610725578063c824c58014610738578063ca6139081461074b57600080fd5b8063a457c2d711610150578063a87bab181161012a578063a87bab18146106d8578063a9059cbb146106eb578063c17ca847146106fe57600080fd5b8063a457c2d7146106b0578063a46ba7f9146106c3578063a584a9b5146106d057600080fd5b806389a302711161018157806389a302711461065a57806390d51d721461068157806395d89b41146106a857600080fd5b80637ee0e685146106195780637ef2ed0b1461062c57806384b0196e1461063f57600080fd5b8063313ce5671161026b57806356f622a3116102145780637599a489116101ee5780637599a4891461055457806378e890ba146105fe57806379cc67901461060657600080fd5b806356f622a3146104e45780635e6631d01461050b57806370a082311461051e57600080fd5b806343c9ddcb1161024557806343c9ddcb146104ab5780634ca9a234146104be57806353a3879a146104d157600080fd5b8063313ce56714610476578063395093511461048557806342966c681461049857600080fd5b80630db6a0d3116102cd57806318160ddd116102a757806318160ddd14610448578063233233bb1461045057806323b872dd1461046357600080fd5b80630db6a0d3146103e457806314627834146103f9578063158a24c61461042057600080fd5b806306fdde03116102fe57806306fdde0314610360578063095ea7b314610375578063097514231461039857600080fd5b806301c5074a1461031a57806304b68d2514610340575b600080fd5b61032d610328366004612c6c565b6108c8565b6040519081526020015b60405180910390f35b61032d61034e366004612ce6565b60086020526000908152604090205481565b610368610a53565b6040516103379190612d76565b610388610383366004612d89565b610ae5565b6040519015158152602001610337565b6103bf7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610337565b6103f76103f2366004612d89565b610aff565b005b6103bf7f000000000000000000000000000000000000000000000000000000000000000081565b61043361042e366004612db3565b610b10565b60408051928352602083019190915201610337565b60025461032d565b6103f761045e366004612df5565b610b2f565b610388610471366004612e17565b610c6e565b60405160128152602001610337565b610388610493366004612d89565b610c92565b6103f76104a6366004612e53565b610ce0565b6103f76104b9366004612e6c565b610ced565b6104336104cc366004612e9f565b610d66565b6103886104df366004612e53565b610d82565b61032d7f88d36e102c268282d5c35dff36d9147df9d6705e795adef3f96de5410268ca3281565b6103f7610519366004612d89565b610db0565b61032d61052c366004612ce6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6103f773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166000908152600c602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811660019081179092557f0000000000000000000000000000000000000000000000000000000000000000909416835291208054909216179055565b61032d610dbd565b6103f7610614366004612d89565b610dcc565b610433610627366004612f0d565b610de1565b6103f761063a366004612d89565b610f42565b610647610ff7565b6040516103379796959493929190612f9f565b6103bf7f000000000000000000000000000000000000000000000000000000000000000081565b6103bf7f000000000000000000000000000000000000000000000000000000000000000081565b610368611059565b6103886106be366004612d89565b611068565b600b546103889060ff1681565b6103f7611109565b61032d6106e6366004612e9f565b611243565b6103886106f9366004612d89565b61125a565b6103bf7f000000000000000000000000000000000000000000000000000000000000000081565b6103f7610733366004612d89565b611268565b61043361074636600461305e565b6112a7565b61032d6107593660046130df565b6112cb565b61043361076c366004613123565b61163d565b6103bf7f000000000000000000000000000000000000000000000000000000000000000081565b61032d6107a6366004613178565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6103bf7f000000000000000000000000000000000000000000000000000000000000000081565b61032d610813366004612ce6565b600a6020526000908152604090205481565b6103bf7f000000000000000000000000000000000000000000000000000000000000000081565b61038861085a366004612ce6565b600c6020526000908152604090205460ff1681565b61032d61087d366004613178565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260096020908152604080832093909416825291909152205490565b6104336108c33660046130df565b61176a565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201526000907f000000000000000000000000000000000000000000000000000000000000000090829073ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e90604401602060405180830381865afa15801561095f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098391906131ab565b90508a811015610a38576040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018c90526064810189905260ff8816608482015260a4810187905260c4810186905273ffffffffffffffffffffffffffffffffffffffff83169063d505accf9060e401600060405180830381600087803b158015610a1f57600080fd5b505af1158015610a33573d6000803e3d6000fd5b505050505b610a448b8b8b876112cb565b9b9a5050505050505050505050565b606060038054610a62906131c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8e906131c4565b8015610adb5780601f10610ab057610100808354040283529160200191610adb565b820191906000526020600020905b815481529060010190602001808311610abe57829003601f168201915b5050505050905090565b600033610af3818585611862565b60019150505b92915050565b610b0c338383600161186f565b5050565b600080610b2186868660008761163d565b915091505b94509492505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610b9557610b957f1b40804d0000000000000000000000000000000000000000000000000000000061195c565b610b9e82611966565b8015610b0c576040517f2d8d08de000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632d8d08de90602401600060405180830381600087803b158015610c2c57600080fd5b505af1158015610c40573d6000803e3d6000fd5b50505050610b0c7f0000000000000000000000000000000000000000000000000000000000000000826119d6565b600033610c7c858285611a32565b610c87858585611b01565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190610af3908290869086905b610cdb9190613246565b611862565b610cea3382611bac565b50565b610cf8338484611862565b33600081815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835292819020859055518481529192917fb1f6f17e08b681eb55892fe69ba4845e50c39121076a3bf46524658ed3ab672d91015b60405180910390a3505050565b600080610d76858560008661176a565b91509150935093915050565b6000806000610d9084611c08565b60009182526007602052604090912054600190911b161515949350505050565b610b0c3383836001611c2c565b6000610dc7611d57565b905090565b610dd7823383611a32565b610b0c8282611bac565b60008086421115610e1557610e157fbbb5a50e0000000000000000000000000000000000000000000000000000000061195c565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152600a6020526040812080549082610e4783613259565b9190505590506000610e5e8c338d898e878f611e8f565b9050610ea18c828a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f3892505050565b610ece57610ece7ff45bb0890000000000000000000000000000000000000000000000000000000061195c565b610edb8c338c6000611c2c565b73ffffffffffffffffffffffffffffffffffffffff8c1660009081526001602090815260408083203384529091529020548a811015610f2157610f218d338d6000611f45565b610f2e8d8d8d8a8a61163d565b945094505050509850989650505050505050565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205481811015610fd8576040517fa60f030c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b610fe53384848403611862565b610ff2338484600161186f565b505050565b60006060806000806000606061100b61208d565b6110136120ba565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b606060048054610a62906131c4565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156110fc576040517fa60f030c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810182905260448101859052606401610fcf565b610c878286868403611862565b6040517febd7dc520000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ebd7dc5290602401602060405180830381865afa158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b79190613291565b6111ed576040517f611e185700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517fb901bee11718c35d0b5ecb003f82e92281569daeafdb28796e4f33a86f7d499890600090a1565b600061125284846000856112cb565b949350505050565b600033610af3818585611b01565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902054610db0919084908490610cd1565b6000806112bb89898989898960008a610de1565b9150915097509795505050505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561137c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a091906131ab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018990529192507f0000000000000000000000000000000000000000000000000000000000000000909116906323b872dd906064016020604051808303816000875af1158015611460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114849190613291565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611536573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155a91906131ab565b9050600061156883836132b3565b6040517fffa6c0c200000000000000000000000000000000000000000000000000000000815260048101829052602481018790529091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ffa6c0c2906044016020604051808303816000875af11580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162391906131ab565b935061163233888a878a6120e7565b505050949350505050565b60008061166b877f000000000000000000000000000000000000000000000000000000000000000087610c6e565b503373ffffffffffffffffffffffffffffffffffffffff88161461169657611696873387600061186f565b6040517f1d8839fc00000000000000000000000000000000000000000000000000000000815260048101869052602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631d8839fc9060440160408051808303816000875af1158015611729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174d91906132c6565b909250905061176087878785858961233c565b9550959350505050565b600080611798337f000000000000000000000000000000000000000000000000000000000000000088611b01565b6040517f1d8839fc00000000000000000000000000000000000000000000000000000000815260048101879052602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631d8839fc9060440160408051808303816000875af115801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f91906132c6565b9092509050610b2633868885858961233c565b610ff28383836001611f45565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600960209081526040808320938716835292905290812054906118af84836132b3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600960209081526040808320938a1683529290522081905590508215611954578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb1f6f17e08b681eb55892fe69ba4845e50c39121076a3bf46524658ed3ab672d8360405161194b91815260200190565b60405180910390a35b505050505050565b8060005260046000fd5b60008061197283611c08565b60008281526007602052604090205491935091506001821b8116156119ba576119ba7feaab93be0000000000000000000000000000000000000000000000000000000061195c565b600092835260076020526040909220600190911b909117905550565b73ffffffffffffffffffffffffffffffffffffffff8216611a26576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610fcf565b610b0c6000838361255c565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611afb5781811015611aec576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610fcf565b611afb84848484036000611f45565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611b51576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610fcf565b73ffffffffffffffffffffffffffffffffffffffff8216611ba1576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610fcf565b610ff283838361255c565b73ffffffffffffffffffffffffffffffffffffffff8216611bfc576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610fcf565b610b0c8260008361255c565b600080611c1761010084613319565b9150611c256101008461332d565b9050915091565b81600003611c5d57611c5d7fe7689acd0000000000000000000000000000000000000000000000000000000061195c565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260096020908152604080832093871683529290522054828101818111611cbd57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b73ffffffffffffffffffffffffffffffffffffffff80871660009081526009602090815260408083209389168352929052208190558215611954578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb1f6f17e08b681eb55892fe69ba4845e50c39121076a3bf46524658ed3ab672d8360405161194b91815260200190565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015611dbd57507f000000000000000000000000000000000000000000000000000000000000000046145b15611de757507f000000000000000000000000000000000000000000000000000000000000000090565b610dc7604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b604080517f88d36e102c268282d5c35dff36d9147df9d6705e795adef3f96de5410268ca32602082015273ffffffffffffffffffffffffffffffffffffffff808a16928201929092528188166060820152818716608082015290851660a082015260c0810184905260e081018390526101008101829052600090611f2c9061012001604051602081830303815290604052805190602001206125bc565b98975050505050505050565b6000611252848484612604565b73ffffffffffffffffffffffffffffffffffffffff8416611f95576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610fcf565b73ffffffffffffffffffffffffffffffffffffffff8316611fe5576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610fcf565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602090815260408083209387168352929052208290558015611afb578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161207f91815260200190565b60405180910390a350505050565b6060610dc77f00000000000000000000000000000000000000000000000000000000000000006005612680565b6060610dc77f00000000000000000000000000000000000000000000000000000000000000006006612680565b8073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612143576121437fdc3342450000000000000000000000000000000000000000000000000000000061195c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635e73ab046040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121ab57600080fd5b505af11580156121bf573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff8416600090815260086020526040812080548492906121f8908490613246565b90915550506040517fdcd84d2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063dcd84d2490604401600060405180830381600087803b15801561228d57600080fd5b505af11580156122a1573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f61f8bad479fbbdab20bec8118a58080aca05e1760b3d057b0930cd45ed4c967885858560405161232d93929190928352602083019190915273ffffffffffffffffffffffffffffffffffffffff16604082015260600190565b60405180910390a35050505050565b8073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612398576123987fdc3342450000000000000000000000000000000000000000000000000000000061195c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635e73ab046040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561240057600080fd5b505af1158015612414573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff85166000908152600860205260408120805484929061244d908490613246565b90915550506040517fdcd84d2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063dcd84d2490604401600060405180830381600087803b1580156124e257600080fd5b505af11580156124f6573d6000803e3d6000fd5b5050604080518781526020810187905290810185905273ffffffffffffffffffffffffffffffffffffffff84811660608301528089169350891691507f8d4678ceae1195ff4bbbc38aa7367e85437638e32e46e0aaeabf9b6365fcabf99060800161194b565b600b5460ff1615612599576040517ffa035d1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156125b1576125a88361272b565b6125b18261272b565b610ff2838383612791565b6000610af96125c9611d57565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612613858561292f565b509092509050600081600381111561262d5761262d613341565b14801561266557508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612676575061267686868661297c565b9695505050505050565b606060ff831461269a5761269383612ac9565b9050610af9565b8180546126a6906131c4565b80601f01602080910402602001604051908101604052809291908181526020018280546126d2906131c4565b801561271f5780601f106126f45761010080835404028352916020019161271f565b820191906000526020600020905b81548152906001019060200180831161270257829003601f168201915b50505050509050610af9565b803b15610cea5773ffffffffffffffffffffffffffffffffffffffff81166000908152600c602052604090205460ff16610cea576040517f7d3bdde500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166127c95780600260008282546127be9190613246565b9091555061287b9050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561284f576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610fcf565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166128a4576002805482900390556128d0565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d5991815260200190565b600080600083516041036129695760208401516040850151606086015160001a61295b88828585612b08565b955095509550505050612975565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff1685856040516024016129ab929190613370565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e0000000000000000000000000000000000000000000000000000000017905251612a2c9190613389565b600060405180830381855afa9150503d8060008114612a67576040519150601f19603f3d011682016040523d82523d6000602084013e612a6c565b606091505b5091509150818015612a8057506020815110155b8015612676575080517f1626ba7e0000000000000000000000000000000000000000000000000000000090612abe90830160209081019084016131ab565b149695505050505050565b60606000612ad683612c02565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612b435750600091506003905082612bf8565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612b97573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612bee57506000925060019150829050612bf8565b9250600091508190505b9450945094915050565b600060ff8216601f811115610af9576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114612c6757600080fd5b919050565b600080600080600080600080610100898b031215612c8957600080fd5b88359750612c9960208a01612c43565b9650612ca760408a01612c43565b955060608901359450608089013560ff81168114612cc457600080fd5b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208284031215612cf857600080fd5b612d0182612c43565b9392505050565b60005b83811015612d23578181015183820152602001612d0b565b50506000910152565b60008151808452612d44816020860160208601612d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612d016020830184612d2c565b60008060408385031215612d9c57600080fd5b612da583612c43565b946020939093013593505050565b60008060008060808587031215612dc957600080fd5b612dd285612c43565b9350612de060208601612c43565b93969395505050506040820135916060013590565b60008060408385031215612e0857600080fd5b50508035926020909101359150565b600080600060608486031215612e2c57600080fd5b612e3584612c43565b9250612e4360208501612c43565b9150604084013590509250925092565b600060208284031215612e6557600080fd5b5035919050565b600080600060608486031215612e8157600080fd5b612e8a84612c43565b95602085013595506040909401359392505050565b600080600060608486031215612eb457600080fd5b83359250612e4360208501612c43565b60008083601f840112612ed657600080fd5b50813567ffffffffffffffff811115612eee57600080fd5b602083019150836020828501011115612f0657600080fd5b9250929050565b60008060008060008060008060e0898b031215612f2957600080fd5b612f3289612c43565b9750612f4060208a01612c43565b96506040890135955060608901359450608089013567ffffffffffffffff811115612f6a57600080fd5b612f768b828c01612ec4565b9095509350612f89905060a08a01612c43565b915060c089013590509295985092959890939650565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152612fdb60e084018a612d2c565b8381036040850152612fed818a612d2c565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b8181101561304c57835183529284019291840191600101613030565b50909c9b505050505050505050505050565b600080600080600080600060c0888a03121561307957600080fd5b61308288612c43565b965061309060208901612c43565b95506040880135945060608801359350608088013567ffffffffffffffff8111156130ba57600080fd5b6130c68a828b01612ec4565b989b979a5095989497959660a090950135949350505050565b600080600080608085870312156130f557600080fd5b8435935061310560208601612c43565b925061311360408601612c43565b9396929550929360600135925050565b600080600080600060a0868803121561313b57600080fd5b61314486612c43565b945061315260208701612c43565b93506040860135925061316760608701612c43565b949793965091946080013592915050565b6000806040838503121561318b57600080fd5b61319483612c43565b91506131a260208401612c43565b90509250929050565b6000602082840312156131bd57600080fd5b5051919050565b600181811c908216806131d857607f821691505b602082108103613211577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610af957610af9613217565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361328a5761328a613217565b5060010190565b6000602082840312156132a357600080fd5b81518015158114612d0157600080fd5b81810381811115610af957610af9613217565b600080604083850312156132d957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613328576133286132ea565b500490565b60008261333c5761333c6132ea565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8281526040602082015260006112526040830184612d2c565b6000825161339b818460208701612d08565b919091019291505056fea26469706673582212209f2e1fe1e259f993b0cca26d44a8a33be82cef7f4b473af345b60f26cace7f7164736f6c6343000815003360c0604052604051610dd8380380610dd88339810160408190526100229161005e565b6001600160a01b03928316608052911660a052600481905560035561009a565b80516001600160a01b038116811461005957600080fd5b919050565b60008060006060848603121561007357600080fd5b61007c84610042565b925061008a60208501610042565b9150604084015190509250925092565b60805160a051610d056100d3600039600081816102430152818161034f015261098201526000818160e901526108820152610d056000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80635d4271bd1161008c5780639c2c7bb4116100665780639c2c7bb414610225578063a7cc53f51461022e578063a999882614610236578063dc847fbb1461023e57600080fd5b80635d4271bd1461020a57806371ec61a91461021257806389b201be1461021b57600080fd5b80632d8d08de116100bd5780632d8d08de146101545780634291788e14610169578063491447a81461017c57600080fd5b806309751423146100e457806318160ddd146101355780631bd29b6c1461014b575b600080fd5b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013d610265565b60405190815260200161012c565b61013d60015481565b610167610162366004610bab565b610337565b005b610167610177366004610bc4565b61056a565b6005546101d69067ffffffffffffffff808216916801000000000000000081048216917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041684565b6040805167ffffffffffffffff9586168152938516602085015291841691830191909152909116606082015260800161012c565b61013d610a12565b61013d60025481565b61013d620f424081565b61013d60035481565b61013d610a2e565b61013d610b6f565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b6040805160808101825260055467ffffffffffffffff808216835268010000000000000000820481166020840181905270010000000000000000000000000000000083048216948401949094527801000000000000000000000000000000000000000000000000909104166060820152600154600080549093919084906102ec9083610c15565b9050600061030662093a806103018642610c15565b610b87565b905062093a806103168284610c28565b6103209190610c3f565b60005461032d9190610c7a565b9550505050505090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461039d5761039d7fceaef86500000000000000000000000000000000000000000000000000000000610ba1565b6040805160808101825260055467ffffffffffffffff8082168352680100000000000000008204811660208401527001000000000000000000000000000000008204811693830193909352780100000000000000000000000000000000000000000000000090049091166060820152610414610265565b6000819055506040518060800160405280826000015167ffffffffffffffff1681526020014267ffffffffffffffff168152602001826040015167ffffffffffffffff168152602001826060015167ffffffffffffffff1660001461047d57826060015161047f565b425b67ffffffffffffffff908116909152815160058054602085015160408601516060909601519385167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091176801000000000000000091851691909102176fffffffffffffffffffffffffffffffff167001000000000000000000000000000000009484169490940277ffffffffffffffffffffffffffffffffffffffffffffffff16939093177801000000000000000000000000000000000000000000000000919092160217905560018054839190600090610561908490610c7a565b90915550505050565b8160000361059b5761059b7f0513cd7a00000000000000000000000000000000000000000000000000000000610ba1565b6040805160808101825260055467ffffffffffffffff8082168352680100000000000000008204811660208401527001000000000000000000000000000000008204811693830184905278010000000000000000000000000000000000000000000000009091041660608201526003549091906000610618610a2e565b90508481111561064b5761064b7fcd9b468000000000000000000000000000000000000000000000000000000000610ba1565b600061065a620f424088610c28565b905060006106688389610c28565b90506000610674610b6f565b90506000600254826106869190610c15565b9050898110156106b9576106b97fbf4cce1500000000000000000000000000000000000000000000000000000000610ba1565b60006305f5e100826106cb828e610c28565b6106d59190610c3f565b6106df9088610c28565b6106e99190610c3f565b6106f39087610c7a565b90506107046305f5e1006002610c28565b876107136305f5e10084610c28565b61071d9190610c3f565b11156107315761072e876002610c28565b90505b6201518061073f8942610c15565b111561074e5760038690554297505b806004819055508a600260008282546107679190610c7a565b9250508190555060405180608001604052804267ffffffffffffffff1681526020018a6020015167ffffffffffffffff1681526020018967ffffffffffffffff1681526020018a6060015167ffffffffffffffff16815250600560008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b81526004016109099392919073ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b6020604051808303816000875af1158015610928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094c9190610c8d565b506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303816000875af11580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a049190610c8d565b505050505050505050505050565b6000600254610a1f610b6f565b610a299190610c15565b905090565b6040805160808101825260055467ffffffffffffffff8082168084526801000000000000000083048216602085015270010000000000000000000000000000000083048216948401949094527801000000000000000000000000000000000000000000000000909104166060820181905260009290808403610ab557600454935050505090565b81600003610ac1578091505b60045473d178525026bafc51d045a2e98b0c79a526d446de63ab45f3aa82610ae98642610c15565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401602060405180830381865af4158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b669190610cb6565b94505050505090565b6000620f4240610b7d610265565b610a299190610c3f565b6000818311610b965782610b98565b815b90505b92915050565b8060005260046000fd5b600060208284031215610bbd57600080fd5b5035919050565b60008060408385031215610bd757600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610b9b57610b9b610be6565b8082028115828204841417610b9b57610b9b610be6565b600082610c75577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820180821115610b9b57610b9b610be6565b600060208284031215610c9f57600080fd5b81518015158114610caf57600080fd5b9392505050565b600060208284031215610cc857600080fd5b505191905056fea26469706673582212209858761c4eafbd065c505fe5ea93474024024b4a81658f944765a79028a7283164736f6c63430008150033610120604052604051620020573803806200205783398101604081905262000027916200006c565b336080526001600160a01b0393841660a05291831660c052821660e0521661010052620000c9565b80516001600160a01b03811681146200006757600080fd5b919050565b600080600080608085870312156200008357600080fd5b6200008e856200004f565b93506200009e602086016200004f565b9250620000ae604086016200004f565b9150620000be606086016200004f565b905092959194509250565b60805160a05160c05160e05161010051611e3f62000218600039600081816101fd015281816102a001528181610b170152818161132e0152611593015260006101750152600081816101af01528181610442015281816106070152818161072b0152818161081101528181610cbd01528181610e8201528181610f8701526110720152600081816101290152818161035601528181610575015281816106ef0152818161085901528181610c0401528181610cef01528181610d82015281816110ae015281816113e40152818161149a0152818161164901526116ff0152600081816101d60152818161024d0152818161038d01528181610474015281816105070152818161083801528181610ac401528181610bcd01528181610df001528181610f4b015281816110cf0152818161141b015281816114630152818161168001526116c80152611e3f6000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063c1b9823311610076578063dc847fbb1161005b578063dc847fbb146101d1578063f40acc3d146101f8578063ffa6c0c21461021f57600080fd5b8063c1b9823314610197578063d8264920146101aa57600080fd5b80637b30ed2d116100a75780637b30ed2d1461011157806389a302711461012457806399d8fae31461017057600080fd5b80631d8839fc146100c357806357472246146100f0575b600080fd5b6100d66100d1366004611a9f565b610232565b604080519283526020830191909152015b60405180910390f35b6101036100fe366004611ac1565b6109ca565b6040519081526020016100e7565b61010361011f366004611a9f565b6109dd565b61014b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e7565b61014b7f000000000000000000000000000000000000000000000000000000000000000081565b6101036101a5366004611ac1565b610a9e565b61014b7f000000000000000000000000000000000000000000000000000000000000000081565b61014b7f000000000000000000000000000000000000000000000000000000000000000081565b61014b7f000000000000000000000000000000000000000000000000000000000000000081565b61010361022d366004611a9f565b610aaa565b6000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461029b5761029b7fceaef8650000000000000000000000000000000000000000000000000000000061126b565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032d9190611afd565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16106103cd57816103cf565b825b90506000670de0b6b3a76400006103fb6103e9828b611b7c565b61011f670de0b6b3a764000086611b7c565b6104059190611b93565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018b90529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af11580156104bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e39190611bce565b506040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000008160008151811061053957610539611c1f565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106105a7576105a7611c1f565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260006105d8838b611c4e565b6105e28a80611b7c565b6105ec9190611b93565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166338ed173985606461063a866063611b7c565b6106449190611b93565b8630426040518663ffffffff1660e01b8152600401610667959493929190611c61565b6000604051808303816000875af1158015610686573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106cc9190810190611cec565b90506000816001815181106106e3576106e3611c1f565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b815260040161078992919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020604051808303816000875af11580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190611bce565b506000826000815181106107e2576107e2611c1f565b60200260200101518d6107f59190611c4e565b905060008073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663e8e337007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086886064610887836063611b7c565b6108919190611b93565b606461089e8c6063611b7c565b6108a89190611b93565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815273ffffffffffffffffffffffffffffffffffffffff968716600482015295909416602486015260448501929092526064840152608483015260a48201523060c48201524260e4820152610104016060604051808303816000875af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109649190611dc8565b509092509050600061097e6109798385611b7c565b611275565b9050819d508e8110156109b4576109b47f6d2e02ad0000000000000000000000000000000000000000000000000000000061126b565b809c505050505050505050505050509250929050565b6000806109d683611327565b9392505050565b6000806109e983611275565b6109f4906001611df6565b90506000610a1f610a0885623cda29611b7c565b610a1587623cda20611b7c565b6109799190611df6565b90506000610a2f856107cd611b7c565b90506107ca610a3e8385611b7c565b821115610a6e57610a6e7f0c882fc00000000000000000000000000000000000000000000000000000000061126b565b60008183610a7c8688611b7c565b610a869190611c4e565b610a909190611b93565b955050505050505b92915050565b6000806109d68361158c565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610b1257610b127fceaef8650000000000000000000000000000000000000000000000000000000061126b565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba49190611afd565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1610610c445781610c46565b825b9050600069d3c21bcecceda1000000610c76610c62828a611b7c565b61011f69d3c21bcecceda100000086611b7c565b610c809190611b93565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018a90529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015610d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e9190611bce565b506040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110610db457610db4611c1f565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110610e2257610e22611c1f565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526000610e53838a611c4e565b610e5d8980611b7c565b610e679190611b93565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166338ed1739856064610eb5866063611b7c565b610ebf9190611b93565b8630426040518663ffffffff1660e01b8152600401610ee2959493929190611c61565b6000604051808303816000875af1158015610f01573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f479190810190611cec565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f000000000000000000000000000000000000000000000000000000000000000083600181518110610fb957610fb9611c1f565b60200260200101516040518363ffffffff1660e01b8152600401610fff92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020604051808303816000875af115801561101e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110429190611bce565b5060008160008151811061105857611058611c1f565b60200260200101518b61106b9190611c4e565b90506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e8e337007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000868860018151811061110257611102611c1f565b602002602001015160648960636111199190611b7c565b6111239190611b93565b60648b60018151811061113857611138611c1f565b6020026020010151606361114c9190611b7c565b6111569190611b93565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815273ffffffffffffffffffffffffffffffffffffffff968716600482015295909416602486015260448501929092526064840152608483015260a48201523060c48201524260e4820152610104016060604051808303816000875af11580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112129190611dc8565b50909250905060006112276109798484611b7c565b90508c81101561125a5761125a7f6d2e02ad0000000000000000000000000000000000000000000000000000000061126b565b9d9c50505050505050505050505050565b8060005260046000fd5b60b58171010000000000000000000000000000000000811061129c5760409190911b9060801c5b690100000000000000000081106112b85760209190911b9060401c5b6501000000000081106112d05760109190911b9060201c5b630100000081106112e65760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bb9190611afd565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161061145b578161145d565b825b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16106114da57826114dc565b835b9050600069d3c21bcecceda10000006114f8610c62828a611b7c565b6115029190611b93565b905060006115118284866117d5565b9050600061151f838a611c4e565b9050600061152d8486611df6565b9050600061153b8488611c4e565b9050600061154a848484611955565b9050848111611570576115606109798583611b7c565b9c9b505050505050505050505050565b600061157d868486611955565b905061125a6109798288611b7c565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156115fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116209190611afd565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16106116c057816116c2565b825b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161061173f5782611741565b835b90506000670de0b6b3a764000061176d61175b828a611b7c565b61011f670de0b6b3a764000087611b7c565b6117779190611b93565b905060006117868285856117d5565b90506000611794838a611c4e565b905060006117a28487611df6565b905060006117b08487611c4e565b905060006117bf848484611955565b9050848111611570576115606109798286611b7c565b600080841161186b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960448201527f4e5055545f414d4f554e5400000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60008311801561187b5750600082115b611907576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c60448201527f49515549444954590000000000000000000000000000000000000000000000006064820152608401611862565b6000611915856103e5611b7c565b905060006119238483611b7c565b9050600082611934876103e8611b7c565b61193e9190611df6565b905061194a8183611b93565b979650505050505050565b60008084116119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4160448201527f4d4f554e540000000000000000000000000000000000000000000000000000006064820152608401611862565b6000831180156119f65750600082115b611a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c60448201527f49515549444954590000000000000000000000000000000000000000000000006064820152608401611862565b82611a8d8386611b7c565b611a979190611b93565b949350505050565b60008060408385031215611ab257600080fd5b50508035926020909101359150565b600060208284031215611ad357600080fd5b5035919050565b80516dffffffffffffffffffffffffffff81168114611af857600080fd5b919050565b600080600060608486031215611b1257600080fd5b611b1b84611ada565b9250611b2960208501611ada565b9150604084015163ffffffff81168114611b4257600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610a9857610a98611b4d565b600082611bc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611be057600080fd5b815180151581146109d657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81810381811115610a9857610a98611b4d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611cbe57845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611c8c565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b60006020808385031215611cff57600080fd5b825167ffffffffffffffff80821115611d1757600080fd5b818501915085601f830112611d2b57600080fd5b815181811115611d3d57611d3d611bf0565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715611d8057611d80611bf0565b604052918252848201925083810185019188831115611d9e57600080fd5b938501935b82851015611dbc57845184529385019392850192611da3565b98975050505050505050565b600080600060608486031215611ddd57600080fd5b8351925060208401519150604084015190509250925092565b80820180821115610a9857610a98611b4d56fea2646970667358221220a36e919e7672bf7dbd94621ff11cfe60075a7bf11f63174c894676491eb8091c64736f6c634300081500330000000000000000000000006fa8c7a89b22bf3212392b778905b12f3dbaf5c40000000000000000000000008d01a258bc1adb728322499e5d84173ea971d665000000000000000000000000f4fbc617a5733eaaf9af08e1ab816b103388d8b6000000000000000000000000e010ec500720be9ef3f82129e7ed2ee1fb7955f2000000000000000000000000a3a32d3c9a5a593bc35d69bacbe2df5ea2c3cf5c0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f