0 txs
2.5k calls
constructor
constructor()
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
BOND_FEE
viewfunction BOND_FEE() view returns (uint16)
config
viewfunction config() view returns (tuple)
convertToAssets
viewfunction convertToAssets(uint256 _shares) view returns (uint256 _assets)
convertToAssetsPreFlashMint
viewfunction convertToAssetsPreFlashMint(uint256 _shares) view returns (uint256 _assets)
convertToShares
viewfunction convertToShares(uint256 _assets) view returns (uint256 _shares)
created
viewfunction created() view returns (uint256)
DEBOND_FEE
viewfunction DEBOND_FEE() view returns (uint16)
decimals
viewfunction decimals() view returns (uint8)
DEX_HANDLER
viewfunction DEX_HANDLER() view returns (address)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
fees
viewfunction fees() view returns (tuple)
FLASH_FEE_AMOUNT_DAI
viewfunction FLASH_FEE_AMOUNT_DAI() view returns (uint256)
getAllAssets
viewfunction getAllAssets() view returns (tuple[])
getInitialAmount
viewfunction getInitialAmount(address _sourceToken, uint256 _sourceAmount, address _targetToken) view returns (uint256)
indexTokens
viewfunction indexTokens(uint256) view returns (address token, uint256 weighting, uint256 basePriceUSDX96, address c1, uint256 q1)
indexType
viewfunction indexType() view returns (uint8)
initializeSelector
purefunction initializeSelector() pure returns (bytes4)
isAsset
viewfunction isAsset(address _token) view returns (bool)
isFlashMinting
viewfunction isFlashMinting() view returns (uint8)
lpRewardsToken
viewfunction lpRewardsToken() view returns (address)
lpStakingPool
viewfunction lpStakingPool() view returns (address)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
PAIRED_LP_TOKEN
viewfunction PAIRED_LP_TOKEN() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256 _totalManagedAssets)
totalAssets
viewfunction totalAssets(address _asset) view returns (uint256 _totalManagedAssets)
totalSupply
viewfunction totalSupply() view returns (uint256)
unlocked
viewfunction unlocked() view returns (uint8)
addLiquidityV2
nonpayablefunction addLiquidityV2(uint256 _pTKNLPTokens, uint256 _pairedLPTokens, uint256 _slippage, uint256 _deadline) returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
bond
nonpayablefunction bond(address _token, uint256 _amount, uint256 _amountMintMin)
burn
nonpayablefunction burn(uint256 _amount)
debond
nonpayablefunction debond(uint256 _amount, address[], uint8[])
flash
nonpayablefunction flash(address _recipient, address _token, uint256 _amount, bytes _data)
flashMint
nonpayablefunction flashMint(address _recipient, uint256 _amount, bytes _data)
initialize
nonpayablefunction initialize(string _name, string _symbol, bytes _baseConfig, bytes _immutables)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
processPreSwapFeesAndSwap
nonpayablefunction processPreSwapFeesAndSwap()
removeLiquidityV2
nonpayablefunction removeLiquidityV2(uint256 _lpTokens, uint256 _minIdxTokens, uint256 _minPairedLpToken, uint256 _deadline)
setLpStakingPool
nonpayablefunction setLpStakingPool(address _pool)
setPartner
nonpayablefunction setPartner(address _partner)
setPartnerFee
nonpayablefunction setPartnerFee(uint16 _fee)
setup
nonpayablefunction setup()
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
events
AddLiquidity
event AddLiquidity(address indexed wallet, uint256 amountTokens, uint256 amountDAI)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Bond
event Bond(address indexed wallet, address indexed token, uint256 amountTokensBonded, uint256 amountTokensMinted)
Create
event Create(address indexed newIdx, address indexed wallet)
Debond
event Debond(address indexed wallet, uint256 amountDebonded)
EIP712DomainChanged
event EIP712DomainChanged()
FlashLoan
event FlashLoan(address indexed executor, address indexed recipient, address token, uint256 amount)
FlashMint
event FlashMint(address indexed executor, address indexed recipient, uint256 amount)
Initialize
event Initialize(address indexed wallet, address v2Pool)
Initialized
event Initialized(uint64 version)
RemoveLiquidity
event RemoveLiquidity(address indexed wallet, uint256 amountLiquidity)
SetPartner
event SetPartner(address indexed wallet, address newPartner)
SetPartnerFee
event SetPartnerFee(address indexed wallet, uint16 newFee)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
errors
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
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)
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x608060405234801561001057600080fd5b507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b031660008115801561005b5750825b90506000826001600160401b031660011480156100775750303b155b905081158015610085575080155b156100a35760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156100d157845460ff60401b1916680100000000000000001785555b831561010557845460ff60401b19168555604051600181526000805160206161aa8339815191529060200160405180910390a15b505050505061011861011d60201b60201c565b6101bd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561016d5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101ba5780546001600160401b0319166001600160401b0390811782556040519081526000805160206161aa8339815191529060200160405180910390a15b50565b615fde806101cc6000396000f3fe6080604052600436106102b25760003560e01c8063822631d811610175578063ba0bba40116100dc578063d505accf11610095578063ee9c79da1161006f578063ee9c79da14610a37578063f3e0ffbf14610a57578063f682399614610a8d578063ff140ca614610aad57600080fd5b8063d505accf146109d7578063dd62ed3e146109f7578063e4b5495714610a1757600080fd5b8063ba0bba4014610904578063bb46302714610919578063bdbc91ab1461092e578063bdc8d0601461094e578063c6e6f5921461097e578063c87fa42a1461099e57600080fd5b80639af1d35a1161012e5780639af1d35a1461075c578063a16d596014610864578063a9059cbb14610884578063a9e9c8bc146108a4578063b08d0333146108c4578063b26735e6146108e457600080fd5b8063822631d8146106a757806384b0196e146106c7578063871071d6146106ef57806393b404bd1461071157806394cc699e1461072757806395d89b411461074757600080fd5b806341dc12531161021957806358f4dcc3116101d257806358f4dcc3146105545780635ca8861f146105745780636a5e26501461058e57806370a08231146105af57806379502c55146105cf5780637ecebe001461068757600080fd5b806341dc12531461043e57806342966c681461045e5780634a437f881461047e5780634f4ce61d146104d557806353f504471461050d5780635462c0e91461053457600080fd5b806328492b291161026b57806328492b291461038d5780632acada4d146103af578063313ce567146103d1578063325a19f1146103f35780633644e515146104095780633ea214651461041e57600080fd5b806301e1d114146102be57806306fdde03146102e657806307a2d13a14610308578063095ea7b31461032857806318160ddd1461035857806323b872dd1461036d57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610acc565b6040519081526020015b60405180910390f35b3480156102f257600080fd5b506102fb610b15565b6040516102dd9190615088565b34801561031457600080fd5b506102d361032336600461509b565b610bbe565b34801561033457600080fd5b506103486103433660046150c9565b610c14565b60405190151581526020016102dd565b34801561036457600080fd5b506019546102d3565b34801561037957600080fd5b506103486103883660046150f5565b610c2c565b34801561039957600080fd5b506103ad6103a8366004615136565b610c52565b005b3480156103bb57600080fd5b506103c4610cd5565b6040516102dd9190615153565b3480156103dd57600080fd5b5060125b60405160ff90911681526020016102dd565b3480156103ff57600080fd5b506102d360115481565b34801561041557600080fd5b506102d3610d6c565b34801561042a57600080fd5b506103ad61043936600461521e565b610d7b565b34801561044a57600080fd5b506103ad610459366004615289565b610fb0565b34801561046a57600080fd5b506103ad61047936600461509b565b61108a565b34801561048a57600080fd5b5061049e61049936600461509b565b6110fe565b604080516001600160a01b03968716815260208101959095528401929092529092166060820152608081019190915260a0016102dd565b3480156104e157600080fd5b506005546104f5906001600160a01b031681565b6040516001600160a01b0390911681526020016102dd565b34801561051957600080fd5b506010546105279060ff1681565b6040516102dd91906152bc565b34801561054057600080fd5b506103ad61054f3660046153c8565b61114b565b34801561056057600080fd5b506012546104f5906001600160a01b031681565b34801561058057600080fd5b50601d546103e19060ff1681565b34801561059a57600080fd5b506013546103e190600160a01b900460ff1681565b3480156105bb57600080fd5b506102d36105ca366004615136565b611294565b3480156105db57600080fd5b506106476040805160808101825260008082526020820181905291810182905260608101919091525060408051608081018252600c546001600160a01b03168152600d546020820152600e5460ff80821615159383019390935261010090049091161515606082015290565b6040516102dd919081516001600160a01b031681526020808301519082015260408083015115159082015260609182015115159181019190915260800190565b34801561069357600080fd5b506102d36106a2366004615136565b6112c7565b3480156106b357600080fd5b506002546104f5906001600160a01b031681565b3480156106d357600080fd5b506106dc6112d2565b6040516102dd9796959493929190615484565b3480156106fb57600080fd5b50604051635462c0e960e01b81526020016102dd565b34801561071d57600080fd5b506102d360045481565b34801561073357600080fd5b506013546104f5906001600160a01b031681565b34801561075357600080fd5b506102fb61137e565b34801561076857600080fd5b506108006040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c081018252600f5461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b900490911660a082015290565b6040516102dd9190600060c08201905061ffff835116825261ffff602084015116602083015261ffff604084015116604083015261ffff606084015116606083015261ffff608084015116608083015261ffff60a08401511660a083015292915050565b34801561087057600080fd5b506103ad61087f366004615136565b6113bd565b34801561089057600080fd5b5061034861089f3660046150c9565b611454565b3480156108b057600080fd5b506102d36108bf36600461551c565b611462565b3480156108d057600080fd5b506103ad6108df36600461554e565b611a18565b3480156108f057600080fd5b506102d36108ff36600461509b565b611a95565b34801561091057600080fd5b506103ad611aa6565b34801561092557600080fd5b506103ad611d14565b34801561093a57600080fd5b506103ad610949366004615583565b611e1b565b34801561095a57600080fd5b50600f54640100000000900461ffff165b60405161ffff90911681526020016102dd565b34801561098a57600080fd5b506102d361099936600461509b565b6122eb565b3480156109aa57600080fd5b506103486109b9366004615136565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156109e357600080fd5b506103ad6109f2366004615604565b612427565b348015610a0357600080fd5b506102d3610a12366004615675565b612580565b348015610a2357600080fd5b506102d3610a323660046156ae565b6125ca565b348015610a4357600080fd5b506103ad610a52366004615789565b61274a565b348015610a6357600080fd5b506102d3610a72366004615136565b6001600160a01b031660009081526018602052604090205490565b348015610a9957600080fd5b506103ad610aa836600461551c565b612a35565b348015610ab957600080fd5b50600f5462010000900461ffff1661096b565b6000601860006014600081548110610ae657610ae661585b565b600091825260208083206005909202909101546001600160a01b03168352820192909252604001902054919050565b60606000600080516020615f698339815191525b9050806003018054610b3a90615871565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6690615871565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b505050505091505090565b6000610c0e82601860006014600081548110610bdc57610bdc61585b565b600091825260208083206005909202909101546001600160a01b03168352820192909252604001902054601954612c73565b92915050565b600033610c22818585612d58565b5060019392505050565b600033610c3a858285612d6a565b610c45858585612dd1565b60019150505b9392505050565b6006546001600160a01b0316336001600160a01b0316148015610c7e57506013546001600160a01b0316155b610cb35760405162461bcd60e51b81526020600482015260016024820152604960f81b60448201526064015b60405180910390fd5b601380546001600160a01b0319166001600160a01b0392909216919091179055565b60606014805480602002602001604051908101604052809291908181526020016000905b82821015610d635760008481526020908190206040805160a0810182526005860290920180546001600160a01b0390811684526001808301548587015260028301549385019390935260038201541660608401526004015460808301529083529092019101610cf9565b50505050905090565b6000610d76612e30565b905090565b601354600160a01b900460ff16600114610da75760405162461bcd60e51b8152600401610caa906158ab565b6013805460ff60a01b19169055601d805460ff19166001179055601a805460ff60901b1916600160901b179055601480546018916000918290610dec57610dec61585b565b600091825260208083206005909202909101546001600160a01b03168352820192909252604001812054601b55601954601c55610e2b6103e8856158f2565b90508015610e395780610e3c565b60015b90506000610e4930611294565b9050610e558686612e3a565b604051633a62959560e21b81526001600160a01b0387169063e98a565490610e839087908790600401615914565b600060405180830381600087803b158015610e9d57600080fd5b505af1158015610eb1573d6000803e3d6000fd5b50505050818582610ec29190615943565b610ecc9190615943565b610ed530611294565b1015610f095760405162461bcd60e51b8152602060048201526003602482015262464d4160e81b6044820152606401610caa565b8160196000828254610f1b9190615956565b90915550610f34905030610f2f8488615943565b612e74565b6000601b819055601c55601a805460ff60901b19169055601d805460ff191690556040518581526001600160a01b0387169033907f3f332df59082df85f837e54e7adcd25276bb7f09b6b151ff017fcdb187d605b39060200160405180910390a350506013805460ff60a01b1916600160a01b17905550505050565b600c546001600160a01b0316336001600160a01b031614610ff75760405162461bcd60e51b81526020600482015260016024820152600560fc1b6044820152606401610caa565b600f5461ffff600160501b9091048116908216106110275760405162461bcd60e51b8152600401610caa906158ab565b600f805461ffff60501b1916600160501b61ffff8416021790553360405161ffff831681526001600160a01b0391909116907ffc0cb6bfc0e2e72ceb9097dc52c953b7d46c4f1d173de188581cba3fab46ad4a906020015b60405180910390a250565b601354600160a01b900460ff166001146110b65760405162461bcd60e51b8152600401610caa906158ab565b6013805460ff60a01b19169055601980548291906000906110d8908490615956565b909155506110e890503382612e74565b506013805460ff60a01b1916600160a01b179055565b6014818154811061110e57600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092169085565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156111905750825b90506000826001600160401b031660011480156111ac5750303b155b9050811580156111ba575080155b156111d85760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561120257845460ff60401b1916600160401b1785555b6000806000808a80602001905181019061121c9190615afe565b505093509350935093506112358d8d600087878f612eaa565b61123f8282613475565b50505050831561128957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b600080600080516020615f698339815191525b6001600160a01b0390931660009081526020939093525050604090205490565b6000610c0e82613875565b60006060808280808381600080516020615f8983398151915280549091501580156112ff57506001810154155b6113435760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610caa565b61134b61389e565b6113536138dd565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020615f6983398151915291610b3a90615871565b600c546001600160a01b0316336001600160a01b0316146114045760405162461bcd60e51b81526020600482015260016024820152600560fc1b6044820152606401610caa565b600c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907f4b74c6905f914d7a5f408442bc16a267312648abfc3909c994cc6c2643ae5c969060200161107f565b600033610c22818585612dd1565b601354600090600160a01b900460ff166001146114915760405162461bcd60e51b8152600401610caa906158ab565b6013805460ff60a01b19169055601a805460ff60881b1916905560006114b630611294565b6005546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115289190615bf4565b90506115353330896138f5565b60025461154d9030906001600160a01b031689612d58565b611565336005546001600160a01b0316903089613a33565b600254600554611582916001600160a01b03918216911688613a9a565b600254600554604051639f4f974560e01b81523060048201526001600160a01b0391821660248201526000929190911690639f4f974590604401602060405180830381865afa1580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd9190615c0d565b6001600160a01b03166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116749190615bf4565b6002546005549192506001600160a01b039081169163e8e33700913091168b8b6103e86116a18d82615956565b8f6116ac9190615c2a565b6116b691906158f2565b6103e86116c38e82615956565b8f6116ce9190615c2a565b6116d891906158f2565b3360405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015260a483015290911660c482015260e4810188905261010401600060405180830381600087803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b505060025460055461178293506001600160a01b039081169250166000613a9a565b8261178c30611294565b11156117b0576117b03033856117a130611294565b6117ab9190615956565b6138f5565b6005546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190615bf4565b11156118af576118af336005546040516370a0823160e01b815230600482015285916001600160a01b0316906370a0823190602401602060405180830381865afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118929190615bf4565b61189c9190615956565b6005546001600160a01b03169190613b24565b604080518981526020810189905233917f06239653922ac7bea6aa2b19dc486b9361821d37712eb796adfd38d81de278ca910160405180910390a2600254600554604051639f4f974560e01b81523060048201526001600160a01b03918216602482015283929190911690639f4f974590604401602060405180830381865afa158015611940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119649190615c0d565b6001600160a01b03166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156119b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119db9190615bf4565b6119e59190615956565b9350505050601a805460ff60881b1916600160881b1790556013805460ff60a01b1916600160a01b179055949350505050565b601354600160a01b900460ff16600114611a445760405162461bcd60e51b8152600401610caa906158ab565b6013805460ff60a01b19169055601a805460ff60881b19169055611a6a83838333613b55565b5050601a805460ff60881b1916600160881b179055506013805460ff60a01b1916600160a01b179055565b6000610c0e82601b54601c54612c73565b601a54600160981b900460ff1615611ae45760405162461bcd60e51b81526020600482015260016024820152604f60f81b6044820152606401610caa565b601a805460ff60981b1916600160981b179055600254600554604051639f4f974560e01b81523060048201526001600160a01b0391821660248201526000929190911690639f4f974590604401602060405180830381865afa158015611b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b729190615c0d565b90506001600160a01b038116611bfd5760025460055460405163c4f3e9d760e01b81523060048201526001600160a01b03918216602482015291169063c4f3e9d7906044016020604051808303816000875af1158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa9190615c0d565b90505b601354604051631e9b12ef60e01b81526001600160a01b03838116600483015290911690631e9b12ef90602401600060405180830381600087803b158015611c4457600080fd5b505af1158015611c58573d6000803e3d6000fd5b50505050601360009054906101000a90046001600160a01b03166001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cac57600080fd5b505af1158015611cc0573d6000803e3d6000fd5b5050600b80546001600160a01b0319166001600160a01b0385169081179091556040519081523392507fdc90fed0326ba91706deeac7eb34ac9f8b680734f9d782864dc29704d23bed6a915060200161107f565b601354600160a01b900460ff16600114611d405760405162461bcd60e51b8152600401610caa906158ab565b6013805460ff60a01b19811690915560408051633d665bf960e21b815290516001600160a01b039092169163f5996fe4916004808201926020929091908290030181865afa158015611d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dba9190615c0d565b6001600160a01b0316336001600160a01b031614611dfe5760405162461bcd60e51b81526020600482015260016024820152602960f91b6044820152606401610caa565b611e06613f32565b6013805460ff60a01b1916600160a01b179055565b601354600160a01b900460ff16600114611e475760405162461bcd60e51b8152600401610caa906158ab565b6013805460ff60a01b191690556001600160a01b03841660009081526015602052604090205460ff16611ea05760405162461bcd60e51b81526020600482015260016024820152600b60fb1b6044820152606401610caa565b60135460408051633d665bf960e21b815290516000926001600160a01b03169163f5996fe49160048083019260209291908290030181865afa158015611eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0e9190615c0d565b6009546012549192506000916001600160a01b03908116911614611fc6576009546005546001600160a01b03908116911614611fc057600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbb9190615c0d565b611fc8565b81611fc8565b305b9050611fe6336004546009546001600160a01b031691908490613a33565b6009546012546001600160a01b0391821691160361208a5760045460095461201b916001600160a01b03909116908490613a9a565b60095460048054604051634bd68e6760e11b81526001600160a01b03938416928101929092526024820152908316906397ad1cce90604401600060405180830381600087803b15801561206d57600080fd5b505af1158015612081573d6000803e3d6000fd5b505050506120fd565b6009546005546001600160a01b039182169116036120fd57604051633694313d60e01b8152600060048201526001600160a01b03831690633694313d90602401600060405180830381600087803b1580156120e457600080fd5b505af11580156120f8573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121689190615bf4565b905061217e6001600160a01b0388168988613b24565b604051633a62959560e21b81526001600160a01b0389169063e98a5654906121ac9088908890600401615914565b600060405180830381600087803b1580156121c657600080fd5b505af11580156121da573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b038a1691506370a0823190602401602060405180830381865afa158015612224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122489190615bf4565b101561227b5760405162461bcd60e51b8152602060048201526002602482015261464160f01b6044820152606401610caa565b6001600160a01b03881633604080516001600160a01b038b81168252602082018b905292909216917f5a9eeaf8949838813289046091e8ea8a9196a2265ac24841464a2d27026a8549910160405180910390a350506013805460ff60a01b1916600160a01b179055505050505050565b6000806122f86019541590565b9050600081612360576018600060146000815481106123195761231961585b565b600091825260208083206005909202909101546001600160a01b03168352820192909252604001902054612351600160601b86615c2a565b61235b91906158f2565b612366565b600160601b5b905081156123d05760146000815481106123825761238261585b565b90600052602060002090600502016004015461239c601290565b6123a790600a615d28565b6123b5600160601b87615c2a565b6123bf9190615c2a565b6123c991906158f2565b92506123f0565b600160601b816019546123e39190615c2a565b6123ed91906158f2565b92505b600f546127109061240b9062010000900461ffff1685615c2a565b61241591906158f2565b61241f9084615956565b949350505050565b8342111561244b5760405163313c898160e11b815260048101859052602401610caa565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886124b78c6001600160a01b031660009081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000612512826140de565b905060006125228287878761410b565b9050896001600160a01b0316816001600160a01b031614612569576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610caa565b6125748a8a8a612d58565b50505050505050505050565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6001600160a01b03808416600081815260166020908152604080832054948616835280832054815163313ce56760e01b81529151939560ff90811695911693909263313ce56792600480820193918290030181865afa158015612631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126559190615d37565b61266090600a615d28565b601483815481106126735761267361585b565b906000526020600020906005020160010154856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e79190615d37565b6126f290600a615d28565b601484815481106127055761270561585b565b906000526020600020906005020160010154886127229190615c2a565b61272c9190615c2a565b61273691906158f2565b61274091906158f2565b9695505050505050565b601354600160a01b900460ff166001146127765760405162461bcd60e51b8152600401610caa906158ab565b6013805460ff60a01b19169055601a805460ff60881b19169055600061279b84614139565b8061281b57506001546001600160a01b031663847987a4336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156127f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281b9190615d54565b61285957600f546127109061283c90640100000000900461ffff1682615d6f565b61284a9061ffff1686615c2a565b61285491906158f2565b61285b565b835b90506000601954600160601b836128729190615c2a565b61287c91906158f2565b9050612889333087612dd1565b816019600082825461289b9190615956565b909155506128ab90503083612e74565b6128bd6128b88387615956565b61415f565b60145460005b818110156129c9576000600160601b8460186000601486815481106128ea576128ea61585b565b600091825260208083206005909202909101546001600160a01b0316835282019290925260400190205461291e9190615c2a565b61292891906158f2565b905080156129c0578060186000601485815481106129485761294861585b565b600091825260208083206005909202909101546001600160a01b0316835282019290925260400181208054909190612981908490615956565b909155506129c0905033826014858154811061299f5761299f61585b565b60009182526020909120600590910201546001600160a01b03169190613b24565b506001016128c3565b506129d2613f32565b60405186815233907fe4bf69c2fff7ace5eed72842e9abf52af2218a3a78cb83d7824f999dbfd75e719060200160405180910390a25050601a805460ff60881b1916600160881b17905550506013805460ff60a01b1916600160a01b1790555050565b601354600160a01b900460ff16600114612a615760405162461bcd60e51b8152600401610caa906158ab565b6013805460ff60a01b19169055601a805460ff60881b191690558315612a875783612b01565b600b546001600160a01b03166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b019190615bf4565b935060008411612b385760405162461bcd60e51b8152602060048201526002602482015261131560f21b6044820152606401610caa565b612b5033600b546001600160a01b0316903087613a33565b600254600b54612b6d916001600160a01b03918216911686613a9a565b60025460055460408051635d5155ef60e11b81523060048201526001600160a01b0392831660248201526044810188905260648101879052608481018690523360a482015260c481018590529051919092169163baa2abde9160e480830192600092919082900301818387803b158015612be657600080fd5b505af1158015612bfa573d6000803e3d6000fd5b50505050612c053390565b6001600160a01b03167fdfdd120ded9b7afc0c23dd5310e93aaa3e1c3b9f75af9b805fab3030842439f285604051612c3f91815260200190565b60405180910390a25050601a805460ff60881b1916600160881b17905550506013805460ff60a01b1916600160a01b179055565b600080612c806019541590565b9050600081612ca75783612c9887600160301b615c2a565b612ca291906158f2565b612cad565b600160301b5b90508115612d0b57600160301b600160601b826014600081548110612cd457612cd461585b565b906000526020600020906005020160040154612cf09190615c2a565b612cfa91906158f2565b612d0491906158f2565b9250612d27565b600160301b612d1a8287615c2a565b612d2491906158f2565b92505b600f5461271090612d4490640100000000900461ffff1685615c2a565b612d4e91906158f2565b6127409084615956565b612d6583838360016141be565b505050565b6000612d768484612580565b9050600019811015612dcb5781811015612dbc57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610caa565b612dcb848484840360006141be565b50505050565b6001600160a01b038316612dfb57604051634b637e8f60e11b815260006004820152602401610caa565b6001600160a01b038216612e255760405163ec442f0560e01b815260006004820152602401610caa565b612d658383836142a5565b6000610d766144ac565b6001600160a01b038216612e645760405163ec442f0560e01b815260006004820152602401610caa565b612e70600083836142a5565b5050565b6001600160a01b038216612e9e57604051634b637e8f60e11b815260006004820152602401610caa565b612e70826000836142a5565b612eb2614520565b612ebc868661456b565b612ec58661457d565b60068054336001600160a01b03199091161790556013805460ff60a01b1916600160a01b179055601a805460ff60881b1916600160881b1790556064612f0e6127106014615c2a565b612f1891906158f2565b826060015161ffff161115612f2c57600080fd5b6064612f3b6127106014615c2a565b612f4591906158f2565b826080015161ffff161115612f5957600080fd5b6064612f686127106046615c2a565b612f7291906158f2565b825161ffff161115612f8357600080fd5b6064612f926127106063615c2a565b612f9c91906158f2565b826020015161ffff161115612fb057600080fd5b6064612fbf6127106063615c2a565b612fc991906158f2565b826040015161ffff161115612fdd57600080fd5b6064612fec6127106005615c2a565b612ff691906158f2565b8260a0015161ffff16111561300a57600080fd5b6010805485919060ff191660018381811115613028576130286152a6565b0217905550426011558151600f80546020808601516040808801516060808a015160808b015160a08c015161ffff908116600160501b0261ffff60501b19928216600160401b02929092166bffffffff000000000000000019938216600160301b0267ffff00000000000019968316640100000000029690961667ffffffff0000000019988316620100000263ffffffff19909b1692909c1691909117989098179590951698909817919091179690961693909317179092558551600c80546001600160a01b039092166001600160a01b031990921691909117905590850151600d81905590850151600e80549387015115156101000261ff00199215159290921661ffff199490941693909317179091551561314957826020015161314e565b624f1a005b600c600101819055506000806000806000806000878060200190518101906131769190615d89565b959c50939a5091985096509450925090506001600160a01b0387166131c35760405162461bcd60e51b81526020600482015260036024820152620504c560ec1b6044820152606401610caa565b601280546001600160a01b03199081166001600160a01b03898116919091179092556009805482168884161790556000805482168784161790556001805482168684161790556003805482168584161790556002805490911691831691821790556040805163456d019760e11b81529051638ada032e916004808201926020929091908290030181865afa15801561325f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132839190615c0d565b600780546001600160a01b0319166001600160a01b0392831617905560025460408051635088cc2b60e11b81529051919092169163a11198569160048083019260209291908290030181865afa1580156132e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133059190615c0d565b600880546001600160a01b03199081166001600160a01b0393841617909155600580549091168983161790556040805163313ce56760e01b815290519187169163313ce567916004808201926020929091908290030181865afa158015613370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133949190615d37565b61339f90600a615d28565b6133aa90600a615c2a565b6004908155600254604080516315ab88c960e31b815290516001600160a01b039092169263ad5c46489282820192602092908290030181865afa1580156133f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134199190615c0d565b600a80546001600160a01b0319166001600160a01b0392909216919091179055604051339030907f96b5b9b8a7193304150caccf9b80d150675fa3d6af57761d8d8ef1d6f9a1a90990600090a350505050505050505050505050565b80518251146134aa5760405162461bcd60e51b81526020600482015260016024820152602b60f91b6044820152606401610caa565b8151600090815b818160ff1610156137395760156000868360ff16815181106134d5576134d561585b565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161561352d5760405162461bcd60e51b81526020600482015260016024820152601160fa1b6044820152606401610caa565b6000848260ff16815181106135445761354461585b565b60200260200101511161357d5760405162461bcd60e51b81526020600482015260016024820152605760f81b6044820152606401610caa565b60146040518060a00160405280878460ff168151811061359f5761359f61585b565b60200260200101516001600160a01b03168152602001868460ff16815181106135ca576135ca61585b565b602090810291909101810151825260008282018190526040808401829052606093840182905285546001818101885596835291839020855160059093020180546001600160a01b039384166001600160a01b03199182161782559386015196810196909655840151600286015591830151600385018054919093169116179055608001516004909101558351849060ff831690811061366b5761366b61585b565b60200260200101518361367e9190615943565b92508060166000878460ff168151811061369a5761369a61585b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff160217905550600160156000878460ff16815181106136f5576136f561585b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061373181615e25565b9150506134b1565b5060008360008151811061374f5761374f61585b565b602002602001015183600160601b6137679190615c2a565b61377191906158f2565b905060005b8281101561386d57838682815181106137915761379161585b565b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fa9190615d37565b61380590600a615d28565b838784815181106138185761381861585b565b602002602001015161382a9190615c2a565b6138349190615c2a565b61383e91906158f2565b601482815481106138515761385161585b565b6000918252602090912060046005909202010155600101613776565b505050505050565b6000807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006112a7565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020615f8983398151915291610b3a90615871565b60606000600080516020615f89833981519152610b29565b600080516020615f698339815191526001600160a01b03841661393157818160020160008282546139269190615943565b909155506139a39050565b6001600160a01b038416600090815260208290526040902054828110156139845760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610caa565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166139c15760028101805483900390556139e0565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a2591815260200190565b60405180910390a350505050565b6040516001600160a01b038481166024830152838116604483015260648201839052612dcb9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506145ab565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0e9190615bf4565b9050612dcb8484613b1f8585615943565b61461c565b6040516001600160a01b03838116602483015260448201839052612d6591859182169063a9059cbb90606401613a68565b6001600160a01b03841660009081526015602052604090205460ff16613ba25760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401610caa565b6001600160a01b03841660009081526016602052604081205460ff1690613bc96019541590565b9050600081613c08576001600160a01b038716600090815260186020526040902054613bf9600160601b88615c2a565b613c0391906158f2565b613c0e565b600160601b5b905060008215613c795760148481548110613c2b57613c2b61585b565b906000526020600020906005020160040154613c45601290565b613c5090600a615d28565b613c5e600160601b8a615c2a565b613c689190615c2a565b613c7291906158f2565b9050613c99565b600160601b82601954613c8c9190615c2a565b613c9691906158f2565b90505b6000613ca4866146ac565b613cd257600f5461271090613cc39062010000900461ffff1684615c2a565b613ccd91906158f2565b613cd5565b60005b905086613ce28284615956565b1015613d145760405162461bcd60e51b81526020600482015260016024820152604d60f81b6044820152606401610caa565b8160196000828254613d269190615943565b90915550613d3f905086613d3a8385615956565b612e3a565b8015613d5857613d4f3082612e3a565b613d588161415f565b60145460005b81811015613ec757600086613dc157613dbc6018600060148581548110613d8757613d8761585b565b600091825260208083206005909202909101546001600160a01b0316835282019290925260400190205487600160601b614704565b613df8565b613df88c8c60148581548110613dd957613dd961585b565b60009182526020909120600590910201546001600160a01b03166125ca565b905060008111613e2f5760405162461bcd60e51b8152602060048201526002602482015261054360f41b6044820152606401610caa565b806018600060148581548110613e4757613e4761585b565b600091825260208083206005909202909101546001600160a01b0316835282019290925260400181208054909190613e80908490615943565b92505081905550613ebe60148381548110613e9d57613e9d61585b565b60009182526020909120600590910201546001600160a01b03168a83614744565b50600101613d5e565b50613ed061486b565b896001600160a01b0316876001600160a01b03167fad49529616fd9fe4b34e00ac3f98d5cc3531e1232a95f249113b23fdf13c7e858b86604051613f1e929190918252602082015260400190565b60405180910390a350505050505050505050565b601a54600160901b900460ff16600103613f4857565b601a54600090613f6a90601490600160401b90046001600160401b0316615e44565b6001600160401b03164211905080613f7f5750565b6000613f8a30611294565b905080600003613f98575050565b600b54600090613fb0906001600160a01b0316611294565b9050600046600114613fcd57613fc8610fa0836158f2565b613fd9565b613fd96103e8836158f2565b90506000613fe86064846158f2565b9050818410158015613ffa5750600083115b156140d757601a80546001600160401b034216600160401b0270ffffffffffffffffff00000000000000001990911617600160801b17905560008185116140415784614043565b815b600f54909150600090600160501b900461ffff161580159061406f5750600c546001600160a01b031615155b156140b557600f546127109061409090600160501b900461ffff1684615c2a565b61409a91906158f2565b600c549091506140b59030906001600160a01b0316836138f5565b6140c76140c28284615956565b6148f7565b5050601a805460ff60801b191690555b5050505050565b6000610c0e6140eb612e30565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061411d88888888614c5e565b92509250925061412d8282614d2d565b50909695505050505050565b60006064601954606361414c9190615c2a565b61415691906158f2565b90911015919050565b8015806141705750600f5461ffff16155b156141785750565b600f54600090612710906141909061ffff1684615c2a565b61419a91906158f2565b905080601960008282546141ae9190615956565b90915550612e7090503082612e74565b600080516020615f698339815191526001600160a01b0385166141f75760405163e602df0560e01b815260006004820152602401610caa565b6001600160a01b03841661422157604051634a1406b160e11b815260006004820152602401610caa565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156140d757836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161429691815260200190565b60405180910390a35050505050565b6001600160a01b03821660009081526017602052604090205460ff16156142f35760405162461bcd60e51b8152602060048201526002602482015261424b60f01b6044820152606401610caa565b6001600160a01b038316158061431057506001600160a01b038216155b1561432057612d658383836138f5565b600b546000906001600160a01b03858116911614801561434e57506007546001600160a01b03848116911614155b600b54601a549192506001600160a01b038581169116149060009060ff600160801b9091041615801561438d5750601a54600160881b900460ff166001145b1561449457600b546001600160a01b038781169116146143af576143af613f32565b8280156143c85750600f54600160301b900461ffff1615155b1561440557600f54612710906143e990600160301b900461ffff1686615c2a565b6143f391906158f2565b90506144008630836138f5565b614494565b81801561441e5750600f54600160401b900461ffff1615155b1561443f57600f54612710906143e990600160401b900461ffff1686615c2a565b8215801561444b575081155b80156144595750600e5460ff165b156144945761446a612710856158f2565b90508015801561447a5750600084115b6144845780614487565b60015b90506144948630836138f5565b61449d8161415f565b61386d86866117ab8488615956565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6144d7614de6565b6144df614e50565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661456957604051631afcd79f60e31b815260040160405180910390fd5b565b614573614520565b612e708282614e94565b614585614520565b6145a881604051806040016040528060018152602001603160f81b815250614ee5565b50565b600080602060008451602086016000885af1806145ce576040513d6000823e3d81fd5b50506000513d915081156145e65780600114156145f3565b6001600160a01b0384163b155b15612dcb57604051635274afe760e01b81526001600160a01b0385166004820152602401610caa565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261466d8482614f46565b612dcb576040516001600160a01b038481166024830152600060448301526146a291869182169063095ea7b390606401613a68565b612dcb84826145ab565b60006146b86019541590565b80610c0e5750600c546001600160a01b0383811691161480156146e45750601a546001600160401b0316155b8015610c0e57506011546146fb9062093a80615943565b42111592915050565b6000614711848484614f90565b905060008280614723576147236158c6565b8486091115610c4b57600019811061473a57600080fd5b6001019392505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561478b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147af9190615bf4565b90506147c66001600160a01b038516843085613a33565b6147d08282615943565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015614814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148389190615bf4565b1015612dcb5760405162461bcd60e51b81526020600482015260026024820152612a2b60f11b6044820152606401610caa565b601a54600160981b900460ff166148a85760405162461bcd60e51b81526020600482015260016024820152604960f81b6044820152606401610caa565b601a546001600160401b03161580156148d45750600c546001600160a01b0316336001600160a01b0316145b1561456957601a805467ffffffffffffffff1916426001600160401b0316179055565b60025461490f9030906001600160a01b031683612d58565b60135460408051633d665bf960e21b815290516000926001600160a01b03169163f5996fe49160048083019260209291908290030181865afa158015614959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061497d9190615c0d565b6005546040516370a0823160e01b81526001600160a01b038084166004830152929350600092909116906370a0823190602401602060405180830381865afa1580156149cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149f19190615bf4565b6002546005546040516383e4b89f60e01b81523060048201526001600160a01b0391821660248201526044810187905260006064820152858216608482015292935016906383e4b89f9060a4016020604051808303816000875af1158015614a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a819190615bf4565b506012546005546001600160a01b03918216911603614b8a576005546040516370a0823160e01b81526001600160a01b03848116600483015260009284929116906370a0823190602401602060405180830381865afa158015614ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b0c9190615bf4565b614b169190615956565b90508015612dcb57600554604051633dc60e8360e01b81526001600160a01b0391821660048201526024810183905290841690633dc60e8390604401600060405180830381600087803b158015614b6c57600080fd5b505af1158015614b80573d6000803e3d6000fd5b5050505050505050565b6005546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a0823190602401602060405180830381865afa158015614bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bf99190615bf4565b1115612d6557604051633694313d60e01b8152600060048201526001600160a01b03831690633694313d90602401600060405180830381600087803b158015614c4157600080fd5b505af1158015614c55573d6000803e3d6000fd5b50505050505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115614c995750600091506003905082614d23565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614ced573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614d1957506000925060019150829050614d23565b9250600091508190505b9450945094915050565b6000826003811115614d4157614d416152a6565b03614d4a575050565b6001826003811115614d5e57614d5e6152a6565b03614d7c5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614d9057614d906152a6565b03614db15760405163fce698f760e01b815260048101829052602401610caa565b6003826003811115614dc557614dc56152a6565b03612e70576040516335e2f38360e21b815260048101829052602401610caa565b6000600080516020615f8983398151915281614e0061389e565b805190915015614e1857805160209091012092915050565b81548015614e27579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020615f8983398151915281614e6a6138dd565b805190915015614e8257805160209091012092915050565b60018201548015614e27579392505050565b614e9c614520565b600080516020615f698339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03614ed68482615eaa565b5060048101612dcb8382615eaa565b614eed614520565b600080516020615f898339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102614f278482615eaa565b5060038101614f368382615eaa565b5060008082556001909101555050565b6000806000806020600086516020880160008a5af192503d9150600051905082801561274057508115614f7c5780600114612740565b50505050506001600160a01b03163b151590565b6000808060001985870985870292508281108382030391505080600003614fc95760008411614fbe57600080fd5b508290049050610c4b565b808411614fd557600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000815180845260005b818110156150685760208185018101518683018201520161504c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c4b6020830184615042565b6000602082840312156150ad57600080fd5b5035919050565b6001600160a01b03811681146145a857600080fd5b600080604083850312156150dc57600080fd5b82356150e7816150b4565b946020939093013593505050565b60008060006060848603121561510a57600080fd5b8335615115816150b4565b92506020840135615125816150b4565b929592945050506040919091013590565b60006020828403121561514857600080fd5b8135610c4b816150b4565b602080825282518282018190526000918401906040840190835b818110156151cb57835160018060a01b038151168452602081015160208501526040810151604085015260018060a01b036060820151166060850152608081015160808501525060a08301925060208401935060018101905061516d565b509095945050505050565b60008083601f8401126151e857600080fd5b5081356001600160401b038111156151ff57600080fd5b60208301915083602082850101111561521757600080fd5b9250929050565b6000806000806060858703121561523457600080fd5b843561523f816150b4565b93506020850135925060408501356001600160401b0381111561526157600080fd5b61526d878288016151d6565b95989497509550505050565b61ffff811681146145a857600080fd5b60006020828403121561529b57600080fd5b8135610c4b81615279565b634e487b7160e01b600052602160045260246000fd5b60208101600283106152de57634e487b7160e01b600052602160045260246000fd5b91905290565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561531c5761531c6152e4565b60405290565b604051601f8201601f191681016001600160401b038111828210171561534a5761534a6152e4565b604052919050565b600082601f83011261536357600080fd5b8135602083016000806001600160401b03841115615383576153836152e4565b50601f8301601f191660200161539881615322565b9150508281528583830111156153ad57600080fd5b82826020830137600092810160200192909252509392505050565b600080600080608085870312156153de57600080fd5b84356001600160401b038111156153f457600080fd5b61540087828801615352565b94505060208501356001600160401b0381111561541c57600080fd5b61542887828801615352565b93505060408501356001600160401b0381111561544457600080fd5b61545087828801615352565b92505060608501356001600160401b0381111561546c57600080fd5b61547887828801615352565b91505092959194509250565b60ff60f81b8816815260e0602082015260006154a360e0830189615042565b82810360408401526154b58189615042565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561550b5783518352602093840193909201916001016154ed565b50909b9a5050505050505050505050565b6000806000806080858703121561553257600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561556357600080fd5b833561556e816150b4565b95602085013595506040909401359392505050565b60008060008060006080868803121561559b57600080fd5b85356155a6816150b4565b945060208601356155b6816150b4565b93506040860135925060608601356001600160401b038111156155d857600080fd5b6155e4888289016151d6565b969995985093965092949392505050565b60ff811681146145a857600080fd5b600080600080600080600060e0888a03121561561f57600080fd5b873561562a816150b4565b9650602088013561563a816150b4565b955060408801359450606088013593506080880135615658816155f5565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561568857600080fd5b8235615693816150b4565b915060208301356156a3816150b4565b809150509250929050565b6000806000606084860312156156c357600080fd5b83356156ce816150b4565b92506020840135915060408401356156e5816150b4565b809150509250925092565b60006001600160401b03821115615709576157096152e4565b5060051b60200190565b600082601f83011261572457600080fd5b8135615737615732826156f0565b615322565b8082825260208201915060208360051b86010192508583111561575957600080fd5b602085015b8381101561577f578035615771816155f5565b83526020928301920161575e565b5095945050505050565b60008060006060848603121561579e57600080fd5b8335925060208401356001600160401b038111156157bb57600080fd5b8401601f810186136157cc57600080fd5b80356157da615732826156f0565b8082825260208201915060208360051b8501019250888311156157fc57600080fd5b6020840193505b82841015615827578335615816816150b4565b825260209384019390910190615803565b945050505060408401356001600160401b0381111561584557600080fd5b61585186828701615713565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061588557607f821691505b6020821081036158a557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600190820152601360fa1b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008261590f57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b80820180821115610c0e57610c0e6158dc565b81810381811115610c0e57610c0e6158dc565b8051801515811461597957600080fd5b919050565b600060c0828403121561599057600080fd5b60405160c081016001600160401b03811182821017156159b2576159b26152e4565b806040525080915082516159c581615279565b815260208301516159d581615279565b602082015260408301516159e881615279565b604082015260608301516159fb81615279565b60608201526080830151615a0e81615279565b608082015260a0830151615a2181615279565b60a0919091015292915050565b600082601f830112615a3f57600080fd5b8151615a4d615732826156f0565b8082825260208201915060208360051b860101925085831115615a6f57600080fd5b602085015b8381101561577f578051615a87816150b4565b835260209283019201615a74565b600082601f830112615aa657600080fd5b8151615ab4615732826156f0565b8082825260208201915060208360051b860101925085831115615ad657600080fd5b602085015b8381101561577f578051835260209283019201615adb565b8051615979816150b4565b6000806000806000808688036101c0811215615b1957600080fd5b6080811215615b2757600080fd5b50615b306152fa565b8751615b3b816150b4565b815260208881015190820152615b5360408901615969565b6040820152615b6460608901615969565b60608201529550615b78886080890161597e565b94506101408701516001600160401b03811115615b9457600080fd5b615ba089828a01615a2e565b9450506101608701516001600160401b03811115615bbd57600080fd5b615bc989828a01615a95565b935050615bd96101808801615af3565b9150615be86101a08801615969565b90509295509295509295565b600060208284031215615c0657600080fd5b5051919050565b600060208284031215615c1f57600080fd5b8151610c4b816150b4565b8082028115828204841417610c0e57610c0e6158dc565b6001815b6001841115615c7c57808504811115615c6057615c606158dc565b6001841615615c6e57908102905b60019390931c928002615c45565b935093915050565b600082615c9357506001610c0e565b81615ca057506000610c0e565b8160018114615cb65760028114615cc057615cdc565b6001915050610c0e565b60ff841115615cd157615cd16158dc565b50506001821b610c0e565b5060208310610133831016604e8410600b8410161715615cff575081810a610c0e565b615d0c6000198484615c41565b8060001904821115615d2057615d206158dc565b029392505050565b6000610c4b60ff841683615c84565b600060208284031215615d4957600080fd5b8151610c4b816155f5565b600060208284031215615d6657600080fd5b610c4b82615969565b61ffff8281168282160390811115610c0e57610c0e6158dc565b600080600080600080600060e0888a031215615da457600080fd5b8751615daf816150b4565b6020890151909750615dc0816150b4565b6040890151909650615dd1816150b4565b6060890151909550615de2816150b4565b6080890151909450615df3816150b4565b60a0890151909350615e04816150b4565b60c0890151909250615e15816150b4565b8091505092959891949750929550565b600060ff821660ff8103615e3b57615e3b6158dc565b60010192915050565b6001600160401b038181168382160190811115610c0e57610c0e6158dc565b601f821115612d6557806000526020600020601f840160051c81016020851015615e8a5750805b601f840160051c820191505b818110156140d75760008155600101615e96565b81516001600160401b03811115615ec357615ec36152e4565b615ed781615ed18454615871565b84615e63565b6020601f821160018114615f0b5760008315615ef35750848201515b600019600385901b1c1916600184901b1784556140d7565b600084815260208120601f198516915b82811015615f3b5787850151825560209485019460019092019101615f1b565b5084821015615f595786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100a26469706673582212201c83af546551ce09a0b751881180525d81f284aec1f6a05d723e9e16631423a564736f6c634300081c0033c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2