[ { "inputs": [ { "internalType": "contract IERC20", "name": "underlyingAsset", "type": "address" }, { "internalType": "address", "name": "entryFeeAddress", "type": "address" }, { "internalType": "address", "name": "exitFeeAddress", "type": "address" }, { "internalType": "address", "name": "transferFeeAddress", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "CheckpointUnorderedInsertion", "type": "error" }, { "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": "uint256", "name": "increasedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "ERC20ExceededSafeSupply", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxDeposit", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxRedeem", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxWithdraw", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" }, { "internalType": "uint48", "name": "clock", "type": "uint48" } ], "name": "ERC5805FutureLookup", "type": "error" }, { "inputs": [], "name": "ERC6372InconsistentClock", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "FeeOutOfRange", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidExemptAddress", "type": "error" }, { "inputs": [], "name": "InvalidFeeRecipient", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [], "name": "NativeNotAllowed", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "RescueUnderlying", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "VotesExpiredSignature", "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": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousVotes", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newVotes", "type": "uint256" } ], "name": "DelegateVotesChanged", "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": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newEntryFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newExitFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTransferFee", "type": "uint256" } ], "name": "FeeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "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": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newEntryFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newExitFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newTransferFeeRecipient", "type": "address" } ], "name": "TreasuryUpdated", "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" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "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": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint48", "name": "_key", "type": "uint48" }, { "internalType": "uint208", "name": "_value", "type": "uint208" } ], "internalType": "struct Checkpoints.Checkpoint208", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clock", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "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": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "entryFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "entryFeeTreasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exitFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exitFeeTreasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "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": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [ { "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": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "rescueToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newEntryAddress", "type": "address" }, { "internalType": "address", "name": "newExitAddress", "type": "address" }, { "internalType": "address", "name": "newTransferAddress", "type": "address" } ], "name": "setFeeRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newEntryFee", "type": "uint256" }, { "internalType": "uint256", "name": "newExitFee", "type": "uint256" }, { "internalType": "uint256", "name": "newTransferFee", "type": "uint256" } ], "name": "setFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addressToChange", "type": "address" }, { "internalType": "bool", "name": "isExempt", "type": "bool" } ], "name": "setTransferFeeExempt", "outputs": [], "stateMutability": "nonpayable", "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": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "transferFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "transferFeeTreasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "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" }, { "stateMutability": "payable", "type": "receive" } ]
6101a060405261012c601055606460115560196012553480156200002257600080fd5b5060405162006fd938038062006fd98339818101604052810190620000489190620008d2565b336040518060400160405280600d81526020017f4b696d626f20436f6c6c65676500000000000000000000000000000000000000815250806040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250876040518060400160405280600d81526020017f4b696d626f20436f6c6c656765000000000000000000000000000000000000008152506040518060400160405280600681526020017f674b696d626f0000000000000000000000000000000000000000000000000000815250816003908162000134919062000bbe565b50806004908162000146919062000bbe565b5050506000806200015d836200051660201b60201c565b91509150816200016f57601262000171565b805b60ff1660a08160ff16815250508273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505050620001cb6005836200063060201b90919060201c565b6101608181525050620001e96006826200063060201b90919060201c565b610180818152505081805190602001206101208181525050808051906020012061014081815250504660e08181525050620002296200068860201b60201c565b60c081815250503073ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff1681525050505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620002dd5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620002d4919062000cb6565b60405180910390fd5b620002ee81620006e660201b60201c565b50600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200032957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200036357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200039d57600080fd5b82600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167fd323189f2ebee2cd300da230be53231602c71b15d8b281d56d3ec34e1645da94848484604051620005049392919062000cd3565b60405180910390a25050505062000fac565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1660405160240160405160208183030381529060405263313ce56760e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200058d919062000d89565b600060405180830381855afa9150503d8060008114620005ca576040519150601f19603f3d011682016040523d82523d6000602084013e620005cf565b606091505b5091509150818015620005e457506020815110155b15620006215760008180602001905181019062000602919062000dd3565b905060ff801681116200061f57600181945094505050506200062b565b505b6000809350935050505b915091565b600060208351101562000656576200064e83620007ac60201b60201c565b905062000682565b8262000668836200081960201b60201c565b600001908162000679919062000bbe565b5060ff60001b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61012051610140514630604051602001620006cb95949392919062000e31565b60405160208183030381529060405280519060200120905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080829050601f81511115620007fc57826040517f305a27a9000000000000000000000000000000000000000000000000000000008152600401620007f3919062000ef1565b60405180910390fd5b8051816200080a9062000f3c565b60001c1760001b915050919050565b6000819050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008558262000828565b9050919050565b6000620008698262000848565b9050919050565b6200087b816200085c565b81146200088757600080fd5b50565b6000815190506200089b8162000870565b92915050565b620008ac8162000848565b8114620008b857600080fd5b50565b600081519050620008cc81620008a1565b92915050565b60008060008060808587031215620008ef57620008ee62000823565b5b6000620008ff878288016200088a565b94505060206200091287828801620008bb565b93505060406200092587828801620008bb565b92505060606200093887828801620008bb565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009c657607f821691505b602082108103620009dc57620009db6200097e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a07565b62000a52868362000a07565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a9f62000a9962000a938462000a6a565b62000a74565b62000a6a565b9050919050565b6000819050919050565b62000abb8362000a7e565b62000ad362000aca8262000aa6565b84845462000a14565b825550505050565b600090565b62000aea62000adb565b62000af781848462000ab0565b505050565b5b8181101562000b1f5762000b1360008262000ae0565b60018101905062000afd565b5050565b601f82111562000b6e5762000b3881620009e2565b62000b4384620009f7565b8101602085101562000b53578190505b62000b6b62000b6285620009f7565b83018262000afc565b50505b505050565b600082821c905092915050565b600062000b936000198460080262000b73565b1980831691505092915050565b600062000bae838362000b80565b9150826002028217905092915050565b62000bc98262000944565b67ffffffffffffffff81111562000be55762000be46200094f565b5b62000bf18254620009ad565b62000bfe82828562000b23565b600060209050601f83116001811462000c36576000841562000c21578287015190505b62000c2d858262000ba0565b86555062000c9d565b601f19841662000c4686620009e2565b60005b8281101562000c705784890151825560018201915060208501945060208101905062000c49565b8683101562000c90578489015162000c8c601f89168262000b80565b8355505b6001600288020188555050505b505050505050565b62000cb08162000848565b82525050565b600060208201905062000ccd600083018462000ca5565b92915050565b600060608201905062000cea600083018662000ca5565b62000cf9602083018562000ca5565b62000d08604083018462000ca5565b949350505050565b600081519050919050565b600081905092915050565b60005b8381101562000d4657808201518184015260208101905062000d29565b60008484015250505050565b600062000d5f8262000d10565b62000d6b818562000d1b565b935062000d7d81856020860162000d26565b80840191505092915050565b600062000d97828462000d52565b915081905092915050565b62000dad8162000a6a565b811462000db957600080fd5b50565b60008151905062000dcd8162000da2565b92915050565b60006020828403121562000dec5762000deb62000823565b5b600062000dfc8482850162000dbc565b91505092915050565b6000819050919050565b62000e1a8162000e05565b82525050565b62000e2b8162000a6a565b82525050565b600060a08201905062000e48600083018862000e0f565b62000e57602083018762000e0f565b62000e66604083018662000e0f565b62000e75606083018562000e20565b62000e84608083018462000ca5565b9695505050505050565b600082825260208201905092915050565b6000601f19601f8301169050919050565b600062000ebd8262000944565b62000ec9818562000e8e565b935062000edb81856020860162000d26565b62000ee68162000e9f565b840191505092915050565b6000602082019050818103600083015262000f0d818462000eb0565b905092915050565b6000819050602082019050919050565b600062000f33825162000e05565b80915050919050565b600062000f498262000d10565b8262000f558462000f15565b905062000f628162000f25565b9250602082101562000fa55762000fa07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080262000a07565b831692505b5050919050565b60805160a05160c05160e0516101005161012051610140516101605161018051615fa7620010326000396000612acb01526000612a90015260006132b201526000613291015260006125080152600061255e01526000612587015260006124d6015260008181610de2015281816111340152818161374b01526139c30152615fa76000f3fe6080604052600436106103035760003560e01c80638da5cb5b11610190578063c6e6f592116100dc578063e0f0bd9b11610095578063ef8b30f71161006f578063ef8b30f714610d10578063f1127ed814610d4d578063f2fde38b14610d8a578063f8b4638b14610db35761033a565b8063e0f0bd9b14610c93578063e40b8ddd14610cbe578063e5711e8b14610ce75761033a565b8063c6e6f59214610b4d578063ce96cb7714610b8a578063cec10c1114610bc7578063d505accf14610bf0578063d905777e14610c19578063dd62ed3e14610c565761033a565b8063a9059cbb11610149578063b460af9411610123578063b460af9414610a6d578063ba08765214610aaa578063c3cda52014610ae7578063c63d75b614610b105761033a565b8063a9059cbb146109c8578063acb2ad6f14610a05578063b3d7f6b914610a305761033a565b80638da5cb5b146108905780638e539e8c146108bb57806391ddadf4146108f857806394bf804d1461092357806395d89b41146109605780639ab24eb01461098b5761033a565b80634bf5d7e91161024f5780636fcfff45116102085780637dfcabd9116101e25780637dfcabd9146107ce5780637ecebe00146107f757806384b0196e14610834578063861d4281146108655761033a565b80636fcfff451461073d57806370a082311461077a578063715018a6146107b75761033a565b80634bf5d7e9146106075780634cdad50614610632578063587cde1e1461066f5780635c19a95c146106ac5780636284ae41146106d55780636e553f65146107005761033a565b806318160ddd116102bc5780633644e515116102965780633644e5151461053757806338d52e0f146105625780633a46b1a81461058d578063402d267d146105ca5761033a565b806318160ddd146104a457806323b872dd146104cf578063313ce5671461050c5761033a565b806301e1d1141461036c57806306fdde0314610397578063072ea61c146103c257806307a2d13a146103ed578063095ea7b31461042a5780630a28a477146104675761033a565b3661033a576040517f41e55b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f41e55b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34801561037857600080fd5b50610381610dde565b60405161038e9190614cca565b60405180910390f35b3480156103a357600080fd5b506103ac610e7f565b6040516103b99190614d75565b60405180910390f35b3480156103ce57600080fd5b506103d7610f11565b6040516103e49190614cca565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190614dc8565b610f17565b6040516104219190614cca565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190614e53565b610f2b565b60405161045e9190614eae565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190614dc8565b610f4e565b60405161049b9190614cca565b60405180910390f35b3480156104b057600080fd5b506104b9610f80565b6040516104c69190614cca565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190614ec9565b610fa4565b6040516105039190614eae565b60405180910390f35b34801561051857600080fd5b50610521611112565b60405161052e9190614f38565b60405180910390f35b34801561054357600080fd5b5061054c611121565b6040516105599190614f6c565b60405180910390f35b34801561056e57600080fd5b50610577611130565b6040516105849190614f96565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614e53565b611158565b6040516105c19190614cca565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190614fb1565b611231565b6040516105fe9190614cca565b60405180910390f35b34801561061357600080fd5b5061061c61125b565b6040516106299190614d75565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190614dc8565b6112ef565b6040516106669190614cca565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190614fb1565b611321565b6040516106a39190614f96565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce9190614fb1565b61138a565b005b3480156106e157600080fd5b506106ea6113a4565b6040516106f79190614cca565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190614fde565b6113aa565b6040516107349190614cca565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190614fb1565b61142c565b604051610771919061503d565b60405180910390f35b34801561078657600080fd5b506107a1600480360381019061079c9190614fb1565b61143e565b6040516107ae9190614cca565b60405180910390f35b3480156107c357600080fd5b506107cc611486565b005b3480156107da57600080fd5b506107f560048036038101906107f09190615084565b61149a565b005b34801561080357600080fd5b5061081e60048036038101906108199190614fb1565b61159c565b60405161082b9190614cca565b60405180910390f35b34801561084057600080fd5b506108496115ae565b60405161085c97969594939291906151bd565b60405180910390f35b34801561087157600080fd5b5061087a611658565b6040516108879190614f96565b60405180910390f35b34801561089c57600080fd5b506108a561167e565b6040516108b29190614f96565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190614dc8565b6116a8565b6040516108ef9190614cca565b60405180910390f35b34801561090457600080fd5b5061090d611743565b60405161091a9190615262565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190614fde565b611752565b6040516109579190614cca565b60405180910390f35b34801561096c57600080fd5b506109756117d4565b6040516109829190614d75565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad9190614fb1565b611866565b6040516109bf9190614cca565b60405180910390f35b3480156109d457600080fd5b506109ef60048036038101906109ea9190614e53565b6118d2565b6040516109fc9190614eae565b60405180910390f35b348015610a1157600080fd5b50610a1a611a4b565b604051610a279190614cca565b60405180910390f35b348015610a3c57600080fd5b50610a576004803603810190610a529190614dc8565b611a51565b604051610a649190614cca565b60405180910390f35b348015610a7957600080fd5b50610a946004803603810190610a8f919061527d565b611a83565b604051610aa19190614cca565b60405180910390f35b348015610ab657600080fd5b50610ad16004803603810190610acc919061527d565b611b07565b604051610ade9190614cca565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b099190615328565b611b8b565b005b348015610b1c57600080fd5b50610b376004803603810190610b329190614fb1565b611c51565b604051610b449190614cca565b60405180910390f35b348015610b5957600080fd5b50610b746004803603810190610b6f9190614dc8565b611c7b565b604051610b819190614cca565b60405180910390f35b348015610b9657600080fd5b50610bb16004803603810190610bac9190614fb1565b611c8f565b604051610bbe9190614cca565b60405180910390f35b348015610bd357600080fd5b50610bee6004803603810190610be991906153b5565b611cab565b005b348015610bfc57600080fd5b50610c176004803603810190610c129190615408565b611d79565b005b348015610c2557600080fd5b50610c406004803603810190610c3b9190614fb1565b611ec1565b604051610c4d9190614cca565b60405180910390f35b348015610c6257600080fd5b50610c7d6004803603810190610c7891906154aa565b611ed3565b604051610c8a9190614cca565b60405180910390f35b348015610c9f57600080fd5b50610ca8611f5a565b604051610cb59190614f96565b60405180910390f35b348015610cca57600080fd5b50610ce56004803603810190610ce091906154ea565b611f80565b005b348015610cf357600080fd5b50610d0e6004803603810190610d099190614ec9565b61217b565b005b348015610d1c57600080fd5b50610d376004803603810190610d329190614dc8565b6121ff565b604051610d449190614cca565b60405180910390f35b348015610d5957600080fd5b50610d746004803603810190610d6f9190615569565b612231565b604051610d81919061561c565b60405180910390f35b348015610d9657600080fd5b50610db16004803603810190610dac9190614fb1565b61224b565b005b348015610dbf57600080fd5b50610dc86122d1565b604051610dd59190614f96565b60405180910390f35b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e399190614f96565b602060405180830381865afa158015610e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7a919061564c565b905090565b606060038054610e8e906156a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610eba906156a8565b8015610f075780601f10610edc57610100808354040283529160200191610f07565b820191906000526020600020905b815481529060010190602001808311610eea57829003601f168201915b5050505050905090565b60105481565b6000610f248260006122f7565b9050919050565b600080610f36612350565b9050610f43818585612358565b600191505092915050565b600080610f6283610f5d61236a565b612374565b9050610f788184610f739190615708565b612398565b915050919050565b6000610f8d61dead61143e565b610f956123ac565b610f9f919061573c565b905090565b600080610fb883610fb36123b6565b6123c0565b90506000610fc78460196123c0565b90506000610fd36123ef565b905060008590506000600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061107d5750600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050806110f95761108e8985612419565b838261109a919061573c565b91506000851180156110d857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156110f8576110e889848761249b565b5084826110f5919061573c565b91505b5b61110489898461249b565b955050505050509392505050565b600061111c6124ca565b905090565b600061112b612504565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600080611163611743565b90508065ffffffffffff1683106111b35782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016111aa929190615770565b60405180910390fd5b61120c6111bf846125bb565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061261590919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050919050565b606061126561270f565b65ffffffffffff16611275611743565b65ffffffffffff16146112b4576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b6000806112fb8361271f565b905061130e8161130961236a565b6123c0565b81611319919061573c565b915050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000611394612350565b90506113a08183612733565b5050565b60115481565b6000806113b683611231565b905080841115611401578284826040517f79012fb20000000000000000000000000000000000000000000000000000000081526004016113f893929190615799565b60405180910390fd5b600061140c856121ff565b9050611421611419612350565b858784612847565b809250505092915050565b6000611437826128d0565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148e612928565b61149860006129af565b565b6114a2612928565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061150a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15611541576040517f90bb49c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006115a782612a75565b9050919050565b6000606080600080600060606115c2612a87565b6115ca612ac2565b46306000801b600067ffffffffffffffff8111156115eb576115ea6157d0565b5b6040519080825280602002602001820160405280156116195781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806116b3611743565b90508065ffffffffffff1683106117035782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016116fa929190615770565b60405180910390fd5b61171f61170f846125bb565b600a61261590919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b600061174d61270f565b905090565b60008061175e83611c51565b9050808411156117a9578284826040517f284ff6670000000000000000000000000000000000000000000000000000000081526004016117a093929190615799565b60405180910390fd5b60006117b485611a51565b90506117c96117c1612350565b858388612847565b809250505092915050565b6060600480546117e3906156a8565b80601f016020809104026020016040519081016040528092919081815260200182805461180f906156a8565b801561185c5780601f106118315761010080835404028352916020019161185c565b820191906000526020600020905b81548152906001019060200180831161183f57829003601f168201915b5050505050905090565b60006118af600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612afd565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b6000806118e6836118e16123b6565b6123c0565b905060006118f58460196123c0565b905060006119016123ef565b905060008590506000600b6000611916612350565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119b25750600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905080611a34576119ca6119c4612350565b85612419565b83826119d6919061573c565b9150600085118015611a1457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611a3357611a238386612b65565b508482611a30919061573c565b91505b5b611a3e8883612b65565b9550505050505092915050565b60125481565b600080611a5d83612b88565b9050611a7081611a6b612b9c565b612374565b81611a7b9190615708565b915050919050565b600080611a8f83611c8f565b905080851115611ada578285826040517ffe9cceec000000000000000000000000000000000000000000000000000000008152600401611ad193929190615799565b60405180910390fd5b6000611ae586610f4e565b9050611afb611af2612350565b86868985612ba6565b80925050509392505050565b600080611b1383611ec1565b905080851115611b5e578285826040517fb94abeec000000000000000000000000000000000000000000000000000000008152600401611b5593929190615799565b60405180910390fd5b6000611b69866112ef565b9050611b7f611b76612350565b8686848a612ba6565b80925050509392505050565b83421115611bd057836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401611bc79190614cca565b60405180910390fd5b6000611c32611c2a7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001611c0f94939291906157ff565b60405160208183030381529060405280519060200120612c5b565b858585612c75565b9050611c3e8187612ca5565b611c488188612733565b50505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050919050565b6000611c88826000612cfd565b9050919050565b6000611ca4611c9d8361143e565b60006122f7565b9050919050565b611cb3612928565b6101f4831180611cc457506101f482115b80611ccf5750604b81115b15611d06576040517f0c8249ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826010819055508160118190555080601281905550611d23612350565b73ffffffffffffffffffffffffffffffffffffffff167f76b767b4321562424f51cc354b772239dbfa510ce89181197411c987016f761b848484604051611d6c93929190615844565b60405180910390a2505050565b83421115611dbe57836040517f62791302000000000000000000000000000000000000000000000000000000008152600401611db59190614cca565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888611ded8c612d56565b89604051602001611e039695949392919061587b565b6040516020818303038152906040528051906020012090506000611e2682612c5b565b90506000611e3682878787612c75565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611eaa57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401611ea19291906158dc565b60405180910390fd5b611eb58a8a8a612358565b50505050505050505050565b6000611ecc8261143e565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f88612928565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611fed57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061202357503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561205a576040517f768dc59800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612125612350565b73ffffffffffffffffffffffffffffffffffffffff167fd323189f2ebee2cd300da230be53231602c71b15d8b281d56d3ec34e1645da9484848460405161216e93929190615905565b60405180910390a2505050565b612183612928565b61218b611130565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121ef576040517febb733d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121fa838383612dad565b505050565b6000806122138361220e612b9c565b6123c0565b90506122298184612224919061573c565b612e2c565b915050919050565b612239614c73565b6122438383612e40565b905092915050565b612253612928565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122c55760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016122bc9190614f96565b60405180910390fd5b6122ce816129af565b50565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006123486001612306610dde565b6123109190615708565b612318612ea1565b600a6123249190615a6f565b61232c610f80565b6123369190615708565b8486612ea6909392919063ffffffff16565b905092915050565b600033905090565b6123658383836001612efd565b505050565b6000601154905090565b600061239082612710600186612ea6909392919063ffffffff16565b905092915050565b60006123a5826001612cfd565b9050919050565b6000600254905090565b6000601254905090565b60006123e782612710846123d49190615708565b600186612ea6909392919063ffffffff16565b905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361248b5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016124829190614f96565b60405180910390fd5b612497826000836130d4565b5050565b6000806124a6612350565b90506124b38582856130e4565b6124be858585613178565b60019150509392505050565b60006124d4612ea1565b7f00000000000000000000000000000000000000000000000000000000000000006124ff9190615aba565b905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561258057507f000000000000000000000000000000000000000000000000000000000000000046145b156125ad577f000000000000000000000000000000000000000000000000000000000000000090506125b8565b6125b561326c565b90505b90565b600065ffffffffffff801682111561260d576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401612604929190615b34565b60405180910390fd5b819050919050565b60008083600001805490509050600080829050600583111561269d57600061263c84613302565b84612647919061573c565b905061265687600001826133fb565b60000160009054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16101561268b5780915061269b565b6001816126989190615708565b92505b505b60006126ae87600001878585613410565b905060008114612700576126d1876000016001836126cc919061573c565b6133fb565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16612703565b60005b94505050505092915050565b600061271a436125bb565b905090565b600061272c8260006122f7565b9050919050565b600061273e83611321565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4612842818361283d86613489565b6134a3565b505050565b600061285a83612855612b9c565b6123c0565b9050600061286661371c565b905061287486868686613746565b6000821180156128b057503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156128c8576128c76128c0611130565b8284612dad565b5b505050505050565b600061292161291c600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137e9565b6137fa565b9050919050565b612930612350565b73ffffffffffffffffffffffffffffffffffffffff1661294e61167e565b73ffffffffffffffffffffffffffffffffffffffff16146129ad57612971612350565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016129a49190614f96565b60405180910390fd5b565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612a8082613852565b9050919050565b6060612abd60057f000000000000000000000000000000000000000000000000000000000000000061389b90919063ffffffff16565b905090565b6060612af860067f000000000000000000000000000000000000000000000000000000000000000061389b90919063ffffffff16565b905090565b6000808260000180549050905060008114612b5a57612b2b83600001600183612b26919061573c565b6133fb565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16612b5d565b60005b915050919050565b600080612b70612350565b9050612b7d818585613178565b600191505092915050565b6000612b958260016122f7565b9050919050565b6000601054905090565b6000612bb983612bb461236a565b612374565b90506000612bc561394b565b9050612bd48787878787613975565b600082118015612c1057503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15612c2857612c27612c20611130565b8284612dad565b5b6103e8612c33610f80565b11612c5257612c51612c43611130565b82612c4c610dde565b612dad565b5b50505050505050565b6000612c6e612c68612504565b83613a6e565b9050919050565b600080600080612c8788888888613aaf565b925092509250612c978282613ba3565b829350505050949350505050565b6000612cb083612d56565b9050808214612cf85782816040517f752d88c0000000000000000000000000000000000000000000000000000000008152600401612cef929190615b5d565b60405180910390fd5b505050565b6000612d4e612d0a612ea1565b600a612d169190615a6f565b612d1e610f80565b612d289190615708565b6001612d32610dde565b612d3c9190615708565b8486612ea6909392919063ffffffff16565b905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050559050919050565b612e27838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401612de0929190615b5d565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613d07565b505050565b6000612e39826000612cfd565b9050919050565b612e48614c73565b612e9982600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613d9e90919063ffffffff16565b905092915050565b600090565b600080612eb4868686613e73565b9050612ebf83613f7a565b8015612edc575060008480612ed757612ed6615b86565b5b868809115b15612ef157600181612eee9190615708565b90505b80915050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612f6f5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401612f669190614f96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fe15760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401612fd89190614f96565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156130ce578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516130c59190614cca565b60405180910390a35b50505050565b6130df838383613fa8565b505050565b60006130f08484611ed3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146131725781811015613162578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161315993929190615799565b60405180910390fd5b61317184848484036000612efd565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131ea5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016131e19190614f96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361325c5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016132539190614f96565b60405180910390fd5b6132678383836130d4565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016132e7959493929190615bb5565b60405160208183030381529060405280519060200120905090565b600080820361331457600090506133f6565b6000600161332184614059565b901c6001901b9050600181848161333b5761333a615b86565b5b048201901c9050600181848161335457613353615b86565b5b048201901c9050600181848161336d5761336c615b86565b5b048201901c9050600181848161338657613385615b86565b5b048201901c9050600181848161339f5761339e615b86565b5b048201901c905060018184816133b8576133b7615b86565b5b048201901c905060018184816133d1576133d0615b86565b5b048201901c90506133f2818285816133ec576133eb615b86565b5b0461413a565b9150505b919050565b60008260005281602060002001905092915050565b60005b8183101561347e5760006134278484614153565b90508465ffffffffffff1661343c87836133fb565b60000160009054906101000a900465ffffffffffff1665ffffffffffff16111561346857809250613478565b6001816134759190615708565b93505b50613413565b819050949350505050565b600061349c6134978361143e565b610f17565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156134df5750600081115b1561371757600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146135fd5760008061356e600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206141796135698661418f565b6141fd565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516135f2929190615c08565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461371657600080613687600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061423d6136828661418f565b6141fd565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161370b929190615c08565b60405180910390a250505b5b505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6137727f0000000000000000000000000000000000000000000000000000000000000000853085614253565b61377c83826142d5565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d784846040516137db929190615c08565b60405180910390a350505050565b600081600001805490509050919050565b600063ffffffff801682111561384a576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401613841929190615c6c565b60405180910390fd5b819050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060ff60001b83146138b8576138b183614357565b9050613945565b8180546138c4906156a8565b80601f01602080910402602001604051908101604052809291908181526020018280546138f0906156a8565b801561393d5780601f106139125761010080835404028352916020019161393d565b820191906000526020600020905b81548152906001019060200180831161392057829003601f168201915b505050505090505b92915050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146139b4576139b38386836130e4565b5b6139be8382612419565b6139e97f00000000000000000000000000000000000000000000000000000000000000008584612dad565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051613a5f929190615c08565b60405180910390a45050505050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c1115613aef576000600385925092509250613b99565b600060018888888860405160008152602001604052604051613b149493929190615c95565b6020604051602081039080840390855afa158015613b36573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613b8a57600060016000801b93509350935050613b99565b8060008060001b935093509350505b9450945094915050565b60006003811115613bb757613bb6615cda565b5b826003811115613bca57613bc9615cda565b5b0315613d035760016003811115613be457613be3615cda565b5b826003811115613bf757613bf6615cda565b5b03613c2e576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115613c4257613c41615cda565b5b826003811115613c5557613c54615cda565b5b03613c9a578060001c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401613c919190614cca565b60405180910390fd5b600380811115613cad57613cac615cda565b5b826003811115613cc057613cbf615cda565b5b03613d0257806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401613cf99190614f6c565b60405180910390fd5b5b5050565b6000613d32828473ffffffffffffffffffffffffffffffffffffffff166143cb90919063ffffffff16565b90506000815114158015613d57575080806020019051810190613d559190615d1e565b155b15613d9957826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401613d909190614f96565b60405180910390fd5b505050565b613da6614c73565b826000018263ffffffff1681548110613dc257613dc1615d4b565b5b906000526020600020016040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b6000808385029050600080198587098281108382030391505060008103613eae57838281613ea457613ea3615b86565b5b0492505050613f73565b808411613ee7576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084868809905082811182039150808303925060008560000386169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b600060016002836003811115613f9357613f92615cda565b5b613f9d9190615d7a565b60ff16149050919050565b613fb38383836143e1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603614049576000613ff1610f80565b90506000613ffd614606565b9050808211156140465781816040517f1cb15d2600000000000000000000000000000000000000000000000000000000815260040161403d929190615c08565b60405180910390fd5b50505b61405483838361462a565b505050565b600080600090506000608084901c111561407b57608083901c92506080810190505b6000604084901c111561409657604083901c92506040810190505b6000602084901c11156140b157602083901c92506020810190505b6000601084901c11156140cc57601083901c92506010810190505b6000600884901c11156140e757600883901c92506008810190505b6000600484901c111561410257600483901c92506004810190505b6000600284901c111561411d57600283901c92506002810190505b6000600184901c1115614131576001810190505b80915050919050565b6000818310614149578161414b565b825b905092915050565b600060028284186141649190615dab565b8284166141719190615708565b905092915050565b600081836141879190615ddc565b905092915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156141f55760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016141ec929190615e65565b60405180910390fd5b819050919050565b60008061423161420b611743565b61422161421788612afd565b868863ffffffff16565b876146e49092919063ffffffff16565b91509150935093915050565b6000818361424b9190615e8e565b905092915050565b6142cf848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161428893929190615edc565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613d07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036143475760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161433e9190614f96565b60405180910390fd5b614353600083836130d4565b5050565b6060600061436483614701565b90506000602067ffffffffffffffff811115614383576143826157d0565b5b6040519080825280601f01601f1916602001820160405280156143b55781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b60606143d983836000614751565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036144335780600260008282546144279190615708565b92505081905550614506565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156144bf578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016144b693929190615799565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361454f578060026000828254039250508190555061459c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516145f99190614cca565b60405180910390a3505050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361467757614674600a61423d61466f8461418f565b6141fd565b50505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036146c4576146c1600a6141796146bc8461418f565b6141fd565b50505b6146df6146d084611321565b6146d984611321565b836134a3565b505050565b6000806146f585600001858561481e565b91509150935093915050565b60008060ff8360001c169050601f811115614748576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b60608147101561479857306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161478f9190614f96565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516147c19190615f5a565b60006040518083038185875af1925050503d80600081146147fe576040519150601f19603f3d011682016040523d82523d6000602084013e614803565b606091505b5091509150614813868383614b9f565b925050509392505050565b6000806000858054905090506000811115614aaf57600061484b87600184614846919061573c565b6133fb565b6040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16816000015165ffffffffffff16111561493a576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16816000015165ffffffffffff16036149be578461496c88600185614967919061573c565b6133fb565b60000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550614a9e565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050614b97565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550505060008492509250505b935093915050565b606082614bb457614baf82614c2e565b614c26565b60008251148015614bdc575060008473ffffffffffffffffffffffffffffffffffffffff163b145b15614c1e57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401614c159190614f96565b60405180910390fd5b819050614c27565b5b9392505050565b600081511115614c415780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280600065ffffffffffff168152602001600079ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b6000819050919050565b614cc481614cb1565b82525050565b6000602082019050614cdf6000830184614cbb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614d1f578082015181840152602081019050614d04565b60008484015250505050565b6000601f19601f8301169050919050565b6000614d4782614ce5565b614d518185614cf0565b9350614d61818560208601614d01565b614d6a81614d2b565b840191505092915050565b60006020820190508181036000830152614d8f8184614d3c565b905092915050565b600080fd5b614da581614cb1565b8114614db057600080fd5b50565b600081359050614dc281614d9c565b92915050565b600060208284031215614dde57614ddd614d97565b5b6000614dec84828501614db3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614e2082614df5565b9050919050565b614e3081614e15565b8114614e3b57600080fd5b50565b600081359050614e4d81614e27565b92915050565b60008060408385031215614e6a57614e69614d97565b5b6000614e7885828601614e3e565b9250506020614e8985828601614db3565b9150509250929050565b60008115159050919050565b614ea881614e93565b82525050565b6000602082019050614ec36000830184614e9f565b92915050565b600080600060608486031215614ee257614ee1614d97565b5b6000614ef086828701614e3e565b9350506020614f0186828701614e3e565b9250506040614f1286828701614db3565b9150509250925092565b600060ff82169050919050565b614f3281614f1c565b82525050565b6000602082019050614f4d6000830184614f29565b92915050565b6000819050919050565b614f6681614f53565b82525050565b6000602082019050614f816000830184614f5d565b92915050565b614f9081614e15565b82525050565b6000602082019050614fab6000830184614f87565b92915050565b600060208284031215614fc757614fc6614d97565b5b6000614fd584828501614e3e565b91505092915050565b60008060408385031215614ff557614ff4614d97565b5b600061500385828601614db3565b925050602061501485828601614e3e565b9150509250929050565b600063ffffffff82169050919050565b6150378161501e565b82525050565b6000602082019050615052600083018461502e565b92915050565b61506181614e93565b811461506c57600080fd5b50565b60008135905061507e81615058565b92915050565b6000806040838503121561509b5761509a614d97565b5b60006150a985828601614e3e565b92505060206150ba8582860161506f565b9150509250929050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6150f9816150c4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61513481614cb1565b82525050565b6000615146838361512b565b60208301905092915050565b6000602082019050919050565b600061516a826150ff565b615174818561510a565b935061517f8361511b565b8060005b838110156151b0578151615197888261513a565b97506151a283615152565b925050600181019050615183565b5085935050505092915050565b600060e0820190506151d2600083018a6150f0565b81810360208301526151e48189614d3c565b905081810360408301526151f88188614d3c565b90506152076060830187614cbb565b6152146080830186614f87565b61522160a0830185614f5d565b81810360c0830152615233818461515f565b905098975050505050505050565b600065ffffffffffff82169050919050565b61525c81615241565b82525050565b60006020820190506152776000830184615253565b92915050565b60008060006060848603121561529657615295614d97565b5b60006152a486828701614db3565b93505060206152b586828701614e3e565b92505060406152c686828701614e3e565b9150509250925092565b6152d981614f1c565b81146152e457600080fd5b50565b6000813590506152f6816152d0565b92915050565b61530581614f53565b811461531057600080fd5b50565b600081359050615322816152fc565b92915050565b60008060008060008060c0878903121561534557615344614d97565b5b600061535389828a01614e3e565b965050602061536489828a01614db3565b955050604061537589828a01614db3565b945050606061538689828a016152e7565b935050608061539789828a01615313565b92505060a06153a889828a01615313565b9150509295509295509295565b6000806000606084860312156153ce576153cd614d97565b5b60006153dc86828701614db3565b93505060206153ed86828701614db3565b92505060406153fe86828701614db3565b9150509250925092565b600080600080600080600060e0888a03121561542757615426614d97565b5b60006154358a828b01614e3e565b97505060206154468a828b01614e3e565b96505060406154578a828b01614db3565b95505060606154688a828b01614db3565b94505060806154798a828b016152e7565b93505060a061548a8a828b01615313565b92505060c061549b8a828b01615313565b91505092959891949750929550565b600080604083850312156154c1576154c0614d97565b5b60006154cf85828601614e3e565b92505060206154e085828601614e3e565b9150509250929050565b60008060006060848603121561550357615502614d97565b5b600061551186828701614e3e565b935050602061552286828701614e3e565b925050604061553386828701614e3e565b9150509250925092565b6155468161501e565b811461555157600080fd5b50565b6000813590506155638161553d565b92915050565b600080604083850312156155805761557f614d97565b5b600061558e85828601614e3e565b925050602061559f85828601615554565b9150509250929050565b6155b281615241565b82525050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6155e7816155b8565b82525050565b60408201600082015161560360008501826155a9565b50602082015161561660208501826155de565b50505050565b600060408201905061563160008301846155ed565b92915050565b60008151905061564681614d9c565b92915050565b60006020828403121561566257615661614d97565b5b600061567084828501615637565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806156c057607f821691505b6020821081036156d3576156d2615679565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061571382614cb1565b915061571e83614cb1565b9250828201905080821115615736576157356156d9565b5b92915050565b600061574782614cb1565b915061575283614cb1565b925082820390508181111561576a576157696156d9565b5b92915050565b60006040820190506157856000830185614cbb565b6157926020830184615253565b9392505050565b60006060820190506157ae6000830186614f87565b6157bb6020830185614cbb565b6157c86040830184614cbb565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080820190506158146000830187614f5d565b6158216020830186614f87565b61582e6040830185614cbb565b61583b6060830184614cbb565b95945050505050565b60006060820190506158596000830186614cbb565b6158666020830185614cbb565b6158736040830184614cbb565b949350505050565b600060c0820190506158906000830189614f5d565b61589d6020830188614f87565b6158aa6040830187614f87565b6158b76060830186614cbb565b6158c46080830185614cbb565b6158d160a0830184614cbb565b979650505050505050565b60006040820190506158f16000830185614f87565b6158fe6020830184614f87565b9392505050565b600060608201905061591a6000830186614f87565b6159276020830185614f87565b6159346040830184614f87565b949350505050565b60008160011c9050919050565b6000808291508390505b60018511156159935780860481111561596f5761596e6156d9565b5b600185161561597e5780820291505b808102905061598c8561593c565b9450615953565b94509492505050565b6000826159ac5760019050615a68565b816159ba5760009050615a68565b81600181146159d057600281146159da57615a09565b6001915050615a68565b60ff8411156159ec576159eb6156d9565b5b8360020a915084821115615a0357615a026156d9565b5b50615a68565b5060208310610133831016604e8410600b8410161715615a3e5782820a905083811115615a3957615a386156d9565b5b615a68565b615a4b8484846001615949565b92509050818404811115615a6257615a616156d9565b5b81810290505b9392505050565b6000615a7a82614cb1565b9150615a8583614f1c565b9250615ab27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461599c565b905092915050565b6000615ac582614f1c565b9150615ad083614f1c565b9250828201905060ff811115615ae957615ae86156d9565b5b92915050565b6000819050919050565b6000819050919050565b6000615b1e615b19615b1484615aef565b615af9565b614f1c565b9050919050565b615b2e81615b03565b82525050565b6000604082019050615b496000830185615b25565b615b566020830184614cbb565b9392505050565b6000604082019050615b726000830185614f87565b615b7f6020830184614cbb565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060a082019050615bca6000830188614f5d565b615bd76020830187614f5d565b615be46040830186614f5d565b615bf16060830185614cbb565b615bfe6080830184614f87565b9695505050505050565b6000604082019050615c1d6000830185614cbb565b615c2a6020830184614cbb565b9392505050565b6000819050919050565b6000615c56615c51615c4c84615c31565b615af9565b614f1c565b9050919050565b615c6681615c3b565b82525050565b6000604082019050615c816000830185615c5d565b615c8e6020830184614cbb565b9392505050565b6000608082019050615caa6000830187614f5d565b615cb76020830186614f29565b615cc46040830185614f5d565b615cd16060830184614f5d565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600081519050615d1881615058565b92915050565b600060208284031215615d3457615d33614d97565b5b6000615d4284828501615d09565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615d8582614f1c565b9150615d9083614f1c565b925082615da057615d9f615b86565b5b828206905092915050565b6000615db682614cb1565b9150615dc183614cb1565b925082615dd157615dd0615b86565b5b828204905092915050565b6000615de7826155b8565b9150615df2836155b8565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115615e2457615e236156d9565b5b92915050565b6000819050919050565b6000615e4f615e4a615e4584615e2a565b615af9565b614f1c565b9050919050565b615e5f81615e34565b82525050565b6000604082019050615e7a6000830185615e56565b615e876020830184614cbb565b9392505050565b6000615e99826155b8565b9150615ea4836155b8565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115615ed657615ed56156d9565b5b92915050565b6000606082019050615ef16000830186614f87565b615efe6020830185614f87565b615f0b6040830184614cbb565b949350505050565b600081519050919050565b600081905092915050565b6000615f3482615f13565b615f3e8185615f1e565b9350615f4e818560208601614d01565b80840191505092915050565b6000615f668284615f29565b91508190509291505056fea26469706673582212201a54394049ea63a565818eac6079364b006549e449b42ca58cbfed58b7d464bb64736f6c63430008140033000000000000000000000000184ff13b3ebcb25be44e860163a5d8391dd568c10000000000000000000000003b6ff039272c26207efd86044810e92f17540d460000000000000000000000003b6ff039272c26207efd86044810e92f17540d460000000000000000000000003b6ff039272c26207efd86044810e92f17540d46