ERC-20
Overview
Max Total Supply
62,835.381205221616110636 pOHM
Holders
239
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000078467151842977 pOHMValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x027CE48B...72BF9b1C7 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
WeightedIndex
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// https://peapods.finance// SPDX-License-Identifier: MITpragma solidity ^0.8.19;import '@uniswap/v3-core/contracts/libraries/FixedPoint96.sol';import './interfaces/IUniswapV2Pair.sol';import './interfaces/IV3TwapUtilities.sol';import './DecentralizedIndex.sol';contract WeightedIndex is DecentralizedIndex {using SafeERC20 for IERC20;IUniswapV2Factory immutable V2_FACTORY;uint256 _totalWeights;constructor(string memory _name,string memory _symbol,Fees memory _fees,address[] memory _tokens,uint256[] memory _weights,address _partner,address _pairedLpToken,address _lpRewardsToken,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)pragma solidity ^0.8.0;import "../utils/Context.sol";/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. This* can later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/abstract contract Ownable is Context {address private _owner;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);/*** @dev Initializes the contract setting the deployer as the initial owner.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)pragma solidity ^0.8.0;interface IERC5267 {/*** @dev MAY be emitted to signal that the domain could have changed.*/event EIP712DomainChanged();/*** @dev returns the fields and values that describe the domain separator used by this contract for EIP-712* signature.*/function eip712Domain()externalviewreturns (bytes1 fields,string memory name,string memory version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] memory extensions
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)pragma solidity ^0.8.0;import "./IERC20.sol";import "./extensions/IERC20Metadata.sol";import "../../utils/Context.sol";/*** @dev Implementation of the {IERC20} interface.** This implementation is agnostic to the way tokens are created. This means* that a supply mechanism has to be added in a derived contract using {_mint}.* For a generic mechanism see {ERC20PresetMinterPauser}.** TIP: For a detailed writeup see our guide* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How* to implement supply mechanisms].** The default value of {decimals} is 18. To change this, you should override* this function so it returns a different value.** We have followed general OpenZeppelin Contracts guidelines: functions revert* instead returning `false` on failure. This behavior is nonetheless* conventional and does not conflict with the expectations of ERC20
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/ERC20Permit.sol)pragma solidity ^0.8.0;import "./IERC20Permit.sol";import "../ERC20.sol";import "../../../utils/cryptography/ECDSA.sol";import "../../../utils/cryptography/EIP712.sol";import "../../../utils/Counters.sol";/*** @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].** Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by* presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't* need to send a transaction, and thus is not required to hold Ether at all.** _Available since v3.4._*/abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {using Counters for Counters.Counter;mapping(address => Counters.Counter) private _nonces;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)pragma solidity ^0.8.0;import "../IERC20.sol";/*** @dev Interface for the optional metadata functions from the ERC20 standard.** _Available since v4.1._*/interface IERC20Metadata is IERC20 {/*** @dev Returns the name of the token.*/function name() external view returns (string memory);/*** @dev Returns the symbol of the token.*/function symbol() external view returns (string memory);/*** @dev Returns the decimals places of the token.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/IERC20Permit.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].** Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't* need to send a transaction, and thus is not required to hold Ether at all.*/interface IERC20Permit {/*** @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,* given ``owner``'s signed approval.** IMPORTANT: The same issues {IERC20-approve} has related to transaction* ordering also apply here.** Emits an {Approval} event.** Requirements:** - `spender` cannot be the zero address.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the amount of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/utils/SafeERC20.sol)pragma solidity ^0.8.0;import "../IERC20.sol";import "../extensions/IERC20Permit.sol";import "../../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC20 operations that throw on failure (when the token* contract returns false). Tokens that return no value (and instead revert or* throw on failure) are also supported, non-reverting calls are assumed to be* successful.* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20 {using Address for address;/*** @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,* non-reverting calls are assumed to be successful.*/function safeTransfer(IERC20 token, address to, uint256 value) internal {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed** Furthermore, `isContract` will also return true if the target contract within
123456789101112131415161718192021222324// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)pragma solidity ^0.8.0;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)pragma solidity ^0.8.0;/*** @title Counters* @author Matt Condon (@shrugs)* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number* of elements in a mapping, issuing ERC721 ids, or counting request ids.** Include with `using Counters for Counters.Counter;`*/library Counters {struct Counter {// This variable should never be directly accessed by users of the library: interactions must be restricted to// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add// this feature: see https://github.com/ethereum/solidity/issues/4637uint256 _value; // default: 0}function current(Counter storage counter) internal view returns (uint256) {return counter._value;}function increment(Counter storage counter) internal {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)pragma solidity ^0.8.0;import "../Strings.sol";/*** @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.** These functions can be used to verify that a message was signed by the holder* of the private keys of a given address.*/library ECDSA {enum RecoverError {NoError,InvalidSignature,InvalidSignatureLength,InvalidSignatureS,InvalidSignatureV // Deprecated in v4.8}function _throwError(RecoverError error) private pure {if (error == RecoverError.NoError) {return; // no error: do nothing} else if (error == RecoverError.InvalidSignature) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)pragma solidity ^0.8.8;import "./ECDSA.sol";import "../ShortStrings.sol";import "../../interfaces/IERC5267.sol";/*** @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.** The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,* thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding* they need in their contracts using a combination of `abi.encode` and `keccak256`.** This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding* scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA* ({_hashTypedDataV4}).** The implementation of the domain separator was designed to be as efficient as possible while still properly updating* the chain id to protect against replay attacks on an eventual fork of the chain.** NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method* https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)pragma solidity ^0.8.0;/*** @dev Standard math utilities missing in the Solidity language.*/library Math {enum Rounding {Down, // Toward negative infinityUp, // Toward infinityZero // Toward zero}/*** @dev Returns the largest of two numbers.*/function max(uint256 a, uint256 b) internal pure returns (uint256) {return a > b ? a : b;}/*** @dev Returns the smallest of two numbers.*/function min(uint256 a, uint256 b) internal pure returns (uint256) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)pragma solidity ^0.8.0;/*** @dev Standard signed math utilities missing in the Solidity language.*/library SignedMath {/*** @dev Returns the largest of two signed numbers.*/function max(int256 a, int256 b) internal pure returns (int256) {return a > b ? a : b;}/*** @dev Returns the smallest of two signed numbers.*/function min(int256 a, int256 b) internal pure returns (int256) {return a < b ? a : b;}/*** @dev Returns the average of two signed numbers without overflow.* The result is rounded towards zero.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)pragma solidity ^0.8.8;import "./StorageSlot.sol";// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |// | length | 0x BB |type ShortString is bytes32;/*** @dev This library provides functions to convert short memory strings* into a `ShortString` type that can be used as an immutable variable.** Strings of arbitrary length can be optimized using this library if* they are short enough (up to 31 bytes) by packing them with their* length (1 byte) in a single EVM word (32 bytes). Additionally, a* fallback mechanism can be used for every other case.** Usage example:** ```solidity* contract Named {* using ShortStrings for *;*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.pragma solidity ^0.8.0;/*** @dev Library for reading and writing primitive types to specific storage slots.** Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.* This library helps with reading and writing to such slots without the need for inline assembly.** The functions in this library return Slot structs that contain a `value` member that can be used to read or write.** Example usage to set ERC1967 implementation slot:* ```solidity* contract ERC1967 {* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;** function _getImplementation() internal view returns (address) {* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;* }** function _setImplementation(address newImplementation) internal {* require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)pragma solidity ^0.8.0;import "./math/Math.sol";import "./math/SignedMath.sol";/*** @dev String operations.*/library Strings {bytes16 private constant _SYMBOLS = "0123456789abcdef";uint8 private constant _ADDRESS_LENGTH = 20;/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {unchecked {uint256 length = Math.log10(value) + 1;string memory buffer = new string(length);uint256 ptr;/// @solidity memory-safe-assemblyassembly {ptr := add(buffer, add(32, length))
123456789101112131415161718192021// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Callback for IUniswapV3PoolActions#swap/// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interfaceinterface IUniswapV3SwapCallback {/// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap./// @dev In the implementation you must pay the pool tokens owed for the swap./// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory./// amount0Delta and amount1Delta can both be 0 if no tokens were swapped./// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by/// the end of the swap. If positive, the callback must send that amount of token0 to the pool./// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by/// the end of the swap. If positive, the callback must send that amount of token1 to the pool./// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap callfunction uniswapV3SwapCallback(int256 amount0Delta,int256 amount1Delta,bytes calldata data) external;}
12345678910// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.4.0;/// @title FixedPoint96/// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format)/// @dev Used in SqrtPriceMath.sollibrary FixedPoint96 {uint8 internal constant RESOLUTION = 96;uint256 internal constant Q96 = 0x1000000000000000000000000;}
123456789101112// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Immutable state/// @notice Functions that return immutable state of the routerinterface IPeripheryImmutableState {/// @return Returns the address of the Uniswap V3 factoryfunction factory() external view returns (address);/// @return Returns the address of WETH9function WETH9() external view returns (address);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.7.5;pragma abicoder v2;import '@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol';/// @title Router token swapping functionality/// @notice Functions for swapping tokens via Uniswap V3interface ISwapRouter is IUniswapV3SwapCallback {struct ExactInputSingleParams {address tokenIn;address tokenOut;uint24 fee;address recipient;uint256 deadline;uint256 amountIn;uint256 amountOutMinimum;uint160 sqrtPriceLimitX96;}/// @notice Swaps `amountIn` of one token for as much as possible of another token/// @param params The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata/// @return amountOut The amount of the received tokenfunction exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut);struct ExactInputParams {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.19;import '@openzeppelin/contracts/access/Ownable.sol';import '@openzeppelin/contracts/token/ERC20/ERC20.sol';import '@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol';import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';import './interfaces/IDecentralizedIndex.sol';import './interfaces/IFlashLoanRecipient.sol';import './interfaces/IProtocolFeeRouter.sol';import './interfaces/ITokenRewards.sol';import './interfaces/IUniswapV2Factory.sol';import './interfaces/IUniswapV2Router02.sol';import './StakingPoolToken.sol';abstract contract DecentralizedIndex isIDecentralizedIndex,ERC20,ERC20Permit{using SafeERC20 for IERC20;uint256 constant DEN = 10000;uint256 constant SWAP_DELAY = 20; // secondsaddress constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;address constant V3_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.19;import '@openzeppelin/contracts/token/ERC20/IERC20.sol';interface IDecentralizedIndex is IERC20 {enum IndexType {WEIGHTED,UNWEIGHTED}// all fees: 1 == 0.01%, 10 == 0.1%, 100 == 1%struct Fees {uint256 burn;uint256 bond;uint256 debond;uint256 buy;uint256 sell;uint256 partner;}struct IndexAssetInfo {address token;uint256 weighting;uint256 basePriceUSDX96;address c1; // arbitrary contract/address field we can use for an index
123456// SPDX-License-Identifier: MITpragma solidity ^0.8.19;interface IFlashLoanRecipient {function callback(bytes calldata data) external;}
12345678910// SPDX-License-Identifier: MITpragma solidity ^0.8.19;import '@openzeppelin/contracts/token/ERC20/IERC20.sol';interface IPEAS is IERC20 {event Burn(address indexed user, uint256 amount);function burn(uint256 amount) external;}
12345678// SPDX-License-Identifier: MITpragma solidity ^0.8.19;import './IProtocolFees.sol';interface IProtocolFeeRouter {function protocolFees() external view returns (IProtocolFees);}
12345678910111213// SPDX-License-Identifier: MITpragma solidity ^0.8.19;interface IProtocolFees {event SetYieldAdmin(uint256 newFee);event SetYieldBurn(uint256 newFee);function DEN() external view returns (uint256);function yieldAdmin() external view returns (uint256);function yieldBurn() external view returns (uint256);}
1234567891011121314151617181920// SPDX-License-Identifier: MITpragma solidity ^0.8.19;interface IStakingPoolToken {event Stake(address indexed executor, address indexed user, uint256 amount);event Unstake(address indexed user, uint256 amount);function indexFund() external view returns (address);function stakingToken() external view returns (address);function poolRewards() external view returns (address);function stakeUserRestriction() external view returns (address);function stake(address user, uint256 amount) external;function unstake(uint256 amount) external;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.19;interface ITokenRewards {event AddShares(address indexed wallet, uint256 amount);event RemoveShares(address indexed wallet, uint256 amount);event ClaimReward(address indexed wallet);event DistributeReward(address indexed wallet, uint256 amount);event DepositRewards(address indexed wallet, uint256 amount);function totalShares() external view returns (uint256);function totalStakers() external view returns (uint256);function rewardsToken() external view returns (address);function trackingToken() external view returns (address);function depositFromPairedLpToken(uint256 amount,uint256 slippageOverride) external;
1234567891011121314// SPDX-License-Identifier: MITpragma solidity ^0.8.19;interface IUniswapV2Factory {function createPair(address tokenA,address tokenB) external returns (address pair);function getPair(address tokenA,address tokenB) external view returns (address pair);}
12345678910111213// SPDX-License-Identifier: MITpragma solidity ^0.8.19;interface IUniswapV2Pair {function token0() external view returns (address);function token1() external view returns (address);function getReserves()externalviewreturns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.19;interface IUniswapV2Router02 {function factory() external view returns (address);function WETH() external view returns (address);function addLiquidity(address tokenA,address tokenB,uint amountADesired,uint amountBDesired,uint amountAMin,uint amountBMin,address to,uint deadline) external returns (uint amountA, uint amountB, uint liquidity);function removeLiquidity(address tokenA,address tokenB,uint liquidity,uint amountAMin,uint amountBMin,address to,
12345678910111213141516171819202122232425// SPDX-License-Identifier: MITpragma solidity ^0.8.19;interface IV3TwapUtilities {function getV3Pool(address v3Factory,address token0,address token1,uint24 poolFee) external view returns (address);function getPoolPriceUSDX96(address pricePool,address nativeStablePool,address WETH9) external view returns (uint256);function sqrtPriceX96FromPoolAndInterval(address pool) external view returns (uint160);function priceX96FromSqrtPriceX96(uint160 sqrtPriceX96) external pure returns (uint256);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.19;// ----------------------------------------------------------------------------// BokkyPooBah's DateTime Library v1.00//// A gas-efficient Solidity date and time library//// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary//// Tested date range 1970/01/01 to 2345/12/31//// Conventions:// Unit | Range | Notes// :-------- |:-------------:|:-----// timestamp | >= 0 | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC// year | 1970 ... 2345 |// month | 1 ... 12 |// day | 1 ... 31 |// hour | 0 ... 23 |// minute | 0 ... 59 |// second | 0 ... 59 |// dayOfWeek | 1 ... 7 | 1 = Monday, ..., 7 = Sunday////// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Provides functions for deriving a pool address from the factory, tokens, and the feelibrary PoolAddress {bytes32 internal constant POOL_INIT_CODE_HASH =0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54;/// @notice The identifying key of the poolstruct PoolKey {address token0;address token1;uint24 fee;}/// @notice Returns PoolKey: the ordered tokens with the matched fee levels/// @param tokenA The first token of a pool, unsorted/// @param tokenB The second token of a pool, unsorted/// @param fee The fee level of the pool/// @return Poolkey The pool details with ordered token0 and token1 assignmentsfunction getPoolKey(address tokenA,address tokenB,uint24 fee) internal pure returns (PoolKey memory) {if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.19;import '@openzeppelin/contracts/token/ERC20/ERC20.sol';import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';import './interfaces/IProtocolFeeRouter.sol';import './interfaces/IStakingPoolToken.sol';import './TokenRewards.sol';contract StakingPoolToken is IStakingPoolToken, ERC20 {using SafeERC20 for IERC20;address public immutable override indexFund;address public immutable override stakingToken;address public immutable override poolRewards;address public override stakeUserRestriction;modifier onlyRestricted() {require(_msgSender() == stakeUserRestriction, 'RESUSERAUTH');_;}constructor(string memory _name,string memory _symbol,address _pairedLpToken,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.19;import '@openzeppelin/contracts/access/Ownable.sol';import '@openzeppelin/contracts/token/ERC20/IERC20.sol';import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';import '@openzeppelin/contracts/utils/Context.sol';import '@uniswap/v3-core/contracts/libraries/FixedPoint96.sol';import '@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol';import '@uniswap/v3-periphery/contracts/interfaces/IPeripheryImmutableState.sol';import './interfaces/IDecentralizedIndex.sol';import './interfaces/IPEAS.sol';import './interfaces/IProtocolFees.sol';import './interfaces/IProtocolFeeRouter.sol';import './interfaces/ITokenRewards.sol';import './interfaces/IV3TwapUtilities.sol';import './interfaces/IUniswapV2Router02.sol';import './libraries/BokkyPooBahsDateTimeLibrary.sol';import './libraries/PoolAddress.sol';contract TokenRewards is ITokenRewards, Context {using SafeERC20 for IERC20;address constant V3_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564;uint256 constant PRECISION = 10 ** 36;uint24 constant REWARDS_POOL_FEE = 10000; // 1%
12345678910111213141516171819202122{"metadata": {"bytecodeHash": "none"},"optimizer": {"enabled": true,"runs": 200},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","devdoc","userdoc","metadata","abi"]}},"libraries": {}}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"components":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"bond","type":"uint256"},{"internalType":"uint256","name":"debond","type":"uint256"},{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"partner","type":"uint256"}],"internalType":"struct IDecentralizedIndex.Fees","name":"_fees","type":"tuple"},{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_weights","type":"uint256[]"},{"internalType":"address","name":"_partner","type":"address"},{"internalType":"address","name":"_pairedLpToken","type":"address"},{"internalType":"address","name":"_lpRewardsToken","type":"address"},{"internalType":"address","name":"_v2Router","type":"address"},{"internalType":"bool","name":"_stakeRestriction","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountDAI","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"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":"wallet","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTokensBonded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokensMinted","type":"uint256"}],"name":"Bond","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newIdx","type":"address"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"Create","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountDebonded","type":"uint256"}],"name":"Debond","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountLiquidity","type":"uint256"}],"name":"RemoveLiquidity","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"},{"inputs":[],"name":"BOND_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEBOND_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASH_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAIRED_LP_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_idxLPTokens","type":"uint256"},{"internalType":"uint256","name":"_pairedLPTokens","type":"uint256"},{"internalType":"uint256","name":"_slippage","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"addLiquidityV2","outputs":[],"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":"amount","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":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_amountMintMin","type":"uint256"}],"name":"bond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"created","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint8[]","name":"","type":"uint8[]"}],"name":"debond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"fees","outputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"bond","type":"uint256"},{"internalType":"uint256","name":"debond","type":"uint256"},{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"partner","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"flash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllAssets","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"weighting","type":"uint256"},{"internalType":"uint256","name":"basePriceUSDX96","type":"uint256"},{"internalType":"address","name":"c1","type":"address"},{"internalType":"uint256","name":"q1","type":"uint256"}],"internalType":"struct IDecentralizedIndex.IndexAssetInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIdxPriceUSDX96","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sourceToken","type":"address"},{"internalType":"uint256","name":"_sourceAmount","type":"uint256"},{"internalType":"address","name":"_targetToken","type":"address"}],"name":"getInitialAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getTokenPriceUSDX96","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"indexTokens","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"weighting","type":"uint256"},{"internalType":"uint256","name":"basePriceUSDX96","type":"uint256"},{"internalType":"address","name":"c1","type":"address"},{"internalType":"uint256","name":"q1","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"indexType","outputs":[{"internalType":"enum IDecentralizedIndex.IndexType","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"isAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRewardsToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpStakingPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"partner","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":[],"name":"processPreSwapFeesAndSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lpTokens","type":"uint256"},{"internalType":"uint256","name":"_minIdxTokens","type":"uint256"},{"internalType":"uint256","name":"_minPairedLpToken","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"removeLiquidityV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_partner","type":"address"}],"name":"setPartner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setPartnerFee","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":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6102806040526015805462ffff001916620101001790553480156200002357600080fd5b506040516200a52e3803806200a52e833981016040819052620000469162000e77565b898960008a88888888888880604051806040016040528060018152602001603160f81b8152508b8b81600390816200007f919062001037565b5060046200008e828262001037565b50620000a09150839050600562000b5b565b61012052620000b181600662000b5b565b61014052815160208084019190912060e052815190820120610100524660a0526200013f60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525060646200015a612710601462001119565b62000166919062001133565b86606001511115620001a85760405162461bcd60e51b81526020600482015260066024820152656c746532302560d01b60448201526064015b60405180910390fd5b6064620001b9612710601462001119565b620001c5919062001133565b86608001511115620002035760405162461bcd60e51b81526020600482015260066024820152656c746532302560d01b60448201526064016200019f565b606462000214612710604662001119565b62000220919062001133565b865111156200025b5760405162461bcd60e51b81526020600482015260066024820152656c746537302560d01b60448201526064016200019f565b60646200026c612710606362001119565b62000278919062001133565b86602001511115620002b55760405162461bcd60e51b81526020600482015260056024820152646c7439392560d81b60448201526064016200019f565b6064620002c6612710606362001119565b620002d2919062001133565b866040015111156200030f5760405162461bcd60e51b81526020600482015260056024820152646c7439392560d81b60448201526064016200019f565b606462000320612710600562001119565b6200032c919062001133565b8660a001511115620003695760405162461bcd60e51b81526020600482015260056024820152646c7465352560d81b60448201526064016200019f565b8660018111156200037e576200037e62001156565b6101e081600181111562000396576200039662001156565b90525042610200528551600a556020860151600b556040860151600c556060860151600d556080860151600e5560a0860151600f55600980546001600160a01b0319166001600160a01b038781169190911790915583811661024052828116610180526000908516156200040b578462000421565b736b175474e89094c44da98b954eedeac495271d0f5b9050806001600160a01b0316610160816001600160a01b0316815250506000836001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200047f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a591906200116c565b6040516364e329cb60e11b81523060048201526001600160a01b038481166024830152919091169063c9c65396906044016020604051808303816000875af1158015620004f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051c91906200116c565b90508a60405160200162000531919062001191565b6040516020818303038152906040528a604051602001620005539190620011c2565b604051602081830303815290604052838388876200057357600062000575565b335b737d544dd34abbe24c8832db27820ff53c151e949b73024ff47d552cb222b265d68c7aeb26e586d5229d604051620005ad9062000bd7565b620005c09897969594939291906200121b565b604051809103906000f080158015620005dd573d6000803e3d6000fd5b506001600160a01b03908116610220528181166101a052604080516315ab88c960e31b815290519186169163ad5c4648916004808201926020929091908290030181865afa15801562000634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200065a91906200116c565b6001600160a01b03166101c052604051339030907f96b5b9b8a7193304150caccf9b80d150675fa3d6af57761d8d8ef1d6f9a1a90990600090a35050505050505050505050816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070491906200116c565b6001600160a01b03166102605285518751146200074d5760405162461bcd60e51b81526004016200019f906020808252600490820152631253925560e21b604082015260600190565b60005b8751811015620009de57601160008983815181106200077357620007736200128a565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615620007cf5760405162461bcd60e51b815260206004820152600360248201526204455560ec1b60448201526064016200019f565b6000878281518110620007e657620007e66200128a565b602002602001015111620008265760405162461bcd60e51b81526004016200019f9060208082526004908201526315d5905360e21b604082015260600190565b60106040518060a001604052808a84815181106200084857620008486200128a565b60200260200101516001600160a01b031681526020018984815181106200087357620008736200128a565b602090810291909101810151825260008282018190526040808401829052606093840182905285546001818101885596835291839020855160059093020180546001600160a01b039384166001600160a01b031991821617825593860151968101969096558401516002860155918301516003850180549190931691161790556080015160049091015586518790829081106200091457620009146200128a565b6020026020010151601660008282546200092f9190620012a0565b9250508190555080601260008a84815181106200095057620009506200128a565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506001601160008a84815181106200099757620009976200128a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620009d581620012b6565b91505062000750565b50600086600081518110620009f757620009f76200128a565b60200260200101516016546c0100000000000000000000000062000a1c919062001119565b62000a28919062001133565b905060005b885181101562000b495760165489828151811062000a4f5762000a4f6200128a565b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000abb9190620012d2565b62000ac890600a620013f4565b838a848151811062000ade5762000ade6200128a565b602002602001015162000af2919062001119565b62000afe919062001119565b62000b0a919062001133565b6010828154811062000b205762000b206200128a565b60009182526020909120600460059092020101558062000b4081620012b6565b91505062000a2d565b5050505050505050505050506200143f565b600060208351101562000b7b5762000b738362000b94565b905062000b8e565b8162000b88848262001037565b5060ff90505b92915050565b600080829050601f8151111562000bc2578260405163305a27a960e01b81526004016200019f919062001405565b805162000bcf826200141a565b179392505050565b613cbb806200687383390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000c265762000c2662000be5565b604052919050565b60005b8381101562000c4b57818101518382015260200162000c31565b50506000910152565b600082601f83011262000c6657600080fd5b81516001600160401b0381111562000c825762000c8262000be5565b62000c97601f8201601f191660200162000bfb565b81815284602083860101111562000cad57600080fd5b62000cc082602083016020870162000c2e565b949350505050565b600060c0828403121562000cdb57600080fd5b60405160c081016001600160401b038111828210171562000d005762000d0062000be5565b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b60006001600160401b0382111562000d615762000d6162000be5565b5060051b60200190565b80516001600160a01b038116811462000d8357600080fd5b919050565b600082601f83011262000d9a57600080fd5b8151602062000db362000dad8362000d45565b62000bfb565b82815260059290921b8401810191818101908684111562000dd357600080fd5b8286015b8481101562000df95762000deb8162000d6b565b835291830191830162000dd7565b509695505050505050565b600082601f83011262000e1657600080fd5b8151602062000e2962000dad8362000d45565b82815260059290921b8401810191818101908684111562000e4957600080fd5b8286015b8481101562000df9578051835291830191830162000e4d565b8051801515811462000d8357600080fd5b6000806000806000806000806000806101e08b8d03121562000e9857600080fd5b8a516001600160401b038082111562000eb057600080fd5b62000ebe8e838f0162000c54565b9b5060208d015191508082111562000ed557600080fd5b62000ee38e838f0162000c54565b9a5062000ef48e60408f0162000cc8565b99506101008d015191508082111562000f0c57600080fd5b62000f1a8e838f0162000d88565b98506101208d015191508082111562000f3257600080fd5b5062000f418d828e0162000e04565b96505062000f536101408c0162000d6b565b945062000f646101608c0162000d6b565b935062000f756101808c0162000d6b565b925062000f866101a08c0162000d6b565b915062000f976101c08c0162000e66565b90509295989b9194979a5092959850565b600181811c9082168062000fbd57607f821691505b60208210810362000fde57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200103257600081815260208120601f850160051c810160208610156200100d5750805b601f850160051c820191505b818110156200102e5782815560010162001019565b5050505b505050565b81516001600160401b0381111562001053576200105362000be5565b6200106b8162001064845462000fa8565b8462000fe4565b602080601f831160018114620010a357600084156200108a5750858301515b600019600386901b1c1916600185901b1785556200102e565b600085815260208120601f198616915b82811015620010d457888601518255948401946001909101908401620010b3565b5085821015620010f35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000b8e5762000b8e62001103565b6000826200115157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156200117f57600080fd5b6200118a8262000d6b565b9392505050565b66029ba30b5b2b2160cd1b815260008251620011b581600785016020870162000c2e565b9190910160070192915050565b607360f81b815260008251620011e081600185016020870162000c2e565b9190910160010192915050565b600081518084526200120781602086016020860162000c2e565b601f01601f19169290920160200192915050565b6000610100808352620012318184018c620011ed565b9050828103602084015262001247818b620011ed565b6001600160a01b03998a16604085015297891660608401525050938616608085015291851660a0840152841660c083015290921660e09092019190915292915050565b634e487b7160e01b600052603260045260246000fd5b8082018082111562000b8e5762000b8e62001103565b600060018201620012cb57620012cb62001103565b5060010190565b600060208284031215620012e557600080fd5b815160ff811681146200118a57600080fd5b600181815b80851115620013385781600019048211156200131c576200131c62001103565b808516156200132a57918102915b93841c9390800290620012fc565b509250929050565b600082620013515750600162000b8e565b81620013605750600062000b8e565b81600181146200137957600281146200138457620013a4565b600191505062000b8e565b60ff84111562001398576200139862001103565b50506001821b62000b8e565b5060208310610133831016604e8410600b8410161715620013c9575081810a62000b8e565b620013d58383620012f7565b8060001904821115620013ec57620013ec62001103565b029392505050565b60006200118a60ff84168362001340565b6020815260006200118a6020830184620011ed565b8051602080830151919081101562000fde5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051610240516102605161523b6200163860003960008181612e6b0152613b6a01526000818161042101528181611a2301528181611b6601528181614173015261425e01526000818161049f015281816117ac0152818161199d015261405f0152600081816102fc015261360f015260006103ed015260008181612de201528181612e40015281816130e50152613b3d01526000818161250c015281816125d9015281816126160152818161293b015281816129b401528181612a0401526138d5015260008181610eb201528181610f3b01528181610f6a015281816110b10152818161117f01528181612638015281816126c7015281816129770152818161403601526141ec0152600081816103ae01528181610e3401528181610edc01528181610f1901528181610f92015281816110dd0152818161115d015281816111f80152818161128c0152818161131301528181611a670152818161267b01528181613fde015281816141020152818161419d01528181614288015281816142d701528181614361015261440b01526000610b1301526000610ae801526000612bb301526000612b8b01526000612ae601526000612b1001526000612b3a015261523b6000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c806395d89b4111610146578063bdc8d060116100c3578063d757a9fb11610087578063d757a9fb14610620578063dd62ed3e14610633578063e4b5495714610646578063ee9c79da14610659578063f68239961461066c578063ff140ca61461067f57600080fd5b8063bdc8d060146105b3578063be10862b146105bb578063c87fa42a146105ce578063ccec3716146105fa578063d505accf1461060d57600080fd5b8063a9059cbb1161010a578063a9059cbb1461055f578063a9e9c8bc14610572578063b08d033314610585578063bb46302714610598578063bdbc91ab146105a057600080fd5b806395d89b41146104de5780639af1d35a146104e65780639d649e6614610531578063a16d596014610539578063a457c2d71461054c57600080fd5b806339509351116101df57806358f4dcc3116101a357806358f4dcc31461041c57806370a08231146104435780637ecebe001461046c57806384b0196e1461047f57806394cc699e1461049a57806395b3921e146104c157600080fd5b8063395093511461033957806342966c681461034c5780634a437f881461035f5780634f4ce61d146103a957806353f50447146103e857600080fd5b80632acada4d116102265780632acada4d146102d3578063313ce567146102e8578063325a19f1146102f75780633644e5151461031e5780633741454d1461032657600080fd5b806306fdde0314610263578063095ea7b31461028157806318160ddd146102a457806320800a00146102b657806323b872dd146102c0575b600080fd5b61026b610687565b6040516102789190614890565b60405180910390f35b61029461028f3660046148bf565b610719565b6040519015158152602001610278565b6002545b604051908152602001610278565b6102be610733565b005b6102946102ce3660046148eb565b6108ba565b6102db6108de565b604051610278919061492c565b60405160128152602001610278565b6102a87f000000000000000000000000000000000000000000000000000000000000000081565b6102a8610975565b6102be6103343660046149a8565b610984565b6102946103473660046148bf565b610a0f565b6102be61035a3660046149a8565b610a31565b61037261036d3660046149a8565b610a6f565b604080516001600160a01b03968716815260208101959095528401929092529092166060820152608081019190915260a001610278565b6103d07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610278565b61040f7f000000000000000000000000000000000000000000000000000000000000000081565b60405161027891906149d7565b6103d07f000000000000000000000000000000000000000000000000000000000000000081565b6102a86104513660046149ff565b6001600160a01b031660009081526020819052604090205490565b6102a861047a3660046149ff565b610abc565b610487610ada565b6040516102789796959493929190614a1c565b6103d07f000000000000000000000000000000000000000000000000000000000000000081565b6104c9610b63565b60408051928352602083019190915201610278565b61026b610cc6565b600a54600b54600c54600d54600e54600f5461050495949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610278565b6102a8600a81565b6102be6105473660046149ff565b610cd5565b61029461055a3660046148bf565b610d44565b61029461056d3660046148bf565b610dbf565b6102be610580366004614ab2565b610dcd565b6102be610593366004614ae4565b61138f565b6102be6117aa565b6102be6105ae366004614b19565b611880565b600c546102a8565b6009546103d0906001600160a01b031681565b6102946105dc3660046149ff565b6001600160a01b031660009081526011602052604090205460ff1690565b6102be6106083660046149ff565b611e02565b6102be61061b366004614bc7565b611f94565b6102a861062e3660046149ff565b6120f8565b6102a8610641366004614c38565b612103565b6102a8610654366004614c71565b61212e565b6102be610667366004614d92565b6122a8565b6102be61067a366004614ab2565b6124c2565b600b546102a8565b60606003805461069690614e5f565b80601f01602080910402602001604051908101604052809291908181526020018280546106c290614e5f565b801561070f5780601f106106e45761010080835404028352916020019161070f565b820191906000526020600020905b8154815290600101906020018083116106f257829003601f168201915b5050505050905090565b600033610727818585612798565b60019150505b92915050565b60155462010000900460ff166107645760405162461bcd60e51b815260040161075b90614e93565b60405180910390fd5b6015805462ff000019169055476107a55760405162461bcd60e51b815260206004820152600560248201526409c9e8aa8960db1b604482015260640161075b565b600073024ff47d552cb222b265d68c7aeb26e586d5229d6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081d9190614eb3565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610867576040519150601f19603f3d011682016040523d82523d6000602084013e61086c565b606091505b50509050806108a65760405162461bcd60e51b815260040161075b9060208082526004908201526314d1539560e21b604082015260600190565b506015805462ff0000191662010000179055565b6000336108c88582856128bd565b6108d3858585612937565b506001949350505050565b60606010805480602002602001604051908101604052809291908181526020016000905b8282101561096c5760008481526020908190206040805160a0810182526005860290920180546001600160a01b0390811684526001808301548587015260028301549385019390935260038201541660608401526004015460808301529083529092019101610902565b50505050905090565b600061097f612ad9565b905090565b6009546001600160a01b0316336001600160a01b0316146109d15760405162461bcd60e51b81526020600482015260076024820152662820a92a2722a960c91b604482015260640161075b565b600f548110610a0a5760405162461bcd60e51b8152602060048201526005602482015264262a21aaa960d91b604482015260640161075b565b600f55565b600033610727818585610a228383612103565b610a2c9190614ee6565b612798565b60155462010000900460ff16610a595760405162461bcd60e51b815260040161075b90614e93565b6015805462ff0000191690556108a63382612c04565b60108181548110610a7f57600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092169085565b6001600160a01b03811660009081526007602052604081205461072d565b600060608082808083610b0e7f00000000000000000000000000000000000000000000000000000000000000006005612d33565b610b397f00000000000000000000000000000000000000000000000000000000000000006006612d33565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080806601000000000000815b601054811015610cb957600082610bb360108481548110610b9457610b94614ef9565b60009182526020909120600590910201546001600160a01b0316612dde565b610bbd9190614f0f565b90508260108381548110610bd357610bd3614ef9565b6000918252602091829020600590910201546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4a9190614f31565b610c5590600a615032565b60108481548110610c6857610c68614ef9565b90600052602060002090600502016004015483610c859190615041565b610c8f9190614f0f565b610c999190614f0f565b610ca39085614ee6565b9350508080610cb190615058565b915050610b71565b5060009491935090915050565b60606004805461069690614e5f565b6009546001600160a01b0316336001600160a01b031614610d225760405162461bcd60e51b81526020600482015260076024820152662820a92a2722a960c91b604482015260640161075b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60003381610d528286612103565b905083811015610db25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161075b565b6108d38286868403612798565b600033610727818585612937565b60155462010000900460ff16610df55760405162461bcd60e51b815260040161075b90614e93565b6015805462ffff0019169055306000908152602081905260408120546040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190615071565b9050610eac3330886131d0565b610ed7307f000000000000000000000000000000000000000000000000000000000000000088612798565b610f0c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333088613374565b610f606001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000876133df565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e8e33700307f000000000000000000000000000000000000000000000000000000000000000089896103e8610fc08b8261508a565b610fca908e615041565b610fd49190614f0f565b6103e8610fe18c8261508a565b610feb908e615041565b610ff59190614f0f565b3360405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015260a483015290911660c482015260e48101869052610104016060604051808303816000875af115801561106e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611092919061509d565b5050604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152600092507f0000000000000000000000000000000000000000000000000000000000000000169063dd62ed3e90604401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190615071565b905080156111a4576111a46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008361348c565b306000908152602081905260409020548310156111e1576111e130333060009081526020819052604090205486906111dc919061508a565b6131d0565b6040516370a0823160e01b815230600482015282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126b9190615071565b111561133a5761133a336040516370a0823160e01b815230600482015284907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156112db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ff9190615071565b611309919061508a565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190613595565b604080518881526020810188905233917f06239653922ac7bea6aa2b19dc486b9361821d37712eb796adfd38d81de278ca910160405180910390a250506015805462ffff001916620101001790555050505050565b60155462010000900460ff166113b75760405162461bcd60e51b815260040161075b90614e93565b6015805462ffff00191690556001600160a01b03831660009081526011602052604090205460ff1661141a5760405162461bcd60e51b815260206004820152600c60248201526b24a72b20a624a22a27a5a2a760a11b604482015260640161075b565b6001600160a01b0383166000818152601260205260408082205490516370a0823160e01b81523060048201529092906370a0823190602401602060405180830381865afa15801561146f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114939190615071565b9050600061149f6135c5565b90506000816114c657826114b7600160601b88615041565b6114c19190614f0f565b6114cc565b600160601b5b90506000821561153757601085815481106114e9576114e9614ef9565b906000526020600020906005020160040154611503601290565b61150e90600a615032565b61151c600160601b8a615041565b6115269190615041565b6115309190614f0f565b905061155d565b600160601b8261154660025490565b6115509190615041565b61155a9190614f0f565b90505b6000611568336135d6565b61158c57600b546127109061157d9084615041565b6115879190614f0f565b61158f565b60005b90508661159c828461508a565b10156115d05760405162461bcd60e51b815260206004820152600360248201526226a4a760e91b604482015260640161075b565b6115e3336115de838561508a565b613640565b80156115fc576115f33082613640565b6115fc816136ff565b60005b60105481101561173f576000856116bc57600160601b856010848154811061162957611629614ef9565b60009182526020909120600590910201546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a39190615071565b6116ad9190615041565b6116b79190614f0f565b6116f3565b6116f38b8b601085815481106116d4576116d4614ef9565b60009182526020909120600590910201546001600160a01b031661212e565b905061172c6010838154811061170b5761170b614ef9565b60009182526020909120600590910201546001600160a01b0316338361373e565b508061173781615058565b9150506115ff565b50611748613869565b60408051898152602081018490526001600160a01b038b169133917fad49529616fd9fe4b34e00ac3f98d5cc3531e1232a95f249113b23fdf13c7e85910160405180910390a350506015805462ffff0019166201010017905550505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611808573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182c9190614eb3565b6001600160a01b0316336001600160a01b0316146118765760405162461bcd60e51b81526020600482015260076024820152665245574152445360c81b604482015260640161075b565b61187e613897565b565b60155462010000900460ff166118a85760405162461bcd60e51b815260040161075b90614e93565b6015805462ff0000191690556001600160a01b03841660009081526011602052604090205460ff166119095760405162461bcd60e51b815260206004820152600a60248201526927a7262ca827a22a25a760b11b604482015260640161075b565b6000736b175474e89094c44da98b954eedeac495271d0f6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119819190614f31565b61198c90600a615032565b61199790600a615041565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1d9190614eb3565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316736b175474e89094c44da98b954eedeac495271d0f14611b2a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316736b175474e89094c44da98b954eedeac495271d0f14611b245773024ff47d552cb222b265d68c7aeb26e586d5229d6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1f9190614eb3565b611b2c565b81611b2c565b305b9050611b4e736b175474e89094c44da98b954eedeac495271d0f338386613374565b736b175474e89094c44da98b954eedeac495271d0e197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601611c0d57611bb2736b175474e89094c44da98b954eedeac495271d0f83856133df565b6040516345efb3f960e11b8152600481018490526001600160a01b03831690638bdf67f290602401600060405180830381600087803b158015611bf457600080fd5b505af1158015611c08573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c789190615071565b9050611c8e6001600160a01b0389168a89613595565b604051633a62959560e21b81526001600160a01b038a169063e98a565490611cbc90899089906004016150cb565b600060405180830381600087803b158015611cd657600080fd5b505af1158015611cea573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b038b1691506370a0823190602401602060405180830381865afa158015611d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d589190615071565b1015611d935760405162461bcd60e51b815260206004820152600a602482015269232620a9a420a32a22a960b11b604482015260640161075b565b6001600160a01b03891633604080516001600160a01b038c81168252602082018c905292909216917f5a9eeaf8949838813289046091e8ea8a9196a2265ac24841464a2d27026a8549910160405180910390a350506015805462ff000019166201000017905550505050505050565b60155462010000900460ff16611e2a5760405162461bcd60e51b815260040161075b90614e93565b6015805462ff0000191690556001600160a01b03811660009081526011602052604090205460ff16158015611e6857506001600160a01b0381163014155b611ea25760405162461bcd60e51b815260206004820152600b60248201526a554e415641494c41424c4560a81b604482015260640161075b565b6108a673024ff47d552cb222b265d68c7aeb26e586d5229d6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1b9190614eb3565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f839190615071565b6001600160a01b0384169190613595565b83421115611fe45760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161075b565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886120138c613a23565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061206e82613a4b565b9050600061207e82878787613a78565b9050896001600160a01b0316816001600160a01b0316146120e15760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161075b565b6120ec8a8a8a612798565b50505050505050505050565b600061072d82612dde565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03808416600081815260126020908152604080832054948616835280832054815163313ce56760e01b815291519395949093909263313ce56792600480820193918290030181865afa15801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b39190614f31565b6121be90600a615032565b601083815481106121d1576121d1614ef9565b906000526020600020906005020160010154856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190614f31565b61225090600a615032565b6010848154811061226357612263614ef9565b906000526020600020906005020160010154886122809190615041565b61228a9190615041565b6122949190614f0f565b61229e9190614f0f565b9695505050505050565b60155462010000900460ff166122d05760405162461bcd60e51b815260040161075b90614e93565b6015805462ffff001916905560006122e784613aa2565b61231557600c54612710906122fc908261508a565b6123069086615041565b6123109190614f0f565b612317565b835b9050600061232460025490565b612332600160601b84615041565b61233c9190614f0f565b9050612349333087612937565b6123533083612c04565b612365612360838761508a565b6136ff565b60005b6010548110156124745760006010828154811061238757612387614ef9565b60009182526020909120600590910201546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156123dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124019190615071565b90506000600160601b6124148584615041565b61241e9190614f0f565b9050801561245f5761245f33826010868154811061243e5761243e614ef9565b60009182526020909120600590910201546001600160a01b03169190613595565b5050808061246c90615058565b915050612368565b5060405185815233907fe4bf69c2fff7ace5eed72842e9abf52af2218a3a78cb83d7824f999dbfd75e719060200160405180910390a250506015805462ffff00191662010100179055505050565b60155462010000900460ff166124ea5760405162461bcd60e51b815260040161075b90614e93565b6015805462ffff00191690558315612502578361259a565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259a9190615071565b9350600084116125d45760405162461bcd60e51b81526020600482015260056024820152644c5052454d60d81b604482015260640161075b565b6126097f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087613374565b61265d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000866133df565b60408051635d5155ef60e11b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820187905260648201869052608482018590523360a483015260c4820184905282517f00000000000000000000000000000000000000000000000000000000000000009091169263baa2abde9260e4808201939182900301816000875af1158015612712573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273691906150fa565b505061273f3390565b6001600160a01b03167fdfdd120ded9b7afc0c23dd5310e93aaa3e1c3b9f75af9b805fab3030842439f28560405161277991815260200190565b60405180910390a250506015805462ffff001916620101001790555050565b6001600160a01b0383166127fa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161075b565b6001600160a01b03821661285b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161075b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006128c98484612103565b9050600019811461293157818110156129245760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161075b565b6129318484848403612798565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156129ac57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b6015549091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908516149060009060ff161580156129fd5750601554610100900460ff165b15612ab9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614612a4357612a43613897565b828015612a515750600d5415155b15612a7e57600d5461271090612a679086615041565b612a719190614f0f565b9050612a7e8630836131d0565b818015612a8c5750600e5415155b15612ab957600e5461271090612aa29086615041565b612aac9190614f0f565b9050612ab98630836131d0565b612ac2816136ff565b612ad186866111dc848861508a565b505050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612b3257507f000000000000000000000000000000000000000000000000000000000000000046145b15612b5c57507f000000000000000000000000000000000000000000000000000000000000000090565b61097f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b038216612c645760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161075b565b6001600160a01b03821660009081526020819052604090205481811015612cd85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161075b565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016128b0565b505050565b606060ff8314612d4d57612d4683613acd565b905061072d565b818054612d5990614e5f565b80601f0160208091040260200160405190810160405280929190818152602001828054612d8590614e5f565b8015612dd25780601f10612da757610100808354040283529160200191612dd2565b820191906000526020600020905b815481529060010190602001808311612db557829003601f168201915b5050505050905061072d565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612e215761072d613b0c565b60405163e6a4390560e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e6a4390590604401602060405180830381865afa158015612eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed89190614eb3565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3e9190614eb3565b90506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa49190614f31565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300a9190614eb3565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306b9190614f31565b9050600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156130ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d2919061513a565b509150915060006130e1613b0c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316146131725761312784600a615032565b6001600160701b03841661313c87600a615032565b61314f6001600160701b03861685615041565b6131599190615041565b6131639190614f0f565b61316d9190614f0f565b6131c3565b61317d85600a615032565b6001600160701b03831661319286600a615032565b6131a56001600160701b03871685615041565b6131af9190615041565b6131b99190614f0f565b6131c39190614f0f565b9998505050505050505050565b6001600160a01b0383166132345760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161075b565b6001600160a01b0382166132965760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161075b565b6001600160a01b0383166000908152602081905260409020548181101561330e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161075b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612931565b6040516001600160a01b03808516602483015283166044820152606481018290526129319085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613eb2565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa15801561342f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134539190615071565b90506129318463095ea7b360e01b8561346c8686614ee6565b6040516001600160a01b03909216602483015260448201526064016133a8565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa1580156134dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135009190615071565b9050818110156135645760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b606482015260840161075b565b6040516001600160a01b0384166024820152828203604482015261293190859063095ea7b360e01b906064016133a8565b6040516001600160a01b038316602482015260448101829052612d2e90849063a9059cbb60e01b906064016133a8565b60006135d060025490565b15919050565b60006135e06135c5565b8061072d57506009546001600160a01b0383811691161480156136035750601354155b801561072d57506136377f000000000000000000000000000000000000000000000000000000000000000062093a80614ee6565b42111592915050565b6001600160a01b0382166136965760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161075b565b80600260008282546136a89190614ee6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80158061370c5750600a54155b156137145750565b61373b30612710600a600001548461372c9190615041565b6137369190614f0f565b612c04565b50565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015613785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a99190615071565b90506137c06001600160a01b038516843085613374565b6137ca8282614ee6565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa15801561380e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138329190615071565b10156129315760405162461bcd60e51b815260206004820152600660248201526515119495905360d21b604482015260640161075b565b60135415801561388c57506009546001600160a01b0316336001600160a01b0316145b1561187e5742601355565b6000601480546138a79190614ee6565b4211905060006138cc306001600160a01b031660009081526020819052604090205490565b9050600061390f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526020819052604090205490565b905060006064613920836001615041565b61392a9190614f0f565b90508380156139395750808310155b80156139455750600082115b15612931576015805460ff19166001179055426014556000613968826019615041565b8410156139975761397a82600a615041565b84101561398757816139a2565b61399282600a615041565b6139a2565b6139a2826019615041565b9050600080600a600501541180156139c457506009546001600160a01b031615155b156139ff57600f54612710906139da9084615041565b6139e49190614f0f565b6009549091506139ff9030906001600160a01b0316836131d0565b613a11613a0c828461508a565b613f87565b50506015805460ff1916905550505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061072d613a58612ad9565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000613a89878787876144e7565b91509150613a96816145ab565b5090505b949350505050565b60006064613aaf60025490565b613aba906062615041565b613ac49190614f0f565b90911015919050565b60606000613ada836146f5565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60405163e6a4390560e01b8152736b175474e89094c44da98b954eedeac495271d0f60048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063e6a4390590604401602060405180830381865afa158015613bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd59190614eb3565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c3b9190614eb3565b9050600080826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca29190614f31565b846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d049190614eb3565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d659190614f31565b91509150600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce919061513a565b5090925090506001600160a01b038516736b175474e89094c44da98b954eedeac495271d0f14613e5257613e0383600a615032565b6001600160701b038316613e1886600a615032565b613e2f6001600160701b038516600160601b615041565b613e399190615041565b613e439190614f0f565b613e4d9190614f0f565b613ea7565b613e5d84600a615032565b6001600160701b038216613e7285600a615032565b613e896001600160701b038616600160601b615041565b613e939190615041565b613e9d9190614f0f565b613ea79190614f0f565b965050505050505090565b6000613f07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661471d9092919063ffffffff16565b9050805160001480613f28575080806020019051810190613f28919061517f565b612d2e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161075b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613fbc57613fbc614ef9565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061401057614010614ef9565b60200260200101906001600160a01b031690816001600160a01b03168152505061405b307f000000000000000000000000000000000000000000000000000000000000000084612798565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140df9190614eb3565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015614149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061416d9190615071565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146141d057826141d2565b305b604051635c11d79560e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d7959061422a9088906000908990879042906004016151a1565b600060405180830381600087803b15801561424457600080fd5b505af1158015614258573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036143e9576040516370a0823160e01b815230600482015260009083906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561431e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143429190615071565b61434c919061508a565b905080156143e3576143886001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685836133df565b6040516345efb3f960e11b8152600481018290526001600160a01b03851690638bdf67f290602401600060405180830381600087803b1580156143ca57600080fd5b505af11580156143de573d6000803e3d6000fd5b505050505b506144e0565b6040516370a0823160e01b81526001600160a01b0384811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015614454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144789190615071565b11156144e0576040516370b9f1f960e01b815260006004820181905260248201526001600160a01b038416906370b9f1f990604401600060405180830381600087803b1580156144c757600080fd5b505af11580156144db573d6000803e3d6000fd5b505050505b5050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561451e57506000905060036145a2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614572573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661459b576000600192509250506145a2565b9150600090505b94509492505050565b60008160048111156145bf576145bf6149c1565b036145c75750565b60018160048111156145db576145db6149c1565b036146285760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161075b565b600281600481111561463c5761463c6149c1565b036146895760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161075b565b600381600481111561469d5761469d6149c1565b0361373b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161075b565b600060ff8216601f81111561072d57604051632cd44ac360e21b815260040160405180910390fd5b6060613a9a848460008585600080866001600160a01b031685876040516147449190615212565b60006040518083038185875af1925050503d8060008114614781576040519150601f19603f3d011682016040523d82523d6000602084013e614786565b606091505b5091509150614797878383876147a2565b979650505050505050565b6060831561481157825160000361480a576001600160a01b0385163b61480a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161075b565b5081613a9a565b613a9a83838151156148265781518083602001fd5b8060405162461bcd60e51b815260040161075b9190614890565b60005b8381101561485b578181015183820152602001614843565b50506000910152565b6000815180845261487c816020860160208601614840565b601f01601f19169290920160200192915050565b6020815260006148a36020830184614864565b9392505050565b6001600160a01b038116811461373b57600080fd5b600080604083850312156148d257600080fd5b82356148dd816148aa565b946020939093013593505050565b60008060006060848603121561490057600080fd5b833561490b816148aa565b9250602084013561491b816148aa565b929592945050506040919091013590565b602080825282518282018190526000919060409081850190868401855b8281101561499b57815180516001600160a01b03908116865287820151888701528682015187870152606080830151909116908601526080908101519085015260a09093019290850190600101614949565b5091979650505050505050565b6000602082840312156149ba57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106149f957634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215614a1157600080fd5b81356148a3816148aa565b60ff60f81b881681526000602060e081840152614a3c60e084018a614864565b8381036040850152614a4e818a614864565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015614aa057835183529284019291840191600101614a84565b50909c9b505050505050505050505050565b60008060008060808587031215614ac857600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215614af957600080fd5b8335614b04816148aa565b95602085013595506040909401359392505050565b600080600080600060808688031215614b3157600080fd5b8535614b3c816148aa565b94506020860135614b4c816148aa565b935060408601359250606086013567ffffffffffffffff80821115614b7057600080fd5b818801915088601f830112614b8457600080fd5b813581811115614b9357600080fd5b896020828501011115614ba557600080fd5b9699959850939650602001949392505050565b60ff8116811461373b57600080fd5b600080600080600080600060e0888a031215614be257600080fd5b8735614bed816148aa565b96506020880135614bfd816148aa565b955060408801359450606088013593506080880135614c1b81614bb8565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215614c4b57600080fd5b8235614c56816148aa565b91506020830135614c66816148aa565b809150509250929050565b600080600060608486031215614c8657600080fd5b8335614c91816148aa565b9250602084013591506040840135614ca8816148aa565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614cf257614cf2614cb3565b604052919050565b600067ffffffffffffffff821115614d1457614d14614cb3565b5060051b60200190565b600082601f830112614d2f57600080fd5b81356020614d44614d3f83614cfa565b614cc9565b82815260059290921b84018101918181019086841115614d6357600080fd5b8286015b84811015614d87578035614d7a81614bb8565b8352918301918301614d67565b509695505050505050565b600080600060608486031215614da757600080fd5b8335925060208085013567ffffffffffffffff80821115614dc757600080fd5b818701915087601f830112614ddb57600080fd5b8135614de9614d3f82614cfa565b81815260059190911b8301840190848101908a831115614e0857600080fd5b938501935b82851015614e2f578435614e20816148aa565b82529385019390850190614e0d565b965050506040870135925080831115614e4757600080fd5b5050614e5586828701614d1e565b9150509250925092565b600181811c90821680614e7357607f821691505b602082108103613a4557634e487b7160e01b600052602260045260246000fd5b6020808252600690820152651313d0d2d15160d21b604082015260600190565b600060208284031215614ec557600080fd5b81516148a3816148aa565b634e487b7160e01b600052601160045260246000fd5b8082018082111561072d5761072d614ed0565b634e487b7160e01b600052603260045260246000fd5b600082614f2c57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215614f4357600080fd5b81516148a381614bb8565b600181815b80851115614f89578160001904821115614f6f57614f6f614ed0565b80851615614f7c57918102915b93841c9390800290614f53565b509250929050565b600082614fa05750600161072d565b81614fad5750600061072d565b8160018114614fc35760028114614fcd57614fe9565b600191505061072d565b60ff841115614fde57614fde614ed0565b50506001821b61072d565b5060208310610133831016604e8410600b841016171561500c575081810a61072d565b6150168383614f4e565b806000190482111561502a5761502a614ed0565b029392505050565b60006148a360ff841683614f91565b808202811582820484141761072d5761072d614ed0565b60006001820161506a5761506a614ed0565b5060010190565b60006020828403121561508357600080fd5b5051919050565b8181038181111561072d5761072d614ed0565b6000806000606084860312156150b257600080fd5b8351925060208401519150604084015190509250925092565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000806040838503121561510d57600080fd5b505080516020909101519092909150565b80516001600160701b038116811461513557600080fd5b919050565b60008060006060848603121561514f57600080fd5b6151588461511e565b92506151666020850161511e565b9150604084015163ffffffff81168114614ca857600080fd5b60006020828403121561519157600080fd5b815180151581146148a357600080fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156151f15784516001600160a01b0316835293830193918301916001016151cc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008251615224818460208701614840565b919091019291505056fea164736f6c6343000813000a60e06040523480156200001157600080fd5b5060405162003cbb38038062003cbb833981016040819052620000349162000213565b878760036200004483826200038a565b5060046200005382826200038a565b506200005f9150503390565b6001600160a01b03908116608081905286821660a052600580546001600160a01b0319169286169290921790915560405183918391899030908990620000a59062000115565b6001600160a01b0396871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260c001604051809103906000f080158015620000f9573d6000803e3d6000fd5b506001600160a01b031660c05250620004569650505050505050565b612596806200172583390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200014b57600080fd5b81516001600160401b038082111562000168576200016862000123565b604051601f8301601f19908116603f0116810190828211818310171562000193576200019362000123565b81604052838152602092508683858801011115620001b057600080fd5b600091505b83821015620001d45785820183015181830184015290820190620001b5565b600093810190920192909252949350505050565b6001600160a01b0381168114620001fe57600080fd5b50565b80516200020e81620001e8565b919050565b600080600080600080600080610100898b0312156200023157600080fd5b88516001600160401b03808211156200024957600080fd5b620002578c838d0162000139565b995060208b01519150808211156200026e57600080fd5b506200027d8b828c0162000139565b97505060408901516200029081620001e8565b60608a0151909650620002a381620001e8565b60808a0151909550620002b681620001e8565b60a08a0151909450620002c981620001e8565b60c08a0151909350620002dc81620001e8565b9150620002ec60e08a0162000201565b90509295985092959890939650565b600181811c908216806200031057607f821691505b6020821081036200033157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200038557600081815260208120601f850160051c81016020861015620003605750805b601f850160051c820191505b8181101562000381578281556001016200036c565b5050505b505050565b81516001600160401b03811115620003a657620003a662000123565b620003be81620003b78454620002fb565b8462000337565b602080601f831160018114620003f65760008415620003dd5750858301515b600019600386901b1c1916600185901b17855562000381565b600085815260208120601f198616915b82811015620004275788860151825594840194600190910190840162000406565b5085821015620004465787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c051611283620004a26000396000818161023001528181610d1e0152610dd00152600081816101f1015281816103da01526105680152600061025701526112836000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80638bc6beb2116100ad578063adc9772e11610071578063adc9772e146102a7578063c56e0ad8146102ba578063da0e1dab146102c2578063dba802d9146102d5578063dd62ed3e146102e857600080fd5b80638bc6beb21461022b57806390eb39111461025257806395d89b4114610279578063a457c2d714610281578063a9059cbb1461029457600080fd5b80632e17de78116100f45780632e17de781461018c578063313ce567146101a157806339509351146101b057806370a08231146101c357806372f702f3146101ec57600080fd5b806306fdde0314610126578063095ea7b31461014457806318160ddd1461016757806323b872dd14610179575b600080fd5b61012e6102fb565b60405161013b91906110ba565b60405180910390f35b610157610152366004611109565b61038d565b604051901515815260200161013b565b6002545b60405190815260200161013b565b610157610187366004611133565b6103a7565b61019f61019a36600461116f565b6103cb565b005b6040516012815260200161013b565b6101576101be366004611109565b610441565b61016b6101d1366004611188565b6001600160a01b031660009081526020819052604090205490565b6102137f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013b565b6102137f000000000000000000000000000000000000000000000000000000000000000081565b6102137f000000000000000000000000000000000000000000000000000000000000000081565b61012e610463565b61015761028f366004611109565b610472565b6101576102a2366004611109565b6104f2565b61019f6102b5366004611109565b610500565b61019f6105dc565b600554610213906001600160a01b031681565b61019f6102e3366004611188565b61063f565b61016b6102f63660046111aa565b6106b2565b60606003805461030a906111dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610336906111dd565b80156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b5050505050905090565b60003361039b8185856106dd565b60019150505b92915050565b6000336103b5858285610801565b6103c085858561087b565b506001949350505050565b6103d53382610a25565b6104097f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163383610b63565b60405181815233907f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd9060200160405180910390a250565b60003361039b81858561045483836106b2565b61045e9190611217565b6106dd565b60606004805461030a906111dd565b6000338161048082866106b2565b9050838110156104e55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6103c082868684036106dd565b60003361039b81858561087b565b6005546001600160a01b031615610559576005546001600160a01b038381169116146105595760405162461bcd60e51b8152602060048201526008602482015267149154d5149250d560c21b60448201526064016104dc565b6105638282610bc6565b6105987f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333084610c91565b6040518181526001600160a01b0383169033907f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f79060200160405180910390a35050565b6005546001600160a01b0316336001600160a01b03161461062d5760405162461bcd60e51b815260206004820152600b60248201526a0a48aa6aaa68aa482aaa8960ab1b60448201526064016104dc565b600580546001600160a01b0319169055565b6005546001600160a01b0316336001600160a01b0316146106905760405162461bcd60e51b815260206004820152600b60248201526a0a48aa6aaa68aa482aaa8960ab1b60448201526064016104dc565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661073f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104dc565b6001600160a01b0382166107a05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104dc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061080d84846106b2565b9050600019811461087557818110156108685760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104dc565b61087584848484036106dd565b50505050565b6001600160a01b0383166108df5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104dc565b6001600160a01b0382166109415760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104dc565b6001600160a01b038316600090815260208190526040902054818110156109b95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104dc565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610875848484610cc9565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104dc565b6001600160a01b03821660009081526020819052604090205481811015610af95760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104dc565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610b5e83600084610cc9565b505050565b6040516001600160a01b038316602482015260448101829052610b5e90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610e31565b6001600160a01b038216610c1c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104dc565b8060026000828254610c2e9190611217565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610c8d60008383610cc9565b5050565b6040516001600160a01b03808516602483015283166044820152606481018290526108759085906323b872dd60e01b90608401610b8f565b6001600160a01b03831615801590610cec57506001600160a01b03831661dead14155b15610d7b5760405163d6460b4b60e01b81526001600160a01b03848116600483015260248201839052600160448301527f0000000000000000000000000000000000000000000000000000000000000000169063d6460b4b90606401600060405180830381600087803b158015610d6257600080fd5b505af1158015610d76573d6000803e3d6000fd5b505050505b6001600160a01b03821615801590610d9e57506001600160a01b03821661dead14155b15610b5e5760405163d6460b4b60e01b81526001600160a01b03838116600483015260248201839052600060448301527f0000000000000000000000000000000000000000000000000000000000000000169063d6460b4b90606401600060405180830381600087803b158015610e1457600080fd5b505af1158015610e28573d6000803e3d6000fd5b50505050505050565b6000610e86826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610f069092919063ffffffff16565b9050805160001480610ea7575080806020019051810190610ea79190611238565b610b5e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104dc565b6060610f158484600085610f1d565b949350505050565b606082471015610f7e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104dc565b600080866001600160a01b03168587604051610f9a919061125a565b60006040518083038185875af1925050503d8060008114610fd7576040519150601f19603f3d011682016040523d82523d6000602084013e610fdc565b606091505b5091509150610fed87838387610ff8565b979650505050505050565b60608315611067578251600003611060576001600160a01b0385163b6110605760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104dc565b5081610f15565b610f15838381511561107c5781518083602001fd5b8060405162461bcd60e51b81526004016104dc91906110ba565b60005b838110156110b1578181015183820152602001611099565b50506000910152565b60208152600082518060208401526110d9816040850160208701611096565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461110457600080fd5b919050565b6000806040838503121561111c57600080fd5b611125836110ed565b946020939093013593505050565b60008060006060848603121561114857600080fd5b611151846110ed565b925061115f602085016110ed565b9150604084013590509250925092565b60006020828403121561118157600080fd5b5035919050565b60006020828403121561119a57600080fd5b6111a3826110ed565b9392505050565b600080604083850312156111bd57600080fd5b6111c6836110ed565b91506111d4602084016110ed565b90509250929050565b600181811c908216806111f157607f821691505b60208210810361121157634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103a157634e487b7160e01b600052601160045260246000fd5b60006020828403121561124a57600080fd5b815180151581146111a357600080fd5b6000825161126c818460208701611096565b919091019291505056fea164736f6c6343000813000a610140604052600a6004553480156200001757600080fd5b5060405162002596380380620025968339810160408190526200003a9162000083565b6001600160a01b0395861660c05293851660e052918416608052831660a052821661010052166101205262000117565b6001600160a01b03811681146200008057600080fd5b50565b60008060008060008060c087890312156200009d57600080fd5b8651620000aa816200006a565b6020880151909650620000bd816200006a565b6040880151909550620000d0816200006a565b6060880151909450620000e3816200006a565b6080880151909350620000f6816200006a565b60a088015190925062000109816200006a565b809150509295509295509295565b60805160a05160c05160e0516101005161012051612356620002406000396000818161023f015281816102890152818161053a01528181610593015281816105fb0152818161088f015281816109b901528181610c4601528181610db101528181610e2b01528181610e7e0152818161178b0152818161197c015281816119ea0152611c260152600081816101cd0152610f460152600081816106fd0152818161078d0152610b710152600081816104310152818161103201526114990152600081816102b3015281816103240152818161036c01528181610564015281816105b4015281816105da015281816107fe015281816109090152818161098a01528181610b2501528181610bfb01528181611bfc0152611c6f01526000611b8901526123566000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063a95ae7eb11610097578063d076eabc11610066578063d076eabc14610227578063d1af0c7d1461023a578063d279c19114610261578063d6460b4b1461027457600080fd5b8063a95ae7eb1461019f578063ba32722e146101a8578063bde30818146101c8578063ce7c2ac21461020757600080fd5b806386989038116100d3578063869890381461016757806389d96917146101705780638bdf67f2146101835780639c1454d41461019657600080fd5b80630700037d146100fa5780633a98ef391461013b57806370b9f1f914610152575b600080fd5b61012161010836600461206d565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b61014460005481565b604051908152602001610132565b61016561016036600461208a565b610287565b005b61014460015481565b61014461017e36600461206d565b610cd9565b6101656101913660046120ac565b610d61565b61014460065481565b61014460075481565b6101446101b63660046120ac565b60086020526000908152604090205481565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610132565b61014461021536600461206d565b60026020526000908152604090205481565b6101446102353660046120ac565b610eb1565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b61016561026f36600461206d565b610f03565b6101656102823660046120d3565b610f43565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036103195760405162461bcd60e51b81526020600482015260096024820152684c5052455753414d4560b81b60448201526064015b60405180910390fd5b8115610354576103547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333085610fba565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156103bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103df9190612115565b90506000811161041b5760405162461bcd60e51b81526020600482015260076024820152662722a2a22a25a760c91b6044820152606401610310565b60008061042661102b565b5090508015610535577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b1919061212e565b6001600160a01b0316633c9a07006040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105129190612115565b61051c8285612161565b610526919061218e565b915061053282846121a2565b92505b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316106105d8577f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061061b565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005b9150915060006040518060600160405280846001600160a01b03168152602001836001600160a01b0316815260200161271062ffffff16815250905060006106d873e592427a0aece92de3edee1f18e0157c058615646001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d2919061212e565b83611191565b604051637fb4f79d60e01b81526001600160a01b0380831660048301529192506000917f00000000000000000000000000000000000000000000000000000000000000001690637fb4f79d90602401602060405180830381865afa158015610744573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610768919061212e565b60405163352fc4cd60e21b81526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063d4bf133490602401602060405180830381865afa1580156107d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f89190612115565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316146108535781610844600160601b8c612161565b61084e919061218e565b61086c565b600160601b6108628b84612161565b61086c919061218e565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa9190612115565b90506109446001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001673e592427a0aece92de3edee1f18e0157c058615648d61127a565b6000808d1161095557600454610957565b8c5b905073e592427a0aece92de3edee1f18e0157c058615646001600160a01b031663414bf3896040518061010001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200161271062ffffff168152602001306001600160a01b031681526020014281526020018f81526020016103e8856103e8610a1f91906121a2565b610a299089612161565b610a33919061218e565b815260006020918201526040805160e085811b6001600160e01b031916825284516001600160a01b03908116600484015293850151841660248301529184015162ffffff1660448201526060840151831660648201526080840151608482015260a084015160a482015260c084015160c48201529201511660e4820152610104016020604051808303816000875af1925050508015610aef575060408051601f3d908101601f19168201909252610aec91810190612115565b60015b610b65576101f46004541015610b1857600a60046000828254610b1291906121b5565b90915550505b610b606001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001673e592427a0aece92de3edee1f18e0157c058615648e611327565b610cc9565b508a15610c2257610c227f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf1919061212e565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908d611430565b600a60049081556040516370a0823160e01b81523091810191909152610cc99083907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a08231906024015b602060405180830381865afa158015610c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cba9190612115565b610cc491906121a2565b611460565b5050505050505050505050505050565b6001600160a01b0381166000908152600260205260408120548103610d0057506000919050565b6001600160a01b038216600090815260026020526040812054610d229061166d565b6001600160a01b038416600090815260036020526040902054909150808211610d4f575060009392505050565b610d5981836121a2565b949350505050565b60008111610d995760405162461bcd60e51b8152602060048201526005602482015264444550414d60d81b6044820152606401610310565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e249190612115565b9050610e5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333085610fba565b6040516370a0823160e01b8152306004820152610ead9082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401610c79565b5050565b600080610ebd8361169d565b925050506201518083610ed091906121c8565b610edb6001836121a2565b610ee89062015180612161565b610ef290856121a2565b610efc91906121a2565b9392505050565b610f0c816116c3565b6040516001600160a01b038216907f63e32091e4445d16e29c33a6b264577c2d86694021aa4e6f4dd590048f5792e890600090a250565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610faa5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610310565b610fb58383836117f9565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526110259085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611891565b50505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b2919061212e565b90506001600160a01b0381161561118c57806001600160a01b031663676011556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611101573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111259190612115565b9250806001600160a01b0316630389ed176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111899190612115565b91505b509091565b600081602001516001600160a01b031682600001516001600160a01b0316106111b957600080fd5b815160208084015160408086015181516001600160a01b0395861681860152949092168482015262ffffff90911660608085019190915281518085038201815260808501909252815191909201206001600160f81b031960a08401529085901b6bffffffffffffffffffffffff191660a183015260b58201527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d582015260f50160408051601f1981840301815291905280516020909101209392505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa1580156112ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ee9190612115565b90506110258463095ea7b360e01b8561130786866121b5565b6040516001600160a01b0390921660248301526044820152606401610fee565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b9190612115565b9050818110156113ff5760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b6064820152608401610310565b6040516001600160a01b0384166024820152828203604482015261102590859063095ea7b360e01b90606401610fee565b6040516001600160a01b038316602482015260448101829052610fb590849063a9059cbb60e01b90606401610fee565b8060000361146b5750565b6000546000036114815761147e81611966565b50565b80600061148c61102b565b91505080156115ae5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611519919061212e565b6001600160a01b0316633c9a07006040518163ffffffff1660e01b8152600401602060405180830381865afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a9190612115565b6115848386612161565b61158e919061218e565b905080156115ac5761159f81611966565b6115a981846121a2565b92505b505b81600760008282546115c091906121b5565b90915550829050600860006115d442610eb1565b815260200190815260200160002060008282546115f191906121b5565b9091555050600054611612836ec097ce7bc90715b34b9f1000000000612161565b61161c919061218e565b6005600082825461162d91906121b5565b909155505060405182815233907fb9ad861b752f80117b35bea6dec99933d8a5ae360f2839ee8784b750d5613409906020015b60405180910390a2505050565b60006ec097ce7bc90715b34b9f10000000006005548361168d9190612161565b611697919061218e565b92915050565b600080806116b66116b1620151808661218e565b611a13565b9196909550909350915050565b6001600160a01b03811660009081526002602052604081205490036116e55750565b60006116f082610cd9565b6001600160a01b0383166000908152600360205260408120600101805492935083929091906117209084906121b5565b90915550506001600160a01b0382166000908152600260205260409020546117479061166d565b6001600160a01b0383166000908152600360205260409020558015610ead57806006600082825461177891906121b5565b909155506117b290506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611430565b816001600160a01b03167fe8b160e373db99a103e0a2abfa029b9c3fc8b328984a1ead8a65ae68ae646db7826040516117ed91815260200190565b60405180910390a25050565b611801611b87565b801561184c576118118383611cf6565b826001600160a01b03167fae0577e1c96b26fbc0b9df702431f5470979d001d24f136eded791b8b6521d6f8360405161166091815260200190565b6118568383611e2d565b826001600160a01b03167fba8f3777cf908803bf1f3dd58e7f4b7d3de4dbe3c234c4ccab0975d98f7cd3888360405161166091815260200190565b60006118e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f359092919063ffffffff16565b905080516000148061190757508080602001905181019061190791906121dc565b610fb55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610310565b604051630852cd8d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b1580156119c857600080fd5b505af19250505080156119d9575060015b61147e5761147e6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661dead83611430565b60008080838162253d8c611a2a8362010bd96121f9565b611a3491906121f9565b9050600062023ab1611a47836004612221565b611a519190612251565b90506004611a628262023ab1612221565b611a6d9060036121f9565b611a779190612251565b611a81908361227f565b9150600062164b09611a948460016121f9565b611aa090610fa0612221565b611aaa9190612251565b90506004611aba826105b5612221565b611ac49190612251565b611ace908461227f565b611ad990601f6121f9565b9250600061098f611aeb856050612221565b611af59190612251565b905060006050611b078361098f612221565b611b119190612251565b611b1b908661227f565b9050611b28600b83612251565b9450611b3585600c612221565b611b408360026121f9565b611b4a919061227f565b91508483611b5960318761227f565b611b64906064612221565b611b6e91906121f9565b611b7891906121f9565b9a919950975095505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb4630276040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611be257600080fd5b505af1158015611bf6573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158015611ce457506040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce29190612115565b115b15611cf457611cf4600080610287565b565b6001600160a01b03821660009081526002602052604090205415801590611d3557506001600160a01b0382166000908152600260205260409020548111155b611d6a5760405162461bcd60e51b815260206004820152600660248201526552454d4f564560d01b6044820152606401610310565b611d73826116c3565b80600080828254611d8491906121a2565b90915550506001600160a01b03821660009081526002602052604081208054839290611db19084906121a2565b90915550506001600160a01b0382166000908152600260205260408120549003611deb5760018054906000611de5836122a6565b91905055505b6001600160a01b038216600090815260026020526040902054611e0d9061166d565b6001600160a01b0390921660009081526003602052604090209190915550565b6001600160a01b03821660009081526002602052604090205415611e5457611e54826116c3565b6001600160a01b0382166000908152600260205260408120548154909183918190611e809084906121b5565b90915550506001600160a01b03831660009081526002602052604081208054849290611ead9084906121b5565b909155505080158015611ed757506001600160a01b03831660009081526002602052604090205415155b15611ef25760018054906000611eec836122bd565b91905055505b6001600160a01b038316600090815260026020526040902054611f149061166d565b6001600160a01b039093166000908152600360205260409020929092555050565b6060610d59848460008585600080866001600160a01b03168587604051611f5c91906122fa565b60006040518083038185875af1925050503d8060008114611f99576040519150601f19603f3d011682016040523d82523d6000602084013e611f9e565b606091505b5091509150611faf87838387611fba565b979650505050505050565b60608315612029578251600003612022576001600160a01b0385163b6120225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610310565b5081610d59565b610d59838381511561203e5781518083602001fd5b8060405162461bcd60e51b81526004016103109190612316565b6001600160a01b038116811461147e57600080fd5b60006020828403121561207f57600080fd5b8135610efc81612058565b6000806040838503121561209d57600080fd5b50508035926020909101359150565b6000602082840312156120be57600080fd5b5035919050565b801515811461147e57600080fd5b6000806000606084860312156120e857600080fd5b83356120f381612058565b925060208401359150604084013561210a816120c5565b809150509250925092565b60006020828403121561212757600080fd5b5051919050565b60006020828403121561214057600080fd5b8151610efc81612058565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176116975761169761214b565b634e487b7160e01b600052601260045260246000fd5b60008261219d5761219d612178565b500490565b818103818111156116975761169761214b565b808201808211156116975761169761214b565b6000826121d7576121d7612178565b500690565b6000602082840312156121ee57600080fd5b8151610efc816120c5565b80820182811260008312801582168215821617156122195761221961214b565b505092915050565b80820260008212600160ff1b8414161561223d5761223d61214b565b81810583148215176116975761169761214b565b60008261226057612260612178565b600160ff1b82146000198414161561227a5761227a61214b565b500590565b818103600083128015838313168383128216171561229f5761229f61214b565b5092915050565b6000816122b5576122b561214b565b506000190190565b6000600182016122cf576122cf61214b565b5060010190565b60005b838110156122f15781810151838201526020016122d9565b50506000910152565b6000825161230c8184602087016122d6565b9190910192915050565b60208152600082518060208401526123358160408501602087016122d6565b601f01601f1916919091016040019291505056fea164736f6c6343000813000a00000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca400000000000000000000000002f92800f57bcd74066f5709f1daa1a4302df8750000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000750656120506f640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057050454153000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000002f92800f57bcd74066f5709f1daa1a4302df87500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000056bc75e2d63100000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061025e5760003560e01c806395d89b4111610146578063bdc8d060116100c3578063d757a9fb11610087578063d757a9fb14610620578063dd62ed3e14610633578063e4b5495714610646578063ee9c79da14610659578063f68239961461066c578063ff140ca61461067f57600080fd5b8063bdc8d060146105b3578063be10862b146105bb578063c87fa42a146105ce578063ccec3716146105fa578063d505accf1461060d57600080fd5b8063a9059cbb1161010a578063a9059cbb1461055f578063a9e9c8bc14610572578063b08d033314610585578063bb46302714610598578063bdbc91ab146105a057600080fd5b806395d89b41146104de5780639af1d35a146104e65780639d649e6614610531578063a16d596014610539578063a457c2d71461054c57600080fd5b806339509351116101df57806358f4dcc3116101a357806358f4dcc31461041c57806370a08231146104435780637ecebe001461046c57806384b0196e1461047f57806394cc699e1461049a57806395b3921e146104c157600080fd5b8063395093511461033957806342966c681461034c5780634a437f881461035f5780634f4ce61d146103a957806353f50447146103e857600080fd5b80632acada4d116102265780632acada4d146102d3578063313ce567146102e8578063325a19f1146102f75780633644e5151461031e5780633741454d1461032657600080fd5b806306fdde0314610263578063095ea7b31461028157806318160ddd146102a457806320800a00146102b657806323b872dd146102c0575b600080fd5b61026b610687565b6040516102789190614890565b60405180910390f35b61029461028f3660046148bf565b610719565b6040519015158152602001610278565b6002545b604051908152602001610278565b6102be610733565b005b6102946102ce3660046148eb565b6108ba565b6102db6108de565b604051610278919061492c565b60405160128152602001610278565b6102a87f0000000000000000000000000000000000000000000000000000000065b2ba0b81565b6102a8610975565b6102be6103343660046149a8565b610984565b6102946103473660046148bf565b610a0f565b6102be61035a3660046149a8565b610a31565b61037261036d3660046149a8565b610a6f565b604080516001600160a01b03968716815260208101959095528401929092529092166060820152608081019190915260a001610278565b6103d07f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca481565b6040516001600160a01b039091168152602001610278565b61040f7f000000000000000000000000000000000000000000000000000000000000000081565b60405161027891906149d7565b6103d07f00000000000000000000000002f92800f57bcd74066f5709f1daa1a4302df87581565b6102a86104513660046149ff565b6001600160a01b031660009081526020819052604090205490565b6102a861047a3660046149ff565b610abc565b610487610ada565b6040516102789796959493929190614a1c565b6103d07f000000000000000000000000e8ed30b29ee7839a5bab8966515f897e7576afa781565b6104c9610b63565b60408051928352602083019190915201610278565b61026b610cc6565b600a54600b54600c54600d54600e54600f5461050495949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610278565b6102a8600a81565b6102be6105473660046149ff565b610cd5565b61029461055a3660046148bf565b610d44565b61029461056d3660046148bf565b610dbf565b6102be610580366004614ab2565b610dcd565b6102be610593366004614ae4565b61138f565b6102be6117aa565b6102be6105ae366004614b19565b611880565b600c546102a8565b6009546103d0906001600160a01b031681565b6102946105dc3660046149ff565b6001600160a01b031660009081526011602052604090205460ff1690565b6102be6106083660046149ff565b611e02565b6102be61061b366004614bc7565b611f94565b6102a861062e3660046149ff565b6120f8565b6102a8610641366004614c38565b612103565b6102a8610654366004614c71565b61212e565b6102be610667366004614d92565b6122a8565b6102be61067a366004614ab2565b6124c2565b600b546102a8565b60606003805461069690614e5f565b80601f01602080910402602001604051908101604052809291908181526020018280546106c290614e5f565b801561070f5780601f106106e45761010080835404028352916020019161070f565b820191906000526020600020905b8154815290600101906020018083116106f257829003601f168201915b5050505050905090565b600033610727818585612798565b60019150505b92915050565b60155462010000900460ff166107645760405162461bcd60e51b815260040161075b90614e93565b60405180910390fd5b6015805462ff000019169055476107a55760405162461bcd60e51b815260206004820152600560248201526409c9e8aa8960db1b604482015260640161075b565b600073024ff47d552cb222b265d68c7aeb26e586d5229d6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081d9190614eb3565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610867576040519150601f19603f3d011682016040523d82523d6000602084013e61086c565b606091505b50509050806108a65760405162461bcd60e51b815260040161075b9060208082526004908201526314d1539560e21b604082015260600190565b506015805462ff0000191662010000179055565b6000336108c88582856128bd565b6108d3858585612937565b506001949350505050565b60606010805480602002602001604051908101604052809291908181526020016000905b8282101561096c5760008481526020908190206040805160a0810182526005860290920180546001600160a01b0390811684526001808301548587015260028301549385019390935260038201541660608401526004015460808301529083529092019101610902565b50505050905090565b600061097f612ad9565b905090565b6009546001600160a01b0316336001600160a01b0316146109d15760405162461bcd60e51b81526020600482015260076024820152662820a92a2722a960c91b604482015260640161075b565b600f548110610a0a5760405162461bcd60e51b8152602060048201526005602482015264262a21aaa960d91b604482015260640161075b565b600f55565b600033610727818585610a228383612103565b610a2c9190614ee6565b612798565b60155462010000900460ff16610a595760405162461bcd60e51b815260040161075b90614e93565b6015805462ff0000191690556108a63382612c04565b60108181548110610a7f57600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092169085565b6001600160a01b03811660009081526007602052604081205461072d565b600060608082808083610b0e7f50656120506f64000000000000000000000000000000000000000000000000076005612d33565b610b397f31000000000000000000000000000000000000000000000000000000000000016006612d33565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080806601000000000000815b601054811015610cb957600082610bb360108481548110610b9457610b94614ef9565b60009182526020909120600590910201546001600160a01b0316612dde565b610bbd9190614f0f565b90508260108381548110610bd357610bd3614ef9565b6000918252602091829020600590910201546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4a9190614f31565b610c5590600a615032565b60108481548110610c6857610c68614ef9565b90600052602060002090600502016004015483610c859190615041565b610c8f9190614f0f565b610c999190614f0f565b610ca39085614ee6565b9350508080610cb190615058565b915050610b71565b5060009491935090915050565b60606004805461069690614e5f565b6009546001600160a01b0316336001600160a01b031614610d225760405162461bcd60e51b81526020600482015260076024820152662820a92a2722a960c91b604482015260640161075b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60003381610d528286612103565b905083811015610db25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161075b565b6108d38286868403612798565b600033610727818585612937565b60155462010000900460ff16610df55760405162461bcd60e51b815260040161075b90614e93565b6015805462ffff0019169055306000908152602081905260408120546040516370a0823160e01b81523060048201529091506000906001600160a01b037f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca416906370a0823190602401602060405180830381865afa158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190615071565b9050610eac3330886131d0565b610ed7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d88612798565b610f0c7f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca46001600160a01b0316333088613374565b610f606001600160a01b037f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca4167f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d876133df565b6001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663e8e33700307f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca489896103e8610fc08b8261508a565b610fca908e615041565b610fd49190614f0f565b6103e8610fe18c8261508a565b610feb908e615041565b610ff59190614f0f565b3360405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015260a483015290911660c482015260e48101869052610104016060604051808303816000875af115801561106e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611092919061509d565b5050604051636eb1769f60e11b81523060048201526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81166024830152600092507f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca4169063dd62ed3e90604401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190615071565b905080156111a4576111a46001600160a01b037f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca4167f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8361348c565b306000908152602081905260409020548310156111e1576111e130333060009081526020819052604090205486906111dc919061508a565b6131d0565b6040516370a0823160e01b815230600482015282907f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca46001600160a01b0316906370a0823190602401602060405180830381865afa158015611247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126b9190615071565b111561133a5761133a336040516370a0823160e01b815230600482015284907f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca46001600160a01b0316906370a0823190602401602060405180830381865afa1580156112db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ff9190615071565b611309919061508a565b6001600160a01b037f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca4169190613595565b604080518881526020810188905233917f06239653922ac7bea6aa2b19dc486b9361821d37712eb796adfd38d81de278ca910160405180910390a250506015805462ffff001916620101001790555050505050565b60155462010000900460ff166113b75760405162461bcd60e51b815260040161075b90614e93565b6015805462ffff00191690556001600160a01b03831660009081526011602052604090205460ff1661141a5760405162461bcd60e51b815260206004820152600c60248201526b24a72b20a624a22a27a5a2a760a11b604482015260640161075b565b6001600160a01b0383166000818152601260205260408082205490516370a0823160e01b81523060048201529092906370a0823190602401602060405180830381865afa15801561146f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114939190615071565b9050600061149f6135c5565b90506000816114c657826114b7600160601b88615041565b6114c19190614f0f565b6114cc565b600160601b5b90506000821561153757601085815481106114e9576114e9614ef9565b906000526020600020906005020160040154611503601290565b61150e90600a615032565b61151c600160601b8a615041565b6115269190615041565b6115309190614f0f565b905061155d565b600160601b8261154660025490565b6115509190615041565b61155a9190614f0f565b90505b6000611568336135d6565b61158c57600b546127109061157d9084615041565b6115879190614f0f565b61158f565b60005b90508661159c828461508a565b10156115d05760405162461bcd60e51b815260206004820152600360248201526226a4a760e91b604482015260640161075b565b6115e3336115de838561508a565b613640565b80156115fc576115f33082613640565b6115fc816136ff565b60005b60105481101561173f576000856116bc57600160601b856010848154811061162957611629614ef9565b60009182526020909120600590910201546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a39190615071565b6116ad9190615041565b6116b79190614f0f565b6116f3565b6116f38b8b601085815481106116d4576116d4614ef9565b60009182526020909120600590910201546001600160a01b031661212e565b905061172c6010838154811061170b5761170b614ef9565b60009182526020909120600590910201546001600160a01b0316338361373e565b508061173781615058565b9150506115ff565b50611748613869565b60408051898152602081018490526001600160a01b038b169133917fad49529616fd9fe4b34e00ac3f98d5cc3531e1232a95f249113b23fdf13c7e85910160405180910390a350506015805462ffff0019166201010017905550505050505050565b7f000000000000000000000000e8ed30b29ee7839a5bab8966515f897e7576afa76001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611808573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182c9190614eb3565b6001600160a01b0316336001600160a01b0316146118765760405162461bcd60e51b81526020600482015260076024820152665245574152445360c81b604482015260640161075b565b61187e613897565b565b60155462010000900460ff166118a85760405162461bcd60e51b815260040161075b90614e93565b6015805462ff0000191690556001600160a01b03841660009081526011602052604090205460ff166119095760405162461bcd60e51b815260206004820152600a60248201526927a7262ca827a22a25a760b11b604482015260640161075b565b6000736b175474e89094c44da98b954eedeac495271d0f6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119819190614f31565b61198c90600a615032565b61199790600a615041565b905060007f000000000000000000000000e8ed30b29ee7839a5bab8966515f897e7576afa76001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1d9190614eb3565b905060007f00000000000000000000000002f92800f57bcd74066f5709f1daa1a4302df8756001600160a01b0316736b175474e89094c44da98b954eedeac495271d0f14611b2a577f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca46001600160a01b0316736b175474e89094c44da98b954eedeac495271d0f14611b245773024ff47d552cb222b265d68c7aeb26e586d5229d6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1f9190614eb3565b611b2c565b81611b2c565b305b9050611b4e736b175474e89094c44da98b954eedeac495271d0f338386613374565b736b175474e89094c44da98b954eedeac495271d0e197f00000000000000000000000002f92800f57bcd74066f5709f1daa1a4302df8756001600160a01b031601611c0d57611bb2736b175474e89094c44da98b954eedeac495271d0f83856133df565b6040516345efb3f960e11b8152600481018490526001600160a01b03831690638bdf67f290602401600060405180830381600087803b158015611bf457600080fd5b505af1158015611c08573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c789190615071565b9050611c8e6001600160a01b0389168a89613595565b604051633a62959560e21b81526001600160a01b038a169063e98a565490611cbc90899089906004016150cb565b600060405180830381600087803b158015611cd657600080fd5b505af1158015611cea573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b038b1691506370a0823190602401602060405180830381865afa158015611d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d589190615071565b1015611d935760405162461bcd60e51b815260206004820152600a602482015269232620a9a420a32a22a960b11b604482015260640161075b565b6001600160a01b03891633604080516001600160a01b038c81168252602082018c905292909216917f5a9eeaf8949838813289046091e8ea8a9196a2265ac24841464a2d27026a8549910160405180910390a350506015805462ff000019166201000017905550505050505050565b60155462010000900460ff16611e2a5760405162461bcd60e51b815260040161075b90614e93565b6015805462ff0000191690556001600160a01b03811660009081526011602052604090205460ff16158015611e6857506001600160a01b0381163014155b611ea25760405162461bcd60e51b815260206004820152600b60248201526a554e415641494c41424c4560a81b604482015260640161075b565b6108a673024ff47d552cb222b265d68c7aeb26e586d5229d6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1b9190614eb3565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f839190615071565b6001600160a01b0384169190613595565b83421115611fe45760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161075b565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886120138c613a23565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061206e82613a4b565b9050600061207e82878787613a78565b9050896001600160a01b0316816001600160a01b0316146120e15760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161075b565b6120ec8a8a8a612798565b50505050505050505050565b600061072d82612dde565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03808416600081815260126020908152604080832054948616835280832054815163313ce56760e01b815291519395949093909263313ce56792600480820193918290030181865afa15801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b39190614f31565b6121be90600a615032565b601083815481106121d1576121d1614ef9565b906000526020600020906005020160010154856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190614f31565b61225090600a615032565b6010848154811061226357612263614ef9565b906000526020600020906005020160010154886122809190615041565b61228a9190615041565b6122949190614f0f565b61229e9190614f0f565b9695505050505050565b60155462010000900460ff166122d05760405162461bcd60e51b815260040161075b90614e93565b6015805462ffff001916905560006122e784613aa2565b61231557600c54612710906122fc908261508a565b6123069086615041565b6123109190614f0f565b612317565b835b9050600061232460025490565b612332600160601b84615041565b61233c9190614f0f565b9050612349333087612937565b6123533083612c04565b612365612360838761508a565b6136ff565b60005b6010548110156124745760006010828154811061238757612387614ef9565b60009182526020909120600590910201546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156123dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124019190615071565b90506000600160601b6124148584615041565b61241e9190614f0f565b9050801561245f5761245f33826010868154811061243e5761243e614ef9565b60009182526020909120600590910201546001600160a01b03169190613595565b5050808061246c90615058565b915050612368565b5060405185815233907fe4bf69c2fff7ace5eed72842e9abf52af2218a3a78cb83d7824f999dbfd75e719060200160405180910390a250506015805462ffff00191662010100179055505050565b60155462010000900460ff166124ea5760405162461bcd60e51b815260040161075b90614e93565b6015805462ffff00191690558315612502578361259a565b6001600160a01b037f00000000000000000000000080e9c48ec41af7a0ed6cf4f3ac979f3538021608166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259a9190615071565b9350600084116125d45760405162461bcd60e51b81526020600482015260056024820152644c5052454d60d81b604482015260640161075b565b6126097f00000000000000000000000080e9c48ec41af7a0ed6cf4f3ac979f35380216086001600160a01b0316333087613374565b61265d6001600160a01b037f00000000000000000000000080e9c48ec41af7a0ed6cf4f3ac979f3538021608167f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d866133df565b60408051635d5155ef60e11b81523060048201526001600160a01b037f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca4811660248301526044820187905260648201869052608482018590523360a483015260c4820184905282517f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169263baa2abde9260e4808201939182900301816000875af1158015612712573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273691906150fa565b505061273f3390565b6001600160a01b03167fdfdd120ded9b7afc0c23dd5310e93aaa3e1c3b9f75af9b805fab3030842439f28560405161277991815260200190565b60405180910390a250506015805462ffff001916620101001790555050565b6001600160a01b0383166127fa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161075b565b6001600160a01b03821661285b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161075b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006128c98484612103565b9050600019811461293157818110156129245760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161075b565b6129318484848403612798565b50505050565b60007f00000000000000000000000080e9c48ec41af7a0ed6cf4f3ac979f35380216086001600160a01b0316846001600160a01b03161480156129ac57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b6015549091507f00000000000000000000000080e9c48ec41af7a0ed6cf4f3ac979f35380216086001600160a01b03908116908516149060009060ff161580156129fd5750601554610100900460ff165b15612ab9577f00000000000000000000000080e9c48ec41af7a0ed6cf4f3ac979f35380216086001600160a01b0316866001600160a01b031614612a4357612a43613897565b828015612a515750600d5415155b15612a7e57600d5461271090612a679086615041565b612a719190614f0f565b9050612a7e8630836131d0565b818015612a8c5750600e5415155b15612ab957600e5461271090612aa29086615041565b612aac9190614f0f565b9050612ab98630836131d0565b612ac2816136ff565b612ad186866111dc848861508a565b505050505050565b6000306001600160a01b037f000000000000000000000000027ce48b9b346728557e8d420fe936a72bf9b1c716148015612b3257507f000000000000000000000000000000000000000000000000000000000000000146145b15612b5c57507f413c554fa0805da6971540627a0746a1387a99d2af309c3fe1d9a77a756b4d2f90565b61097f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f07e00f788e6e8a9a608c48d509a001e69787fffb62267d6072925cb9b535bd4a918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b038216612c645760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161075b565b6001600160a01b03821660009081526020819052604090205481811015612cd85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161075b565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016128b0565b505050565b606060ff8314612d4d57612d4683613acd565b905061072d565b818054612d5990614e5f565b80601f0160208091040260200160405190810160405280929190818152602001828054612d8590614e5f565b8015612dd25780601f10612da757610100808354040283529160200191612dd2565b820191906000526020600020905b815481529060010190602001808311612db557829003601f168201915b5050505050905061072d565b60007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316826001600160a01b031603612e215761072d613b0c565b60405163e6a4390560e01b81526001600160a01b0383811660048301527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2811660248301526000917f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9091169063e6a4390590604401602060405180830381865afa158015612eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed89190614eb3565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3e9190614eb3565b90506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa49190614f31565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300a9190614eb3565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306b9190614f31565b9050600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156130ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d2919061513a565b509150915060006130e1613b0c565b90507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316866001600160a01b0316146131725761312784600a615032565b6001600160701b03841661313c87600a615032565b61314f6001600160701b03861685615041565b6131599190615041565b6131639190614f0f565b61316d9190614f0f565b6131c3565b61317d85600a615032565b6001600160701b03831661319286600a615032565b6131a56001600160701b03871685615041565b6131af9190615041565b6131b99190614f0f565b6131c39190614f0f565b9998505050505050505050565b6001600160a01b0383166132345760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161075b565b6001600160a01b0382166132965760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161075b565b6001600160a01b0383166000908152602081905260409020548181101561330e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161075b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612931565b6040516001600160a01b03808516602483015283166044820152606481018290526129319085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613eb2565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa15801561342f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134539190615071565b90506129318463095ea7b360e01b8561346c8686614ee6565b6040516001600160a01b03909216602483015260448201526064016133a8565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa1580156134dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135009190615071565b9050818110156135645760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b606482015260840161075b565b6040516001600160a01b0384166024820152828203604482015261293190859063095ea7b360e01b906064016133a8565b6040516001600160a01b038316602482015260448101829052612d2e90849063a9059cbb60e01b906064016133a8565b60006135d060025490565b15919050565b60006135e06135c5565b8061072d57506009546001600160a01b0383811691161480156136035750601354155b801561072d57506136377f0000000000000000000000000000000000000000000000000000000065b2ba0b62093a80614ee6565b42111592915050565b6001600160a01b0382166136965760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161075b565b80600260008282546136a89190614ee6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80158061370c5750600a54155b156137145750565b61373b30612710600a600001548461372c9190615041565b6137369190614f0f565b612c04565b50565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015613785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a99190615071565b90506137c06001600160a01b038516843085613374565b6137ca8282614ee6565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa15801561380e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138329190615071565b10156129315760405162461bcd60e51b815260206004820152600660248201526515119495905360d21b604482015260640161075b565b60135415801561388c57506009546001600160a01b0316336001600160a01b0316145b1561187e5742601355565b6000601480546138a79190614ee6565b4211905060006138cc306001600160a01b031660009081526020819052604090205490565b9050600061390f7f00000000000000000000000080e9c48ec41af7a0ed6cf4f3ac979f35380216086001600160a01b031660009081526020819052604090205490565b905060006064613920836001615041565b61392a9190614f0f565b90508380156139395750808310155b80156139455750600082115b15612931576015805460ff19166001179055426014556000613968826019615041565b8410156139975761397a82600a615041565b84101561398757816139a2565b61399282600a615041565b6139a2565b6139a2826019615041565b9050600080600a600501541180156139c457506009546001600160a01b031615155b156139ff57600f54612710906139da9084615041565b6139e49190614f0f565b6009549091506139ff9030906001600160a01b0316836131d0565b613a11613a0c828461508a565b613f87565b50506015805460ff1916905550505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061072d613a58612ad9565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000613a89878787876144e7565b91509150613a96816145ab565b5090505b949350505050565b60006064613aaf60025490565b613aba906062615041565b613ac49190614f0f565b90911015919050565b60606000613ada836146f5565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60405163e6a4390560e01b8152736b175474e89094c44da98b954eedeac495271d0f60048201526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28116602483015260009182917f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f169063e6a4390590604401602060405180830381865afa158015613bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd59190614eb3565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c3b9190614eb3565b9050600080826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca29190614f31565b846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d049190614eb3565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d659190614f31565b91509150600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce919061513a565b5090925090506001600160a01b038516736b175474e89094c44da98b954eedeac495271d0f14613e5257613e0383600a615032565b6001600160701b038316613e1886600a615032565b613e2f6001600160701b038516600160601b615041565b613e399190615041565b613e439190614f0f565b613e4d9190614f0f565b613ea7565b613e5d84600a615032565b6001600160701b038216613e7285600a615032565b613e896001600160701b038616600160601b615041565b613e939190615041565b613e9d9190614f0f565b613ea79190614f0f565b965050505050505090565b6000613f07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661471d9092919063ffffffff16565b9050805160001480613f28575080806020019051810190613f28919061517f565b612d2e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161075b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613fbc57613fbc614ef9565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca48160018151811061401057614010614ef9565b60200260200101906001600160a01b031690816001600160a01b03168152505061405b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612798565b60007f000000000000000000000000e8ed30b29ee7839a5bab8966515f897e7576afa76001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140df9190614eb3565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca416906370a0823190602401602060405180830381865afa158015614149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061416d9190615071565b905060007f00000000000000000000000002f92800f57bcd74066f5709f1daa1a4302df8756001600160a01b03167f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca46001600160a01b0316146141d057826141d2565b305b604051635c11d79560e01b81529091506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1690635c11d7959061422a9088906000908990879042906004016151a1565b600060405180830381600087803b15801561424457600080fd5b505af1158015614258573d6000803e3d6000fd5b505050507f00000000000000000000000002f92800f57bcd74066f5709f1daa1a4302df8756001600160a01b03167f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca46001600160a01b0316036143e9576040516370a0823160e01b815230600482015260009083906001600160a01b037f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca416906370a0823190602401602060405180830381865afa15801561431e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143429190615071565b61434c919061508a565b905080156143e3576143886001600160a01b037f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca41685836133df565b6040516345efb3f960e11b8152600481018290526001600160a01b03851690638bdf67f290602401600060405180830381600087803b1580156143ca57600080fd5b505af11580156143de573d6000803e3d6000fd5b505050505b506144e0565b6040516370a0823160e01b81526001600160a01b0384811660048301526000917f00000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca4909116906370a0823190602401602060405180830381865afa158015614454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144789190615071565b11156144e0576040516370b9f1f960e01b815260006004820181905260248201526001600160a01b038416906370b9f1f990604401600060405180830381600087803b1580156144c757600080fd5b505af11580156144db573d6000803e3d6000fd5b505050505b5050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561451e57506000905060036145a2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614572573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661459b576000600192509250506145a2565b9150600090505b94509492505050565b60008160048111156145bf576145bf6149c1565b036145c75750565b60018160048111156145db576145db6149c1565b036146285760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161075b565b600281600481111561463c5761463c6149c1565b036146895760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161075b565b600381600481111561469d5761469d6149c1565b0361373b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161075b565b600060ff8216601f81111561072d57604051632cd44ac360e21b815260040160405180910390fd5b6060613a9a848460008585600080866001600160a01b031685876040516147449190615212565b60006040518083038185875af1925050503d8060008114614781576040519150601f19603f3d011682016040523d82523d6000602084013e614786565b606091505b5091509150614797878383876147a2565b979650505050505050565b6060831561481157825160000361480a576001600160a01b0385163b61480a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161075b565b5081613a9a565b613a9a83838151156148265781518083602001fd5b8060405162461bcd60e51b815260040161075b9190614890565b60005b8381101561485b578181015183820152602001614843565b50506000910152565b6000815180845261487c816020860160208601614840565b601f01601f19169290920160200192915050565b6020815260006148a36020830184614864565b9392505050565b6001600160a01b038116811461373b57600080fd5b600080604083850312156148d257600080fd5b82356148dd816148aa565b946020939093013593505050565b60008060006060848603121561490057600080fd5b833561490b816148aa565b9250602084013561491b816148aa565b929592945050506040919091013590565b602080825282518282018190526000919060409081850190868401855b8281101561499b57815180516001600160a01b03908116865287820151888701528682015187870152606080830151909116908601526080908101519085015260a09093019290850190600101614949565b5091979650505050505050565b6000602082840312156149ba57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106149f957634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215614a1157600080fd5b81356148a3816148aa565b60ff60f81b881681526000602060e081840152614a3c60e084018a614864565b8381036040850152614a4e818a614864565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015614aa057835183529284019291840191600101614a84565b50909c9b505050505050505050505050565b60008060008060808587031215614ac857600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215614af957600080fd5b8335614b04816148aa565b95602085013595506040909401359392505050565b600080600080600060808688031215614b3157600080fd5b8535614b3c816148aa565b94506020860135614b4c816148aa565b935060408601359250606086013567ffffffffffffffff80821115614b7057600080fd5b818801915088601f830112614b8457600080fd5b813581811115614b9357600080fd5b896020828501011115614ba557600080fd5b9699959850939650602001949392505050565b60ff8116811461373b57600080fd5b600080600080600080600060e0888a031215614be257600080fd5b8735614bed816148aa565b96506020880135614bfd816148aa565b955060408801359450606088013593506080880135614c1b81614bb8565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215614c4b57600080fd5b8235614c56816148aa565b91506020830135614c66816148aa565b809150509250929050565b600080600060608486031215614c8657600080fd5b8335614c91816148aa565b9250602084013591506040840135614ca8816148aa565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614cf257614cf2614cb3565b604052919050565b600067ffffffffffffffff821115614d1457614d14614cb3565b5060051b60200190565b600082601f830112614d2f57600080fd5b81356020614d44614d3f83614cfa565b614cc9565b82815260059290921b84018101918181019086841115614d6357600080fd5b8286015b84811015614d87578035614d7a81614bb8565b8352918301918301614d67565b509695505050505050565b600080600060608486031215614da757600080fd5b8335925060208085013567ffffffffffffffff80821115614dc757600080fd5b818701915087601f830112614ddb57600080fd5b8135614de9614d3f82614cfa565b81815260059190911b8301840190848101908a831115614e0857600080fd5b938501935b82851015614e2f578435614e20816148aa565b82529385019390850190614e0d565b965050506040870135925080831115614e4757600080fd5b5050614e5586828701614d1e565b9150509250925092565b600181811c90821680614e7357607f821691505b602082108103613a4557634e487b7160e01b600052602260045260246000fd5b6020808252600690820152651313d0d2d15160d21b604082015260600190565b600060208284031215614ec557600080fd5b81516148a3816148aa565b634e487b7160e01b600052601160045260246000fd5b8082018082111561072d5761072d614ed0565b634e487b7160e01b600052603260045260246000fd5b600082614f2c57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215614f4357600080fd5b81516148a381614bb8565b600181815b80851115614f89578160001904821115614f6f57614f6f614ed0565b80851615614f7c57918102915b93841c9390800290614f53565b509250929050565b600082614fa05750600161072d565b81614fad5750600061072d565b8160018114614fc35760028114614fcd57614fe9565b600191505061072d565b60ff841115614fde57614fde614ed0565b50506001821b61072d565b5060208310610133831016604e8410600b841016171561500c575081810a61072d565b6150168383614f4e565b806000190482111561502a5761502a614ed0565b029392505050565b60006148a360ff841683614f91565b808202811582820484141761072d5761072d614ed0565b60006001820161506a5761506a614ed0565b5060010190565b60006020828403121561508357600080fd5b5051919050565b8181038181111561072d5761072d614ed0565b6000806000606084860312156150b257600080fd5b8351925060208401519150604084015190509250925092565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000806040838503121561510d57600080fd5b505080516020909101519092909150565b80516001600160701b038116811461513557600080fd5b919050565b60008060006060848603121561514f57600080fd5b6151588461511e565b92506151666020850161511e565b9150604084015163ffffffff81168114614ca857600080fd5b60006020828403121561519157600080fd5b815180151581146148a357600080fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156151f15784516001600160a01b0316835293830193918301916001016151cc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008251615224818460208701614840565b919091019291505056fea164736f6c6343000813000a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.