[ { "inputs": [ { "internalType": "contract IPool", "name": "pool", "type": "address" }, { "internalType": "contract IRewardsController", "name": "rewardsController", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "aToken", "type": "address" }, { "indexed": false, "internalType": "string", "name": "staticATokenName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "staticATokenSymbol", "type": "string" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "reward", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "startIndex", "type": "uint256" } ], "name": "RewardTokenRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INCENTIVES_CONTROLLER", "outputs": [ { "internalType": "contract IRewardsController", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "METADEPOSIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "METAWITHDRAWAL_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "POOL", "outputs": [ { "internalType": "contract IPool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STATIC__ATOKEN_LM_REVISION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "aToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address[]", "name": "rewards", "type": "address[]" } ], "name": "claimRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "onBehalfOf", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address[]", "name": "rewards", "type": "address[]" } ], "name": "claimRewardsOnBehalf", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "rewards", "type": "address[]" } ], "name": "claimRewardsToSelf", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "reward", "type": "address" } ], "name": "collectAndUpdateRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint16", "name": "referralCode", "type": "uint16" }, { "internalType": "bool", "name": "depositToAave", "type": "bool" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "reward", "type": "address" } ], "name": "getClaimableRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "reward", "type": "address" } ], "name": "getCurrentRewardsIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "reward", "type": "address" } ], "name": "getTotalClaimableRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "reward", "type": "address" } ], "name": "getUnclaimedRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAToken", "type": "address" }, { "internalType": "string", "name": "staticATokenName", "type": "string" }, { "internalType": "string", "name": "staticATokenSymbol", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "reward", "type": "address" } ], "name": "isRegisteredRewardToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint16", "name": "referralCode", "type": "uint16" }, { "internalType": "bool", "name": "depositToAave", "type": "bool" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "internalType": "struct IStaticATokenLM.PermitParams", "name": "permit", "type": "tuple" }, { "components": [ { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "internalType": "struct IStaticATokenLM.SignatureParams", "name": "sigParams", "type": "tuple" } ], "name": "metaDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "bool", "name": "withdrawFromAave", "type": "bool" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "components": [ { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "internalType": "struct IStaticATokenLM.SignatureParams", "name": "sigParams", "type": "tuple" } ], "name": "metaWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "bool", "name": "withdrawFromAave", "type": "bool" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "refreshRewardTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardTokens", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60c06040523480156200001157600080fd5b5060405162004a0438038062004a048339810160408190526200003491620001c5565b6040518060400160405280601381526020017214d510551250d7d7d8551bdad95b97d2535413606a1b8152506040518060400160405280601381526020017214d510551250d7d7d8551bdad95b97d2535413606a1b81525060126200009e620000ea60201b60201c565b6001620000ac8482620002a9565b506002620000bb8382620002a9565b506003805460ff191660ff9290921691909117905550506001600160a01b039182166080521660a05262000375565b600054610100900460ff1615620001575760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620001aa576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620001c257600080fd5b50565b60008060408385031215620001d957600080fd5b8251620001e681620001ac565b6020840151909250620001f981620001ac565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200022f57607f821691505b6020821081036200025057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002a457600081815260208120601f850160051c810160208610156200027f5750805b601f850160051c820191505b81811015620002a0578281556001016200028b565b5050505b505050565b81516001600160401b03811115620002c557620002c562000204565b620002dd81620002d684546200021a565b8462000256565b602080601f831160018114620003155760008415620002fc5750858301515b600019600386901b1c1916600185901b178555620002a0565b600085815260208120601f198616915b82811015620003465788860151825594840194600190910190840162000325565b5085821015620003655787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161460e620003f66000396000818161038f01528181610adf015281816110400152818161141e0152818161163d01528181611b1e0152611eb301526000818161055501528181610a8b01528181610bc10152818161121e015281816113f501528181611996015281816125ad0152612b96015261460e6000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c806386894b291161019d578063c2b18aa0116100e9578063dd62ed3e116100a2578063ee0fc6d31161007c578063ee0fc6d314610790578063ef8b30f7146106f3578063f56f4f0f146107a3578063fa714610146107b657600080fd5b8063dd62ed3e1461073f578063de9cee981461076a578063ea9be77c1461077d57600080fd5b8063c2b18aa0146106cb578063c63d75b6146106e0578063c6e6f592146106f3578063ce96cb7714610706578063d505accf14610719578063d905777e1461072c57600080fd5b8063a0c1f15e11610156578063b460af9411610130578063b460af941461067f578063ba08765214610692578063bcd17848146106a5578063be4a0a14146106b857600080fd5b8063a0c1f15e14610648578063a9059cbb14610659578063b3d7f6b91461066c57600080fd5b806386894b29146105975780638d948415146105e05780638daaf5aa14610607578063906571471461061a57806394bf804d1461062d57806395d89b411461064057600080fd5b8063313ce5671161025c57806360d8fdd8116102155780636fe0b5a5116101ef5780636fe0b5a51461050457806370a08231146105305780637535d246146105505780637ecebe001461057757600080fd5b806360d8fdd8146104b757806363210537146104ca5780636e553f65146104f157600080fd5b8063313ce567146104445780633644e5151461046357806338d52e0f1461046b578063402d267d1461047c5780634cdad50614610341578063602665571461048f57600080fd5b806318160ddd116102c9578063273cd895116102a3578063273cd895146103fa5780632c4e722e1461040d5780632f813b0d1461041557806330adf81f1461041d57600080fd5b806318160ddd146103c95780632026ffa3146103d257806323b872dd146103e757600080fd5b806301e1d1141461031157806306fdde031461032c57806307a2d13a14610341578063095ea7b3146103545780630a28a4771461037757806310d0ab221461038a575b600080fd5b6103196107be565b6040519081526020015b60405180910390f35b610334610831565b60405161032391906136bd565b61031961034f3660046136f0565b6108bf565b61036761036236600461371e565b6108d2565b6040519015158152602001610323565b6103196103853660046136f0565b61093e565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610323565b61031960045481565b6103e56103e0366004613853565b61094b565b005b6103676103f53660046138a3565b61095a565b610319610408366004613902565b610a47565b610319610a66565b6103e5610aba565b6103197f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6003546104519060ff1681565b60405160ff9091168152602001610323565b610319610b90565b6009546001600160a01b03166103b1565b61031961048a366004613955565b610b9a565b6104a261049d366004613984565b610d6d565b60408051928352602083019190915201610323565b6103196104c5366004613955565b610fbe565b6103197f2a83c73b9e01ec0a1b95ff05940d809179668cc004230412d7047ffac3846ce781565b6103196104ff3660046139fd565b611131565b610367610512366004613955565b6001600160a01b03166000908152600b602052604090205460ff1690565b61031961053e366004613955565b60056020526000908152604090205481565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b610319610585366004613955565b60076020526000908152604090205481565b6103196105a5366004613a2d565b6001600160a01b039182166000908152600c60209081526040808320939094168252919091522054600160801b90046001600160801b031690565b6103197f406ef09971b1bfa50a48ce277d3302602d78c94d58a376e8953b590702de7b3181565b6103e5610615366004613a5b565b61114e565b6103e5610628366004613ad9565b61115c565b61031961063b3660046139fd565b6114e8565b6103346114fb565b6008546001600160a01b03166103b1565b61036761066736600461371e565b611508565b61031961067a3660046136f0565b611579565b61031961068d366004613b5c565b611586565b6103196106a0366004613b5c565b6115a2565b6103196106b3366004613955565b6115be565b6104a26106c6366004613b9e565b6116c6565b6106d36116e4565b6040516103239190613c1a565b6103196106ee366004613955565b611746565b6103196107013660046136f0565b611773565b610319610714366004613955565b611780565b6103e5610727366004613c3c565b611799565b61031961073a366004613955565b61196b565b61031961074d366004613a2d565b600660209081526000928352604080842090915290825290205481565b610319610778366004613955565b611ad9565b61031961078b366004613cad565b611b88565b6103e561079e366004613d4c565b611e82565b6103196107b1366004613a2d565b611f7c565b610319600281565b6008546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a08231906024015b602060405180830381865afa158015610808573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082c9190613dae565b905090565b6001805461083e90613dc7565b80601f016020809104026020016040519081016040528092919081815260200182805461086a90613dc7565b80156108b75780601f1061088c576101008083540402835291602001916108b7565b820191906000526020600020905b81548152906001019060200180831161089a57829003601f168201915b505050505081565b60006108cc826001611fab565b92915050565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061092d9086815260200190565b60405180910390a350600192915050565b60006108cc826000611ff0565b61095633838361202e565b5050565b600061096784848461230d565b6001600160a01b038416600090815260066020908152604080832033845290915290205460001981146109c35761099e8382613e11565b6001600160a01b03861660009081526006602090815260408083203384529091529020555b6001600160a01b038516600090815260056020526040812080548592906109eb908490613e11565b90915550506001600160a01b03808516600081815260056020526040908190208054870190555190918716906000805160206145b983398151915290610a349087815260200190565b60405180910390a3506001949350505050565b600080610a59338660008988886123b9565b509150505b949350505050565b60095460405163d15e005360e01b81526001600160a01b0391821660048201526000917f0000000000000000000000000000000000000000000000000000000000000000169063d15e0053906024016107eb565b600854604051636657732f60e01b81526001600160a01b0391821660048201526000917f00000000000000000000000000000000000000000000000000000000000000001690636657732f90602401600060405180830381865afa158015610b26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b4e9190810190613e34565b905060005b815181101561095657610b7e828281518110610b7157610b71613ec3565b6020026020010151612695565b80610b8881613ed9565b915050610b53565b600061082c6127b2565b6009546040516335ea6a7560e01b81526001600160a01b03918216600482015260009182917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101e060405180830381865afa158015610c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2f9190613f6b565b805151909150600160381b161580610c4e57508051516001603c1b1615155b80610c6457508051516702000000000000001615155b15610c725750600092915050565b80515160009060301c60ff16610c8990600a614172565b82515160741c640fffffffff16610ca0919061417e565b905080600003610cb557506000199392505050565b6000610d49610cc38461284c565b8461018001516001600160801b03168561010001516001600160a01b031663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d399190613dae565b610d439190614195565b906128a8565b9050818111610d6157610d5c8183613e11565b610d64565b60005b95945050505050565b6040805180820190915260018152603160f81b602082015260009081906001600160a01b038a16610dba5760405162461bcd60e51b8152600401610db191906136bd565b60405180910390fd5b506040805180820190915260018152601960f91b602082015242851015610df45760405162461bcd60e51b8152600401610db191906136bd565b506001600160a01b03891660009081526007602052604081205490610e17610b90565b604080517f406ef09971b1bfa50a48ce277d3302602d78c94d58a376e8953b590702de7b3160208201526001600160a01b03808f1692820192909252908c166060820152608081018b905260a081018a905288151560c082015260e0810184905261010081018890526101200160405160208183030381529060405280519060200120604051602001610eab9291906141a8565b60408051601f1981840301815291815281516020928301206001600160a01b038e16600090815260078452919091206001808601909155909250908290610ef4908801886141c3565b604080516000815260208181018084529490945260ff9092168282015291880135606082015290870135608082015260a0016020604051602081039080840390855afa158015610f48573d6000803e3d6000fd5b505050602060405103516001600160a01b03168b6001600160a01b031614604051806040016040528060018152602001603360f81b81525090610f9e5760405162461bcd60e51b8152600401610db191906136bd565b5050610fad8a8a8a8a8a6128fa565b925092505097509795505050505050565b60006001600160a01b038216610fd657506000919050565b60408051600180825281830190925260009160208083019080368337505060085482519293506001600160a01b03169183915060009061101857611018613ec3565b6001600160a01b0392831660209182029290920101526040516370674ab960e01b81526000917f000000000000000000000000000000000000000000000000000000000000000016906370674ab990611079908590309089906004016141e0565b602060405180830381865afa158015611096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ba9190613dae565b6040516370a0823160e01b815230600482015290915081906001600160a01b038616906370a0823190602401602060405180830381865afa158015611103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111279190613dae565b610a5e9190614195565b6000806111453384600087600060016123b9565b50949350505050565b61115933338361202e565b50565b600054610100900460ff161580801561117c5750600054600160ff909116105b806111965750303b158015611196575060005460ff166001145b6111f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610db1565b6000805460ff19166001179055801561121c576000805461ff0019166101001790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190614213565b6001600160a01b0316146112bb57600080fd5b600880546001600160a01b0319166001600160a01b03881617905560016112e3858783614276565b5060026112f1838583614276565b50856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113549190614337565b600360006101000a81548160ff021916908360ff160217905550856001600160a01b031663b16a19de6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d09190614213565b600980546001600160a01b0319166001600160a01b0392909216918217905561141c907f0000000000000000000000000000000000000000000000000000000000000000600019612c2f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161561145357611453610aba565b856001600160a01b03167f82dfd53401a55bb491abcb3e7a97c99da1ed7eaffd89721d3e96e8e8ad4a692d86868686604051611492949392919061437d565b60405180910390a280156114e0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b600080610d6433848660008060016123b9565b6002805461083e90613dc7565b600061151533848461230d565b3360009081526005602052604081208054849290611534908490613e11565b90915550506001600160a01b038316600081815260056020526040908190208054850190555133906000805160206145b98339815191529061092d9086815260200190565b60006108cc826000611fab565b600080611598838560008860016128fa565b5095945050505050565b6000806115b4838587600060016128fa565b9695505050505050565b60006001600160a01b0382166115d657506000919050565b60408051600180825281830190925260009160208083019080368337505060085482519293506001600160a01b03169183915060009061161857611618613ec3565b6001600160a01b0392831660209182029290920101526040516308d8c03760e21b81527f00000000000000000000000000000000000000000000000000000000000000009091169063236300dc9061167c90849060001990309089906004016143a4565b6020604051808303816000875af115801561169b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bf9190613dae565b9392505050565b6000806116d78486886000876128fa565b9150915094509492505050565b6060600a80548060200260200160405190810160405280929190818152602001828054801561173c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161171e575b5050505050905090565b6000806117536000610b9a565b90506000198103611768575060001992915050565b6116bf816001611ff0565b60006108cc826001611ff0565b60008061178c8361196b565b90506116bf816001611fab565b428410156117e95760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610db1565b60006118ae6117f6610b90565b6001600160a01b038a811660008181526007602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091206118909291610100016141a8565b60405160208183030381529060405280519060200120858585612ced565b9050876001600160a01b0316816001600160a01b0316146119025760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610db1565b6001600160a01b0390811660009081526006602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6009546040516335ea6a7560e01b81526001600160a01b0391821660048201819052600092909183917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a029190613f6b565b805151909150600160381b161580611a2157508051516001603c1b1615155b15611a30575060009392505050565b6101008101516040516370a0823160e01b81526001600160a01b039182166004820152600091611aaf91908516906370a0823190602401602060405180830381865afa158015611a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa89190613dae565b6001611ff0565b6001600160a01b03861660009081526005602052604090205490915080821015610d6457816115b4565b60006001600160a01b038216611af157506000919050565b60085460405163886fe70b60e01b81526001600160a01b03918216600482015283821660248201526000917f0000000000000000000000000000000000000000000000000000000000000000169063886fe70b906044016040805180830381865afa158015611b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5e91906143dd565b6040805180820190915260018152600d60fa1b60208201526000906001600160a01b038a16611bca5760405162461bcd60e51b8152600401610db191906136bd565b506040805180820190915260018152601960f91b602082015242851015611c045760405162461bcd60e51b8152600401610db191906136bd565b506001600160a01b03891660009081526007602052604081205490611c27610b90565b7f2a83c73b9e01ec0a1b95ff05940d809179668cc004230412d7047ffac3846ce78c8c8c8c8c888d8d604051602001611c6899989796959493929190614401565b60405160208183030381529060405280519060200120604051602001611c8f9291906141a8565b60408051601f1981840301815291815281516020928301206001600160a01b038e16600090815260078452919091206001808601909155909250908290611cd8908701876141c3565b604080516000815260208181018084529490945260ff9092168282015291870135606082015290860135608082015260a0016020604051602081039080840390855afa158015611d2c573d6000803e3d6000fd5b505050602060405103516001600160a01b03168b6001600160a01b031614604051806040016040528060018152602001603360f81b81525090611d825760405162461bcd60e51b8152600401610db191906136bd565b5050606084013515611e615785611da4576008546001600160a01b0316611db1565b6009546001600160a01b03165b6001600160a01b031663d505accf8b3060408801356060890135611ddb60a08b0160808c016141c3565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501526044840191909152606483015260ff16608482015260a087013560a482015260c087013560c482015260e401600060405180830381600087803b158015611e4e57600080fd5b505af1925050508015611e5f575060015b505b6000611e728b8b60008c8c8c6123b9565b509b9a5050505050505050505050565b336001600160a01b0384161480611f335750604051631d36517b60e21b81526001600160a01b0384811660048301527f000000000000000000000000000000000000000000000000000000000000000016906374d945ec90602401602060405180830381865afa158015611efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1e9190614213565b6001600160a01b0316336001600160a01b0316145b604051806040016040528060018152602001601b60f91b81525090611f6b5760405162461bcd60e51b8152600401610db191906136bd565b50611f7783838361202e565b505050565b6001600160a01b0382166000908152600560205260408120546116bf9084908490611fa682611ad9565b612d1b565b600080826001811115611fc057611fc06144c2565b03611fde57611fd7611fd0610a66565b84906128a8565b90506108cc565b6116bf611fe9610a66565b8490612e55565b600080826001811115612005576120056144c2565b0361201c57611fd7612015610a66565b8490612e86565b6116bf612027610a66565b8490612ea2565b60005b81518110156123075760006001600160a01b031682828151811061205757612057613ec3565b60200260200101516001600160a01b031603156122f557600061209283838151811061208557612085613ec3565b6020026020010151611ad9565b6001600160a01b0386166000908152600560205260408120548551929350916120d89088908790879081106120c9576120c9613ec3565b60200260200101518486612d1b565b905060008585815181106120ee576120ee613ec3565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561213e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121629190613dae565b905060008183111561219d5761219087878151811061218357612183613ec3565b60200260200101516115be565b61219a9083614195565b91505b818311156121b5576121af8284613e11565b90508192505b82156122ef576121c481612ebb565b6001600160a01b038a166000908152600c6020526040812089519091908a908a9081106121f3576121f3613ec3565b6020908102919091018101516001600160a01b0316825281019190915260400160002080546001600160801b03928316600160801b02921691909117905561223a85612ebb565b6001600160a01b038a166000908152600c6020526040812089519091908a908a90811061226957612269613ec3565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160006101000a8154816001600160801b0302191690836001600160801b031602179055506122ef88848989815181106122cf576122cf613ec3565b60200260200101516001600160a01b0316612f289092919063ffffffff16565b50505050505b806122ff81613ed9565b915050612031565b50505050565b60005b600a54811015612307576000600a828154811061232f5761232f613ec3565b60009182526020822001546001600160a01b0316915061234e82611ad9565b90506001600160a01b0386161561236a5761236a868284612f59565b6001600160a01b038516158015906123945750846001600160a01b0316866001600160a01b031614155b156123a4576123a4858284612f59565b505080806123b190613ed9565b915050612310565b6040805180820190915260018152603560f81b602082015260009081906001600160a01b0388166123fd5760405162461bcd60e51b8152600401610db191906136bd565b50851580612409575084155b604051806040016040528060018152602001603760f81b815250906124415760405162461bcd60e51b8152600401610db191906136bd565b50848680156124b85784156124a85761245989611746565b8111156124a85760405162461bcd60e51b815260206004820152601b60248201527f455243343632363a206d696e74206d6f7265207468616e206d617800000000006044820152606401610db1565b6124b181611579565b9150612522565b8415612516576124c789610b9a565b8211156125165760405162461bcd60e51b815260206004820152601e60248201527f455243343632363a206465706f736974206d6f7265207468616e206d617800006044820152606401610db1565b61251f82611773565b90505b6040805180820190915260018152600760fb1b6020820152816125585760405162461bcd60e51b8152600401610db191906136bd565b50841561260f576009546001600160a01b0316612577818c308661302b565b60405163e8eda9df60e01b81526001600160a01b0382811660048301526024820185905230604483015261ffff891660648301527f0000000000000000000000000000000000000000000000000000000000000000169063e8eda9df90608401600060405180830381600087803b1580156125f157600080fd5b505af1158015612605573d6000803e3d6000fd5b5050505050612627565b600854612627906001600160a01b03168b308561302b565b6126318982613064565b886001600160a01b03168a6001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7848460405161267f929190918252602082015260400190565b60405180910390a3999098509650505050505050565b6001600160a01b0381166000908152600b602052604090205460ff16156126b95750565b60006126c482611ad9565b600a8054600180820183556000929092527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038616179055604080518082019091529081529091506020810161272d836130ca565b6001600160f01b031690526001600160a01b0383166000818152600b6020908152604091829020845194909101516001600160f81b03166101000293151560ff169390931790925590517fa8f4dd7e60441ca288d902a295362002a0255a46560b24825821b36716d6fe5b906127a69084815260200190565b60405180910390a25050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516127e491906144d8565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60c08101516000904264ffffffffff821603612874575050602001516001600160801b031690565b6116bf83602001516001600160801b031661289c85604001516001600160801b031684613133565b90613170565b50919050565b60008215806128b5575081155b156128c2575060006108cc565b6b033b2e3c9fd0803ce80000006001816128dc858761417e565b6128e69190614195565b6128f09190613e11565b6116bf919061454e565b6040805180820190915260018152603560f81b602082015260009081906001600160a01b03871661293e5760405162461bcd60e51b8152600401610db191906136bd565b5084158061294a575083155b604051806040016040528060018152602001603760f81b815250906129825760405162461bcd60e51b8152600401610db191906136bd565b506040805180820190915260018152600760fb1b60208201528585036129bb5760405162461bcd60e51b8152600401610db191906136bd565b5083858015612a32578415612a22576129d38961196b565b811115612a225760405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606401610db1565b612a2b816108bf565b9150612a9c565b8415612a9057612a4189611780565b821115612a905760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610db1565b612a998261093e565b90505b336001600160a01b038a1614612b0a576001600160a01b03891660009081526006602090815260408083203384529091529020546000198114612b0857612ae38282613e11565b6001600160a01b038b1660009081526006602090815260408083203384529091529020555b505b612b1489826131b4565b60408051838152602081018390526001600160a01b03808c1692908b169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a48415612c0b57600954604051631a4ca37b60e21b81526001600160a01b0391821660048201526024810184905289821660448201527f0000000000000000000000000000000000000000000000000000000000000000909116906369328dec906064016020604051808303816000875af1158015612be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c059190613dae565b50612c22565b600854612c22906001600160a01b03168984612f28565b9890975095505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612c808482613222565b612307576040516001600160a01b03848116602483015260006044830152612ce391869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506132c5565b61230784826132c5565b600080600080612cff88888888613328565b925092509250612d0f82826133f7565b50909695505050505050565b6001600160a01b0383166000908152600b6020908152604080832081518083018352905460ff811615158083526101009091046001600160f81b03168285015282518084019093526001808452603960f81b94840194909452909214612d945760405162461bcd60e51b8152600401610db191906136bd565b506001600160a01b038087166000908152600c6020908152604080832093891683529281528282208351808501909452546001600160801b038082168552600160801b9091041690830152600354612df09060ff16600a614570565b9050612e318683600001516001600160801b0316600014612e1b5783516001600160801b0316612e21565b84602001515b6001600160f81b031687846134b0565b82602001516001600160801b0316612e499190614195565b98975050505050505050565b6000821580612e62575081155b15612e6f575060006108cc565b6b033b2e3c9fd0803ce80000006128f0838561417e565b6000816001816128dc6b033b2e3c9fd0803ce80000008761417e565b6000816128f06b033b2e3c9fd0803ce80000008561417e565b60006001600160801b03821115612f245760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401610db1565b5090565b6040516001600160a01b03838116602483015260448201839052611f7791859182169063a9059cbb90606401612cb1565b6001600160a01b0383166000908152600560205260409020548015612fcd57612f8c612f8785848487612d1b565b612ebb565b6001600160a01b038086166000908152600c6020908152604080832093871683529290522080546001600160801b03928316600160801b0292169190911790555b612fd683612ebb565b6001600160a01b039485166000908152600c60209081526040808320959097168252939093529390912080546fffffffffffffffffffffffffffffffff19166001600160801b03909416939093179092555050565b6040516001600160a01b0384811660248301528381166044830152606482018390526123079186918216906323b872dd90608401612cb1565b6130706000838361230d565b80600460008282546130829190614195565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481526000805160206145b983398151915291015b60405180910390a35050565b60006001600160f01b03821115612f245760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663430206269747360c81b6064820152608401610db1565b60008061314764ffffffffff841642613e11565b613151908561417e565b6301e1338090049050610a5e816b033b2e3c9fd0803ce8000000614195565b600081156b019d971e4fe8401e74000000198390048411151761319257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6131c08260008361230d565b6001600160a01b038216600090815260056020526040812080548392906131e8908490613e11565b90915550506004805482900390556040518181526000906001600160a01b038416906000805160206145b9833981519152906020016130be565b6000806000846001600160a01b03168460405161323f919061457f565b6000604051808303816000865af19150503d806000811461327c576040519150601f19603f3d011682016040523d82523d6000602084013e613281565b606091505b50915091508180156132ab5750805115806132ab5750808060200190518101906132ab919061459b565b8015610d645750505050506001600160a01b03163b151590565b60006132da6001600160a01b038416836134e1565b905080516000141580156132ff5750808060200190518101906132fd919061459b565b155b15611f7757604051635274afe760e01b81526001600160a01b0384166004820152602401610db1565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561336357506000915060039050826133ed565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156133b7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166133e3575060009250600191508290506133ed565b9250600091508190505b9450945094915050565b600082600381111561340b5761340b6144c2565b03613414575050565b6001826003811115613428576134286144c2565b036134465760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561345a5761345a6144c2565b0361347b5760405163fce698f760e01b815260048101829052602401610db1565b600382600381111561348f5761348f6144c2565b03610956576040516335e2f38360e21b815260048101829052602401610db1565b6000846000036134c257506000610a5e565b816134cd8585613e11565b6134d7908761417e565b610d64919061454e565b60606116bf838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506060824710156135815760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610db1565b600080866001600160a01b0316858760405161359d919061457f565b60006040518083038185875af1925050503d80600081146135da576040519150601f19603f3d011682016040523d82523d6000602084013e6135df565b606091505b50915091506135f0878383876135fb565b979650505050505050565b6060831561366a578251600003613663576001600160a01b0385163b6136635760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610db1565b5081610a5e565b610a5e838381511561367f5781518083602001fd5b8060405162461bcd60e51b8152600401610db191906136bd565b60005b838110156136b457818101518382015260200161369c565b50506000910152565b60208152600082518060208401526136dc816040850160208701613699565b601f01601f19169190910160400192915050565b60006020828403121561370257600080fd5b5035919050565b6001600160a01b038116811461115957600080fd5b6000806040838503121561373157600080fd5b823561373c81613709565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156137845761378461374a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156137b3576137b361374a565b604052919050565b600067ffffffffffffffff8211156137d5576137d561374a565b5060051b60200190565b600082601f8301126137f057600080fd5b81356020613805613800836137bb565b61378a565b82815260059290921b8401810191818101908684111561382457600080fd5b8286015b8481101561384857803561383b81613709565b8352918301918301613828565b509695505050505050565b6000806040838503121561386657600080fd5b823561387181613709565b9150602083013567ffffffffffffffff81111561388d57600080fd5b613899858286016137df565b9150509250929050565b6000806000606084860312156138b857600080fd5b83356138c381613709565b925060208401356138d381613709565b929592945050506040919091013590565b61ffff8116811461115957600080fd5b801515811461115957600080fd5b6000806000806080858703121561391857600080fd5b84359350602085013561392a81613709565b9250604085013561393a816138e4565b9150606085013561394a816138f4565b939692955090935050565b60006020828403121561396757600080fd5b81356116bf81613709565b6000606082840312156128a257600080fd5b6000806000806000806000610120888a0312156139a057600080fd5b87356139ab81613709565b965060208801356139bb81613709565b9550604088013594506060880135935060808801356139d9816138f4565b925060a088013591506139ef8960c08a01613972565b905092959891949750929550565b60008060408385031215613a1057600080fd5b823591506020830135613a2281613709565b809150509250929050565b60008060408385031215613a4057600080fd5b8235613a4b81613709565b91506020830135613a2281613709565b600060208284031215613a6d57600080fd5b813567ffffffffffffffff811115613a8457600080fd5b610a5e848285016137df565b60008083601f840112613aa257600080fd5b50813567ffffffffffffffff811115613aba57600080fd5b602083019150836020828501011115613ad257600080fd5b9250929050565b600080600080600060608688031215613af157600080fd5b8535613afc81613709565b9450602086013567ffffffffffffffff80821115613b1957600080fd5b613b2589838a01613a90565b90965094506040880135915080821115613b3e57600080fd5b50613b4b88828901613a90565b969995985093965092949392505050565b600080600060608486031215613b7157600080fd5b833592506020840135613b8381613709565b91506040840135613b9381613709565b809150509250925092565b60008060008060808587031215613bb457600080fd5b843593506020850135613bc681613709565b9250604085013561393a81613709565b600081518084526020808501945080840160005b83811015613c0f5781516001600160a01b031687529582019590820190600101613bea565b509495945050505050565b6020815260006116bf6020830184613bd6565b60ff8116811461115957600080fd5b600080600080600080600060e0888a031215613c5757600080fd5b8735613c6281613709565b96506020880135613c7281613709565b955060408801359450606088013593506080880135613c9081613c2d565b9699959850939692959460a0840135945060c09093013592915050565b600080600080600080600080888a03610200811215613ccb57600080fd5b8935613cd681613709565b985060208a0135613ce681613709565b975060408a0135965060608a0135613cfd816138e4565b955060808a0135613d0d816138f4565b945060a08a0135935060e060bf1982011215613d2857600080fd5b5060c089019150613d3d8a6101a08b01613972565b90509295985092959890939650565b600080600060608486031215613d6157600080fd5b8335613d6c81613709565b92506020840135613d7c81613709565b9150604084013567ffffffffffffffff811115613d9857600080fd5b613da4868287016137df565b9150509250925092565b600060208284031215613dc057600080fd5b5051919050565b600181811c90821680613ddb57607f821691505b6020821081036128a257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156108cc576108cc613dfb565b8051613e2f81613709565b919050565b60006020808385031215613e4757600080fd5b825167ffffffffffffffff811115613e5e57600080fd5b8301601f81018513613e6f57600080fd5b8051613e7d613800826137bb565b81815260059190911b82018301908381019087831115613e9c57600080fd5b928401925b828410156135f0578351613eb481613709565b82529284019290840190613ea1565b634e487b7160e01b600052603260045260246000fd5b600060018201613eeb57613eeb613dfb565b5060010190565b600060208284031215613f0457600080fd5b6040516020810181811067ffffffffffffffff82111715613f2757613f2761374a565b6040529151825250919050565b80516001600160801b0381168114613e2f57600080fd5b805164ffffffffff81168114613e2f57600080fd5b8051613e2f816138e4565b60006101e08284031215613f7e57600080fd5b613f86613760565b613f908484613ef2565b8152613f9e60208401613f34565b6020820152613faf60408401613f34565b6040820152613fc060608401613f34565b6060820152613fd160808401613f34565b6080820152613fe260a08401613f34565b60a0820152613ff360c08401613f4b565b60c082015261400460e08401613f60565b60e0820152610100614017818501613e24565b90820152610120614029848201613e24565b9082015261014061403b848201613e24565b9082015261016061404d848201613e24565b9082015261018061405f848201613f34565b908201526101a0614071848201613f34565b908201526101c0614083848201613f34565b908201529392505050565b600181815b808511156140c95781600019048211156140af576140af613dfb565b808516156140bc57918102915b93841c9390800290614093565b509250929050565b6000826140e0575060016108cc565b816140ed575060006108cc565b8160018114614103576002811461410d57614129565b60019150506108cc565b60ff84111561411e5761411e613dfb565b50506001821b6108cc565b5060208310610133831016604e8410600b841016171561414c575081810a6108cc565b614156838361408e565b806000190482111561416a5761416a613dfb565b029392505050565b60006116bf83836140d1565b80820281158282048414176108cc576108cc613dfb565b808201808211156108cc576108cc613dfb565b61190160f01b81526002810192909252602282015260420190565b6000602082840312156141d557600080fd5b81356116bf81613c2d565b6060815260006141f36060830186613bd6565b6001600160a01b0394851660208401529290931660409091015292915050565b60006020828403121561422557600080fd5b81516116bf81613709565b601f821115611f7757600081815260208120601f850160051c810160208610156142575750805b601f850160051c820191505b818110156114e057828155600101614263565b67ffffffffffffffff83111561428e5761428e61374a565b6142a28361429c8354613dc7565b83614230565b6000601f8411600181146142d657600085156142be5750838201355b600019600387901b1c1916600186901b178355614330565b600083815260209020601f19861690835b8281101561430757868501358255602094850194600190920191016142e7565b50868210156143245760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006020828403121561434957600080fd5b81516116bf81613c2d565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000614391604083018688614354565b82810360208401526135f0818587614354565b6080815260006143b76080830187613bd6565b6020830195909552506001600160a01b0392831660408201529116606090910152919050565b600080604083850312156143f057600080fd5b505080516020909101519092909150565b8981526001600160a01b03898116602083015288811660408301526060820188905261ffff8716608083015285151560a083015260c0820185905260e082018490526101e0820190833561445481613709565b8116610100840152602084013561446a81613709565b1661012083015260408301356101408301526060830135610160830152608083013561449581613c2d565b60ff1661018083015260a08301356101a083015260c0909201356101c09091015298975050505050505050565b634e487b7160e01b600052602160045260246000fd5b60008083546144e681613dc7565b600182811680156144fe576001811461451357614542565b60ff1984168752821515830287019450614542565b8760005260208060002060005b858110156145395781548a820152908401908201614520565b50505082870194505b50929695505050505050565b60008261456b57634e487b7160e01b600052601260045260246000fd5b500490565b60006116bf60ff8416836140d1565b60008251614591818460208701613699565b9190910192915050565b6000602082840312156145ad57600080fd5b81516116bf816138f456feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122071b66cd26e926306247d9d6beacd18c9a99865e022e4d2810d4a908c6005e80564736f6c63430008130033000000000000000000000000d3a4da66ec15a001466f324fa08037f3272bdbe8000000000000000000000000bc2fdc58e3e06d265b46e32771442b7f5098725b