[ { "inputs": [ { "internalType": "address", "name": "lbHooksManager", "type": "address" }, { "internalType": "contract IMasterChef", "name": "masterChef", "type": "address" }, { "internalType": "contract IERC20", "name": "moe", "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": "BinHelper__LiquidityOverflow", "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": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "Hooks__CallFailed", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "LBBaseHooks__InvalidCaller", "type": "error" }, { "inputs": [], "name": "LBBaseHooks__NotLinked", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__ExceedsMaxNumberOfBins", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__InvalidDeltaBins", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__InvalidHooksParameters", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__LockedRewardToken", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__NativeTransferFailed", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__NotImplemented", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__NotNativeRewarder", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__Overflow", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__UnauthorizedCaller", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__UnlinkedHooks", "type": "error" }, { "inputs": [], "name": "LBHooksBaseRewarder__ZeroBalance", "type": "error" }, { "inputs": [], "name": "LBHooksRewarder__InvalidLBHooksExtraRewarder", "type": "error" }, { "inputs": [], "name": "NotInitializing", "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": "SafeCast__Exceeds24Bits", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "TokenHelper__NativeTransferFailed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "x", "type": "uint256" }, { "internalType": "int256", "name": "y", "type": "int256" } ], "name": "Uint128x128Math__PowUnderflow", "type": "error" }, { "inputs": [], "name": "Uint256x256Math__MulDivOverflow", "type": "error" }, { "inputs": [], "name": "Uint256x256Math__MulShiftOverflow", "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": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Claim", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int24", "name": "deltaBinA", "type": "int24" }, { "indexed": false, "internalType": "int24", "name": "deltaBinB", "type": "int24" } ], "name": "DeltaBinsSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract ILBHooksExtraRewarder", "name": "lbHooksExtraRewarder", "type": "address" } ], "name": "LBHooksExtraRewarderSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "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" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "afterBatchTransferFrom", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amountsToBurn", "type": "uint256[]" } ], "name": "afterBurn", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes32", "name": "fees", "type": "bytes32" }, { "internalType": "bytes32", "name": "feesReceived", "type": "bytes32" } ], "name": "afterFlashLoan", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes32[]", "name": "liquidityConfigs", "type": "bytes32[]" }, { "internalType": "bytes32", "name": "amountsIn", "type": "bytes32" } ], "name": "afterMint", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bool", "name": "swapForY", "type": "bool" }, { "internalType": "bytes32", "name": "amountsOut", "type": "bytes32" } ], "name": "afterSwap", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "beforeBatchTransferFrom", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amountsToBurn", "type": "uint256[]" } ], "name": "beforeBurn", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes32", "name": "amounts", "type": "bytes32" } ], "name": "beforeFlashLoan", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes32[]", "name": "liquidityConfigs", "type": "bytes32[]" }, { "internalType": "bytes32", "name": "amountsReceived", "type": "bytes32" } ], "name": "beforeMint", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bool", "name": "swapForY", "type": "bool" }, { "internalType": "bytes32", "name": "amountsIn", "type": "bytes32" } ], "name": "beforeSwap", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "claim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getExtraHooksParameters", "outputs": [ { "internalType": "bytes32", "name": "extraHooksParameters", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLBHooksManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLBPair", "outputs": [ { "internalType": "contract ILBPair", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMasterChef", "outputs": [ { "internalType": "contract IMasterChef", "name": "masterChef", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "getPendingRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPid", "outputs": [ { "internalType": "uint256", "name": "pid", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRewardedRange", "outputs": [ { "internalType": "uint256", "name": "binStart", "type": "uint256" }, { "internalType": "uint256", "name": "binEnd", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "implementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isLinked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isStopped", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "hooksParameters", "type": "bytes32" }, { "internalType": "bytes", "name": "onHooksSetData", "type": "bytes" } ], "name": "onHooksSet", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "deltaBinA", "type": "int24" }, { "internalType": "int24", "name": "deltaBinB", "type": "int24" } ], "name": "setDeltaBins", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ILBHooksExtraRewarder", "name": "lbHooksExtraRewarder", "type": "address" }, { "internalType": "bytes", "name": "extraRewarderData", "type": "bytes" } ], "name": "setLBHooksExtraRewarder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "sweep", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": [ { "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" }, { "stateMutability": "payable", "type": "receive" } ]
6101006040523480156200001257600080fd5b506040516200445238038062004452833981016040819052620000359162000135565b306080526001600160a01b03831660a05282620000516200006b565b506001600160a01b0391821660c0521660e0525062000189565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000bc5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146200011c5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6001600160a01b03811681146200011c57600080fd5b6000806000606084860312156200014b57600080fd5b835162000158816200011f565b60208501519093506200016b816200011f565b60408501519092506200017e816200011f565b809150509250925092565b60805160a05160c05160e051614249620002096000396000818161058b015281816108eb015281816112c9015281816119c00152818161207a015261277801526000818161071a01528181611fed015281816126e10152818161298e01526129be0152600081816106c70152610f79015260006104e001526142496000f3fe6080604052600436106102bf5760003560e01c806370a082311161016e578063b8dc491b116100cb578063ea9db9d31161007f578063fdc2725711610064578063fdc272571461084f578063fe9ffeb31461086f578063feee373514610899576102ce565b8063ea9db9d31461080f578063f2fde38b1461082f576102ce565b8063c8772963116100b0578063c877296314610773578063dd62ed3e14610795578063e30c3978146107fa576102ce565b8063b8dc491b1461073e578063c7d12e881461075e576102ce565b80638da5cb5b116101225780639b4c8ea5116101075780639b4c8ea5146106b8578063a9059cbb146106eb578063b56449631461070b576102ce565b80638da5cb5b1461068e57806395d89b41146106a3576102ce565b806379ba50971161015357806379ba50971461063957806379c8ccf71461064e5780637a51a4c61461066e576102ce565b806370a08231146105cf578063715018a614610624576102ce565b80634e430b5a1161021c5780635f9c01b1116101d057806367ddb278116101b557806367ddb2781461055c57806369940d791461057c5780636e094176146105af576102ce565b80635f9c01b11461051a57806360bed5f31461053c576102ce565b806353e8079b1161020157806353e8079b1461048e578063566aff6a146104ae5780635c60da1b146104ce576102ce565b80634e430b5a1461044e578063505d90331461046e576102ce565b806323b872dd116102735780633f683b6a116102585780633f683b6a146103f957806343b312df1461040e578063457182781461042e576102ce565b806323b872dd146103bd578063313ce567146103dd576102ce565b806309fa1f90116102a457806309fa1f90146103315780630d4abdb31461034657806318160ddd1461037f576102ce565b806306fdde03146102d6578063095ea7b314610301576102ce565b366102ce576102cc6108b9565b005b6102cc6108b9565b3480156102e257600080fd5b506102eb61092b565b6040516102f891906135e2565b60405180910390f35b34801561030d57600080fd5b5061032161031c36600461362a565b610a00565b60405190151581526020016102f8565b34801561033d57600080fd5b50610321610a1a565b34801561035257600080fd5b506103666103613660046136a2565b610a29565b6040516001600160e01b031990911681526020016102f8565b34801561038b57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016102f8565b3480156103c957600080fd5b506103216103d836600461370f565b610a53565b3480156103e957600080fd5b50604051601281526020016102f8565b34801561040557600080fd5b50610321610a79565b34801561041a57600080fd5b506102cc610429366004613762565b610a89565b34801561043a57600080fd5b506102cc610449366004613795565b610b63565b34801561045a57600080fd5b5061036661046936600461382c565b610c4e565b34801561047a57600080fd5b5061036661048936600461370f565b610c98565b34801561049a57600080fd5b506103666104a9366004613879565b610cb2565b3480156104ba57600080fd5b506103af6104c9366004613795565b610ccd565b3480156104da57600080fd5b506105027f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102f8565b34801561052657600080fd5b503660011981013560f01c90033560601c610502565b34801561054857600080fd5b506103666105573660046138ca565b610f35565b34801561056857600080fd5b50610366610577366004613910565b610f50565b34801561058857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610502565b3480156105bb57600080fd5b506102cc6105ca3660046139b8565b610f6e565b3480156105db57600080fd5b506103af6105ea3660046139f4565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b34801561063057600080fd5b506102cc611145565b34801561064557600080fd5b506102cc611157565b34801561065a57600080fd5b50610366610669366004613910565b6111a4565b34801561067a57600080fd5b506103666106893660046136a2565b6111d1565b34801561069a57600080fd5b506105026111ed565b3480156106af57600080fd5b506102eb611222565b3480156106c457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610502565b3480156106f757600080fd5b5061032161070636600461362a565b611273565b34801561071757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610502565b34801561074a57600080fd5b506102cc610759366004613a11565b611281565b34801561076a57600080fd5b506004546103af565b34801561077f57600080fd5b503660011981013560f01c9003601401356103af565b3480156107a157600080fd5b506103af6107b0366004613a11565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b34801561080657600080fd5b50610502611326565b34801561081b57600080fd5b5061036661082a366004613910565b61134f565b34801561083b57600080fd5b506102cc61084a3660046139f4565b61137c565b34801561085b57600080fd5b5061036661086a366004613910565b611401565b34801561087b57600080fd5b5061088461141f565b604080519283526020830191909152016102f8565b3480156108a557600080fd5b506103666108b4366004613879565b611435565b3660011981013560f01c146108e1576040516335f187f960e01b815260040160405180910390fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016156109295760405163e22dfb1160e01b815260040160405180910390fd5b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161097c90613a4a565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890613a4a565b80156109f55780601f106109ca576101008083540402835291602001916109f5565b820191906000526020600020905b8154815290600101906020018083116109d857829003601f168201915b505050505091505090565b600033610a0e81858561145c565b60019150505b92915050565b6000610a24611469565b905090565b6000610a336114f4565b610a408686868686611525565b50630d4abdb360e01b5b95945050505050565b600033610a61858285611549565b610a6c8585856115e6565b60019150505b9392505050565b6000610a83611469565b15905090565b610a91611645565b8060020b8260020b1315610ab8576040516320aec07960e01b815260040160405180910390fd5b600b8260020b8260020b610acc9190613a9a565b1315610aeb5760405163be0ae43b60e01b815260040160405180910390fd5b610af3611677565b6000805462ffffff83811663010000000265ffffffffffff19909216908516171790556040517f0db02dbe95af4e060b3a554370b11d345d2c7ce375ca69cefa13977d5253479490610b579084908490600292830b8152910b602082015260400190565b60405180910390a15050565b610b6b611469565b610b88576040516319e0ccff60e11b815260040160405180910390fd5b336001600160a01b03841614610bb157604051637613d16960e01b815260040160405180910390fd5b610bb9611677565b610bf6838383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506117a992505050565b610c498383838080602002602001604051908101604052809392919081815260200183836020028082843760009201829052506001600160a01b038a168152600360205260409020549250611922915050565b505050565b6000610c586114f4565b610c60611469565b610c7d57604051632def67a360e21b815260040160405180910390fd5b610c888484846119e6565b5063272185ad60e11b9392505050565b6000610ca26114f4565b5063505d903360e01b9392505050565b6000610cbc6114f4565b506353e8079b60e01b949350505050565b6000610cd7611469565b610ce357506000610a72565b82823660011981013560f01c90033560601c6000808080610d02611b4e565b93509350935093506000806000610d1a888789611cd5565b919450925090508d6000610d2c611f80565b90506000805b8c811015610efb576000610d5d8f8f84818110610d5157610d51613ac1565b905060200201356120dc565b62ffffff8116600081815260026020908152604080832080546001600160a01b038c16855260019091019092529091205492935091908c11801590610da657508a8362ffffff16105b15610e40576000610dbc8d62ffffff8616613ad7565b905060008a8281518110610dd257610dd2613ac1565b60200260200101519050600081118015610dec575060008a115b15610e3d576000610e2260808c8f8681518110610e0b57610e0b613ac1565b60200260200101516121079092919063ffffffff16565b9050610e2f89828461213b565b610e399086613aea565b9450505b50505b60008f6001600160a01b031662fdd58e89866040518363ffffffff1660e01b8152600401610e889291906001600160a01b0392909216825262ffffff16602082015260400190565b602060405180830381865afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec99190613afd565b905081831115610ee657610ee182840382608061215b565b860195505b5050505080610ef490613b16565b9050610d32565b506001600160a01b038316600090815260036020526040902054610f1f9082613aea565b9d50505050505050505050505050509392505050565b6000610f3f6114f4565b506360bed5f360e01b949350505050565b6000610f5a6114f4565b50630cfbb64f60e31b979650505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fa657610fa6611645565b6001600160a01b038316156110fe576001600160a01b03831661015160a01b1760048190553660011981013560f01c90033560601c6001600160a01b0316846001600160a01b0316635f9c01b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190613b2f565b6001600160a01b03161415806110cf5750306001600160a01b0316846001600160a01b03166320e1bba76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561109f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c39190613b2f565b6001600160a01b031614155b156110ed576040516330e53f0760e11b815260040160405180910390fd5b6110f88184846121d2565b50611104565b60006004555b6040516001600160a01b03841681527fb9f3bf6e5f15f5daaaa5de4e2ac8f4f19c47a6d4e489efb48bd0d26ff478eba19060200160405180910390a1505050565b61114d611645565b6109296000612230565b3380611161611326565b6001600160a01b0316146111985760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6111a181612230565b50565b60006111ae6114f4565b6111bd8888888888888861226c565b506379c8ccf760e01b979650505050505050565b60006111db6114f4565b50633d28d26360e11b95945050505050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161097c90613a4a565b600033610a0e8185856115e6565b611289611645565b6000611295833061228d565b9050806000036112b85760405163279157a960e01b815260040160405180910390fd5b6112c0611469565b80156112fd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b1561131b5760405163071e53cd60e21b815260040160405180910390fd5b610c4983838361231d565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00611212565b60006113596114f4565b611368888888888888886123b9565b5063ea9db9d360e01b979650505050505050565b611384611645565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556113c86111ed565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b600061140b6114f4565b5063fdc2725760e01b979650505050505050565b60008061142a611b4e565b909590945092505050565b600061143f6114f4565b61144b858585856123da565b5063feee373560e01b949350505050565b610c4983838360016123f5565b6000806114e33660011981013560f01c90033560601c6001600160a01b031663781a89156040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e09190613afd565b90565b6001600160a01b0316301492915050565b3660011981013560f01c90033560601c331461092957604051634a27038360e01b815233600482015260240161118f565b61153285858585856124ee565b611542600454868686868661253b565b5050505050565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace01602090815260408083209386168352929052205460001981146115e057818110156115d157604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161118f565b6115e0848484840360006123f5565b50505050565b6001600160a01b03831661161057604051634b637e8f60e11b81526000600482015260240161118f565b6001600160a01b03821661163a5760405163ec442f0560e01b81526000600482015260240161118f565b610c49838383612585565b3361164e6111ed565b6001600160a01b0316146109295760405163118cdaa760e01b815233600482015260240161118f565b60006116816126d5565b90508060000361168e5750565b3660011981013560f01c90033560601c6000806116a9611b4e565b50509150915060008060006116bf868587611cd5565b925092509250806000036116d65750505050505050565b86600160008282546116e89190613aea565b9091555050845160005b8181101561179e57600084828151811061170e5761170e613ac1565b60200260200101519050600081111561178d57600061173b608086898681518110610e0b57610e0b613ac1565b90506117488b828461213b565b600260008b868151811061175e5761175e613ac1565b6020026020010151815260200190815260200160002060000160008282546117869190613aea565b9091555050505b5061179781613b16565b90506116f2565b505050505050505050565b80513660011981013560f01c90033560601c906000805b828110156118e75760006117ec8683815181106117df576117df613ac1565b60200260200101516120dc565b604051627eeac760e11b81526001600160a01b03898116600483015262ffffff8316602483015291925060009187169062fdd58e90604401602060405180830381865afa158015611841573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118659190613afd565b62ffffff8316600090815260026020908152604080832080546001600160a01b038e168552600182019093529220549293509091808211156118d1576118af81830385608061215b565b6001600160a01b038c1660009081526001850160205260409020839055909601955b5050505050806118e090613b16565b90506117c0565b508015611542576001600160a01b03851660009081526003602052604081208054839290611916908490613aea565b90915550505050505050565b8060000361192f57505050565b80600160008282546119419190613ad7565b90915550506001600160a01b0383166000908152600360205260408120805483929061196e908490613ad7565b90915550506040518181526001600160a01b038416907f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d49060200160405180910390a26119bb83836127b0565b610c497f0000000000000000000000000000000000000000000000000000000000000000848361231d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015611a315750825b905060008267ffffffffffffffff166001148015611a4e5750303b155b905081158015611a5c575080155b15611a7a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611aae57845468ff00000000000000001916680100000000000000001785555b3061015160a01b178814611ad55760405163f481290160e01b815260040160405180910390fd5b6000611ae3878901896139f4565b9050611aee81612815565b611af88888612826565b508315611b4457845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6060600080803660011981013560f01c900335841c6001600160a01b031663dbe65edc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc49190613b4c565b600054909350600281810b9163010000009004900b611be88262ffffff8716613b71565b9350611bfd600282900b62ffffff8716613b71565b925062ffffff841180611c12575062ffffff83115b15611c305760405163328fa59b60e01b815260040160405180910390fd5b6000611c3c8585613ad7565b90508067ffffffffffffffff811115611c5757611c57613b99565b604051908082528060200260200182016040528015611c80578160200160208202803683370190505b50965060005b81811015611ccb57611c998187016120dc565b62ffffff16888281518110611cb057611cb0613ac1565b6020908102919091010152611cc481613b16565b9050611c86565b5050505090919293565b606080600080611d4686886001600160a01b03166317f11ecc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d419190613bbf565b612a56565b85519091508067ffffffffffffffff811115611d6457611d64613b99565b604051908082528060200260200182016040528015611d8d578160200160208202803683370190505b5094508067ffffffffffffffff811115611da957611da9613b99565b604051908082528060200260200182016040528015611dd2578160200160208202803683370190505b50935060005b81811015611f74576000611df78883815181106117df576117df613ac1565b604051630157d2d160e31b815262ffffff8216600482015290915060009081906001600160a01b038d1690630abe9688906024016040805180830381865afa158015611e47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6b9190613bfc565b60405163bd85b03960e01b815262ffffff8616600482015291935091506000906001600160a01b038e169063bd85b03990602401602060405180830381865afa158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190613afd565b90506000611f13846fffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff168a612a91565b9050808b8781518110611f2857611f28613ac1565b602002602001018181525050818a8781518110611f4757611f47613ac1565b6020908102919091010152611f5c818a613aea565b9850505050505080611f6d90613b16565b9050611dd8565b50505093509350939050565b604080516001808252818301909252600091829190602080830190803683375091925050503660011981013560f01c90036014013581600081518110611fc857611fc8613ac1565b6020908102919091010152604051632b357fb560e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063566aff6a906120249030908690600401613c26565b600060405180830381865afa158015612041573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120699190810190613d3d565b5050905060006001546120a261209c7f000000000000000000000000000000000000000000000000000000000000000090565b3061228d565b6120ac9190613ad7565b905080826000815181106120c2576120c2613ac1565b60200260200101516120d49190613aea565b935050505090565b8062ffffff8116811461210257604051639b63641560e01b815260040160405180910390fd5b919050565b600060ff831684811b9061ffff6101008290031686901c906121319087906001901b868585612afc565b9695505050505050565b600080600061214a8686612ba8565b915091506121318686868585612afc565b600080600061216a8686612ba8565b9150915081600014612180578360ff1682901c92505b80156121c057600160ff85161b81106121ac57604051638e471a8960e01b815260040160405180910390fd5b8360ff166101000361ffff1681901b830192505b50509392505050565b50505050505050565b8215610c4957610c4983634e430b5a60e01b8585856040516024016121f993929190613e23565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612bc7565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561226882612c2b565b5050565b61227b87878787878787612c9c565b6121c960045488888888888888612d1e565b60006001600160a01b0383161561230d576040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa1580156122e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123089190613afd565b610a72565b506001600160a01b031631919050565b8015610c49576001600160a01b0383166123a5576000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461237e576040519150601f19603f3d011682016040523d82523d6000602084013e612383565b606091505b50509050806115e057604051636750787b60e11b815260040160405180910390fd5b610c496001600160a01b0384168383612d65565b6123c887878787878787612db7565b6121c960045488888888888888612dfc565b6123e684848484612e42565b6115e060045485858585612e4a565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0385166124405760405163e602df0560e01b81526000600482015260240161118f565b6001600160a01b03841661246a57604051634a1406b160e11b81526000600482015260240161118f565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561154257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516124df91815260200190565b60405180910390a35050505050565b6124f6611677565b61154284612536858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612ea792505050565b6117a9565b7410000000000000000000000000000000000000000086161561257d5761257d86630d4abdb360e01b87878787876040516024016121f9959493929190613ea4565b505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0384166125d357818160020160008282546125c89190613aea565b909155506126459050565b6001600160a01b038416600090815260208290526040902054828110156126265760405163391434e360e21b81526001600160a01b0386166004820152602481018290526044810184905260640161118f565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316612663576002810180548390039055612682565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126c791815260200190565b60405180910390a350505050565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e2bbb1583660011981013560f01c9003601401356040516001600160e01b031960e084901b168152600481019190915260006024820152604401600060405180830381600087803b15801561275657600080fd5b505af115801561276a573d6000803e3d6000fd5b50505050600061279a61209c7f000000000000000000000000000000000000000000000000000000000000000090565b9050600154816127aa9190613ad7565b91505090565b6004548015610c49576040516308ae304f60e31b81526001600160a01b038216906345718278906127e79086908690600401613c26565b600060405180830381600087803b15801561280157600080fd5b505af11580156121c9573d6000803e3d6000fd5b61281d612f52565b6111a181612fa0565b6000808061283684860186613ee3565b935093509350506000836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561287d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128a59190810190613f3f565b90506000836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156128e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261290f9190810190613f3f565b9050600082826129228661ffff16612fd2565b60405160200161293493929190613fd3565b60408051601f19818403018152828201909152601582527f4c4220486f6f6b73204d6f6520526577617264657200000000000000000000006020830152915061297d8183613072565b612988306001613084565b6129b4307f0000000000000000000000000000000000000000000000000000000000000000600161145c565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e2bbb1583660011981013560f01c9003601401356040516001600160e01b031960e084901b168152600481019190915260016024820152604401600060405180830381600087803b158015612a3357600080fd5b505af1158015612a47573d6000803e3d6000fd5b50505050505050505050505050565b600061271071ffff00000000000000000000000000000000608084901b1604600160801b0162ffffff8416627fffff1901610a4a82826130ba565b60008315612acc575080830281848281612aad57612aad614046565b0414612acc576040516363f1e01f60e01b815260040160405180910390fd5b8215610a725760809290921b91820182811015610a72576040516363f1e01f60e01b815260040160405180910390fd5b600081600003612b1d57838381612b1557612b15614046565b049050610a4a565b838210612b3d576040516313eae71560e01b815260040160405180910390fd5b600084868809600186198101871660008190038190049091018683119095039490940294038390049390931760029290940460038102831880820284030280820284030280820284030280820284030280820284030290810290920390910292909202949350505050565b6000806000198385098385029250828110838203039150509250929050565b600080839050602083015160e01c602060008551602087016000865af192503d151583151615612bfb573d6000803e3d6000fd5b8060005160e01c14601f3d11168316925050816115e057604051636c93cb9b60e01b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b612ca4611677565b612ce1868585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506117a992505050565b6121c9858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506117a992505050565b7501000000000000000000000000000000000000000000881615611b4457611b44886379c8ccf760e01b898989898989896040516024016121f9979695949392919061405c565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610c49908490613323565b612dbf611677565b6121c9868585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506117a992505050565b74400000000000000000000000000000000000000000881615611b4457611b448863ea9db9d360e01b898989898989896040516024016121f9979695949392919061405c565b6115e0611677565b74010000000000000000000000000000000000000000851615611542576040516001600160a01b0380861660248301528416604482015282151560648201526084810182905261154290869063feee373560e01b9060a4016121f9565b80516060908067ffffffffffffffff811115612ec557612ec5613b99565b604051908082528060200260200182016040528015612eee578160200160208202803683370190505b50915060005b81811015612f4b57838181518110612f0e57612f0e613ac1565b602002602001015160001c62ffffff16838281518110612f3057612f30613ac1565b6020908102919091010152612f4481613b16565b9050612ef4565b5050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661092957604051631afcd79f60e31b815260040160405180910390fd5b612fa8612f52565b6001600160a01b03811661119857604051631e4fbdf760e01b81526000600482015260240161118f565b60606000612fdf83613386565b600101905060008167ffffffffffffffff811115612fff57612fff613b99565b6040519080825280601f01601f191660200182016040528015613029576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461303357509392505050565b61307a612f52565b6122688282613468565b6001600160a01b0382166130ae5760405163ec442f0560e01b81526000600482015260240161118f565b61226860008383612585565b6000806000836000036130d65750600160801b9150610a149050565b508260008112156130e8579015906000035b621000008110156132e157600160801b9250846fffffffffffffffffffffffffffffffff81111561311b57911591600019045b600182161561312c5792830260801c925b800260801c60028216156131425792830260801c925b800260801c60048216156131585792830260801c925b800260801c600882161561316e5792830260801c925b800260801c60108216156131845792830260801c925b800260801c602082161561319a5792830260801c925b800260801c60408216156131b05792830260801c925b8002608090811c908216156131c75792830260801c925b800260801c6101008216156131de5792830260801c925b800260801c6102008216156131f55792830260801c925b800260801c61040082161561320c5792830260801c925b800260801c6108008216156132235792830260801c925b800260801c61100082161561323a5792830260801c925b800260801c6120008216156132515792830260801c925b800260801c6140008216156132685792830260801c925b800260801c61800082161561327f5792830260801c925b800260801c620100008216156132975792830260801c925b800260801c620200008216156132af5792830260801c925b800260801c620400008216156132c75792830260801c925b800260801c620800008216156132df5792830260801c925b505b8260000361330c57604051631dba598d60e11b8152600481018690526024810185905260440161118f565b816133175782610a4a565b610a4a836000196140b2565b60006133386001600160a01b038416836134cb565b9050805160001415801561335d57508080602001905181019061335b91906140d4565b155b15610c4957604051635274afe760e01b81526001600160a01b038416600482015260240161118f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106133cf577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106133fb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061341957662386f26fc10000830492506010015b6305f5e1008310613431576305f5e100830492506008015b612710831061344557612710830492506004015b60648310613457576064830492506002015b600a8310610a145760010192915050565b613470612f52565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036134bc8482614137565b50600481016115e08382614137565b6060610a728383600084600080856001600160a01b031684866040516134f191906141f7565b60006040518083038185875af1925050503d806000811461352e576040519150601f19603f3d011682016040523d82523d6000602084013e613533565b606091505b509150915061213186838360608261354e5761230882613595565b815115801561356557506001600160a01b0384163b155b1561358e57604051639996b31560e01b81526001600160a01b038516600482015260240161118f565b5080610a72565b8051156135a55780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60005b838110156135d95781810151838201526020016135c1565b50506000910152565b60208152600082518060208401526136018160408501602087016135be565b601f01601f19169190910160400192915050565b6001600160a01b03811681146111a157600080fd5b6000806040838503121561363d57600080fd5b823561364881613615565b946020939093013593505050565b60008083601f84011261366857600080fd5b50813567ffffffffffffffff81111561368057600080fd5b6020830191508360208260051b850101111561369b57600080fd5b9250929050565b6000806000806000608086880312156136ba57600080fd5b85356136c581613615565b945060208601356136d581613615565b9350604086013567ffffffffffffffff8111156136f157600080fd5b6136fd88828901613656565b96999598509660600135949350505050565b60008060006060848603121561372457600080fd5b833561372f81613615565b9250602084013561373f81613615565b929592945050506040919091013590565b8035600281900b811461210257600080fd5b6000806040838503121561377557600080fd5b61377e83613750565b915061378c60208401613750565b90509250929050565b6000806000604084860312156137aa57600080fd5b83356137b581613615565b9250602084013567ffffffffffffffff8111156137d157600080fd5b6137dd86828701613656565b9497909650939450505050565b60008083601f8401126137fc57600080fd5b50813567ffffffffffffffff81111561381457600080fd5b60208301915083602082850101111561369b57600080fd5b60008060006040848603121561384157600080fd5b83359250602084013567ffffffffffffffff81111561385f57600080fd5b6137dd868287016137ea565b80151581146111a157600080fd5b6000806000806080858703121561388f57600080fd5b843561389a81613615565b935060208501356138aa81613615565b925060408501356138ba8161386b565b9396929550929360600135925050565b600080600080608085870312156138e057600080fd5b84356138eb81613615565b935060208501356138fb81613615565b93969395505050506040820135916060013590565b600080600080600080600060a0888a03121561392b57600080fd5b873561393681613615565b9650602088013561394681613615565b9550604088013561395681613615565b9450606088013567ffffffffffffffff8082111561397357600080fd5b61397f8b838c01613656565b909650945060808a013591508082111561399857600080fd5b506139a58a828b01613656565b989b979a50959850939692959293505050565b6000806000604084860312156139cd57600080fd5b83356139d881613615565b9250602084013567ffffffffffffffff81111561385f57600080fd5b600060208284031215613a0657600080fd5b8135610a7281613615565b60008060408385031215613a2457600080fd5b8235613a2f81613615565b91506020830135613a3f81613615565b809150509250929050565b600181811c90821680613a5e57607f821691505b602082108103613a7e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181036000831280158383131683831282161715613aba57613aba613a84565b5092915050565b634e487b7160e01b600052603260045260246000fd5b81810381811115610a1457610a14613a84565b80820180821115610a1457610a14613a84565b600060208284031215613b0f57600080fd5b5051919050565b600060018201613b2857613b28613a84565b5060010190565b600060208284031215613b4157600080fd5b8151610a7281613615565b600060208284031215613b5e57600080fd5b815162ffffff81168114610a7257600080fd5b8082018281126000831280158216821582161715613b9157613b91613a84565b505092915050565b634e487b7160e01b600052604160045260246000fd5b61ffff811681146111a157600080fd5b600060208284031215613bd157600080fd5b8151610a7281613baf565b80516fffffffffffffffffffffffffffffffff8116811461210257600080fd5b60008060408385031215613c0f57600080fd5b613c1883613bdc565b915061378c60208401613bdc565b6000604082016001600160a01b03851683526020604081850152818551808452606086019150828701935060005b81811015613c7057845183529383019391830191600101613c54565b5090979650505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613ca657613ca6613b99565b604052919050565b600067ffffffffffffffff821115613cc857613cc8613b99565b5060051b60200190565b600082601f830112613ce357600080fd5b81516020613cf8613cf383613cae565b613c7d565b82815260059290921b84018101918181019086841115613d1757600080fd5b8286015b84811015613d325780518352918301918301613d1b565b509695505050505050565b600080600060608486031215613d5257600080fd5b835167ffffffffffffffff80821115613d6a57600080fd5b613d7687838801613cd2565b9450602091508186015181811115613d8d57600080fd5b8601601f81018813613d9e57600080fd5b8051613dac613cf382613cae565b81815260059190911b8201840190848101908a831115613dcb57600080fd5b928501925b82841015613df2578351613de381613615565b82529285019290850190613dd0565b60408a0151909750945050505080821115613e0c57600080fd5b50613e1986828701613cd2565b9150509250925092565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613e8b57600080fd5b8260051b80836020870137939093016020019392505050565b60006001600160a01b03808816835280871660208401525060806040830152613ed1608083018587613e59565b90508260608301529695505050505050565b60008060008060808587031215613ef957600080fd5b8435613f0481613615565b93506020850135613f1481613615565b92506040850135613f2481613615565b91506060850135613f3481613baf565b939692955090935050565b600060208284031215613f5157600080fd5b815167ffffffffffffffff80821115613f6957600080fd5b818401915084601f830112613f7d57600080fd5b815181811115613f8f57613f8f613b99565b613fa2601f8201601f1916602001613c7d565b9150808252856020828501011115613fb957600080fd5b613fca8160208401602086016135be565b50949350505050565b6702b37ba32902621160c51b815260008451613ff68160088501602089016135be565b602d60f81b60089184019182015284516140178160098401602089016135be565b601d60f91b60099290910191820152835161403981600a8401602088016135be565b01600a0195945050505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b03808a168352808916602084015280881660408401525060a0606083015261409160a083018688613e59565b82810360808401526140a4818587613e59565b9a9950505050505050505050565b6000826140cf57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156140e657600080fd5b8151610a728161386b565b601f821115610c4957600081815260208120601f850160051c810160208610156141185750805b601f850160051c820191505b8181101561257d57828155600101614124565b815167ffffffffffffffff81111561415157614151613b99565b6141658161415f8454613a4a565b846140f1565b602080601f83116001811461419a57600084156141825750858301515b600019600386901b1c1916600185901b17855561257d565b600085815260208120601f198616915b828110156141c9578886015182559484019460019091019084016141aa565b50858210156141e75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082516142098184602087016135be565b919091019291505056fea2646970667358221220092971438547e5fb439e93856ab9f892d9d470e9a15fbdbb2250ed35eba72c9f64736f6c6343000814003300000000000000000000000084ebcc334c24ce53e7c7551670c92a4bd2a84afb000000000000000000000000a756f7d419e1a5cbd656a438443011a7de1955b50000000000000000000000004515a45337f461a11ff0fe8abf3c606ae5dc00c9