Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
7,634,279.70483655 HXBR
Holders
10
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 8 Decimals)
Balance
252,918.73723069 HXBRValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Bearswap
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-09 */ // SPDX-License-Identifier: GPL-2.0-or-later /******* This is Hex Bear ******* The Buy Button of Hex turned into an ERC20. */ pragma solidity =0.8.18; /// @title Callback for IUniswapV3PoolActions#swap /// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface interface 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 call function uniswapV3swapCallback( int256 amount0Delta, int256 amount1Delta, bytes calldata data ) external; } pragma solidity >=0.7.5; pragma abicoder v2; /// @title Router token swapping functionality /// @notice Functions for swapping tokens via Uniswap V3 interface 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 token function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut); struct ExactInputParams { bytes path; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; } /// @notice swaps `amountIn` of one token for as much as possible of another along the specified path /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata /// @return amountOut The amount of the received token function exactInput(ExactInputParams calldata params) external payable returns (uint256 amountOut); struct ExactOutputSingleParams { address tokenIn; address tokenOut; uint24 fee; address recipient; uint256 deadline; uint256 amountOut; uint256 amountInMaximum; uint160 sqrtPriceLimitX96; } /// @notice swaps as little as possible of one token for `amountOut` of another token /// @param params The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata /// @return amountIn The amount of the input token function exactOutputSingle(ExactOutputSingleParams calldata params) external payable returns (uint256 amountIn); struct ExactOutputParams { bytes path; address recipient; uint256 deadline; uint256 amountOut; uint256 amountInMaximum; } /// @notice swaps as little as possible of one token for `amountOut` of another along the specified path (reversed) /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata /// @return amountIn The amount of the input token function exactOutput(ExactOutputParams calldata params) external payable returns (uint256 amountIn); } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } 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. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } pragma solidity >=0.6.0; library TransferHelper { /// @notice Transfers tokens from the targeted address to the given destination /// @param token The contract address of the token to be transferred /// @param from The originating address from which the tokens will be transferred /// @param to The destination address of the transfer /// @param value The amount to be transferred function safeTransferFrom( address token, address from, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value)); require(success && (abi.decode(data, (bool))), "Safe Transfer Failed."); } /// @notice Transfers tokens from msg.sender to a recipient /// @dev Errors with ST if transfer fails /// @param token The contract address of the token which will be transferred /// @param to The recipient of the transfer /// @param value The value of the transfer function safeTransfer( address token, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'ST'); } /// @notice Approves the stipulated contract to spend the given allowance in the given token /// @dev Errors with 'SA' if transfer fails /// @param token The contract address of the token to be approved /// @param to The target of the approval /// @param value The amount of the given token the target will be allowed to spend function safeApprove( address token, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA'); } /// @notice Transfers ETH to the recipient address /// @dev Fails with `STE` /// @param to The destination of the transfer /// @param value The value to be transferred function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'STE'); } } pragma solidity ^0.8.0; /** * @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. */ function decimals() external view returns (uint8); } 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; } } pragma solidity ^0.8.0; /** * @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]. * * 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 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 8; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // The 'stasher' inflation is intended for a seperate staking contract. contract Bearswap is ERC20, ReentrancyGuard { using SafeMath for uint256; uint256 public startTime; uint256 public endTime; ERC20 public claimToken; ERC20 public claimToken2; ERC20 public claimToken3; uint256 public swapCounter; address public StashersAdd; uint256 private stasherAmount; uint256 lastMintTimestamp; mapping(address => User) public users; struct User { uint256 lastMintTime; uint256 receivedHex; uint256 mintCount; bool initialswapComplete; } Global private global; struct Global { uint256 waitTime; uint256 missedMinting; uint256 stashRate; } // pool fee 0.3%. uint24 public constant poolFee = 3000; address private constant routerAddress = 0xE592427A0AEce92De3Edee1F18E0157C05861564; IswapRouter public immutable swapRouter = IswapRouter(routerAddress); address private constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; address private constant HEX = 0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39; ERC20 public hex_token = ERC20(HEX); ERC20 public usdc_token = ERC20(USDC); // pool fee 0.3%. constructor(address _StashersAdd, uint256 _startTime, uint256 _endTime,address _ClaimToken, address _ClaimToken2, address _ClaimToken3) ERC20("Hex Bear", "HXBR") { swapCounter = 0; lastMintTimestamp = block.timestamp; StashersAdd = _StashersAdd; startTime = _startTime; endTime = _endTime; claimToken = ERC20(_ClaimToken); claimToken2 = ERC20(_ClaimToken2); claimToken3 = ERC20(_ClaimToken3); global = Global({ waitTime: 86400, missedMinting: 0, stashRate: 25 }); } function AllowedToMint(address _address) public view returns (bool) { if(users[_address].lastMintTime == 0) { return true; } else if(block.timestamp >= users[_address].lastMintTime) { return true; } return false; } /// This function swaps USDC for Hex and Mints an adjusted amount of Hex Bear /// function swap(uint256 amountIn) external nonReentrant returns (uint256 amountOut) { require(AllowedToMint(msg.sender),"WAIT"); require(usdc_token.allowance(msg.sender, address(this)) >= amountIn && amountIn > 0, "INUSDAL."); require(amountIn <= usdc_token.balanceOf(msg.sender) && amountIn > 0, "INUSDBAL"); require(hex_token.balanceOf(msg.sender) >= (swapCounter.mul(10 ** 6)).add(100 * 10 ** 8).add(users[msg.sender].receivedHex), "RAMNT."); require (amountIn >= (swapCounter.mul(10 ** 2)), "MINUSDC"); swapCounter++; User storage userData = users[msg.sender]; userData.mintCount++; TransferHelper.safeTransferFrom(USDC, msg.sender, address(this), amountIn); TransferHelper.safeApprove(USDC, address(swapRouter), amountIn); IswapRouter.ExactInputSingleParams memory params = IswapRouter.ExactInputSingleParams({ tokenIn: USDC, tokenOut: HEX, fee: poolFee, recipient: msg.sender, deadline: block.timestamp, amountOutMinimum: 0, amountIn: amountIn, sqrtPriceLimitX96: 0 }); amountOut = swapRouter.exactInputSingle(params); uint256 mintUpdateTime = global.waitTime.mul(userData.mintCount).mul(2); uint256 StatAmount = amountOut.sub(swapCounter.mul(amountOut.div(10000000))); if (swapCounter >= 10000000) { if (amountOut.sub(swapCounter.mul(amountOut.div(10000000))) < 1) { StatAmount = 1; } } // Get the current mint count for the user uint256 count = userData.mintCount; // Determine the mint amount based on the current mint count uint256 amount = StatAmount; if (count > 1 && count <= 5) { amount = StatAmount.mul(25).div(100); } else if (count > 5 && count <= 10) { amount = StatAmount.mul(50).div(100); } else if (count > 10 && count <= 20) { amount = StatAmount.mul(75).div(100); } else if (count > 20 && count <= 25) { amount = StatAmount.mul(110).div(100); } else if (count > 25 && count <= 40) { amount = StatAmount.mul(125).div(100); } else if (count > 40 && count <= 55) { amount = StatAmount.mul(130).div(100); } else if (count > 55 && count <= 100) { amount = StatAmount.mul(150).div(100); } else { amount = StatAmount; } // Get the maximum allowed value for amountOut on initial mint uint256 maxAmount = 100000000; // If the initial swap has not been completed and amountOut is greater than the maximum allowed value, set it to the maximum allowed value if (!userData.initialswapComplete && amountOut > maxAmount) { amount = maxAmount; } // Set the initialswapComplete value for the user to true userData.initialswapComplete = true; // Require that the initial swap has been completed for the user if they are trying to mint more than 1 Hex Bear tokens require(userData.initialswapComplete || amountOut <= maxAmount); // Calculate the amount of Hex tokens to mint // Calculate the stasher's amount based on the specified stasher's rate uint256 stashAmount = amount.mul(global.stashRate).div(100); // Mint tokens, subtracting the stasher's amount from the total amount _mint(msg.sender, amount.sub(stashAmount)); _mint(StashersAdd, stashAmount); // Update the userData struct with the latest information userData.lastMintTime = block.timestamp.add(mintUpdateTime); users[msg.sender].receivedHex = users[msg.sender].receivedHex.add(amountOut); // Making sure that currentMintAmount is not set to zero or a negative value require(amountIn > 0, "MORE0THAN"); } // Gives the user their total wait period atm function getLastMintTime(address _address) public view returns (uint256) { User storage userData = users[_address]; return userData.lastMintTime; } function getRemainingTime(address _address) public view returns (uint256) { User storage userData = users[_address]; // Get the time of the user's last mint uint256 lastMint = userData.lastMintTime; // Calculate the remaining time until the user is allowed to mint again uint256 remainingTime = 0; if (block.timestamp < lastMint) { remainingTime = lastMint.sub(block.timestamp); } return remainingTime; } // What the user can mint for a certain amount function MintValue(uint256 amountOut) public view returns (uint256) { User storage userData = users[msg.sender]; // If the amount of the minting decay rate is lower than 1 then 1 will still be minted // Only after the 10,000,000th swap uint256 StatAmount = amountOut.sub(swapCounter.mul(amountOut.div(10000000))); if (swapCounter >= 10000000) { if (amountOut.sub(swapCounter.mul(amountOut.div(10000000))) < 1) { StatAmount = 1; } } uint256 amount = StatAmount; // After the initial mint, 25% is minted on count 2 and 50% on count 6 etc. if (userData.mintCount > 1 && userData.mintCount <= 5) { // Increase the mint amount to 25% amount = amount.mul(25).div(100); } else if (userData.mintCount > 5 && userData.mintCount <= 10) { // Increase the mint amount to 50% amount = amount.mul(50).div(100); } else if (userData.mintCount > 10 && userData.mintCount <= 20) { // Increase the mint amount to 75% amount = amount.mul(75).div(100); } else if (userData.mintCount > 20 && userData.mintCount <= 25) { // Increase the mint amount to 110% amount = amount.mul(110).div(100); } else if (userData.mintCount > 25 && userData.mintCount <= 40) { // Increase the mint amount to 125% amount = amount.mul(125).div(100); } else if (userData.mintCount > 40 && userData.mintCount <= 55) { // Increase the mint amount to 130% amount = amount.mul(130).div(100); } else if (userData.mintCount > 55 && userData.mintCount <= 100) { // Increase the mint amount to 150% amount = amount.mul(150).div(100); } // Maximum allowed value for amountOut on initial mint uint256 maxAmount = 100000000; // If the initial swap has not been completed and amountOut is greater than the maximum allowed value, set it to the maximum allowed value if (!users[msg.sender].initialswapComplete && amountOut > maxAmount) { amount = maxAmount; } // Require that the initial swap has been completed for the user if they are trying to mint more than 1 Hex Bear tokens require(userData.initialswapComplete || amountOut <= maxAmount); // Calculate the stasher's amount based on the specified stasher's rate uint256 stashAmount = amount.mul(global.stashRate).div(100); return amount.sub(stashAmount); } // What the user must swap for in USDC terms function MinSwap() public view returns (uint256) { return swapCounter.mul(10 ** 2); } // Displays the amount required to hold to be able to mint. function RequiredToHold() public view returns (uint256) { return (swapCounter.mul(10 ** 6)).add(100 * 10 ** 8); } // HexBear legacy claim function claim(uint256 burnAmount) public nonReentrant { // Check that the temporary minting period is active require(block.timestamp >= startTime && block.timestamp <= endTime, "TEMPST"); // Check that the user has enough burn tokens to burn require(burnAmount <= claimToken.balanceOf(msg.sender), "INSUFBURN"); // Transfer the full amount of burn tokens to the contract claimToken.transferFrom(msg.sender, address(this), burnAmount); // Calculate the amount to mint uint256 mintedAmount = burnAmount; if (burnAmount > 1 && burnAmount < 1000e18) { mintedAmount = burnAmount = 0; } else if (burnAmount >= 1000e18 && burnAmount <= 10000e18) { mintedAmount = 50000000000; } else if (burnAmount > 10000e18 && burnAmount <= 100000e18) { mintedAmount = burnAmount.mul(25).div(100).div(10 ** (18 - decimals())); } else if (burnAmount > 100000e18 && burnAmount <= 1000000e18) { mintedAmount = burnAmount.mul(1).div(100).div(10 ** (18 - decimals())); } else if (burnAmount > 1000000e18 && burnAmount <= 10000000e18) { mintedAmount = burnAmount.mul(1).div(1000).div(10 ** (18 - decimals())); } else if (burnAmount > 10000000e18 && burnAmount <= 100000000e18) { mintedAmount = burnAmount.mul(1).div(1000).div(10 ** (18 - decimals())); } else if (burnAmount > 100000000e18) { mintedAmount = burnAmount.mul(1).div(10000).div(10 ** (18 - decimals())); } // Mint the calculated amount _mint(msg.sender, mintedAmount); // } // BearX claim function claim2(uint256 burnAmount) public nonReentrant { // Check that the temporary minting period is active require(block.timestamp >= startTime && block.timestamp <= endTime, "TEMPST2"); // Check that the user has enough burn tokens to burn require(burnAmount <= claimToken2.balanceOf(msg.sender), "INSUFBURN2"); // Transfer the full amount of burn tokens to the contract claimToken2.transferFrom(msg.sender, address(this), burnAmount); // Calculate the amount to mint uint256 mintedAmount = burnAmount; mintedAmount = burnAmount.mul(10).div(10 ** (18 - decimals())); // Mint the calculated amount _mint(msg.sender, mintedAmount); } // Stupid Doge Claim function claim3(uint256 burnAmount) public nonReentrant { // Check that the temporary minting period is active require(block.timestamp >= startTime && block.timestamp <= endTime, "TEMPST3"); // Check that the user has enough burn tokens to burn require(burnAmount <= claimToken3.balanceOf(msg.sender), "INSUFBURN3"); // Transfer the full amount of burn tokens to the contract claimToken3.transferFrom(msg.sender, address(this), burnAmount); // Calculate the amount to mint uint256 mintedAmount = burnAmount; if (burnAmount > 1 && burnAmount < 1000e18) { mintedAmount = burnAmount = 0; } else if (burnAmount >= 1000e18 && burnAmount <= 10000e18) { mintedAmount = 50000000000; } else if (burnAmount > 10000e18 && burnAmount <= 100000e18) { mintedAmount = burnAmount.mul(25).div(100).div(10 ** (18 - decimals())); } else if (burnAmount > 100000e18 && burnAmount <= 1000000e18) { mintedAmount = burnAmount.mul(1).div(100).div(10 ** (18 - decimals())); } else if (burnAmount > 1000000e18 && burnAmount <= 10000000e18) { mintedAmount = burnAmount.mul(1).div(1000).div(10 ** (18 - decimals())); } else if (burnAmount > 10000000e18 && burnAmount <= 100000000e18) { mintedAmount = burnAmount.mul(1).div(1000).div(10 ** (18 - decimals())); } else if (burnAmount > 100000000e18) { mintedAmount = burnAmount.mul(1).div(10000).div(10 ** (18 - decimals())); } // Mint the calculated amount _mint(msg.sender, mintedAmount); } // Minting of Hex Bear function mint(uint256 amountOut, uint256 burnAmount) internal nonReentrant { // Transfer the specified burn amount from the user's claimToken balance to the contract claimToken.transferFrom(msg.sender, address(this), burnAmount); // Calculate the number of Hex Bear tokens to mint for the user based on the exchange rate and the user's mint count. uint256 amount = MintValue(amountOut); // Calculate the amount to the stashers based on the user's specified stake rate uint256 stashAmount = amount.mul(global.stashRate).div(100); _mint(msg.sender, amount.sub(stashAmount)); _mint(StashersAdd, stashAmount); // Mint the burn amount for the user _mint(msg.sender, burnAmount); // Make sure that currentMintAmount is not set to zero or a negative value require(amountOut > 0, "MORE0"); } //This function rewards the stashers once a day. Forever. //The function mints 10,000 once a day. //If the function is not called once a day. The amount carries over to the next day/days. function stasherMint() public nonReentrant{ require(block.timestamp >= lastMintTimestamp.add(86400), "WAITMNT"); // check if current timestamp is greater than last mint timestamp + 1 day if (block.timestamp <= lastMintTimestamp.add(172800)) { // regular mint amount stasherAmount = 1000000000000; global.missedMinting = 0; } else { // calculate number of seconds since last mint uint256 sinceLastMint = (block.timestamp.sub(lastMintTimestamp)).div(86400); // calculate total missed minting global.missedMinting += sinceLastMint.mul(1000000000000); // add missed minting to regular mint amount stasherAmount = SafeMath.add(stasherAmount, global.missedMinting); } // update last mint timestamp lastMintTimestamp = block.timestamp; _mint(StashersAdd, stasherAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_StashersAdd","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"address","name":"_ClaimToken","type":"address"},{"internalType":"address","name":"_ClaimToken2","type":"address"},{"internalType":"address","name":"_ClaimToken3","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"AllowedToMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MinSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"MintValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RequiredToHold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StashersAdd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":"uint256","name":"burnAmount","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"claim2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"claim3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimToken","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimToken2","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimToken3","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","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":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLastMintTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getRemainingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hex_token","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stasherMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IswapRouter","name":"","type":"address"}],"stateMutability":"view","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"},{"inputs":[],"name":"usdc_token","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"lastMintTime","type":"uint256"},{"internalType":"uint256","name":"receivedHex","type":"uint256"},{"internalType":"uint256","name":"mintCount","type":"uint256"},{"internalType":"bool","name":"initialswapComplete","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405273e592427a0aece92de3edee1f18e0157c0586156473ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250732b591e99afe9f32eaa6214f7b7629768c40eeb39601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200010257600080fd5b5060405162005069380380620050698339818101604052810190620001289190620003d7565b6040518060400160405280600881526020017f48657820426561720000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f48584252000000000000000000000000000000000000000000000000000000008152508160039081620001a59190620006e3565b508060049081620001b79190620006e3565b50505060016005819055506000600b8190555042600e8190555085600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846006819055508360078190555082600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180606001604052806201518081526020016000815260200160198152506010600082015181600001556020820151816001015560408201518160020155905050505050505050620007ca565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003648262000337565b9050919050565b620003768162000357565b81146200038257600080fd5b50565b60008151905062000396816200036b565b92915050565b6000819050919050565b620003b1816200039c565b8114620003bd57600080fd5b50565b600081519050620003d181620003a6565b92915050565b60008060008060008060c08789031215620003f757620003f662000332565b5b60006200040789828a0162000385565b96505060206200041a89828a01620003c0565b95505060406200042d89828a01620003c0565b94505060606200044089828a0162000385565b93505060806200045389828a0162000385565b92505060a06200046689828a0162000385565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004f557607f821691505b6020821081036200050b576200050a620004ad565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000536565b62000581868362000536565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620005c4620005be620005b8846200039c565b62000599565b6200039c565b9050919050565b6000819050919050565b620005e083620005a3565b620005f8620005ef82620005cb565b84845462000543565b825550505050565b600090565b6200060f62000600565b6200061c818484620005d5565b505050565b5b8181101562000644576200063860008262000605565b60018101905062000622565b5050565b601f82111562000693576200065d8162000511565b620006688462000526565b8101602085101562000678578190505b62000690620006878562000526565b83018262000621565b50505b505050565b600082821c905092915050565b6000620006b86000198460080262000698565b1980831691505092915050565b6000620006d38383620006a5565b9150826002028217905092915050565b620006ee8262000473565b67ffffffffffffffff8111156200070a57620007096200047e565b5b620007168254620004dc565b6200072382828562000648565b600060209050601f8311600181146200075b576000841562000746578287015190505b620007528582620006c5565b865550620007c2565b601f1984166200076b8662000511565b60005b8281101562000795578489015182556001820191506020850194506020810190506200076e565b86831015620007b55784890151620007b1601f891682620006a5565b8355505b6001600288020188555050505b505050505050565b608051614875620007f460003960008181611e8b01528181611f7901526127b001526148756000f3fe608060405234801561001057600080fd5b50600436106102055760003560e01c806370bc6a6a1161011a578063a9059cbb116100ad578063c7011a561161007c578063c7011a5614610631578063dcb28e451461064f578063dd62ed3e1461066d578063f66363de1461069d578063f695dc47146106bb57610205565b8063a9059cbb14610595578063bae414d5146105c5578063c31c9c07146105e3578063c6a5679b1461060157610205565b806395d89b41116100e957806395d89b411461050a578063a457c2d714610528578063a570fd4f14610558578063a87430ba1461056257610205565b806370bc6a6a1461048057806378e979251461049e578063909bc189146104bc57806394b918de146104da57610205565b8063265ecc7d1161019d578063379607f51161016c578063379607f5146103ca57806339509351146103e65780634451d89f146104165780635e5509821461043457806370a082311461045057610205565b8063265ecc7d14610340578063313ce567146103705780633197cbb61461038e57806333bce8c3146103ac57610205565b8063095ea7b3116101d9578063095ea7b3146102925780630e85117a146102c257806318160ddd146102f257806323b872dd1461031057610205565b806297033e1461020a57806306fdde0314610226578063089fe6aa1461024457806308c4ba0b14610262575b600080fd5b610224600480360381019061021f91906132f9565b6106d9565b005b61022e610917565b60405161023b91906133b6565b60405180910390f35b61024c6109a9565b60405161025991906133f6565b60405180910390f35b61027c6004803603810190610277919061346f565b6109af565b60405161028991906134b7565b60405180910390f35b6102ac60048036038101906102a791906134d2565b610a5f565b6040516102b991906134b7565b60405180910390f35b6102dc60048036038101906102d7919061346f565b610a82565b6040516102e99190613521565b60405180910390f35b6102fa610afa565b6040516103079190613521565b60405180910390f35b61032a6004803603810190610325919061353c565b610b04565b60405161033791906134b7565b60405180910390f35b61035a600480360381019061035591906132f9565b610b33565b6040516103679190613521565b60405180910390f35b610378610f0a565b60405161038591906135ab565b60405180910390f35b610396610f13565b6040516103a39190613521565b60405180910390f35b6103b4610f19565b6040516103c19190613521565b60405180910390f35b6103e460048036038101906103df91906132f9565b610f1f565b005b61040060048036038101906103fb91906134d2565b61140a565b60405161040d91906134b7565b60405180910390f35b61041e611441565b60405161042b9190613625565b60405180910390f35b61044e600480360381019061044991906132f9565b611467565b005b61046a6004803603810190610465919061346f565b611952565b6040516104779190613521565b60405180910390f35b61048861199a565b6040516104959190613521565b60405180910390f35b6104a66119d0565b6040516104b39190613521565b60405180910390f35b6104c46119d6565b6040516104d1919061364f565b60405180910390f35b6104f460048036038101906104ef91906132f9565b6119fc565b6040516105019190613521565b60405180910390f35b6105126124ca565b60405161051f91906133b6565b60405180910390f35b610542600480360381019061053d91906134d2565b61255c565b60405161054f91906134b7565b60405180910390f35b6105606125d3565b005b61057c6004803603810190610577919061346f565b612728565b60405161058c949392919061366a565b60405180910390f35b6105af60048036038101906105aa91906134d2565b612765565b6040516105bc91906134b7565b60405180910390f35b6105cd612788565b6040516105da9190613625565b60405180910390f35b6105eb6127ae565b6040516105f891906136d0565b60405180910390f35b61061b6004803603810190610616919061346f565b6127d2565b6040516106289190613521565b60405180910390f35b610639612823565b6040516106469190613625565b60405180910390f35b610657612849565b6040516106649190613625565b60405180910390f35b610687600480360381019061068291906136eb565b61286f565b6040516106949190613521565b60405180910390f35b6106a56128f6565b6040516106b29190613625565b60405180910390f35b6106c361291c565b6040516106d09190613521565b60405180910390f35b6106e1612939565b60065442101580156106f557506007544211155b610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072b90613777565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161078f919061364f565b602060405180830381865afa1580156107ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d091906137ac565b811115610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990613825565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161087193929190613845565b6020604051808303816000875af1158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b491906138a8565b5060008190506108ff6108c5610f0a565b60126108d19190613904565b600a6108dd9190613a6c565b6108f1600a8561298890919063ffffffff16565b61299e90919063ffffffff16565b905061090b33826129b4565b50610914612b0a565b50565b60606003805461092690613ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461095290613ae6565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050905090565b610bb881565b600080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610a035760019050610a5a565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001544210610a555760019050610a5a565b600090505b919050565b600080610a6a612b14565b9050610a77818585612b1c565b600191505092915050565b600080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001549050600081421015610aef57610aec4283612ce590919063ffffffff16565b90505b809350505050919050565b6000600254905090565b600080610b0f612b14565b9050610b1c858285612cfb565b610b27858585612d87565b60019150509392505050565b600080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610bb5610ba6610b95629896808761299e90919063ffffffff16565b600b5461298890919063ffffffff16565b85612ce590919063ffffffff16565b905062989680600b5410610c0d576001610c01610bf2610be1629896808861299e90919063ffffffff16565b600b5461298890919063ffffffff16565b86612ce590919063ffffffff16565b1015610c0c57600190505b5b600081905060018360020154118015610c2b57506005836002015411155b15610c5e57610c576064610c4960198461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e28565b60058360020154118015610c775750600a836002015411155b15610caa57610ca36064610c9560328461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e27565b600a8360020154118015610cc357506014836002015411155b15610cf657610cef6064610ce1604b8461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e26565b60148360020154118015610d0f57506019836002015411155b15610d4257610d3b6064610d2d606e8461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e25565b60198360020154118015610d5b57506028836002015411155b15610d8e57610d876064610d79607d8461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e24565b60288360020154118015610da757506037836002015411155b15610dda57610dd36064610dc560828461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e23565b60378360020154118015610df357506064836002015411155b15610e2257610e1f6064610e1160968461298890919063ffffffff16565b61299e90919063ffffffff16565b90505b5b5b5b5b5b5b60006305f5e1009050600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff16158015610e8d57508086115b15610e96578091505b8360030160009054906101000a900460ff1680610eb35750808611155b610ebc57600080fd5b6000610ee96064610edb6010600201548661298890919063ffffffff16565b61299e90919063ffffffff16565b9050610efe8184612ce590919063ffffffff16565b95505050505050919050565b60006008905090565b60075481565b600b5481565b610f27612939565b6006544210158015610f3b57506007544211155b610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190613b63565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fd5919061364f565b602060405180830381865afa158015610ff2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101691906137ac565b811115611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90613bcf565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016110b793929190613845565b6020604051808303816000875af11580156110d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fa91906138a8565b5060008190506001821180156111185750683635c9adc5dea0000082105b1561112957600091508190506113f4565b683635c9adc5dea00000821015801561114c575069021e19e0c9bab24000008211155b1561115e57640ba43b740090506113f3565b69021e19e0c9bab240000082118015611181575069152d02c7e14af68000008211155b156111e5576111de611191610f0a565b601261119d9190613904565b600a6111a99190613a6c565b6111d060646111c260198761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90506113f2565b69152d02c7e14af680000082118015611208575069d3c21bcecceda10000008211155b1561126c57611265611218610f0a565b60126112249190613904565b600a6112309190613a6c565b611257606461124960018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90506113f1565b69d3c21bcecceda10000008211801561129057506a084595161401484a0000008211155b156112f5576112ee6112a0610f0a565b60126112ac9190613904565b600a6112b89190613a6c565b6112e06103e86112d260018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90506113f0565b6a084595161401484a0000008211801561131a57506a52b7d2dcc80cd2e40000008211155b1561137f5761137861132a610f0a565b60126113369190613904565b600a6113429190613a6c565b61136a6103e861135c60018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90506113ef565b6a52b7d2dcc80cd2e40000008211156113ee576113eb61139d610f0a565b60126113a99190613904565b600a6113b59190613a6c565b6113dd6127106113cf60018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90505b5b5b5b5b5b5b6113fe33826129b4565b50611407612b0a565b50565b600080611415612b14565b9050611436818585611427858961286f565b6114319190613bef565b612b1c565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61146f612939565b600654421015801561148357506007544211155b6114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990613c6f565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161151d919061364f565b602060405180830381865afa15801561153a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155e91906137ac565b8111156115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159790613cdb565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016115ff93929190613845565b6020604051808303816000875af115801561161e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164291906138a8565b5060008190506001821180156116605750683635c9adc5dea0000082105b15611671576000915081905061193c565b683635c9adc5dea000008210158015611694575069021e19e0c9bab24000008211155b156116a657640ba43b7400905061193b565b69021e19e0c9bab2400000821180156116c9575069152d02c7e14af68000008211155b1561172d576117266116d9610f0a565b60126116e59190613904565b600a6116f19190613a6c565b611718606461170a60198761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b905061193a565b69152d02c7e14af680000082118015611750575069d3c21bcecceda10000008211155b156117b4576117ad611760610f0a565b601261176c9190613904565b600a6117789190613a6c565b61179f606461179160018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b9050611939565b69d3c21bcecceda1000000821180156117d857506a084595161401484a0000008211155b1561183d576118366117e8610f0a565b60126117f49190613904565b600a6118009190613a6c565b6118286103e861181a60018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b9050611938565b6a084595161401484a0000008211801561186257506a52b7d2dcc80cd2e40000008211155b156118c7576118c0611872610f0a565b601261187e9190613904565b600a61188a9190613a6c565b6118b26103e86118a460018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b9050611937565b6a52b7d2dcc80cd2e4000000821115611936576119336118e5610f0a565b60126118f19190613904565b600a6118fd9190613a6c565b61192561271061191760018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90505b5b5b5b5b5b5b61194633826129b4565b5061194f612b0a565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006119cb6402540be4006119bd620f4240600b5461298890919063ffffffff16565b612ffd90919063ffffffff16565b905090565b60065481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611a06612939565b611a0f336109af565b611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4590613d47565b60405180910390fd5b81601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611aac929190613d67565b602060405180830381865afa158015611ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aed91906137ac565b10158015611afb5750600082115b611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613ddc565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611b95919061364f565b602060405180830381865afa158015611bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd691906137ac565b8211158015611be55750600082115b611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90613e48565b60405180910390fd5b611ca7600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611c996402540be400611c8b620f4240600b5461298890919063ffffffff16565b612ffd90919063ffffffff16565b612ffd90919063ffffffff16565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611d02919061364f565b602060405180830381865afa158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4391906137ac565b1015611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90613eb4565b60405180910390fd5b611d9a6064600b5461298890919063ffffffff16565b821015611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd390613f20565b60405180910390fd5b600b6000815480929190611def90613f40565b91905055506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806002016000815480929190611e4c90613f40565b9190505550611e7173a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48333086613013565b611eb073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb487f00000000000000000000000000000000000000000000000000000000000000008561315f565b600060405180610100016040528073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff168152602001732b591e99afe9f32eaa6214f7b7629768c40eeb3973ffffffffffffffffffffffffffffffffffffffff168152602001610bb862ffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815260200185815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663414bf389826040518263ffffffff1660e01b8152600401611fd09190614066565b6020604051808303816000875af1158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201391906137ac565b925060006120466002612038856002015460106000015461298890919063ffffffff16565b61298890919063ffffffff16565b90506000612086612077612066629896808861299e90919063ffffffff16565b600b5461298890919063ffffffff16565b86612ce590919063ffffffff16565b905062989680600b54106120de5760016120d26120c36120b2629896808961299e90919063ffffffff16565b600b5461298890919063ffffffff16565b87612ce590919063ffffffff16565b10156120dd57600190505b5b60008460020154905060008290506001821180156120fd575060058211155b1561213057612129606461211b60198661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122d2565b6005821180156121415750600a8211155b156121745761216d606461215f60328661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122d1565b600a82118015612185575060148211155b156121b8576121b160646121a3604b8661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122d0565b6014821180156121c9575060198211155b156121fc576121f560646121e7606e8661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122cf565b60198211801561220d575060288211155b1561224057612239606461222b607d8661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122ce565b602882118015612251575060378211155b156122845761227d606461226f60828661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122cd565b603782118015612295575060648211155b156122c8576122c160646122b360968661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122cc565b8290505b5b5b5b5b5b5b60006305f5e10090508660030160009054906101000a900460ff161580156122f957508088115b15612302578091505b60018760030160006101000a81548160ff0219169083151502179055508660030160009054906101000a900460ff168061233c5750808811155b61234557600080fd5b600061237260646123646010600201548661298890919063ffffffff16565b61299e90919063ffffffff16565b90506123903361238b8386612ce590919063ffffffff16565b6129b4565b6123bc600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826129b4565b6123cf8642612ffd90919063ffffffff16565b886000018190555061242c89600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154612ffd90919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555060008a116124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac906140ce565b60405180910390fd5b50505050505050506124c5612b0a565b919050565b6060600480546124d990613ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461250590613ae6565b80156125525780601f1061252757610100808354040283529160200191612552565b820191906000526020600020905b81548152906001019060200180831161253557829003601f168201915b5050505050905090565b600080612567612b14565b90506000612575828661286f565b9050838110156125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190614160565b60405180910390fd5b6125c78286868403612b1c565b60019250505092915050565b6125db612939565b6125f362015180600e54612ffd90919063ffffffff16565b421015612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262c906141cc565b60405180910390fd5b61264d6202a300600e54612ffd90919063ffffffff16565b421161266f5764e8d4a51000600d8190555060006010600101819055506126e9565b600061269b6201518061268d600e5442612ce590919063ffffffff16565b61299e90919063ffffffff16565b90506126b564e8d4a510008261298890919063ffffffff16565b601060010160008282546126c99190613bef565b925050819055506126e1600d54601060010154612ffd565b600d81905550505b42600e8190555061271e600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d546129b4565b612726612b0a565b565b600f6020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b600080612770612b14565b905061277d818585612d87565b600191505092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154915050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006129346064600b5461298890919063ffffffff16565b905090565b60026005540361297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614238565b60405180910390fd5b6002600581905550565b600081836129969190614258565b905092915050565b600081836129ac91906142c9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90614346565b60405180910390fd5b612a2f600083836132b4565b8060026000828254612a419190613bef565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612af29190613521565b60405180910390a3612b06600083836132b9565b5050565b6001600581905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b82906143d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf19061446a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612cd89190613521565b60405180910390a3505050565b60008183612cf3919061448a565b905092915050565b6000612d07848461286f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d815781811015612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a9061450a565b60405180910390fd5b612d808484848403612b1c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ded9061459c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5c9061462e565b60405180910390fd5b612e708383836132b4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed906146c0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fe49190613521565b60405180910390a3612ff78484846132b9565b50505050565b6000818361300b9190613bef565b905092915050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b86868660405160240161304a93929190613845565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516130b49190614727565b6000604051808303816000865af19150503d80600081146130f1576040519150601f19603f3d011682016040523d82523d6000602084013e6130f6565b606091505b509150915081801561311857508080602001905181019061311791906138a8565b5b613157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314e9061478a565b60405180910390fd5b505050505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b85856040516024016131949291906147aa565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516131fe9190614727565b6000604051808303816000865af19150503d806000811461323b576040519150601f19603f3d011682016040523d82523d6000602084013e613240565b606091505b509150915081801561326e575060008151148061326d57508080602001905181019061326c91906138a8565b5b5b6132ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a49061481f565b60405180910390fd5b5050505050565b505050565b505050565b600080fd5b6000819050919050565b6132d6816132c3565b81146132e157600080fd5b50565b6000813590506132f3816132cd565b92915050565b60006020828403121561330f5761330e6132be565b5b600061331d848285016132e4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613360578082015181840152602081019050613345565b60008484015250505050565b6000601f19601f8301169050919050565b600061338882613326565b6133928185613331565b93506133a2818560208601613342565b6133ab8161336c565b840191505092915050565b600060208201905081810360008301526133d0818461337d565b905092915050565b600062ffffff82169050919050565b6133f0816133d8565b82525050565b600060208201905061340b60008301846133e7565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061343c82613411565b9050919050565b61344c81613431565b811461345757600080fd5b50565b60008135905061346981613443565b92915050565b600060208284031215613485576134846132be565b5b60006134938482850161345a565b91505092915050565b60008115159050919050565b6134b18161349c565b82525050565b60006020820190506134cc60008301846134a8565b92915050565b600080604083850312156134e9576134e86132be565b5b60006134f78582860161345a565b9250506020613508858286016132e4565b9150509250929050565b61351b816132c3565b82525050565b60006020820190506135366000830184613512565b92915050565b600080600060608486031215613555576135546132be565b5b60006135638682870161345a565b93505060206135748682870161345a565b9250506040613585868287016132e4565b9150509250925092565b600060ff82169050919050565b6135a58161358f565b82525050565b60006020820190506135c0600083018461359c565b92915050565b6000819050919050565b60006135eb6135e66135e184613411565b6135c6565b613411565b9050919050565b60006135fd826135d0565b9050919050565b600061360f826135f2565b9050919050565b61361f81613604565b82525050565b600060208201905061363a6000830184613616565b92915050565b61364981613431565b82525050565b60006020820190506136646000830184613640565b92915050565b600060808201905061367f6000830187613512565b61368c6020830186613512565b6136996040830185613512565b6136a660608301846134a8565b95945050505050565b60006136ba826135f2565b9050919050565b6136ca816136af565b82525050565b60006020820190506136e560008301846136c1565b92915050565b60008060408385031215613702576137016132be565b5b60006137108582860161345a565b92505060206137218582860161345a565b9150509250929050565b7f54454d5053543200000000000000000000000000000000000000000000000000600082015250565b6000613761600783613331565b915061376c8261372b565b602082019050919050565b6000602082019050818103600083015261379081613754565b9050919050565b6000815190506137a6816132cd565b92915050565b6000602082840312156137c2576137c16132be565b5b60006137d084828501613797565b91505092915050565b7f494e5355464255524e3200000000000000000000000000000000000000000000600082015250565b600061380f600a83613331565b915061381a826137d9565b602082019050919050565b6000602082019050818103600083015261383e81613802565b9050919050565b600060608201905061385a6000830186613640565b6138676020830185613640565b6138746040830184613512565b949350505050565b6138858161349c565b811461389057600080fd5b50565b6000815190506138a28161387c565b92915050565b6000602082840312156138be576138bd6132be565b5b60006138cc84828501613893565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061390f8261358f565b915061391a8361358f565b9250828203905060ff811115613933576139326138d5565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156139905780860481111561396c5761396b6138d5565b5b600185161561397b5780820291505b808102905061398985613939565b9450613950565b94509492505050565b6000826139a95760019050613a65565b816139b75760009050613a65565b81600181146139cd57600281146139d757613a06565b6001915050613a65565b60ff8411156139e9576139e86138d5565b5b8360020a915084821115613a00576139ff6138d5565b5b50613a65565b5060208310610133831016604e8410600b8410161715613a3b5782820a905083811115613a3657613a356138d5565b5b613a65565b613a488484846001613946565b92509050818404811115613a5f57613a5e6138d5565b5b81810290505b9392505050565b6000613a77826132c3565b9150613a828361358f565b9250613aaf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613999565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613afe57607f821691505b602082108103613b1157613b10613ab7565b5b50919050565b7f54454d5053540000000000000000000000000000000000000000000000000000600082015250565b6000613b4d600683613331565b9150613b5882613b17565b602082019050919050565b60006020820190508181036000830152613b7c81613b40565b9050919050565b7f494e5355464255524e0000000000000000000000000000000000000000000000600082015250565b6000613bb9600983613331565b9150613bc482613b83565b602082019050919050565b60006020820190508181036000830152613be881613bac565b9050919050565b6000613bfa826132c3565b9150613c05836132c3565b9250828201905080821115613c1d57613c1c6138d5565b5b92915050565b7f54454d5053543300000000000000000000000000000000000000000000000000600082015250565b6000613c59600783613331565b9150613c6482613c23565b602082019050919050565b60006020820190508181036000830152613c8881613c4c565b9050919050565b7f494e5355464255524e3300000000000000000000000000000000000000000000600082015250565b6000613cc5600a83613331565b9150613cd082613c8f565b602082019050919050565b60006020820190508181036000830152613cf481613cb8565b9050919050565b7f5741495400000000000000000000000000000000000000000000000000000000600082015250565b6000613d31600483613331565b9150613d3c82613cfb565b602082019050919050565b60006020820190508181036000830152613d6081613d24565b9050919050565b6000604082019050613d7c6000830185613640565b613d896020830184613640565b9392505050565b7f494e555344414c2e000000000000000000000000000000000000000000000000600082015250565b6000613dc6600883613331565b9150613dd182613d90565b602082019050919050565b60006020820190508181036000830152613df581613db9565b9050919050565b7f494e55534442414c000000000000000000000000000000000000000000000000600082015250565b6000613e32600883613331565b9150613e3d82613dfc565b602082019050919050565b60006020820190508181036000830152613e6181613e25565b9050919050565b7f52414d4e542e0000000000000000000000000000000000000000000000000000600082015250565b6000613e9e600683613331565b9150613ea982613e68565b602082019050919050565b60006020820190508181036000830152613ecd81613e91565b9050919050565b7f4d494e5553444300000000000000000000000000000000000000000000000000600082015250565b6000613f0a600783613331565b9150613f1582613ed4565b602082019050919050565b60006020820190508181036000830152613f3981613efd565b9050919050565b6000613f4b826132c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f7d57613f7c6138d5565b5b600182019050919050565b613f9181613431565b82525050565b613fa0816133d8565b82525050565b613faf816132c3565b82525050565b613fbe81613411565b82525050565b61010082016000820151613fdb6000850182613f88565b506020820151613fee6020850182613f88565b5060408201516140016040850182613f97565b5060608201516140146060850182613f88565b5060808201516140276080850182613fa6565b5060a082015161403a60a0850182613fa6565b5060c082015161404d60c0850182613fa6565b5060e082015161406060e0850182613fb5565b50505050565b60006101008201905061407c6000830184613fc4565b92915050565b7f4d4f5245305448414e0000000000000000000000000000000000000000000000600082015250565b60006140b8600983613331565b91506140c382614082565b602082019050919050565b600060208201905081810360008301526140e7816140ab565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061414a602583613331565b9150614155826140ee565b604082019050919050565b600060208201905081810360008301526141798161413d565b9050919050565b7f574149544d4e5400000000000000000000000000000000000000000000000000600082015250565b60006141b6600783613331565b91506141c182614180565b602082019050919050565b600060208201905081810360008301526141e5816141a9565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614222601f83613331565b915061422d826141ec565b602082019050919050565b6000602082019050818103600083015261425181614215565b9050919050565b6000614263826132c3565b915061426e836132c3565b925082820261427c816132c3565b91508282048414831517614293576142926138d5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142d4826132c3565b91506142df836132c3565b9250826142ef576142ee61429a565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614330601f83613331565b915061433b826142fa565b602082019050919050565b6000602082019050818103600083015261435f81614323565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143c2602483613331565b91506143cd82614366565b604082019050919050565b600060208201905081810360008301526143f1816143b5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614454602283613331565b915061445f826143f8565b604082019050919050565b6000602082019050818103600083015261448381614447565b9050919050565b6000614495826132c3565b91506144a0836132c3565b92508282039050818111156144b8576144b76138d5565b5b92915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006144f4601d83613331565b91506144ff826144be565b602082019050919050565b60006020820190508181036000830152614523816144e7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614586602583613331565b91506145918261452a565b604082019050919050565b600060208201905081810360008301526145b581614579565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614618602383613331565b9150614623826145bc565b604082019050919050565b600060208201905081810360008301526146478161460b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006146aa602683613331565b91506146b58261464e565b604082019050919050565b600060208201905081810360008301526146d98161469d565b9050919050565b600081519050919050565b600081905092915050565b6000614701826146e0565b61470b81856146eb565b935061471b818560208601613342565b80840191505092915050565b600061473382846146f6565b915081905092915050565b7f53616665205472616e73666572204661696c65642e0000000000000000000000600082015250565b6000614774601583613331565b915061477f8261473e565b602082019050919050565b600060208201905081810360008301526147a381614767565b9050919050565b60006040820190506147bf6000830185613640565b6147cc6020830184613512565b9392505050565b7f5341000000000000000000000000000000000000000000000000000000000000600082015250565b6000614809600283613331565b9150614814826147d3565b602082019050919050565b60006020820190508181036000830152614838816147fc565b905091905056fea26469706673582212204006554c0efcea3e510f919c5689c75496ff4584f130a9fa5fbd3da81b6f90f364736f6c6343000812003300000000000000000000000003e44c3f8c1a2944affa92af64897c2078990375000000000000000000000000000000000000000000000000000000006425175100000000000000000000000000000000000000000000000000000000643a2f51000000000000000000000000009a8670e74e1dda3e449e93a9308e59779499670000000000000000000000008325e09c1675f46fd4ebf00e2004541914ccc461000000000000000000000000f855fb30ee010d3db677185c7099f2481562755c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102055760003560e01c806370bc6a6a1161011a578063a9059cbb116100ad578063c7011a561161007c578063c7011a5614610631578063dcb28e451461064f578063dd62ed3e1461066d578063f66363de1461069d578063f695dc47146106bb57610205565b8063a9059cbb14610595578063bae414d5146105c5578063c31c9c07146105e3578063c6a5679b1461060157610205565b806395d89b41116100e957806395d89b411461050a578063a457c2d714610528578063a570fd4f14610558578063a87430ba1461056257610205565b806370bc6a6a1461048057806378e979251461049e578063909bc189146104bc57806394b918de146104da57610205565b8063265ecc7d1161019d578063379607f51161016c578063379607f5146103ca57806339509351146103e65780634451d89f146104165780635e5509821461043457806370a082311461045057610205565b8063265ecc7d14610340578063313ce567146103705780633197cbb61461038e57806333bce8c3146103ac57610205565b8063095ea7b3116101d9578063095ea7b3146102925780630e85117a146102c257806318160ddd146102f257806323b872dd1461031057610205565b806297033e1461020a57806306fdde0314610226578063089fe6aa1461024457806308c4ba0b14610262575b600080fd5b610224600480360381019061021f91906132f9565b6106d9565b005b61022e610917565b60405161023b91906133b6565b60405180910390f35b61024c6109a9565b60405161025991906133f6565b60405180910390f35b61027c6004803603810190610277919061346f565b6109af565b60405161028991906134b7565b60405180910390f35b6102ac60048036038101906102a791906134d2565b610a5f565b6040516102b991906134b7565b60405180910390f35b6102dc60048036038101906102d7919061346f565b610a82565b6040516102e99190613521565b60405180910390f35b6102fa610afa565b6040516103079190613521565b60405180910390f35b61032a6004803603810190610325919061353c565b610b04565b60405161033791906134b7565b60405180910390f35b61035a600480360381019061035591906132f9565b610b33565b6040516103679190613521565b60405180910390f35b610378610f0a565b60405161038591906135ab565b60405180910390f35b610396610f13565b6040516103a39190613521565b60405180910390f35b6103b4610f19565b6040516103c19190613521565b60405180910390f35b6103e460048036038101906103df91906132f9565b610f1f565b005b61040060048036038101906103fb91906134d2565b61140a565b60405161040d91906134b7565b60405180910390f35b61041e611441565b60405161042b9190613625565b60405180910390f35b61044e600480360381019061044991906132f9565b611467565b005b61046a6004803603810190610465919061346f565b611952565b6040516104779190613521565b60405180910390f35b61048861199a565b6040516104959190613521565b60405180910390f35b6104a66119d0565b6040516104b39190613521565b60405180910390f35b6104c46119d6565b6040516104d1919061364f565b60405180910390f35b6104f460048036038101906104ef91906132f9565b6119fc565b6040516105019190613521565b60405180910390f35b6105126124ca565b60405161051f91906133b6565b60405180910390f35b610542600480360381019061053d91906134d2565b61255c565b60405161054f91906134b7565b60405180910390f35b6105606125d3565b005b61057c6004803603810190610577919061346f565b612728565b60405161058c949392919061366a565b60405180910390f35b6105af60048036038101906105aa91906134d2565b612765565b6040516105bc91906134b7565b60405180910390f35b6105cd612788565b6040516105da9190613625565b60405180910390f35b6105eb6127ae565b6040516105f891906136d0565b60405180910390f35b61061b6004803603810190610616919061346f565b6127d2565b6040516106289190613521565b60405180910390f35b610639612823565b6040516106469190613625565b60405180910390f35b610657612849565b6040516106649190613625565b60405180910390f35b610687600480360381019061068291906136eb565b61286f565b6040516106949190613521565b60405180910390f35b6106a56128f6565b6040516106b29190613625565b60405180910390f35b6106c361291c565b6040516106d09190613521565b60405180910390f35b6106e1612939565b60065442101580156106f557506007544211155b610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072b90613777565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161078f919061364f565b602060405180830381865afa1580156107ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d091906137ac565b811115610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990613825565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161087193929190613845565b6020604051808303816000875af1158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b491906138a8565b5060008190506108ff6108c5610f0a565b60126108d19190613904565b600a6108dd9190613a6c565b6108f1600a8561298890919063ffffffff16565b61299e90919063ffffffff16565b905061090b33826129b4565b50610914612b0a565b50565b60606003805461092690613ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461095290613ae6565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050905090565b610bb881565b600080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610a035760019050610a5a565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001544210610a555760019050610a5a565b600090505b919050565b600080610a6a612b14565b9050610a77818585612b1c565b600191505092915050565b600080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001549050600081421015610aef57610aec4283612ce590919063ffffffff16565b90505b809350505050919050565b6000600254905090565b600080610b0f612b14565b9050610b1c858285612cfb565b610b27858585612d87565b60019150509392505050565b600080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610bb5610ba6610b95629896808761299e90919063ffffffff16565b600b5461298890919063ffffffff16565b85612ce590919063ffffffff16565b905062989680600b5410610c0d576001610c01610bf2610be1629896808861299e90919063ffffffff16565b600b5461298890919063ffffffff16565b86612ce590919063ffffffff16565b1015610c0c57600190505b5b600081905060018360020154118015610c2b57506005836002015411155b15610c5e57610c576064610c4960198461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e28565b60058360020154118015610c775750600a836002015411155b15610caa57610ca36064610c9560328461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e27565b600a8360020154118015610cc357506014836002015411155b15610cf657610cef6064610ce1604b8461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e26565b60148360020154118015610d0f57506019836002015411155b15610d4257610d3b6064610d2d606e8461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e25565b60198360020154118015610d5b57506028836002015411155b15610d8e57610d876064610d79607d8461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e24565b60288360020154118015610da757506037836002015411155b15610dda57610dd36064610dc560828461298890919063ffffffff16565b61299e90919063ffffffff16565b9050610e23565b60378360020154118015610df357506064836002015411155b15610e2257610e1f6064610e1160968461298890919063ffffffff16565b61299e90919063ffffffff16565b90505b5b5b5b5b5b5b60006305f5e1009050600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff16158015610e8d57508086115b15610e96578091505b8360030160009054906101000a900460ff1680610eb35750808611155b610ebc57600080fd5b6000610ee96064610edb6010600201548661298890919063ffffffff16565b61299e90919063ffffffff16565b9050610efe8184612ce590919063ffffffff16565b95505050505050919050565b60006008905090565b60075481565b600b5481565b610f27612939565b6006544210158015610f3b57506007544211155b610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190613b63565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fd5919061364f565b602060405180830381865afa158015610ff2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101691906137ac565b811115611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90613bcf565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016110b793929190613845565b6020604051808303816000875af11580156110d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fa91906138a8565b5060008190506001821180156111185750683635c9adc5dea0000082105b1561112957600091508190506113f4565b683635c9adc5dea00000821015801561114c575069021e19e0c9bab24000008211155b1561115e57640ba43b740090506113f3565b69021e19e0c9bab240000082118015611181575069152d02c7e14af68000008211155b156111e5576111de611191610f0a565b601261119d9190613904565b600a6111a99190613a6c565b6111d060646111c260198761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90506113f2565b69152d02c7e14af680000082118015611208575069d3c21bcecceda10000008211155b1561126c57611265611218610f0a565b60126112249190613904565b600a6112309190613a6c565b611257606461124960018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90506113f1565b69d3c21bcecceda10000008211801561129057506a084595161401484a0000008211155b156112f5576112ee6112a0610f0a565b60126112ac9190613904565b600a6112b89190613a6c565b6112e06103e86112d260018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90506113f0565b6a084595161401484a0000008211801561131a57506a52b7d2dcc80cd2e40000008211155b1561137f5761137861132a610f0a565b60126113369190613904565b600a6113429190613a6c565b61136a6103e861135c60018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90506113ef565b6a52b7d2dcc80cd2e40000008211156113ee576113eb61139d610f0a565b60126113a99190613904565b600a6113b59190613a6c565b6113dd6127106113cf60018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90505b5b5b5b5b5b5b6113fe33826129b4565b50611407612b0a565b50565b600080611415612b14565b9050611436818585611427858961286f565b6114319190613bef565b612b1c565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61146f612939565b600654421015801561148357506007544211155b6114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990613c6f565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161151d919061364f565b602060405180830381865afa15801561153a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155e91906137ac565b8111156115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159790613cdb565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016115ff93929190613845565b6020604051808303816000875af115801561161e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164291906138a8565b5060008190506001821180156116605750683635c9adc5dea0000082105b15611671576000915081905061193c565b683635c9adc5dea000008210158015611694575069021e19e0c9bab24000008211155b156116a657640ba43b7400905061193b565b69021e19e0c9bab2400000821180156116c9575069152d02c7e14af68000008211155b1561172d576117266116d9610f0a565b60126116e59190613904565b600a6116f19190613a6c565b611718606461170a60198761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b905061193a565b69152d02c7e14af680000082118015611750575069d3c21bcecceda10000008211155b156117b4576117ad611760610f0a565b601261176c9190613904565b600a6117789190613a6c565b61179f606461179160018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b9050611939565b69d3c21bcecceda1000000821180156117d857506a084595161401484a0000008211155b1561183d576118366117e8610f0a565b60126117f49190613904565b600a6118009190613a6c565b6118286103e861181a60018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b9050611938565b6a084595161401484a0000008211801561186257506a52b7d2dcc80cd2e40000008211155b156118c7576118c0611872610f0a565b601261187e9190613904565b600a61188a9190613a6c565b6118b26103e86118a460018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b9050611937565b6a52b7d2dcc80cd2e4000000821115611936576119336118e5610f0a565b60126118f19190613904565b600a6118fd9190613a6c565b61192561271061191760018761298890919063ffffffff16565b61299e90919063ffffffff16565b61299e90919063ffffffff16565b90505b5b5b5b5b5b5b61194633826129b4565b5061194f612b0a565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006119cb6402540be4006119bd620f4240600b5461298890919063ffffffff16565b612ffd90919063ffffffff16565b905090565b60065481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611a06612939565b611a0f336109af565b611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4590613d47565b60405180910390fd5b81601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611aac929190613d67565b602060405180830381865afa158015611ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aed91906137ac565b10158015611afb5750600082115b611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613ddc565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611b95919061364f565b602060405180830381865afa158015611bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd691906137ac565b8211158015611be55750600082115b611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90613e48565b60405180910390fd5b611ca7600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611c996402540be400611c8b620f4240600b5461298890919063ffffffff16565b612ffd90919063ffffffff16565b612ffd90919063ffffffff16565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611d02919061364f565b602060405180830381865afa158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4391906137ac565b1015611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90613eb4565b60405180910390fd5b611d9a6064600b5461298890919063ffffffff16565b821015611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd390613f20565b60405180910390fd5b600b6000815480929190611def90613f40565b91905055506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806002016000815480929190611e4c90613f40565b9190505550611e7173a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48333086613013565b611eb073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb487f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615648561315f565b600060405180610100016040528073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff168152602001732b591e99afe9f32eaa6214f7b7629768c40eeb3973ffffffffffffffffffffffffffffffffffffffff168152602001610bb862ffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815260200185815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090507f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156473ffffffffffffffffffffffffffffffffffffffff1663414bf389826040518263ffffffff1660e01b8152600401611fd09190614066565b6020604051808303816000875af1158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201391906137ac565b925060006120466002612038856002015460106000015461298890919063ffffffff16565b61298890919063ffffffff16565b90506000612086612077612066629896808861299e90919063ffffffff16565b600b5461298890919063ffffffff16565b86612ce590919063ffffffff16565b905062989680600b54106120de5760016120d26120c36120b2629896808961299e90919063ffffffff16565b600b5461298890919063ffffffff16565b87612ce590919063ffffffff16565b10156120dd57600190505b5b60008460020154905060008290506001821180156120fd575060058211155b1561213057612129606461211b60198661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122d2565b6005821180156121415750600a8211155b156121745761216d606461215f60328661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122d1565b600a82118015612185575060148211155b156121b8576121b160646121a3604b8661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122d0565b6014821180156121c9575060198211155b156121fc576121f560646121e7606e8661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122cf565b60198211801561220d575060288211155b1561224057612239606461222b607d8661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122ce565b602882118015612251575060378211155b156122845761227d606461226f60828661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122cd565b603782118015612295575060648211155b156122c8576122c160646122b360968661298890919063ffffffff16565b61299e90919063ffffffff16565b90506122cc565b8290505b5b5b5b5b5b5b60006305f5e10090508660030160009054906101000a900460ff161580156122f957508088115b15612302578091505b60018760030160006101000a81548160ff0219169083151502179055508660030160009054906101000a900460ff168061233c5750808811155b61234557600080fd5b600061237260646123646010600201548661298890919063ffffffff16565b61299e90919063ffffffff16565b90506123903361238b8386612ce590919063ffffffff16565b6129b4565b6123bc600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826129b4565b6123cf8642612ffd90919063ffffffff16565b886000018190555061242c89600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154612ffd90919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555060008a116124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac906140ce565b60405180910390fd5b50505050505050506124c5612b0a565b919050565b6060600480546124d990613ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461250590613ae6565b80156125525780601f1061252757610100808354040283529160200191612552565b820191906000526020600020905b81548152906001019060200180831161253557829003601f168201915b5050505050905090565b600080612567612b14565b90506000612575828661286f565b9050838110156125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190614160565b60405180910390fd5b6125c78286868403612b1c565b60019250505092915050565b6125db612939565b6125f362015180600e54612ffd90919063ffffffff16565b421015612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262c906141cc565b60405180910390fd5b61264d6202a300600e54612ffd90919063ffffffff16565b421161266f5764e8d4a51000600d8190555060006010600101819055506126e9565b600061269b6201518061268d600e5442612ce590919063ffffffff16565b61299e90919063ffffffff16565b90506126b564e8d4a510008261298890919063ffffffff16565b601060010160008282546126c99190613bef565b925050819055506126e1600d54601060010154612ffd565b600d81905550505b42600e8190555061271e600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d546129b4565b612726612b0a565b565b600f6020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b600080612770612b14565b905061277d818585612d87565b600191505092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481565b600080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154915050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006129346064600b5461298890919063ffffffff16565b905090565b60026005540361297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614238565b60405180910390fd5b6002600581905550565b600081836129969190614258565b905092915050565b600081836129ac91906142c9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90614346565b60405180910390fd5b612a2f600083836132b4565b8060026000828254612a419190613bef565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612af29190613521565b60405180910390a3612b06600083836132b9565b5050565b6001600581905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b82906143d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf19061446a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612cd89190613521565b60405180910390a3505050565b60008183612cf3919061448a565b905092915050565b6000612d07848461286f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d815781811015612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a9061450a565b60405180910390fd5b612d808484848403612b1c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ded9061459c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5c9061462e565b60405180910390fd5b612e708383836132b4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed906146c0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fe49190613521565b60405180910390a3612ff78484846132b9565b50505050565b6000818361300b9190613bef565b905092915050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b86868660405160240161304a93929190613845565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516130b49190614727565b6000604051808303816000865af19150503d80600081146130f1576040519150601f19603f3d011682016040523d82523d6000602084013e6130f6565b606091505b509150915081801561311857508080602001905181019061311791906138a8565b5b613157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314e9061478a565b60405180910390fd5b505050505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b85856040516024016131949291906147aa565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516131fe9190614727565b6000604051808303816000865af19150503d806000811461323b576040519150601f19603f3d011682016040523d82523d6000602084013e613240565b606091505b509150915081801561326e575060008151148061326d57508080602001905181019061326c91906138a8565b5b5b6132ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a49061481f565b60405180910390fd5b5050505050565b505050565b505050565b600080fd5b6000819050919050565b6132d6816132c3565b81146132e157600080fd5b50565b6000813590506132f3816132cd565b92915050565b60006020828403121561330f5761330e6132be565b5b600061331d848285016132e4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613360578082015181840152602081019050613345565b60008484015250505050565b6000601f19601f8301169050919050565b600061338882613326565b6133928185613331565b93506133a2818560208601613342565b6133ab8161336c565b840191505092915050565b600060208201905081810360008301526133d0818461337d565b905092915050565b600062ffffff82169050919050565b6133f0816133d8565b82525050565b600060208201905061340b60008301846133e7565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061343c82613411565b9050919050565b61344c81613431565b811461345757600080fd5b50565b60008135905061346981613443565b92915050565b600060208284031215613485576134846132be565b5b60006134938482850161345a565b91505092915050565b60008115159050919050565b6134b18161349c565b82525050565b60006020820190506134cc60008301846134a8565b92915050565b600080604083850312156134e9576134e86132be565b5b60006134f78582860161345a565b9250506020613508858286016132e4565b9150509250929050565b61351b816132c3565b82525050565b60006020820190506135366000830184613512565b92915050565b600080600060608486031215613555576135546132be565b5b60006135638682870161345a565b93505060206135748682870161345a565b9250506040613585868287016132e4565b9150509250925092565b600060ff82169050919050565b6135a58161358f565b82525050565b60006020820190506135c0600083018461359c565b92915050565b6000819050919050565b60006135eb6135e66135e184613411565b6135c6565b613411565b9050919050565b60006135fd826135d0565b9050919050565b600061360f826135f2565b9050919050565b61361f81613604565b82525050565b600060208201905061363a6000830184613616565b92915050565b61364981613431565b82525050565b60006020820190506136646000830184613640565b92915050565b600060808201905061367f6000830187613512565b61368c6020830186613512565b6136996040830185613512565b6136a660608301846134a8565b95945050505050565b60006136ba826135f2565b9050919050565b6136ca816136af565b82525050565b60006020820190506136e560008301846136c1565b92915050565b60008060408385031215613702576137016132be565b5b60006137108582860161345a565b92505060206137218582860161345a565b9150509250929050565b7f54454d5053543200000000000000000000000000000000000000000000000000600082015250565b6000613761600783613331565b915061376c8261372b565b602082019050919050565b6000602082019050818103600083015261379081613754565b9050919050565b6000815190506137a6816132cd565b92915050565b6000602082840312156137c2576137c16132be565b5b60006137d084828501613797565b91505092915050565b7f494e5355464255524e3200000000000000000000000000000000000000000000600082015250565b600061380f600a83613331565b915061381a826137d9565b602082019050919050565b6000602082019050818103600083015261383e81613802565b9050919050565b600060608201905061385a6000830186613640565b6138676020830185613640565b6138746040830184613512565b949350505050565b6138858161349c565b811461389057600080fd5b50565b6000815190506138a28161387c565b92915050565b6000602082840312156138be576138bd6132be565b5b60006138cc84828501613893565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061390f8261358f565b915061391a8361358f565b9250828203905060ff811115613933576139326138d5565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156139905780860481111561396c5761396b6138d5565b5b600185161561397b5780820291505b808102905061398985613939565b9450613950565b94509492505050565b6000826139a95760019050613a65565b816139b75760009050613a65565b81600181146139cd57600281146139d757613a06565b6001915050613a65565b60ff8411156139e9576139e86138d5565b5b8360020a915084821115613a00576139ff6138d5565b5b50613a65565b5060208310610133831016604e8410600b8410161715613a3b5782820a905083811115613a3657613a356138d5565b5b613a65565b613a488484846001613946565b92509050818404811115613a5f57613a5e6138d5565b5b81810290505b9392505050565b6000613a77826132c3565b9150613a828361358f565b9250613aaf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613999565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613afe57607f821691505b602082108103613b1157613b10613ab7565b5b50919050565b7f54454d5053540000000000000000000000000000000000000000000000000000600082015250565b6000613b4d600683613331565b9150613b5882613b17565b602082019050919050565b60006020820190508181036000830152613b7c81613b40565b9050919050565b7f494e5355464255524e0000000000000000000000000000000000000000000000600082015250565b6000613bb9600983613331565b9150613bc482613b83565b602082019050919050565b60006020820190508181036000830152613be881613bac565b9050919050565b6000613bfa826132c3565b9150613c05836132c3565b9250828201905080821115613c1d57613c1c6138d5565b5b92915050565b7f54454d5053543300000000000000000000000000000000000000000000000000600082015250565b6000613c59600783613331565b9150613c6482613c23565b602082019050919050565b60006020820190508181036000830152613c8881613c4c565b9050919050565b7f494e5355464255524e3300000000000000000000000000000000000000000000600082015250565b6000613cc5600a83613331565b9150613cd082613c8f565b602082019050919050565b60006020820190508181036000830152613cf481613cb8565b9050919050565b7f5741495400000000000000000000000000000000000000000000000000000000600082015250565b6000613d31600483613331565b9150613d3c82613cfb565b602082019050919050565b60006020820190508181036000830152613d6081613d24565b9050919050565b6000604082019050613d7c6000830185613640565b613d896020830184613640565b9392505050565b7f494e555344414c2e000000000000000000000000000000000000000000000000600082015250565b6000613dc6600883613331565b9150613dd182613d90565b602082019050919050565b60006020820190508181036000830152613df581613db9565b9050919050565b7f494e55534442414c000000000000000000000000000000000000000000000000600082015250565b6000613e32600883613331565b9150613e3d82613dfc565b602082019050919050565b60006020820190508181036000830152613e6181613e25565b9050919050565b7f52414d4e542e0000000000000000000000000000000000000000000000000000600082015250565b6000613e9e600683613331565b9150613ea982613e68565b602082019050919050565b60006020820190508181036000830152613ecd81613e91565b9050919050565b7f4d494e5553444300000000000000000000000000000000000000000000000000600082015250565b6000613f0a600783613331565b9150613f1582613ed4565b602082019050919050565b60006020820190508181036000830152613f3981613efd565b9050919050565b6000613f4b826132c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f7d57613f7c6138d5565b5b600182019050919050565b613f9181613431565b82525050565b613fa0816133d8565b82525050565b613faf816132c3565b82525050565b613fbe81613411565b82525050565b61010082016000820151613fdb6000850182613f88565b506020820151613fee6020850182613f88565b5060408201516140016040850182613f97565b5060608201516140146060850182613f88565b5060808201516140276080850182613fa6565b5060a082015161403a60a0850182613fa6565b5060c082015161404d60c0850182613fa6565b5060e082015161406060e0850182613fb5565b50505050565b60006101008201905061407c6000830184613fc4565b92915050565b7f4d4f5245305448414e0000000000000000000000000000000000000000000000600082015250565b60006140b8600983613331565b91506140c382614082565b602082019050919050565b600060208201905081810360008301526140e7816140ab565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061414a602583613331565b9150614155826140ee565b604082019050919050565b600060208201905081810360008301526141798161413d565b9050919050565b7f574149544d4e5400000000000000000000000000000000000000000000000000600082015250565b60006141b6600783613331565b91506141c182614180565b602082019050919050565b600060208201905081810360008301526141e5816141a9565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614222601f83613331565b915061422d826141ec565b602082019050919050565b6000602082019050818103600083015261425181614215565b9050919050565b6000614263826132c3565b915061426e836132c3565b925082820261427c816132c3565b91508282048414831517614293576142926138d5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142d4826132c3565b91506142df836132c3565b9250826142ef576142ee61429a565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614330601f83613331565b915061433b826142fa565b602082019050919050565b6000602082019050818103600083015261435f81614323565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143c2602483613331565b91506143cd82614366565b604082019050919050565b600060208201905081810360008301526143f1816143b5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614454602283613331565b915061445f826143f8565b604082019050919050565b6000602082019050818103600083015261448381614447565b9050919050565b6000614495826132c3565b91506144a0836132c3565b92508282039050818111156144b8576144b76138d5565b5b92915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006144f4601d83613331565b91506144ff826144be565b602082019050919050565b60006020820190508181036000830152614523816144e7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614586602583613331565b91506145918261452a565b604082019050919050565b600060208201905081810360008301526145b581614579565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614618602383613331565b9150614623826145bc565b604082019050919050565b600060208201905081810360008301526146478161460b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006146aa602683613331565b91506146b58261464e565b604082019050919050565b600060208201905081810360008301526146d98161469d565b9050919050565b600081519050919050565b600081905092915050565b6000614701826146e0565b61470b81856146eb565b935061471b818560208601613342565b80840191505092915050565b600061473382846146f6565b915081905092915050565b7f53616665205472616e73666572204661696c65642e0000000000000000000000600082015250565b6000614774601583613331565b915061477f8261473e565b602082019050919050565b600060208201905081810360008301526147a381614767565b9050919050565b60006040820190506147bf6000830185613640565b6147cc6020830184613512565b9392505050565b7f5341000000000000000000000000000000000000000000000000000000000000600082015250565b6000614809600283613331565b9150614814826147d3565b602082019050919050565b60006020820190508181036000830152614838816147fc565b905091905056fea26469706673582212204006554c0efcea3e510f919c5689c75496ff4584f130a9fa5fbd3da81b6f90f364736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000003e44c3f8c1a2944affa92af64897c2078990375000000000000000000000000000000000000000000000000000000006425175100000000000000000000000000000000000000000000000000000000643a2f51000000000000000000000000009a8670e74e1dda3e449e93a9308e59779499670000000000000000000000008325e09c1675f46fd4ebf00e2004541914ccc461000000000000000000000000f855fb30ee010d3db677185c7099f2481562755c
-----Decoded View---------------
Arg [0] : _StashersAdd (address): 0x03E44C3F8c1a2944afFA92Af64897C2078990375
Arg [1] : _startTime (uint256): 1680152401
Arg [2] : _endTime (uint256): 1681534801
Arg [3] : _ClaimToken (address): 0x009a8670E74E1dda3E449E93A9308e5977949967
Arg [4] : _ClaimToken2 (address): 0x8325E09C1675F46fd4eBf00E2004541914CCC461
Arg [5] : _ClaimToken3 (address): 0xf855Fb30EE010d3Db677185c7099f2481562755C
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000003e44c3f8c1a2944affa92af64897c2078990375
Arg [1] : 0000000000000000000000000000000000000000000000000000000064251751
Arg [2] : 00000000000000000000000000000000000000000000000000000000643a2f51
Arg [3] : 000000000000000000000000009a8670e74e1dda3e449e93a9308e5977949967
Arg [4] : 0000000000000000000000008325e09c1675f46fd4ebf00e2004541914ccc461
Arg [5] : 000000000000000000000000f855fb30ee010d3db677185c7099f2481562755c
Deployed Bytecode Sourcemap
33982:15277:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44888:704;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15721:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34678:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35731:257;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18071:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39939:458;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16840:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18852:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40463:2381;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16683:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34101:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34222:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43233:1633;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19556:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34130:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45620:1635;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17011:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43075:123;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34070:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34255:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36080:3624;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15940:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20297:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48358:892;;;:::i;:::-;;34358:37;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;17344:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35066:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34823:68;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39770:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35108:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34191:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17600:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34160:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42902:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44888:704;6258:21;:19;:21::i;:::-;45037:9:::1;;45018:15;:28;;:58;;;;;45069:7;;45050:15;:26;;45018:58;45010:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;45176:11;;;;;;;;;;;:21;;;45198:10;45176:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45162:10;:47;;45154:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;45295:11;;;;;;;;;;;:24;;;45320:10;45340:4;45347:10;45295:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45402:20;45425:10;45402:33;;45457:47;45492:10;:8;:10::i;:::-;45487:2;:15;;;;:::i;:::-;45480:2;:23;;;;:::i;:::-;45457:18;45472:2;45457:10;:14;;:18;;;;:::i;:::-;:22;;:47;;;;:::i;:::-;45442:62;;45553:31;45559:10;45571:12;45553:5;:31::i;:::-;44945:647;6302:20:::0;:18;:20::i;:::-;44888:704;:::o;15721:100::-;15775:13;15808:5;15801:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15721:100;:::o;34678:37::-;34711:4;34678:37;:::o;35731:257::-;35793:4;35841:1;35809:5;:15;35815:8;35809:15;;;;;;;;;;;;;;;:28;;;:33;35806:156;;35862:4;35855:11;;;;35806:156;35902:5;:15;35908:8;35902:15;;;;;;;;;;;;;;;:28;;;35883:15;:47;35880:82;;35950:4;35943:11;;;;35880:82;35975:5;35968:12;;35731:257;;;;:::o;18071:201::-;18154:4;18171:13;18187:12;:10;:12::i;:::-;18171:28;;18210:32;18219:5;18226:7;18235:6;18210:8;:32::i;:::-;18260:4;18253:11;;;18071:201;;;;:::o;39939:458::-;40004:7;40020:21;40044:5;:15;40050:8;40044:15;;;;;;;;;;;;;;;40020:39;;40111:16;40130:8;:21;;;40111:40;;40235:21;40289:8;40271:15;:26;40267:96;;;40326:29;40339:15;40326:8;:12;;:29;;;;:::i;:::-;40310:45;;40267:96;40376:13;40369:20;;;;;39939:458;;;:::o;16840:108::-;16901:7;16928:12;;16921:19;;16840:108;:::o;18852:295::-;18983:4;19000:15;19018:12;:10;:12::i;:::-;19000:30;;19041:38;19057:4;19063:7;19072:6;19041:15;:38::i;:::-;19090:27;19100:4;19106:2;19110:6;19090:9;:27::i;:::-;19135:4;19128:11;;;18852:295;;;;;:::o;40463:2381::-;40522:7;40537:21;40561:5;:17;40567:10;40561:17;;;;;;;;;;;;;;;40537:41;;40718:18;40739:55;40753:40;40769:23;40783:8;40769:9;:13;;:23;;;;:::i;:::-;40753:11;;:15;;:40;;;;:::i;:::-;40739:9;:13;;:55;;;;:::i;:::-;40718:76;;40820:8;40805:11;;:23;40801:141;;40899:1;40841:55;40855:40;40871:23;40885:8;40871:9;:13;;:23;;;;:::i;:::-;40855:11;;:15;;:40;;;;:::i;:::-;40841:9;:13;;:55;;;;:::i;:::-;:59;40837:98;;;40926:1;40913:14;;40837:98;40801:141;40948:14;40965:10;40948:27;;41088:1;41067:8;:18;;;:22;:49;;;;;41115:1;41093:8;:18;;;:23;;41067:49;41063:1051;;;41174:23;41193:3;41174:14;41185:2;41174:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;41165:32;;41063:1051;;;41236:1;41215:8;:18;;;:22;:50;;;;;41263:2;41241:8;:18;;;:24;;41215:50;41211:903;;;41324:23;41343:3;41324:14;41335:2;41324:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;41315:32;;41211:903;;;41386:2;41365:8;:18;;;:23;:51;;;;;41414:2;41392:8;:18;;;:24;;41365:51;41361:753;;;41474:23;41493:3;41474:14;41485:2;41474:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;41465:32;;41361:753;;;41536:2;41515:8;:18;;;:23;:51;;;;;41564:2;41542:8;:18;;;:24;;41515:51;41511:603;;;41625:24;41645:3;41625:15;41636:3;41625:6;:10;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41616:33;;41511:603;;;41688:2;41667:8;:18;;;:23;:51;;;;;41716:2;41694:8;:18;;;:24;;41667:51;41663:451;;;41777:24;41797:3;41777:15;41788:3;41777:6;:10;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41768:33;;41663:451;;;41840:2;41819:8;:18;;;:23;:51;;;;;41868:2;41846:8;:18;;;:24;;41819:51;41815:299;;;41929:24;41949:3;41929:15;41940:3;41929:6;:10;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41920:33;;41815:299;;;41992:2;41971:8;:18;;;:23;:52;;;;;42020:3;41998:8;:18;;;:25;;41971:52;41967:147;;;42082:24;42102:3;42082:15;42093:3;42082:6;:10;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;42073:33;;41967:147;41815:299;41663:451;41511:603;41361:753;41211:903;41063:1051;42180:17;42200:9;42180:29;;42365:5;:17;42371:10;42365:17;;;;;;;;;;;;;;;:37;;;;;;;;;;;;42364:38;:63;;;;;42418:9;42406;:21;42364:63;42360:102;;;42445:9;42436:18;;42360:102;42601:8;:28;;;;;;;;;;;;:54;;;;42646:9;42633;:22;;42601:54;42593:63;;;;;;42740:19;42762:37;42795:3;42762:28;42773:6;:16;;;42762:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;42740:59;;42813:23;42824:11;42813:6;:10;;:23;;;;:::i;:::-;42806:30;;;;;;;40463:2381;;;:::o;16683:92::-;16741:5;16766:1;16759:8;;16683:92;:::o;34101:22::-;;;;:::o;34222:26::-;;;;:::o;43233:1633::-;6258:21;:19;:21::i;:::-;43381:9:::1;;43362:15;:28;;:58;;;;;43413:7;;43394:15;:26;;43362:58;43354:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43519:10;;;;;;;;;;;:20;;;43540:10;43519:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43505:10;:46;;43497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43636:10;;;;;;;;;;;:23;;;43660:10;43680:4;43687:10;43636:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43742:20;43765:10;43742:33;;43806:1;43793:10;:14;:38;;;;;43824:7;43811:10;:20;43793:38;43789:994;;;43872:1;43859:14;;;43844:29;;43789:994;;;43905:7;43891:10;:21;;:47;;;;;43930:8;43916:10;:22;;43891:47;43887:896;;;43966:11;43951:26;;43887:896;;;44008:8;43995:10;:21;:48;;;;;44034:9;44020:10;:23;;43995:48;43991:792;;;44071:56;44115:10;:8;:10::i;:::-;44110:2;:15;;;;:::i;:::-;44103:2;:23;;;;:::i;:::-;44071:27;44094:3;44071:18;44086:2;44071:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;:31;;:56;;;;:::i;:::-;44056:71;;43991:792;;;44158:9;44145:10;:22;:51;;;;;44186:10;44172;:24;;44145:51;44141:642;;;44224:55;44267:10;:8;:10::i;:::-;44262:2;:15;;;;:::i;:::-;44255:2;:23;;;;:::i;:::-;44224:26;44246:3;44224:17;44239:1;44224:10;:14;;:17;;;;:::i;:::-;:21;;:26;;;;:::i;:::-;:30;;:55;;;;:::i;:::-;44209:70;;44141:642;;;44310:10;44297;:23;:53;;;;;44339:11;44325:10;:25;;44297:53;44293:490;;;44378:56;44422:10;:8;:10::i;:::-;44417:2;:15;;;;:::i;:::-;44410:2;:23;;;;:::i;:::-;44378:27;44400:4;44378:17;44393:1;44378:10;:14;;:17;;;;:::i;:::-;:21;;:27;;;;:::i;:::-;:31;;:56;;;;:::i;:::-;44363:71;;44293:490;;;44465:11;44452:10;:24;:54;;;;;44494:12;44480:10;:26;;44452:54;44448:335;;;44534:56;44578:10;:8;:10::i;:::-;44573:2;:15;;;;:::i;:::-;44566:2;:23;;;;:::i;:::-;44534:27;44556:4;44534:17;44549:1;44534:10;:14;;:17;;;;:::i;:::-;:21;;:27;;;;:::i;:::-;:31;;:56;;;;:::i;:::-;44519:71;;44448:335;;;44621:12;44608:10;:25;44604:179;;;44718:57;44763:10;:8;:10::i;:::-;44758:2;:15;;;;:::i;:::-;44751:2;:23;;;;:::i;:::-;44718:28;44740:5;44718:17;44733:1;44718:10;:14;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:57;;;;:::i;:::-;44703:72;;44604:179;44448:335;44293:490;44141:642;43991:792;43887:896;43789:994;44824:31;44830:10;44842:12;44824:5;:31::i;:::-;43289:1577;6302:20:::0;:18;:20::i;:::-;43233:1633;:::o;19556:238::-;19644:4;19661:13;19677:12;:10;:12::i;:::-;19661:28;;19700:64;19709:5;19716:7;19753:10;19725:25;19735:5;19742:7;19725:9;:25::i;:::-;:38;;;;:::i;:::-;19700:8;:64::i;:::-;19782:4;19775:11;;;19556:238;;;;:::o;34130:23::-;;;;;;;;;;;;;:::o;45620:1635::-;6258:21;:19;:21::i;:::-;45768:9:::1;;45749:15;:28;;:58;;;;;45800:7;;45781:15;:26;;45749:58;45741:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;45907:11;;;;;;;;;;;:21;;;45929:10;45907:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45893:10;:47;;45885:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46026:11;;;;;;;;;;;:24;;;46051:10;46071:4;46078:10;46026:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46133:20;46156:10;46133:33;;46197:1;46184:10;:14;:38;;;;;46215:7;46202:10;:20;46184:38;46180:994;;;46263:1;46250:14;;;46235:29;;46180:994;;;46296:7;46282:10;:21;;:47;;;;;46321:8;46307:10;:22;;46282:47;46278:896;;;46357:11;46342:26;;46278:896;;;46399:8;46386:10;:21;:48;;;;;46425:9;46411:10;:23;;46386:48;46382:792;;;46462:56;46506:10;:8;:10::i;:::-;46501:2;:15;;;;:::i;:::-;46494:2;:23;;;;:::i;:::-;46462:27;46485:3;46462:18;46477:2;46462:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;:31;;:56;;;;:::i;:::-;46447:71;;46382:792;;;46549:9;46536:10;:22;:51;;;;;46577:10;46563;:24;;46536:51;46532:642;;;46615:55;46658:10;:8;:10::i;:::-;46653:2;:15;;;;:::i;:::-;46646:2;:23;;;;:::i;:::-;46615:26;46637:3;46615:17;46630:1;46615:10;:14;;:17;;;;:::i;:::-;:21;;:26;;;;:::i;:::-;:30;;:55;;;;:::i;:::-;46600:70;;46532:642;;;46701:10;46688;:23;:53;;;;;46730:11;46716:10;:25;;46688:53;46684:490;;;46769:56;46813:10;:8;:10::i;:::-;46808:2;:15;;;;:::i;:::-;46801:2;:23;;;;:::i;:::-;46769:27;46791:4;46769:17;46784:1;46769:10;:14;;:17;;;;:::i;:::-;:21;;:27;;;;:::i;:::-;:31;;:56;;;;:::i;:::-;46754:71;;46684:490;;;46856:11;46843:10;:24;:54;;;;;46885:12;46871:10;:26;;46843:54;46839:335;;;46925:56;46969:10;:8;:10::i;:::-;46964:2;:15;;;;:::i;:::-;46957:2;:23;;;;:::i;:::-;46925:27;46947:4;46925:17;46940:1;46925:10;:14;;:17;;;;:::i;:::-;:21;;:27;;;;:::i;:::-;:31;;:56;;;;:::i;:::-;46910:71;;46839:335;;;47012:12;46999:10;:25;46995:179;;;47109:57;47154:10;:8;:10::i;:::-;47149:2;:15;;;;:::i;:::-;47142:2;:23;;;;:::i;:::-;47109:28;47131:5;47109:17;47124:1;47109:10;:14;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:57;;;;:::i;:::-;47094:72;;46995:179;46839:335;46684:490;46532:642;46382:792;46278:896;46180:994;47215:31;47221:10;47233:12;47215:5;:31::i;:::-;45676:1579;6302:20:::0;:18;:20::i;:::-;45620:1635;:::o;17011:127::-;17085:7;17112:9;:18;17122:7;17112:18;;;;;;;;;;;;;;;;17105:25;;17011:127;;;:::o;43075:123::-;43122:7;43145:45;43176:13;43146:24;43162:7;43146:11;;:15;;:24;;;;:::i;:::-;43145:30;;:45;;;;:::i;:::-;43138:52;;43075:123;:::o;34070:24::-;;;;:::o;34255:26::-;;;;;;;;;;;;;:::o;36080:3624::-;36143:17;6258:21;:19;:21::i;:::-;36177:25:::1;36191:10;36177:13;:25::i;:::-;36169:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;36281:8;36230:10;;;;;;;;;;;:20;;;36251:10;36271:4;36230:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;:75;;;;;36304:1;36293:8;:12;36230:75;36222:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;36345:10;;;;;;;;;;;:20;;;36366:10;36345:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36333:8;:44;;:60;;;;;36392:1;36381:8;:12;36333:60;36325:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36458:80;36508:5;:17;36514:10;36508:17;;;;;;;;;;;;;;;:29;;;36458:45;36489:13;36459:24;36475:7;36459:11;;:15;;:24;;;;:::i;:::-;36458:30;;:45;;;;:::i;:::-;:49;;:80;;;;:::i;:::-;36423:9;;;;;;;;;;;:19;;;36443:10;36423:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:115;;36415:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;36578:24;36594:7;36578:11;;:15;;:24;;;;:::i;:::-;36565:8;:38;;36556:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;36622:11;;:13;;;;;;;;;:::i;:::-;;;;;;36642:21;36666:5;:17;36672:10;36666:17;;;;;;;;;;;;;;;36642:41;;36690:8;:18;;;:20;;;;;;;;;:::i;:::-;;;;;;36717:74;34935:42;36755:10;36775:4;36782:8;36717:31;:74::i;:::-;36798:63;34935:42;36839:10;36852:8;36798:26;:63::i;:::-;36868:48;36919:272;;;;;;;;34935:42;36919:272;;;;;;35015:42;36919:272;;;;;;34711:4;36919:272;;;;;;37047:10;36919:272;;;;;;37078:15;36919:272;;;;37144:8;36919:272;;;;37122:1;36919:272;;;;37182:1;36919:272;;;;::::0;36868:323:::1;;37210:10;:27;;;37238:6;37210:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37198:47;;37252:22;37277:46;37321:1;37277:39;37297:8;:18;;;37277:6;:15;;;:19;;:39;;;;:::i;:::-;:43;;:46;;;;:::i;:::-;37252:71;;37330:18;37351:55;37365:40;37381:23;37395:8;37381:9;:13;;:23;;;;:::i;:::-;37365:11;;:15;;:40;;;;:::i;:::-;37351:9;:13;;:55;;;;:::i;:::-;37330:76;;37432:8;37417:11;;:23;37413:153;;37515:1;37457:55;37471:40;37487:23;37501:8;37487:9;:13;;:23;;;;:::i;:::-;37471:11;;:15;;:40;;;;:::i;:::-;37457:9;:13;;:55;;;;:::i;:::-;:59;37453:106;;;37546:1;37533:14;;37453:106;37413:153;37618:13;37634:8;:18;;;37618:34;;37719:14;37736:10;37719:27;;37763:1;37755:5;:9;:23;;;;;37777:1;37768:5;:10;;37755:23;37751:643;;;37796:27;37819:3;37796:18;37811:2;37796:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;37787:36;;37751:643;;;37847:1;37839:5;:9;:24;;;;;37861:2;37852:5;:11;;37839:24;37835:559;;;37881:27;37904:3;37881:18;37896:2;37881:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;37872:36;;37835:559;;;37932:2;37924:5;:10;:25;;;;;37947:2;37938:5;:11;;37924:25;37920:474;;;37967:27;37990:3;37967:18;37982:2;37967:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;37958:36;;37920:474;;;38021:2;38013:5;:10;:25;;;;;38036:2;38027:5;:11;;38013:25;38009:385;;;38056:28;38080:3;38056:19;38071:3;38056:10;:14;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;38047:37;;38009:385;;;38109:2;38101:5;:10;:25;;;;;38124:2;38115:5;:11;;38101:25;38097:297;;;38144:28;38168:3;38144:19;38159:3;38144:10;:14;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;38135:37;;38097:297;;;38197:2;38189:5;:10;:25;;;;;38212:2;38203:5;:11;;38189:25;38185:209;;;38232:28;38256:3;38232:19;38247:3;38232:10;:14;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;38223:37;;38185:209;;;38285:2;38277:5;:10;:26;;;;;38300:3;38291:5;:12;;38277:26;38273:121;;;38321:28;38345:3;38321:19;38336:3;38321:10;:14;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;38312:37;;38273:121;;;38378:10;38369:19;;38273:121;38185:209;38097:297;38009:385;37920:474;37835:559;37751:643;38462:17;38482:9;38462:29;;38641:8;:28;;;;;;;;;;;;38640:29;:54;;;;;38685:9;38673;:21;38640:54;38636:91;;;38712:9;38703:18;;38636:91;38821:4;38790:8;:28;;;:35;;;;;;;;;;;;;;;;;;38959:8;:28;;;;;;;;;;;;:54;;;;39004:9;38991;:22;;38959:54;38951:63;;;::::0;::::1;;39143:19;39165:37;39198:3;39165:28;39176:6;:16;;;39165:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;39143:59;;39283:42;39289:10;39301:23;39312:11;39301:6;:10;;:23;;;;:::i;:::-;39283:5;:42::i;:::-;39332:31;39338:11;;;;;;;;;;;39351;39332:5;:31::i;:::-;39455:35;39475:14;39455:15;:19;;:35;;;;:::i;:::-;39431:8;:21;;:59;;;;39529:44;39563:9;39529:5;:17;39535:10;39529:17;;;;;;;;;;;;;;;:29;;;:33;;:44;;;;:::i;:::-;39497:5;:17;39503:10;39497:17;;;;;;;;;;;;;;;:29;;:76;;;;39681:1;39670:8;:12;39662:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;36162:3542;;;;;;;;6302:20:::0;:18;:20::i;:::-;36080:3624;;;:::o;15940:104::-;15996:13;16029:7;16022:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15940:104;:::o;20297:436::-;20390:4;20407:13;20423:12;:10;:12::i;:::-;20407:28;;20446:24;20473:25;20483:5;20490:7;20473:9;:25::i;:::-;20446:52;;20537:15;20517:16;:35;;20509:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20630:60;20639:5;20646:7;20674:15;20655:16;:34;20630:8;:60::i;:::-;20721:4;20714:11;;;;20297:436;;;;:::o;48358:892::-;6258:21;:19;:21::i;:::-;48435:28:::1;48457:5;48435:17;;:21;;:28;;;;:::i;:::-;48416:15;:47;;48408:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48584:29;48606:6;48584:17;;:21;;:29;;;;:::i;:::-;48565:15;:48;48561:565;;48674:13;48658;:29;;;;48721:1;48698:6;:20;;:24;;;;48561:565;;;48803:21;48827:51;48872:5;48828:38;48848:17;;48828:15;:19;;:38;;;;:::i;:::-;48827:44;;:51;;;;:::i;:::-;48803:75;;48956:32;48974:13;48956;:17;;:32;;;;:::i;:::-;48932:6;:20;;;:56;;;;;;;:::i;:::-;;;;;;;;49069:49;49082:13;;49097:6;:20;;;49069:12;:49::i;:::-;49053:13;:65;;;;48736:390;48561:565;49187:15;49167:17;:35;;;;49209:33;49215:11;;;;;;;;;;;49228:13;;49209:5;:33::i;:::-;6302:20:::0;:18;:20::i;:::-;48358:892::o;34358:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17344:193::-;17423:4;17440:13;17456:12;:10;:12::i;:::-;17440:28;;17479;17489:5;17496:2;17500:6;17479:9;:28::i;:::-;17525:4;17518:11;;;17344:193;;;;:::o;35066:35::-;;;;;;;;;;;;;:::o;34823:68::-;;;:::o;39770:162::-;39834:7;39850:21;39874:5;:15;39880:8;39874:15;;;;;;;;;;;;;;;39850:39;;39903:8;:21;;;39896:28;;;39770:162;;;:::o;35108:37::-;;;;;;;;;;;;;:::o;34191:24::-;;;;;;;;;;;;;:::o;17600:151::-;17689:7;17716:11;:18;17728:5;17716:18;;;;;;;;;;;;;;;:27;17735:7;17716:27;;;;;;;;;;;;;;;;17709:34;;17600:151;;;;:::o;34160:24::-;;;;;;;;;;;;;:::o;42902:96::-;42943:7;42966:24;42982:7;42966:11;;:15;;:24;;;;:::i;:::-;42959:31;;42902:96;:::o;6338:293::-;5740:1;6472:7;;:19;6464:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5740:1;6605:7;:18;;;;6338:293::o;30579:98::-;30637:7;30668:1;30664;:5;;;;:::i;:::-;30657:12;;30579:98;;;;:::o;30978:::-;31036:7;31067:1;31063;:5;;;;:::i;:::-;31056:12;;30978:98;;;;:::o;22330:548::-;22433:1;22414:21;;:7;:21;;;22406:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22484:49;22513:1;22517:7;22526:6;22484:20;:49::i;:::-;22562:6;22546:12;;:22;;;;;;;:::i;:::-;;;;;;;;22739:6;22717:9;:18;22727:7;22717:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;22793:7;22772:37;;22789:1;22772:37;;;22802:6;22772:37;;;;;;:::i;:::-;;;;;;;;22822:48;22850:1;22854:7;22863:6;22822:19;:48::i;:::-;22330:548;;:::o;6639:213::-;5696:1;6822:7;:22;;;;6639:213::o;13496:98::-;13549:7;13576:10;13569:17;;13496:98;:::o;24324:380::-;24477:1;24460:19;;:5;:19;;;24452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24558:1;24539:21;;:7;:21;;;24531:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24642:6;24612:11;:18;24624:5;24612:18;;;;;;;;;;;;;;;:27;24631:7;24612:27;;;;;;;;;;;;;;;:36;;;;24680:7;24664:32;;24673:5;24664:32;;;24689:6;24664:32;;;;;;:::i;:::-;;;;;;;;24324:380;;;:::o;30222:98::-;30280:7;30311:1;30307;:5;;;;:::i;:::-;30300:12;;30222:98;;;;:::o;24995:453::-;25130:24;25157:25;25167:5;25174:7;25157:9;:25::i;:::-;25130:52;;25217:17;25197:16;:37;25193:248;;25279:6;25259:16;:26;;25251:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25363:51;25372:5;25379:7;25407:6;25388:16;:25;25363:8;:51::i;:::-;25193:248;25119:329;24995:453;;;:::o;21203:840::-;21350:1;21334:18;;:4;:18;;;21326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21427:1;21413:16;;:2;:16;;;21405:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21482:38;21503:4;21509:2;21513:6;21482:20;:38::i;:::-;21533:19;21555:9;:15;21565:4;21555:15;;;;;;;;;;;;;;;;21533:37;;21604:6;21589:11;:21;;21581:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21721:6;21707:11;:20;21689:9;:15;21699:4;21689:15;;;;;;;;;;;;;;;:38;;;;21924:6;21907:9;:13;21917:2;21907:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;21974:2;21959:26;;21968:4;21959:26;;;21978:6;21959:26;;;;;;:::i;:::-;;;;;;;;21998:37;22018:4;22024:2;22028:6;21998:19;:37::i;:::-;21315:728;21203:840;;;:::o;29841:98::-;29899:7;29930:1;29926;:5;;;;:::i;:::-;29919:12;;29841:98;;;;:::o;10321:365::-;10467:12;10481:17;10515:5;:10;;10549:28;;;10579:4;10585:2;10589:5;10526:69;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10515:81;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10466:130;;;;10615:7;:37;;;;;10638:4;10627:24;;;;;;;;;;;;:::i;:::-;10615:37;10607:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10455:231;;10321:365;;;;:::o;11661:314::-;11779:12;11793:17;11814:5;:10;;11848:23;;;11873:2;11877:5;11825:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11814:70;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11778:106;;;;11903:7;:57;;;;;11930:1;11915:4;:11;:16;:44;;;;11946:4;11935:24;;;;;;;;;;;;:::i;:::-;11915:44;11903:57;11895:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;11767:208;;11661:314;;;:::o;26048:125::-;;;;:::o;26777:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:91::-;2403:7;2443:8;2436:5;2432:20;2421:31;;2367:91;;;:::o;2464:115::-;2549:23;2566:5;2549:23;:::i;:::-;2544:3;2537:36;2464:115;;:::o;2585:218::-;2676:4;2714:2;2703:9;2699:18;2691:26;;2727:69;2793:1;2782:9;2778:17;2769:6;2727:69;:::i;:::-;2585:218;;;;:::o;2809:126::-;2846:7;2886:42;2879:5;2875:54;2864:65;;2809:126;;;:::o;2941:96::-;2978:7;3007:24;3025:5;3007:24;:::i;:::-;2996:35;;2941:96;;;:::o;3043:122::-;3116:24;3134:5;3116:24;:::i;:::-;3109:5;3106:35;3096:63;;3155:1;3152;3145:12;3096:63;3043:122;:::o;3171:139::-;3217:5;3255:6;3242:20;3233:29;;3271:33;3298:5;3271:33;:::i;:::-;3171:139;;;;:::o;3316:329::-;3375:6;3424:2;3412:9;3403:7;3399:23;3395:32;3392:119;;;3430:79;;:::i;:::-;3392:119;3550:1;3575:53;3620:7;3611:6;3600:9;3596:22;3575:53;:::i;:::-;3565:63;;3521:117;3316:329;;;;:::o;3651:90::-;3685:7;3728:5;3721:13;3714:21;3703:32;;3651:90;;;:::o;3747:109::-;3828:21;3843:5;3828:21;:::i;:::-;3823:3;3816:34;3747:109;;:::o;3862:210::-;3949:4;3987:2;3976:9;3972:18;3964:26;;4000:65;4062:1;4051:9;4047:17;4038:6;4000:65;:::i;:::-;3862:210;;;;:::o;4078:474::-;4146:6;4154;4203:2;4191:9;4182:7;4178:23;4174:32;4171:119;;;4209:79;;:::i;:::-;4171:119;4329:1;4354:53;4399:7;4390:6;4379:9;4375:22;4354:53;:::i;:::-;4344:63;;4300:117;4456:2;4482:53;4527:7;4518:6;4507:9;4503:22;4482:53;:::i;:::-;4472:63;;4427:118;4078:474;;;;;:::o;4558:118::-;4645:24;4663:5;4645:24;:::i;:::-;4640:3;4633:37;4558:118;;:::o;4682:222::-;4775:4;4813:2;4802:9;4798:18;4790:26;;4826:71;4894:1;4883:9;4879:17;4870:6;4826:71;:::i;:::-;4682:222;;;;:::o;4910:619::-;4987:6;4995;5003;5052:2;5040:9;5031:7;5027:23;5023:32;5020:119;;;5058:79;;:::i;:::-;5020:119;5178:1;5203:53;5248:7;5239:6;5228:9;5224:22;5203:53;:::i;:::-;5193:63;;5149:117;5305:2;5331:53;5376:7;5367:6;5356:9;5352:22;5331:53;:::i;:::-;5321:63;;5276:118;5433:2;5459:53;5504:7;5495:6;5484:9;5480:22;5459:53;:::i;:::-;5449:63;;5404:118;4910:619;;;;;:::o;5535:86::-;5570:7;5610:4;5603:5;5599:16;5588:27;;5535:86;;;:::o;5627:112::-;5710:22;5726:5;5710:22;:::i;:::-;5705:3;5698:35;5627:112;;:::o;5745:214::-;5834:4;5872:2;5861:9;5857:18;5849:26;;5885:67;5949:1;5938:9;5934:17;5925:6;5885:67;:::i;:::-;5745:214;;;;:::o;5965:60::-;5993:3;6014:5;6007:12;;5965:60;;;:::o;6031:142::-;6081:9;6114:53;6132:34;6141:24;6159:5;6141:24;:::i;:::-;6132:34;:::i;:::-;6114:53;:::i;:::-;6101:66;;6031:142;;;:::o;6179:126::-;6229:9;6262:37;6293:5;6262:37;:::i;:::-;6249:50;;6179:126;;;:::o;6311:140::-;6375:9;6408:37;6439:5;6408:37;:::i;:::-;6395:50;;6311:140;;;:::o;6457:159::-;6558:51;6603:5;6558:51;:::i;:::-;6553:3;6546:64;6457:159;;:::o;6622:250::-;6729:4;6767:2;6756:9;6752:18;6744:26;;6780:85;6862:1;6851:9;6847:17;6838:6;6780:85;:::i;:::-;6622:250;;;;:::o;6878:118::-;6965:24;6983:5;6965:24;:::i;:::-;6960:3;6953:37;6878:118;;:::o;7002:222::-;7095:4;7133:2;7122:9;7118:18;7110:26;;7146:71;7214:1;7203:9;7199:17;7190:6;7146:71;:::i;:::-;7002:222;;;;:::o;7230:541::-;7401:4;7439:3;7428:9;7424:19;7416:27;;7453:71;7521:1;7510:9;7506:17;7497:6;7453:71;:::i;:::-;7534:72;7602:2;7591:9;7587:18;7578:6;7534:72;:::i;:::-;7616;7684:2;7673:9;7669:18;7660:6;7616:72;:::i;:::-;7698:66;7760:2;7749:9;7745:18;7736:6;7698:66;:::i;:::-;7230:541;;;;;;;:::o;7777:145::-;7846:9;7879:37;7910:5;7879:37;:::i;:::-;7866:50;;7777:145;;;:::o;7928:169::-;8034:56;8084:5;8034:56;:::i;:::-;8029:3;8022:69;7928:169;;:::o;8103:260::-;8215:4;8253:2;8242:9;8238:18;8230:26;;8266:90;8353:1;8342:9;8338:17;8329:6;8266:90;:::i;:::-;8103:260;;;;:::o;8369:474::-;8437:6;8445;8494:2;8482:9;8473:7;8469:23;8465:32;8462:119;;;8500:79;;:::i;:::-;8462:119;8620:1;8645:53;8690:7;8681:6;8670:9;8666:22;8645:53;:::i;:::-;8635:63;;8591:117;8747:2;8773:53;8818:7;8809:6;8798:9;8794:22;8773:53;:::i;:::-;8763:63;;8718:118;8369:474;;;;;:::o;8849:157::-;8989:9;8985:1;8977:6;8973:14;8966:33;8849:157;:::o;9012:365::-;9154:3;9175:66;9239:1;9234:3;9175:66;:::i;:::-;9168:73;;9250:93;9339:3;9250:93;:::i;:::-;9368:2;9363:3;9359:12;9352:19;;9012:365;;;:::o;9383:419::-;9549:4;9587:2;9576:9;9572:18;9564:26;;9636:9;9630:4;9626:20;9622:1;9611:9;9607:17;9600:47;9664:131;9790:4;9664:131;:::i;:::-;9656:139;;9383:419;;;:::o;9808:143::-;9865:5;9896:6;9890:13;9881:22;;9912:33;9939:5;9912:33;:::i;:::-;9808:143;;;;:::o;9957:351::-;10027:6;10076:2;10064:9;10055:7;10051:23;10047:32;10044:119;;;10082:79;;:::i;:::-;10044:119;10202:1;10227:64;10283:7;10274:6;10263:9;10259:22;10227:64;:::i;:::-;10217:74;;10173:128;9957:351;;;;:::o;10314:160::-;10454:12;10450:1;10442:6;10438:14;10431:36;10314:160;:::o;10480:366::-;10622:3;10643:67;10707:2;10702:3;10643:67;:::i;:::-;10636:74;;10719:93;10808:3;10719:93;:::i;:::-;10837:2;10832:3;10828:12;10821:19;;10480:366;;;:::o;10852:419::-;11018:4;11056:2;11045:9;11041:18;11033:26;;11105:9;11099:4;11095:20;11091:1;11080:9;11076:17;11069:47;11133:131;11259:4;11133:131;:::i;:::-;11125:139;;10852:419;;;:::o;11277:442::-;11426:4;11464:2;11453:9;11449:18;11441:26;;11477:71;11545:1;11534:9;11530:17;11521:6;11477:71;:::i;:::-;11558:72;11626:2;11615:9;11611:18;11602:6;11558:72;:::i;:::-;11640;11708:2;11697:9;11693:18;11684:6;11640:72;:::i;:::-;11277:442;;;;;;:::o;11725:116::-;11795:21;11810:5;11795:21;:::i;:::-;11788:5;11785:32;11775:60;;11831:1;11828;11821:12;11775:60;11725:116;:::o;11847:137::-;11901:5;11932:6;11926:13;11917:22;;11948:30;11972:5;11948:30;:::i;:::-;11847:137;;;;:::o;11990:345::-;12057:6;12106:2;12094:9;12085:7;12081:23;12077:32;12074:119;;;12112:79;;:::i;:::-;12074:119;12232:1;12257:61;12310:7;12301:6;12290:9;12286:22;12257:61;:::i;:::-;12247:71;;12203:125;11990:345;;;;:::o;12341:180::-;12389:77;12386:1;12379:88;12486:4;12483:1;12476:15;12510:4;12507:1;12500:15;12527:191;12565:4;12585:18;12601:1;12585:18;:::i;:::-;12580:23;;12617:18;12633:1;12617:18;:::i;:::-;12612:23;;12659:1;12656;12652:9;12644:17;;12683:4;12677;12674:14;12671:40;;;12691:18;;:::i;:::-;12671:40;12527:191;;;;:::o;12724:102::-;12766:8;12813:5;12810:1;12806:13;12785:34;;12724:102;;;:::o;12832:848::-;12893:5;12900:4;12924:6;12915:15;;12948:5;12939:14;;12962:712;12983:1;12973:8;12970:15;12962:712;;;13078:4;13073:3;13069:14;13063:4;13060:24;13057:50;;;13087:18;;:::i;:::-;13057:50;13137:1;13127:8;13123:16;13120:451;;;13552:4;13545:5;13541:16;13532:25;;13120:451;13602:4;13596;13592:15;13584:23;;13632:32;13655:8;13632:32;:::i;:::-;13620:44;;12962:712;;;12832:848;;;;;;;:::o;13686:1073::-;13740:5;13931:8;13921:40;;13952:1;13943:10;;13954:5;;13921:40;13980:4;13970:36;;13997:1;13988:10;;13999:5;;13970:36;14066:4;14114:1;14109:27;;;;14150:1;14145:191;;;;14059:277;;14109:27;14127:1;14118:10;;14129:5;;;14145:191;14190:3;14180:8;14177:17;14174:43;;;14197:18;;:::i;:::-;14174:43;14246:8;14243:1;14239:16;14230:25;;14281:3;14274:5;14271:14;14268:40;;;14288:18;;:::i;:::-;14268:40;14321:5;;;14059:277;;14445:2;14435:8;14432:16;14426:3;14420:4;14417:13;14413:36;14395:2;14385:8;14382:16;14377:2;14371:4;14368:12;14364:35;14348:111;14345:246;;;14501:8;14495:4;14491:19;14482:28;;14536:3;14529:5;14526:14;14523:40;;;14543:18;;:::i;:::-;14523:40;14576:5;;14345:246;14616:42;14654:3;14644:8;14638:4;14635:1;14616:42;:::i;:::-;14601:57;;;;14690:4;14685:3;14681:14;14674:5;14671:25;14668:51;;;14699:18;;:::i;:::-;14668:51;14748:4;14741:5;14737:16;14728:25;;13686:1073;;;;;;:::o;14765:281::-;14823:5;14847:23;14865:4;14847:23;:::i;:::-;14839:31;;14891:25;14907:8;14891:25;:::i;:::-;14879:37;;14935:104;14972:66;14962:8;14956:4;14935:104;:::i;:::-;14926:113;;14765:281;;;;:::o;15052:180::-;15100:77;15097:1;15090:88;15197:4;15194:1;15187:15;15221:4;15218:1;15211:15;15238:320;15282:6;15319:1;15313:4;15309:12;15299:22;;15366:1;15360:4;15356:12;15387:18;15377:81;;15443:4;15435:6;15431:17;15421:27;;15377:81;15505:2;15497:6;15494:14;15474:18;15471:38;15468:84;;15524:18;;:::i;:::-;15468:84;15289:269;15238:320;;;:::o;15564:156::-;15704:8;15700:1;15692:6;15688:14;15681:32;15564:156;:::o;15726:365::-;15868:3;15889:66;15953:1;15948:3;15889:66;:::i;:::-;15882:73;;15964:93;16053:3;15964:93;:::i;:::-;16082:2;16077:3;16073:12;16066:19;;15726:365;;;:::o;16097:419::-;16263:4;16301:2;16290:9;16286:18;16278:26;;16350:9;16344:4;16340:20;16336:1;16325:9;16321:17;16314:47;16378:131;16504:4;16378:131;:::i;:::-;16370:139;;16097:419;;;:::o;16522:159::-;16662:11;16658:1;16650:6;16646:14;16639:35;16522:159;:::o;16687:365::-;16829:3;16850:66;16914:1;16909:3;16850:66;:::i;:::-;16843:73;;16925:93;17014:3;16925:93;:::i;:::-;17043:2;17038:3;17034:12;17027:19;;16687:365;;;:::o;17058:419::-;17224:4;17262:2;17251:9;17247:18;17239:26;;17311:9;17305:4;17301:20;17297:1;17286:9;17282:17;17275:47;17339:131;17465:4;17339:131;:::i;:::-;17331:139;;17058:419;;;:::o;17483:191::-;17523:3;17542:20;17560:1;17542:20;:::i;:::-;17537:25;;17576:20;17594:1;17576:20;:::i;:::-;17571:25;;17619:1;17616;17612:9;17605:16;;17640:3;17637:1;17634:10;17631:36;;;17647:18;;:::i;:::-;17631:36;17483:191;;;;:::o;17680:157::-;17820:9;17816:1;17808:6;17804:14;17797:33;17680:157;:::o;17843:365::-;17985:3;18006:66;18070:1;18065:3;18006:66;:::i;:::-;17999:73;;18081:93;18170:3;18081:93;:::i;:::-;18199:2;18194:3;18190:12;18183:19;;17843:365;;;:::o;18214:419::-;18380:4;18418:2;18407:9;18403:18;18395:26;;18467:9;18461:4;18457:20;18453:1;18442:9;18438:17;18431:47;18495:131;18621:4;18495:131;:::i;:::-;18487:139;;18214:419;;;:::o;18639:160::-;18779:12;18775:1;18767:6;18763:14;18756:36;18639:160;:::o;18805:366::-;18947:3;18968:67;19032:2;19027:3;18968:67;:::i;:::-;18961:74;;19044:93;19133:3;19044:93;:::i;:::-;19162:2;19157:3;19153:12;19146:19;;18805:366;;;:::o;19177:419::-;19343:4;19381:2;19370:9;19366:18;19358:26;;19430:9;19424:4;19420:20;19416:1;19405:9;19401:17;19394:47;19458:131;19584:4;19458:131;:::i;:::-;19450:139;;19177:419;;;:::o;19602:154::-;19742:6;19738:1;19730:6;19726:14;19719:30;19602:154;:::o;19762:365::-;19904:3;19925:66;19989:1;19984:3;19925:66;:::i;:::-;19918:73;;20000:93;20089:3;20000:93;:::i;:::-;20118:2;20113:3;20109:12;20102:19;;19762:365;;;:::o;20133:419::-;20299:4;20337:2;20326:9;20322:18;20314:26;;20386:9;20380:4;20376:20;20372:1;20361:9;20357:17;20350:47;20414:131;20540:4;20414:131;:::i;:::-;20406:139;;20133:419;;;:::o;20558:332::-;20679:4;20717:2;20706:9;20702:18;20694:26;;20730:71;20798:1;20787:9;20783:17;20774:6;20730:71;:::i;:::-;20811:72;20879:2;20868:9;20864:18;20855:6;20811:72;:::i;:::-;20558:332;;;;;:::o;20896:158::-;21036:10;21032:1;21024:6;21020:14;21013:34;20896:158;:::o;21060:365::-;21202:3;21223:66;21287:1;21282:3;21223:66;:::i;:::-;21216:73;;21298:93;21387:3;21298:93;:::i;:::-;21416:2;21411:3;21407:12;21400:19;;21060:365;;;:::o;21431:419::-;21597:4;21635:2;21624:9;21620:18;21612:26;;21684:9;21678:4;21674:20;21670:1;21659:9;21655:17;21648:47;21712:131;21838:4;21712:131;:::i;:::-;21704:139;;21431:419;;;:::o;21856:158::-;21996:10;21992:1;21984:6;21980:14;21973:34;21856:158;:::o;22020:365::-;22162:3;22183:66;22247:1;22242:3;22183:66;:::i;:::-;22176:73;;22258:93;22347:3;22258:93;:::i;:::-;22376:2;22371:3;22367:12;22360:19;;22020:365;;;:::o;22391:419::-;22557:4;22595:2;22584:9;22580:18;22572:26;;22644:9;22638:4;22634:20;22630:1;22619:9;22615:17;22608:47;22672:131;22798:4;22672:131;:::i;:::-;22664:139;;22391:419;;;:::o;22816:156::-;22956:8;22952:1;22944:6;22940:14;22933:32;22816:156;:::o;22978:365::-;23120:3;23141:66;23205:1;23200:3;23141:66;:::i;:::-;23134:73;;23216:93;23305:3;23216:93;:::i;:::-;23334:2;23329:3;23325:12;23318:19;;22978:365;;;:::o;23349:419::-;23515:4;23553:2;23542:9;23538:18;23530:26;;23602:9;23596:4;23592:20;23588:1;23577:9;23573:17;23566:47;23630:131;23756:4;23630:131;:::i;:::-;23622:139;;23349:419;;;:::o;23774:157::-;23914:9;23910:1;23902:6;23898:14;23891:33;23774:157;:::o;23937:365::-;24079:3;24100:66;24164:1;24159:3;24100:66;:::i;:::-;24093:73;;24175:93;24264:3;24175:93;:::i;:::-;24293:2;24288:3;24284:12;24277:19;;23937:365;;;:::o;24308:419::-;24474:4;24512:2;24501:9;24497:18;24489:26;;24561:9;24555:4;24551:20;24547:1;24536:9;24532:17;24525:47;24589:131;24715:4;24589:131;:::i;:::-;24581:139;;24308:419;;;:::o;24733:233::-;24772:3;24795:24;24813:5;24795:24;:::i;:::-;24786:33;;24841:66;24834:5;24831:77;24828:103;;24911:18;;:::i;:::-;24828:103;24958:1;24951:5;24947:13;24940:20;;24733:233;;;:::o;24972:108::-;25049:24;25067:5;25049:24;:::i;:::-;25044:3;25037:37;24972:108;;:::o;25086:105::-;25161:23;25178:5;25161:23;:::i;:::-;25156:3;25149:36;25086:105;;:::o;25197:108::-;25274:24;25292:5;25274:24;:::i;:::-;25269:3;25262:37;25197:108;;:::o;25311:::-;25388:24;25406:5;25388:24;:::i;:::-;25383:3;25376:37;25311:108;;:::o;25519:1621::-;25692:6;25687:3;25683:16;25784:4;25777:5;25773:16;25767:23;25803:63;25860:4;25855:3;25851:14;25837:12;25803:63;:::i;:::-;25709:167;25962:4;25955:5;25951:16;25945:23;25981:63;26038:4;26033:3;26029:14;26015:12;25981:63;:::i;:::-;25886:168;26135:4;26128:5;26124:16;26118:23;26154:61;26209:4;26204:3;26200:14;26186:12;26154:61;:::i;:::-;26064:161;26312:4;26305:5;26301:16;26295:23;26331:63;26388:4;26383:3;26379:14;26365:12;26331:63;:::i;:::-;26235:169;26490:4;26483:5;26479:16;26473:23;26509:63;26566:4;26561:3;26557:14;26543:12;26509:63;:::i;:::-;26414:168;26668:4;26661:5;26657:16;26651:23;26687:63;26744:4;26739:3;26735:14;26721:12;26687:63;:::i;:::-;26592:168;26854:4;26847:5;26843:16;26837:23;26873:63;26930:4;26925:3;26921:14;26907:12;26873:63;:::i;:::-;26770:176;27041:4;27034:5;27030:16;27024:23;27060:63;27117:4;27112:3;27108:14;27094:12;27060:63;:::i;:::-;26956:177;25661:1479;25519:1621;;:::o;27146:375::-;27315:4;27353:3;27342:9;27338:19;27330:27;;27367:147;27511:1;27500:9;27496:17;27487:6;27367:147;:::i;:::-;27146:375;;;;:::o;27527:159::-;27667:11;27663:1;27655:6;27651:14;27644:35;27527:159;:::o;27692:365::-;27834:3;27855:66;27919:1;27914:3;27855:66;:::i;:::-;27848:73;;27930:93;28019:3;27930:93;:::i;:::-;28048:2;28043:3;28039:12;28032:19;;27692:365;;;:::o;28063:419::-;28229:4;28267:2;28256:9;28252:18;28244:26;;28316:9;28310:4;28306:20;28302:1;28291:9;28287:17;28280:47;28344:131;28470:4;28344:131;:::i;:::-;28336:139;;28063:419;;;:::o;28488:224::-;28628:34;28624:1;28616:6;28612:14;28605:58;28697:7;28692:2;28684:6;28680:15;28673:32;28488:224;:::o;28718:366::-;28860:3;28881:67;28945:2;28940:3;28881:67;:::i;:::-;28874:74;;28957:93;29046:3;28957:93;:::i;:::-;29075:2;29070:3;29066:12;29059:19;;28718:366;;;:::o;29090:419::-;29256:4;29294:2;29283:9;29279:18;29271:26;;29343:9;29337:4;29333:20;29329:1;29318:9;29314:17;29307:47;29371:131;29497:4;29371:131;:::i;:::-;29363:139;;29090:419;;;:::o;29515:157::-;29655:9;29651:1;29643:6;29639:14;29632:33;29515:157;:::o;29678:365::-;29820:3;29841:66;29905:1;29900:3;29841:66;:::i;:::-;29834:73;;29916:93;30005:3;29916:93;:::i;:::-;30034:2;30029:3;30025:12;30018:19;;29678:365;;;:::o;30049:419::-;30215:4;30253:2;30242:9;30238:18;30230:26;;30302:9;30296:4;30292:20;30288:1;30277:9;30273:17;30266:47;30330:131;30456:4;30330:131;:::i;:::-;30322:139;;30049:419;;;:::o;30474:181::-;30614:33;30610:1;30602:6;30598:14;30591:57;30474:181;:::o;30661:366::-;30803:3;30824:67;30888:2;30883:3;30824:67;:::i;:::-;30817:74;;30900:93;30989:3;30900:93;:::i;:::-;31018:2;31013:3;31009:12;31002:19;;30661:366;;;:::o;31033:419::-;31199:4;31237:2;31226:9;31222:18;31214:26;;31286:9;31280:4;31276:20;31272:1;31261:9;31257:17;31250:47;31314:131;31440:4;31314:131;:::i;:::-;31306:139;;31033:419;;;:::o;31458:410::-;31498:7;31521:20;31539:1;31521:20;:::i;:::-;31516:25;;31555:20;31573:1;31555:20;:::i;:::-;31550:25;;31610:1;31607;31603:9;31632:30;31650:11;31632:30;:::i;:::-;31621:41;;31811:1;31802:7;31798:15;31795:1;31792:22;31772:1;31765:9;31745:83;31722:139;;31841:18;;:::i;:::-;31722:139;31506:362;31458:410;;;;:::o;31874:180::-;31922:77;31919:1;31912:88;32019:4;32016:1;32009:15;32043:4;32040:1;32033:15;32060:185;32100:1;32117:20;32135:1;32117:20;:::i;:::-;32112:25;;32151:20;32169:1;32151:20;:::i;:::-;32146:25;;32190:1;32180:35;;32195:18;;:::i;:::-;32180:35;32237:1;32234;32230:9;32225:14;;32060:185;;;;:::o;32251:181::-;32391:33;32387:1;32379:6;32375:14;32368:57;32251:181;:::o;32438:366::-;32580:3;32601:67;32665:2;32660:3;32601:67;:::i;:::-;32594:74;;32677:93;32766:3;32677:93;:::i;:::-;32795:2;32790:3;32786:12;32779:19;;32438:366;;;:::o;32810:419::-;32976:4;33014:2;33003:9;32999:18;32991:26;;33063:9;33057:4;33053:20;33049:1;33038:9;33034:17;33027:47;33091:131;33217:4;33091:131;:::i;:::-;33083:139;;32810:419;;;:::o;33235:223::-;33375:34;33371:1;33363:6;33359:14;33352:58;33444:6;33439:2;33431:6;33427:15;33420:31;33235:223;:::o;33464:366::-;33606:3;33627:67;33691:2;33686:3;33627:67;:::i;:::-;33620:74;;33703:93;33792:3;33703:93;:::i;:::-;33821:2;33816:3;33812:12;33805:19;;33464:366;;;:::o;33836:419::-;34002:4;34040:2;34029:9;34025:18;34017:26;;34089:9;34083:4;34079:20;34075:1;34064:9;34060:17;34053:47;34117:131;34243:4;34117:131;:::i;:::-;34109:139;;33836:419;;;:::o;34261:221::-;34401:34;34397:1;34389:6;34385:14;34378:58;34470:4;34465:2;34457:6;34453:15;34446:29;34261:221;:::o;34488:366::-;34630:3;34651:67;34715:2;34710:3;34651:67;:::i;:::-;34644:74;;34727:93;34816:3;34727:93;:::i;:::-;34845:2;34840:3;34836:12;34829:19;;34488:366;;;:::o;34860:419::-;35026:4;35064:2;35053:9;35049:18;35041:26;;35113:9;35107:4;35103:20;35099:1;35088:9;35084:17;35077:47;35141:131;35267:4;35141:131;:::i;:::-;35133:139;;34860:419;;;:::o;35285:194::-;35325:4;35345:20;35363:1;35345:20;:::i;:::-;35340:25;;35379:20;35397:1;35379:20;:::i;:::-;35374:25;;35423:1;35420;35416:9;35408:17;;35447:1;35441:4;35438:11;35435:37;;;35452:18;;:::i;:::-;35435:37;35285:194;;;;:::o;35485:179::-;35625:31;35621:1;35613:6;35609:14;35602:55;35485:179;:::o;35670:366::-;35812:3;35833:67;35897:2;35892:3;35833:67;:::i;:::-;35826:74;;35909:93;35998:3;35909:93;:::i;:::-;36027:2;36022:3;36018:12;36011:19;;35670:366;;;:::o;36042:419::-;36208:4;36246:2;36235:9;36231:18;36223:26;;36295:9;36289:4;36285:20;36281:1;36270:9;36266:17;36259:47;36323:131;36449:4;36323:131;:::i;:::-;36315:139;;36042:419;;;:::o;36467:224::-;36607:34;36603:1;36595:6;36591:14;36584:58;36676:7;36671:2;36663:6;36659:15;36652:32;36467:224;:::o;36697:366::-;36839:3;36860:67;36924:2;36919:3;36860:67;:::i;:::-;36853:74;;36936:93;37025:3;36936:93;:::i;:::-;37054:2;37049:3;37045:12;37038:19;;36697:366;;;:::o;37069:419::-;37235:4;37273:2;37262:9;37258:18;37250:26;;37322:9;37316:4;37312:20;37308:1;37297:9;37293:17;37286:47;37350:131;37476:4;37350:131;:::i;:::-;37342:139;;37069:419;;;:::o;37494:222::-;37634:34;37630:1;37622:6;37618:14;37611:58;37703:5;37698:2;37690:6;37686:15;37679:30;37494:222;:::o;37722:366::-;37864:3;37885:67;37949:2;37944:3;37885:67;:::i;:::-;37878:74;;37961:93;38050:3;37961:93;:::i;:::-;38079:2;38074:3;38070:12;38063:19;;37722:366;;;:::o;38094:419::-;38260:4;38298:2;38287:9;38283:18;38275:26;;38347:9;38341:4;38337:20;38333:1;38322:9;38318:17;38311:47;38375:131;38501:4;38375:131;:::i;:::-;38367:139;;38094:419;;;:::o;38519:225::-;38659:34;38655:1;38647:6;38643:14;38636:58;38728:8;38723:2;38715:6;38711:15;38704:33;38519:225;:::o;38750:366::-;38892:3;38913:67;38977:2;38972:3;38913:67;:::i;:::-;38906:74;;38989:93;39078:3;38989:93;:::i;:::-;39107:2;39102:3;39098:12;39091:19;;38750:366;;;:::o;39122:419::-;39288:4;39326:2;39315:9;39311:18;39303:26;;39375:9;39369:4;39365:20;39361:1;39350:9;39346:17;39339:47;39403:131;39529:4;39403:131;:::i;:::-;39395:139;;39122:419;;;:::o;39547:98::-;39598:6;39632:5;39626:12;39616:22;;39547:98;;;:::o;39651:147::-;39752:11;39789:3;39774:18;;39651:147;;;;:::o;39804:386::-;39908:3;39936:38;39968:5;39936:38;:::i;:::-;39990:88;40071:6;40066:3;39990:88;:::i;:::-;39983:95;;40087:65;40145:6;40140:3;40133:4;40126:5;40122:16;40087:65;:::i;:::-;40177:6;40172:3;40168:16;40161:23;;39912:278;39804:386;;;;:::o;40196:271::-;40326:3;40348:93;40437:3;40428:6;40348:93;:::i;:::-;40341:100;;40458:3;40451:10;;40196:271;;;;:::o;40473:171::-;40613:23;40609:1;40601:6;40597:14;40590:47;40473:171;:::o;40650:366::-;40792:3;40813:67;40877:2;40872:3;40813:67;:::i;:::-;40806:74;;40889:93;40978:3;40889:93;:::i;:::-;41007:2;41002:3;40998:12;40991:19;;40650:366;;;:::o;41022:419::-;41188:4;41226:2;41215:9;41211:18;41203:26;;41275:9;41269:4;41265:20;41261:1;41250:9;41246:17;41239:47;41303:131;41429:4;41303:131;:::i;:::-;41295:139;;41022:419;;;:::o;41447:332::-;41568:4;41606:2;41595:9;41591:18;41583:26;;41619:71;41687:1;41676:9;41672:17;41663:6;41619:71;:::i;:::-;41700:72;41768:2;41757:9;41753:18;41744:6;41700:72;:::i;:::-;41447:332;;;;;:::o;41785:152::-;41925:4;41921:1;41913:6;41909:14;41902:28;41785:152;:::o;41943:365::-;42085:3;42106:66;42170:1;42165:3;42106:66;:::i;:::-;42099:73;;42181:93;42270:3;42181:93;:::i;:::-;42299:2;42294:3;42290:12;42283:19;;41943:365;;;:::o;42314:419::-;42480:4;42518:2;42507:9;42503:18;42495:26;;42567:9;42561:4;42557:20;42553:1;42542:9;42538:17;42531:47;42595:131;42721:4;42595:131;:::i;:::-;42587:139;;42314:419;;;:::o
Swarm Source
ipfs://4006554c0efcea3e510f919c5689c75496ff4584f130a9fa5fbd3da81b6f90f3
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.