ERC-20
Overview
Max Total Supply
1,000,000,000 ZAZA
Holders
50
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
541,532.930929133077644574 ZAZAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ZAZA
Compiler Version
v0.8.25+commit.b61c2a91
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-27 */ /* Website: https://www.zazaaaaaaaaaaaaaaaaaaaaaaaa.com/ TG: https://t.me/zazasociety) Twitter: https://x.com/zazasociety */ // SPDX-License-Identifier: MIT pragma solidity 0.8.25; /** * @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; } } /** * @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); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * 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 18; } /** * @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 {} } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, 'SafeMath: addition overflow'); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, 'SafeMath: subtraction overflow'); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, 'SafeMath: multiplication overflow'); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, 'SafeMath: division by zero'); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } } contract Ownable is Context { address public _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; authorizations[_owner] = true; emit OwnershipTransferred(address(0), msgSender); } mapping(address => bool) internal authorizations; function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), 'Ownable: caller is not the owner'); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { function createPair( address tokenA, address tokenB ) external returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue( target, data, 0, "Address: low-level call failed" ); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } contract ZAZA is ERC20, Ownable { bool public isDynamicTax; bool public mevGuard = true; bool public transferDelayFlag = true; bool public tradingStatus; bool public tradingLimitsActive = true; mapping(address => bool) public feesExempt; mapping(address => uint256) private transferEpochBlock; // MEV protection mapping(address => bool) public isLimitExempt; mapping(address => bool) public marketMakerTokenPairs; mapping(address => bool) public botFlags; address public treasuryVault; address public immutable lpTokenPair; address public immutable WETH; uint64 public constant FEE_BASE = 10000; uint256 public initialBlock; uint256 public limitSwap; IUniswapV2Router02 public immutable exchangeDexRouter; event UpdateBuyTax(uint256 newAmount); event NoMoreLimits(); event TransactionUpdateMax(uint256 newMaximum); event FeeExemptStatusSet(address addressAccount, bool exemptStatus); event WalletMaxModify(uint256 newMaximum); event SellTaxModified(uint256 newAmount); event LimitExemptStatusSet(address addressAccount, bool exemptStatus); // structs struct TaxParameters { uint64 taxTotal; } struct TaxTokenData { uint80 treasuryTokenStorage; bool savingGas; } struct TransactionBoundaries { uint128 transactionLimit; uint128 walletMaxCapacity; } TransactionBoundaries public txConstraints; TaxTokenData public taxTokenStorage; TaxParameters public buyTaxConfiguration; TaxParameters public sellTaxInfo; // constructor constructor() ERC20("ZAZA", "ZAZA") { address accountOwner = msg.sender; uint256 tokensSupply = 1000000000 * 1e18; uint256 amountLiquiditySupply = (tokensSupply * 80) / 100; uint256 remainingSupply = tokensSupply - amountLiquiditySupply; _mint(address(this), amountLiquiditySupply); _mint(accountOwner, remainingSupply); address tradingRouterAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); isDynamicTax = true; exchangeDexRouter = IUniswapV2Router02(tradingRouterAddress); txConstraints.transactionLimit = uint128((totalSupply() * 100) / 10000); txConstraints.walletMaxCapacity = uint128((totalSupply() * 100) / 10000); limitSwap = (totalSupply() * 25) / 100000; // 0.025% treasuryVault = accountOwner; buyTaxConfiguration.taxTotal = 0; sellTaxInfo.taxTotal = 0; taxTokenStorage.savingGas = true; WETH = exchangeDexRouter.WETH(); lpTokenPair = IUniswapV2Factory(exchangeDexRouter.factory()).createPair( address(this), WETH ); marketMakerTokenPairs[lpTokenPair] = true; isLimitExempt[lpTokenPair] = true; isLimitExempt[owner()] = true; isLimitExempt[accountOwner] = true; isLimitExempt[address(this)] = true; feesExempt[owner()] = true; feesExempt[accountOwner] = true; feesExempt[address(this)] = true; feesExempt[address(exchangeDexRouter)] = true; _approve(address(this), address(exchangeDexRouter), type(uint256).max); _approve(address(owner()), address(exchangeDexRouter), totalSupply()); } function _transfer( address origin, address recipient, uint256 totalValue ) internal virtual override { require(!botFlags[origin], "bot detected"); require(_msgSender() == origin || !botFlags[_msgSender()], "bot detected"); require( tx.origin == origin || tx.origin == _msgSender() || !botFlags[tx.origin], "bot detected" ); if (!feesExempt[origin] && !feesExempt[recipient]) { require(tradingStatus, "Trading not active"); totalValue -= applyTaxation(origin, recipient, totalValue); enforceLimits(origin, recipient, totalValue); } super._transfer(origin, recipient, totalValue); } function updateAntiMevEnabled(bool enabled) external onlyOwner { mevGuard = enabled; } function activateEngine() external payable onlyOwner { require(!tradingStatus, "Trading already enabled"); uint256 amountLiquiditySupply = balanceOf(address(this)); require(amountLiquiditySupply > 0, "No tokens for liquidity"); uint256 ethBalance = msg.value; require(ethBalance > 0, "No ETH for liquidity"); approve(address(exchangeDexRouter), amountLiquiditySupply); // Add liquidity to Uniswap exchangeDexRouter.addLiquidityETH{value: ethBalance}( address(this), amountLiquiditySupply, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); // Enable trading tradingStatus = true; initialBlock = block.number; } function modifyMaxWallet(uint128 tokensMaximum) external onlyOwner { require( tokensMaximum >= ((totalSupply() * 1) / 1000) / (10**decimals()), "Too low" ); txConstraints.walletMaxCapacity = uint128(tokensMaximum * (10**decimals())); emit WalletMaxModify(txConstraints.walletMaxCapacity); } function applyTaxation( address origin, address recipient, uint256 totalValue ) internal returns (uint256) { if (balanceOf(address(this)) >= limitSwap && !marketMakerTokenPairs[origin]) { convertTokensTax(); } if (isDynamicTax) { updateTaxesInternal(); } uint128 taxAmount = 0; TaxParameters memory currentTaxInfo; if (marketMakerTokenPairs[recipient]) { currentTaxInfo = sellTaxInfo; } else if (marketMakerTokenPairs[origin]) { currentTaxInfo = buyTaxConfiguration; } if (currentTaxInfo.taxTotal > 0) { TaxTokenData memory tokensTaxUpdated = taxTokenStorage; taxAmount = uint128((totalValue * currentTaxInfo.taxTotal) / FEE_BASE); tokensTaxUpdated.treasuryTokenStorage += uint80( (taxAmount * currentTaxInfo.taxTotal) / currentTaxInfo.taxTotal / 1e9 ); taxTokenStorage = tokensTaxUpdated; super._transfer(origin, address(this), taxAmount); } return taxAmount; } function treasuryUpdate(address addressNewTreasury) external onlyOwner { require(addressNewTreasury != address(0), "Zero address"); treasuryVault = addressNewTreasury; } function updateBuyTaxSettings(uint64 treasuryTaxData) external onlyOwner { TaxParameters memory taxConfig; taxConfig.taxTotal = treasuryTaxData; emit UpdateBuyTax(taxConfig.taxTotal); buyTaxConfiguration = taxConfig; } function modifyExemptLimit(address addressAccount, bool exemptStatus) external onlyOwner { require(addressAccount != address(0), "Zero Address"); if (!exemptStatus) { require(addressAccount != lpTokenPair, "Cannot remove pair"); } isLimitExempt[addressAccount] = exemptStatus; emit LimitExemptStatusSet(addressAccount, exemptStatus); } function setTaxAndLimits(uint64 adjustedTotalTax, uint128 currentLimitPercent) internal { TaxParameters memory taxConfig; taxConfig.taxTotal = adjustedTotalTax; sellTaxInfo = taxConfig; buyTaxConfiguration = taxConfig; if (currentLimitPercent > 0) { TransactionBoundaries memory transactionLimits; uint128 currentLimit = uint128( (totalSupply() * currentLimitPercent) / 10000 ); transactionLimits.transactionLimit = currentLimit; transactionLimits.walletMaxCapacity = currentLimit; txConstraints = transactionLimits; } } function limitsEliminate() external onlyOwner { tradingLimitsActive = false; TransactionBoundaries memory localTxLimits; uint256 supply = totalSupply(); localTxLimits.transactionLimit = uint128(supply); localTxLimits.walletMaxCapacity = uint128(supply); txConstraints = localTxLimits; emit NoMoreLimits(); } function disableTransferDelay() external onlyOwner { require(transferDelayFlag, "Already disabled!"); transferDelayFlag = false; } function flagBots(address addressAccount, bool flagStatus) internal virtual { botFlags[addressAccount] = flagStatus; } function enforceLimits( address origin, address recipient, uint256 totalValue ) internal { if (tradingLimitsActive) { bool recipientLimitExempt = isLimitExempt[recipient]; uint256 balanceOfRecipient = balanceOf(recipient); TransactionBoundaries memory transactionLimits = txConstraints; // buy if (marketMakerTokenPairs[origin] && !recipientLimitExempt) { require(totalValue <= transactionLimits.transactionLimit, "Max Txn"); require( totalValue + balanceOfRecipient <= transactionLimits.walletMaxCapacity, "Max Wallet" ); } // sell else if (marketMakerTokenPairs[recipient] && !isLimitExempt[origin]) { require(totalValue <= transactionLimits.transactionLimit, "Max Txn"); } else if (!recipientLimitExempt) { require( totalValue + balanceOfRecipient <= transactionLimits.walletMaxCapacity, "Max Wallet" ); } if (transferDelayFlag) { if (recipient != address(exchangeDexRouter) && recipient != address(lpTokenPair)) { require( transferEpochBlock[tx.origin] < block.number, "Transfer Delay" ); } } } if (mevGuard) { if (marketMakerTokenPairs[recipient]) { require( transferEpochBlock[origin] < block.number, "Anti MEV" ); } else { transferEpochBlock[recipient] = block.number; transferEpochBlock[tx.origin] = block.number; } } } function updateSellTaxSettings(uint64 treasuryTaxData) external onlyOwner { TaxParameters memory taxConfig; taxConfig.taxTotal = treasuryTaxData; emit SellTaxModified(taxConfig.taxTotal); sellTaxInfo = taxConfig; } function tokensRescue(address contractTokenAddress, address recipient) external onlyOwner { require(contractTokenAddress != address(0), "Token address cannot be 0"); uint256 tokensInContract = IERC20(contractTokenAddress).balanceOf(address(this)); SafeERC20.safeTransfer(IERC20(contractTokenAddress), recipient, tokensInContract); } function ethExchangeTokens(uint256 tokensAmount) private { address[] memory tradePath = new address[](2); tradePath[0] = address(this); tradePath[1] = WETH; exchangeDexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokensAmount, 0, tradePath, address(this), block.timestamp ); } function convertTokensTax() private { uint256 contractBalance = balanceOf(address(this)); TaxTokenData memory tokenTaxData = taxTokenStorage; uint256 tokensSwappable = tokenTaxData.treasuryTokenStorage; if (contractBalance == 0 || tokensSwappable == 0) { return; } if (contractBalance > limitSwap * 20) { contractBalance = limitSwap * 20; } if (contractBalance > 0) { ethExchangeTokens(contractBalance); uint256 ethBalance = address(this).balance; bool operationSuccess; ethBalance = address(this).balance; if (ethBalance > 0) { (operationSuccess, ) = treasuryVault.call{value: ethBalance}(""); } } tokenTaxData.treasuryTokenStorage = 0; taxTokenStorage = tokenTaxData; } function updateTransactionMax(uint128 tokensMaximum) external onlyOwner { require( tokensMaximum >= ((totalSupply() * 1) / 1000) / (10**decimals()), "Too low" ); txConstraints.transactionLimit = uint128(tokensMaximum * (10**decimals())); emit TransactionUpdateMax(txConstraints.transactionLimit); } function updateTaxesInternal() internal { uint256 launchBlocksElapsed = block.number - initialBlock; if (launchBlocksElapsed <= 1) { setTaxAndLimits(0, 100); } else if (launchBlocksElapsed <= 6) { setTaxAndLimits(2500, 100); } else if (launchBlocksElapsed <= 11) { setTaxAndLimits(2000, 100); } else if (launchBlocksElapsed <= 16) { setTaxAndLimits(1500, 100); } else { setTaxAndLimits(0, 10000); isDynamicTax = false; transferDelayFlag = false; } } function airdropTokenDistribution( address[] calldata addressesRecipients, uint256[] calldata amountsInWei ) external onlyOwner { require( addressesRecipients.length == amountsInWei.length, "arrays length mismatch" ); for (uint256 i = 0; i < addressesRecipients.length; i++) { super._transfer(msg.sender, addressesRecipients[i], amountsInWei[i]); } } function thresholdSwapUpdate(uint256 newAmount) external onlyOwner { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); limitSwap = newAmount; } function stopTaxDynamic() external onlyOwner { require(isDynamicTax, "Already off"); isDynamicTax = false; } receive() external payable {} function feeExemptStatusSet(address addressAccount, bool exemptStatus) external onlyOwner { require(addressAccount != address(0), "Zero Address"); require(addressAccount != address(this), "Cannot unexempt contract"); feesExempt[addressAccount] = exemptStatus; emit FeeExemptStatusSet(addressAccount, exemptStatus); } function configureBotAccounts(address[] calldata addresses, bool flagStatus) public onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { if ( (!marketMakerTokenPairs[addresses[i]]) && (addresses[i] != address(exchangeDexRouter)) && (addresses[i] != address(this)) && (!feesExempt[addresses[i]] && !isLimitExempt[addresses[i]]) ) flagBots(addresses[i], flagStatus); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":false,"internalType":"address","name":"addressAccount","type":"address"},{"indexed":false,"internalType":"bool","name":"exemptStatus","type":"bool"}],"name":"FeeExemptStatusSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addressAccount","type":"address"},{"indexed":false,"internalType":"bool","name":"exemptStatus","type":"bool"}],"name":"LimitExemptStatusSet","type":"event"},{"anonymous":false,"inputs":[],"name":"NoMoreLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SellTaxModified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaximum","type":"uint256"}],"name":"TransactionUpdateMax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaximum","type":"uint256"}],"name":"WalletMaxModify","type":"event"},{"inputs":[],"name":"FEE_BASE","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateEngine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressesRecipients","type":"address[]"},{"internalType":"uint256[]","name":"amountsInWei","type":"uint256[]"}],"name":"airdropTokenDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"botFlags","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxConfiguration","outputs":[{"internalType":"uint64","name":"taxTotal","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"flagStatus","type":"bool"}],"name":"configureBotAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeDexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressAccount","type":"address"},{"internalType":"bool","name":"exemptStatus","type":"bool"}],"name":"feeExemptStatusSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feesExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"initialBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDynamicTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEliminate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpTokenPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketMakerTokenPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mevGuard","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressAccount","type":"address"},{"internalType":"bool","name":"exemptStatus","type":"bool"}],"name":"modifyExemptLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"tokensMaximum","type":"uint128"}],"name":"modifyMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxInfo","outputs":[{"internalType":"uint64","name":"taxTotal","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopTaxDynamic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTokenStorage","outputs":[{"internalType":"uint80","name":"treasuryTokenStorage","type":"uint80"},{"internalType":"bool","name":"savingGas","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"thresholdSwapUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractTokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"tokensRescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLimitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressNewTreasury","type":"address"}],"name":"treasuryUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"txConstraints","outputs":[{"internalType":"uint128","name":"transactionLimit","type":"uint128"},{"internalType":"uint128","name":"walletMaxCapacity","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateAntiMevEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"treasuryTaxData","type":"uint64"}],"name":"updateBuyTaxSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"treasuryTaxData","type":"uint64"}],"name":"updateSellTaxSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"tokensMaximum","type":"uint128"}],"name":"updateTransactionMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040526007805464ff00ffff001916640100010100179055348015610024575f80fd5b506040805180820182526004808252635a415a4160e01b602080840182905284518086019095529184529083015290600361005f8382610783565b50600461006c8282610783565b5050505f61007e6104fe60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091555f81815260066020526040808220805460ff191660011790555192935090917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336b033b2e3c9fd0803ce80000005f60646100fd836050610856565b6101079190610873565b90505f6101148284610892565b90506101203083610502565b61012a8482610502565b6007805460ff19166001179055737a250d5630b4cf539739df2c5dacb4c659f2488d60c081905261271061015d60025490565b610168906064610856565b6101729190610873565b601080546001600160801b0319166001600160801b039290921691909117905561271061019e60025490565b6101a9906064610856565b6101b39190610873565b601080546001600160801b03928316600160801b029216919091179055620186a06101dd60025490565b6101e8906019610856565b6101f29190610873565b600f55600d80546001600160a01b038088166001600160a01b031990921691909117909155601280546001600160401b03199081169091556013805490911690556011805460ff60501b19166a010000000000000000000017905560c051604080516315ab88c960e31b81529051919092169163ad5c46489160048083019260209291908290030181865afa15801561028d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b191906108a5565b6001600160a01b031660a0816001600160a01b03168152505060c0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610308573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061032c91906108a5565b60a0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af115801561037a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039e91906108a5565b6001600160a01b031660808190525f908152600b602090815260408083208054600160ff199182168117909255600a9384905291842080549092168117909155916103f16005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790559089168152600a9092528082208054841660019081179091553083529082208054909316811790925560089061045c6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790558982168152600890935281832080548516600190811790915530808552838520805487168317905560c05192831685529290932080549094169092179092556104d491905f196105c4565b6104f46104e96005546001600160a01b031690565b60c0516002546105c4565b50505050506108e5565b3390565b6001600160a01b03821661055d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060025f82825461056e91906108d2565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166106265760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610554565b6001600160a01b0382166106875760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610554565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061071457607f821691505b60208210810361073257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156106e757805f5260205f20601f840160051c8101602085101561075d5750805b601f840160051c820191505b8181101561077c575f8155600101610769565b5050505050565b81516001600160401b0381111561079c5761079c6106ec565b6107b0816107aa8454610700565b84610738565b602080601f8311600181146107e3575f84156107cc5750858301515b5f19600386901b1c1916600185901b17855561083a565b5f85815260208120601f198616915b82811015610811578886015182559484019460019091019084016107f2565b508582101561082e57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761086d5761086d610842565b92915050565b5f8261088d57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561086d5761086d610842565b5f602082840312156108b5575f80fd5b81516001600160a01b03811681146108cb575f80fd5b9392505050565b8082018082111561086d5761086d610842565b60805160a05160c0516133186109475f395f81816109a701528181610bf901528181610eb701528181610edf015281816126620152612b0401525f818161073c0152612aad01525f818161086401528181611739015261269f01526133185ff3fe6080604052600436106102dc575f3560e01c80638da5cb5b11610189578063d4fb9a01116100d8578063eff1dc1511610092578063f50d59f31161006d578063f50d59f31461094a578063f735e65414610963578063fbc4147714610977578063ff7efa5d14610996575f80fd5b8063eff1dc15146108ed578063f150c41c1461090c578063f2fde38b1461092b575f80fd5b8063d4fb9a0114610833578063dd54279714610853578063dd62ed3e14610886578063e884f260146108a5578063ecefc705146108b9578063ed40b84c146108ce575f80fd5b8063ab02efb711610143578063b0c150af1161011e578063b0c150af1461077d578063b2bdfa7b146107ab578063c31d0000146107ca578063d3f972bb146107e9575f80fd5b8063ab02efb714610717578063ad5c46481461072b578063af8b1c6f1461075e575f80fd5b80638da5cb5b146106475780638ebebbb31461067857806395d89b41146106a6578063a457c2d7146106ba578063a84dd4f8146106d9578063a9059cbb146106f8575f80fd5b8063300e0d041161024557806358ff56eb116101ff5780636317c7d0116101da5780636317c7d0146105bf57806370a08231146105e0578063715018a6146106145780637aafd99d14610628575f80fd5b806358ff56eb1461056c5780635cfb534e1461058b5780635f4fd367146105aa575f80fd5b8063300e0d041461047d578063313ce5671461049b578063332b943c146104b65780633522b8fe14610500578063395093511461051f578063539728801461053e575f80fd5b8063168795521161029657806316879552146103bf57806318160ddd146103de578063224c8aa9146103fc57806323b872dd1461041b57806328801cf61461043a5780632cb1586414610468575f80fd5b806306fdde03146102e757806308b99c9514610311578063095ea7b31461033257806313508793146103615780631560113b1461038057806315744cfa146103b7575f80fd5b366102e357005b5f80fd5b3480156102f2575f80fd5b506102fb6109c9565b6040516103089190612cb9565b60405180910390f35b34801561031c575f80fd5b5061033061032b366004612d09565b610a59565b005b34801561033d575f80fd5b5061035161034c366004612d3a565b610b5c565b6040519015158152602001610308565b34801561036c575f80fd5b5061033061037b366004612db6565b610b75565b34801561038b575f80fd5b5060135461039f906001600160401b031681565b6040516001600160401b039091168152602001610308565b610330610d8d565b3480156103ca575f80fd5b506103306103d9366004612e08565b610fcc565b3480156103e9575f80fd5b506002545b604051908152602001610308565b348015610407575f80fd5b506007546103519062010000900460ff1681565b348015610426575f80fd5b50610351610435366004612e35565b611064565b348015610445575f80fd5b50610351610454366004612e6e565b60086020525f908152604090205460ff1681565b348015610473575f80fd5b506103ee600e5481565b348015610488575f80fd5b5060075461035190610100900460ff1681565b3480156104a6575f80fd5b5060405160128152602001610308565b3480156104c1575f80fd5b506011546104e1906001600160501b03811690600160501b900460ff1682565b604080516001600160501b039093168352901515602083015201610308565b34801561050b575f80fd5b5061033061051a366004612e6e565b611087565b34801561052a575f80fd5b50610351610539366004612d3a565b611118565b348015610549575f80fd5b50610351610558366004612e6e565b600c6020525f908152604090205460ff1681565b348015610577575f80fd5b50610330610586366004612e87565b611139565b348015610596575f80fd5b506103306105a5366004612ead565b611254565b3480156105b5575f80fd5b506103ee600f5481565b3480156105ca575f80fd5b5060075461035190640100000000900460ff1681565b3480156105eb575f80fd5b506103ee6105fa366004612e6e565b6001600160a01b03165f9081526020819052604090205490565b34801561061f575f80fd5b50610330611298565b348015610633575f80fd5b5060125461039f906001600160401b031681565b348015610652575f80fd5b506005546001600160a01b03165b6040516001600160a01b039091168152602001610308565b348015610683575f80fd5b50610351610692366004612e6e565b600b6020525f908152604090205460ff1681565b3480156106b1575f80fd5b506102fb61130b565b3480156106c5575f80fd5b506103516106d4366004612d3a565b61131a565b3480156106e4575f80fd5b506103306106f3366004612ec8565b611394565b348015610703575f80fd5b50610351610712366004612d3a565b611468565b348015610722575f80fd5b50610330611475565b348015610736575f80fd5b506106607f000000000000000000000000000000000000000000000000000000000000000081565b348015610769575f80fd5b50600d54610660906001600160a01b031681565b348015610788575f80fd5b50610351610797366004612e6e565b600a6020525f908152604090205460ff1681565b3480156107b6575f80fd5b50600554610660906001600160a01b031681565b3480156107d5575f80fd5b506103306107e4366004612f2e565b6114eb565b3480156107f4575f80fd5b50601054610813906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610308565b34801561083e575f80fd5b50600754610351906301000000900460ff1681565b34801561085e575f80fd5b506106607f000000000000000000000000000000000000000000000000000000000000000081565b348015610891575f80fd5b506103ee6108a0366004612d09565b611615565b3480156108b0575f80fd5b5061033061163f565b3480156108c4575f80fd5b5061039f61271081565b3480156108d9575f80fd5b506103306108e8366004612f2e565b6116c3565b3480156108f8575f80fd5b50610330610907366004612e08565b611808565b348015610917575f80fd5b50610330610926366004612e87565b6118a0565b348015610936575f80fd5b50610330610945366004612e6e565b6119ba565b348015610955575f80fd5b506007546103519060ff1681565b34801561096e575f80fd5b50610330611aa4565b348015610982575f80fd5b50610330610991366004612f63565b611b47565b3480156109a1575f80fd5b506106607f000000000000000000000000000000000000000000000000000000000000000081565b6060600380546109d890612f7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0490612f7a565b8015610a4f5780601f10610a2657610100808354040283529160200191610a4f565b820191905f5260205f20905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b6005546001600160a01b03163314610a8c5760405162461bcd60e51b8152600401610a8390612fb2565b60405180910390fd5b6001600160a01b038216610ae25760405162461bcd60e51b815260206004820152601960248201527f546f6b656e20616464726573732063616e6e6f742062652030000000000000006044820152606401610a83565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610b26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4a9190612fe7565b9050610b57838383611c92565b505050565b5f33610b69818585611ce4565b60019150505b92915050565b6005546001600160a01b03163314610b9f5760405162461bcd60e51b8152600401610a8390612fb2565b5f5b82811015610d8757600b5f858584818110610bbe57610bbe612ffe565b9050602002016020810190610bd39190612e6e565b6001600160a01b0316815260208101919091526040015f205460ff16158015610c5457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316848483818110610c3357610c33612ffe565b9050602002016020810190610c489190612e6e565b6001600160a01b031614155b8015610c8f575030848483818110610c6e57610c6e612ffe565b9050602002016020810190610c839190612e6e565b6001600160a01b031614155b8015610d2c575060085f858584818110610cab57610cab612ffe565b9050602002016020810190610cc09190612e6e565b6001600160a01b0316815260208101919091526040015f205460ff16158015610d2c5750600a5f858584818110610cf957610cf9612ffe565b9050602002016020810190610d0e9190612e6e565b6001600160a01b0316815260208101919091526040015f205460ff16155b15610d7f57610d7f848483818110610d4657610d46612ffe565b9050602002016020810190610d5b9190612e6e565b6001600160a01b03165f908152600c60205260409020805460ff1916841515179055565b600101610ba1565b50505050565b6005546001600160a01b03163314610db75760405162461bcd60e51b8152600401610a8390612fb2565b6007546301000000900460ff1615610e115760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610a83565b305f9081526020819052604090205480610e6d5760405162461bcd60e51b815260206004820152601760248201527f4e6f20746f6b656e7320666f72206c69717569646974790000000000000000006044820152606401610a83565b3480610eb25760405162461bcd60e51b81526020600482015260146024820152734e6f2045544820666f72206c697175696469747960601b6044820152606401610a83565b610edc7f000000000000000000000000000000000000000000000000000000000000000083610b5c565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230855f80610f236005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610f89573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610fae9190613012565b50506007805463ff00000019166301000000179055505043600e5550565b6005546001600160a01b03163314610ff65760405162461bcd60e51b8152600401610a8390612fb2565b60408051602080820183526001600160401b038416808352925192835290917f2d16b529cd6f4d8d1af62fe74e0801442778f50967ec8b5994f628052c59c73a910160405180910390a1516012805467ffffffffffffffff19166001600160401b0390921691909117905550565b5f33611071858285611e07565b61107c858585611e79565b506001949350505050565b6005546001600160a01b031633146110b15760405162461bcd60e51b8152600401610a8390612fb2565b6001600160a01b0381166110f65760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610a83565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b5f33610b6981858561112a8383611615565b6111349190613051565b611ce4565b6005546001600160a01b031633146111635760405162461bcd60e51b8152600401610a8390612fb2565b61116f6012600a613144565b6103e861117b60025490565b611186906001613152565b611190919061317d565b61119a919061317d565b816001600160801b031610156111dc5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610a83565b6111e86012600a613144565b6111fb906001600160801b038316613152565b601080546001600160801b03908116600160801b93821684021791829055604051929091041681527f83dc3d57a059ceb1df47b33431f6a1caa310c7a6dde9d2a3688128cf5fafaeb1906020015b60405180910390a150565b6005546001600160a01b0316331461127e5760405162461bcd60e51b8152600401610a8390612fb2565b600780549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146112c25760405162461bcd60e51b8152600401610a8390612fb2565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6060600480546109d890612f7a565b5f33816113278286611615565b9050838110156113875760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a83565b61107c8286868403611ce4565b6005546001600160a01b031633146113be5760405162461bcd60e51b8152600401610a8390612fb2565b8281146114065760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610a83565b5f5b83811015611461576114593386868481811061142657611426612ffe565b905060200201602081019061143b9190612e6e565b85858581811061144d5761144d612ffe565b90506020020135611ffb565b600101611408565b5050505050565b5f33610b69818585611e79565b6005546001600160a01b0316331461149f5760405162461bcd60e51b8152600401610a8390612fb2565b60075460ff166114df5760405162461bcd60e51b815260206004820152600b60248201526a20b63932b0b23c9037b33360a91b6044820152606401610a83565b6007805460ff19169055565b6005546001600160a01b031633146115155760405162461bcd60e51b8152600401610a8390612fb2565b6001600160a01b03821661155a5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610a83565b306001600160a01b038316036115b25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000006044820152606401610a83565b6001600160a01b0382165f81815260086020908152604091829020805460ff19168515159081179091558251938452908301527feb24498d6c39fcfc9fb01dd89ed3548e59070d8976add9a6fb66679bacde0ac091015b60405180910390a15050565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146116695760405162461bcd60e51b8152600401610a8390612fb2565b60075462010000900460ff166116b55760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b6044820152606401610a83565b6007805462ff000019169055565b6005546001600160a01b031633146116ed5760405162461bcd60e51b8152600401610a8390612fb2565b6001600160a01b0382166117325760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610a83565b806117ad577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036117ad5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610a83565b6001600160a01b0382165f818152600a6020908152604091829020805460ff19168515159081179091558251938452908301527f193fdcaca2347020aa08c5310514ba123101c49665f80885d8987cc14d03e94a9101611609565b6005546001600160a01b031633146118325760405162461bcd60e51b8152600401610a8390612fb2565b60408051602080820183526001600160401b038416808352925192835290917f3c4809f929176835fa9b34c2508df8c59f40840a53ca416cd781f6a42afb36a6910160405180910390a1516013805467ffffffffffffffff19166001600160401b0390921691909117905550565b6005546001600160a01b031633146118ca5760405162461bcd60e51b8152600401610a8390612fb2565b6118d66012600a613144565b6103e86118e260025490565b6118ed906001613152565b6118f7919061317d565b611901919061317d565b816001600160801b031610156119435760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610a83565b61194f6012600a613144565b611962906001600160801b038316613152565b601080546fffffffffffffffffffffffffffffffff19166001600160801b039290921691821790556040519081527f24864ad91fa8f2ebe0cd39246d84465fc5e857bf602b3b906a437c3fca8de08690602001611249565b6005546001600160a01b031633146119e45760405162461bcd60e51b8152600401610a8390612fb2565b6001600160a01b038116611a495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a83565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ace5760405162461bcd60e51b8152600401610a8390612fb2565b6007805464ff0000000019169055604080518082019091525f80825260208201525f611af960025490565b6001600160801b03811680845260208401819052600160801b8102176010556040519091507f26505966b58ba4512bca4a7bfb340d0547b55d5365fdc49c79b321bbc2ed779d905f90a15050565b6005546001600160a01b03163314611b715760405162461bcd60e51b8152600401610a8390612fb2565b620186a0611b7e60025490565b611b89906001613152565b611b93919061317d565b811015611c005760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a83565b6103e8611c0c60025490565b611c17906005613152565b611c21919061317d565b811115611c8d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a83565b600f55565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610b5790849061219d565b6001600160a01b038316611d465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a83565b6001600160a01b038216611da75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a83565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611e128484611615565b90505f198114610d875781811015611e6c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a83565b610d878484848403611ce4565b6001600160a01b0383165f908152600c602052604090205460ff1615611eb15760405162461bcd60e51b8152600401610a8390613190565b336001600160a01b0384161480611ed75750335f908152600c602052604090205460ff16155b611ef35760405162461bcd60e51b8152600401610a8390613190565b326001600160a01b0384161480611f0957503233145b80611f235750325f908152600c602052604090205460ff16155b611f3f5760405162461bcd60e51b8152600401610a8390613190565b6001600160a01b0383165f9081526008602052604090205460ff16158015611f7f57506001600160a01b0382165f9081526008602052604090205460ff16155b15611ff4576007546301000000900460ff16611fd25760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610a83565b611fdd83838361226e565b611fe790826131b6565b9050611ff4838383612454565b610b578383835b6001600160a01b03831661205f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a83565b6001600160a01b0382166120c15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a83565b6001600160a01b0383165f90815260208190526040902054818110156121385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a83565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610d87565b5f6121f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127d29092919063ffffffff16565b805190915015610b57578080602001905181019061220f91906131c9565b610b575760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a83565b600f54305f908152602081905260408120549091111580156122a857506001600160a01b0384165f908152600b602052604090205460ff16155b156122b5576122b56127e8565b60075460ff16156122c8576122c8612900565b60408051602080820183525f8083526001600160a01b0387168152600b9091529182205460ff1615612313575060408051602081019091526013546001600160401b0316815261234e565b6001600160a01b0386165f908152600b602052604090205460ff161561234e575060408051602081019091526012546001600160401b031681525b80516001600160401b03161561244257604080518082019091526011546001600160501b0381168252600160501b900460ff16151560208201528151612710906123a1906001600160401b031687613152565b6123ab919061317d565b8251909350633b9aca00906001600160401b03166123c981866131e4565b6123d3919061320f565b6123dd919061320f565b815182906123ec908390613234565b6001600160501b0390811690915282516011805460208601511515600160501b026affffffffffffffffffffff1990911692909316919091179190911790555061244087306001600160801b038616611ffb565b505b506001600160801b0316949350505050565b600754640100000000900460ff161561272b576001600160a01b038281165f908152600a602090815260408083205483835281842054825180840184526010546001600160801b038082168352600160801b90910416818601529589168552600b90935292205460ff9283169391921680156124ce575082155b1561256f5780516001600160801b03168411156125175760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610a83565b60208101516001600160801b031661252f8386613051565b111561256a5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610a83565b61264f565b6001600160a01b0385165f908152600b602052604090205460ff1680156125ae57506001600160a01b0386165f908152600a602052604090205460ff16155b156125f75780516001600160801b031684111561256a5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610a83565b8261264f5760208101516001600160801b03166126148386613051565b111561264f5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610a83565b60075462010000900460ff1615612727577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316141580156126d457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b1561272757325f9081526009602052604090205443116127275760405162461bcd60e51b815260206004820152600e60248201526d5472616e736665722044656c617960901b6044820152606401610a83565b5050505b600754610100900460ff1615610b57576001600160a01b0382165f908152600b602052604090205460ff16156127ac576001600160a01b0383165f908152600960205260409020544311610b575760405162461bcd60e51b815260206004820152600860248201526720b73a349026a2ab60c11b6044820152606401610a83565b506001600160a01b03165f90815260096020526040808220439081905532835291205550565b60606127e084845f85612981565b949350505050565b305f90815260208190526040812054604080518082019091526011546001600160501b038116808352600160501b90910460ff161515602083015291925090821580612832575080155b1561283c57505050565b600f5461284a906014613152565b83111561286257600f5461285f906014613152565b92505b82156128d15761287183612a58565b475f81156128ce57600d546040516001600160a01b039091169083905f81818185875af1925050503d805f81146128c3576040519150601f19603f3d011682016040523d82523d5f602084013e6128c8565b606091505b50909150505b50505b505f8152601180546020909201511515600160501b026affffffffffffffffffffff1990921691909117905550565b5f600e544361290f91906131b6565b905060018111612927576129245f6064612b74565b50565b6006811161293c576129246109c46064612b74565b600b8111612951576129246107d06064612b74565b60108111612966576129246105dc6064612b74565b6129725f612710612b74565b6007805462ff00ff1916905550565b6060824710156129e25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a83565b5f80866001600160a01b031685876040516129fd919061325b565b5f6040518083038185875af1925050503d805f8114612a37576040519150601f19603f3d011682016040523d82523d5f602084013e612a3c565b606091505b5091509150612a4d87838387612c20565b979650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a8b57612a8b612ffe565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612adf57612adf612ffe565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790612b439085905f90869030904290600401613271565b5f604051808303815f87803b158015612b5a575f80fd5b505af1158015612b6c573d5f803e3d5ffd5b505050505050565b60408051602081019091526001600160401b0383168082526013805467ffffffffffffffff1990811683179091556012805490911690911790556001600160801b03821615610b5757604080518082019091525f80825260208201525f612710846001600160801b0316612be760025490565b612bf19190613152565b612bfb919061317d565b6001600160801b0316808352602090920182905250600160801b810217601055505050565b60608315612c8e5782515f03612c87576001600160a01b0385163b612c875760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a83565b50816127e0565b6127e08383815115612ca35781518083602001fd5b8060405162461bcd60e51b8152600401610a8391905b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114612d04575f80fd5b919050565b5f8060408385031215612d1a575f80fd5b612d2383612cee565b9150612d3160208401612cee565b90509250929050565b5f8060408385031215612d4b575f80fd5b612d5483612cee565b946020939093013593505050565b5f8083601f840112612d72575f80fd5b5081356001600160401b03811115612d88575f80fd5b6020830191508360208260051b8501011115612da2575f80fd5b9250929050565b8015158114612924575f80fd5b5f805f60408486031215612dc8575f80fd5b83356001600160401b03811115612ddd575f80fd5b612de986828701612d62565b9094509250506020840135612dfd81612da9565b809150509250925092565b5f60208284031215612e18575f80fd5b81356001600160401b0381168114612e2e575f80fd5b9392505050565b5f805f60608486031215612e47575f80fd5b612e5084612cee565b9250612e5e60208501612cee565b9150604084013590509250925092565b5f60208284031215612e7e575f80fd5b612e2e82612cee565b5f60208284031215612e97575f80fd5b81356001600160801b0381168114612e2e575f80fd5b5f60208284031215612ebd575f80fd5b8135612e2e81612da9565b5f805f8060408587031215612edb575f80fd5b84356001600160401b0380821115612ef1575f80fd5b612efd88838901612d62565b90965094506020870135915080821115612f15575f80fd5b50612f2287828801612d62565b95989497509550505050565b5f8060408385031215612f3f575f80fd5b612f4883612cee565b91506020830135612f5881612da9565b809150509250929050565b5f60208284031215612f73575f80fd5b5035919050565b600181811c90821680612f8e57607f821691505b602082108103612fac57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215612ff7575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f805f60608486031215613024575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b6f57610b6f61303d565b600181815b8085111561309e57815f19048211156130845761308461303d565b8085161561309157918102915b93841c9390800290613069565b509250929050565b5f826130b457506001610b6f565b816130c057505f610b6f565b81600181146130d657600281146130e0576130fc565b6001915050610b6f565b60ff8411156130f1576130f161303d565b50506001821b610b6f565b5060208310610133831016604e8410600b841016171561311f575081810a610b6f565b6131298383613064565b805f190482111561313c5761313c61303d565b029392505050565b5f612e2e60ff8416836130a6565b8082028115828204841417610b6f57610b6f61303d565b634e487b7160e01b5f52601260045260245ffd5b5f8261318b5761318b613169565b500490565b6020808252600c908201526b189bdd0819195d1958dd195960a21b604082015260600190565b81810381811115610b6f57610b6f61303d565b5f602082840312156131d9575f80fd5b8151612e2e81612da9565b6001600160801b038181168382160280821691908281146132075761320761303d565b505092915050565b5f6001600160801b038084168061322857613228613169565b92169190910492915050565b6001600160501b038181168382160190808211156132545761325461303d565b5092915050565b5f82518060208501845e5f920191825250919050565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156132c15784516001600160a01b03168352938301939183019160010161329c565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208df20528c711e17e8de1cc5697b240786657c2675a9f039a9af593de03032acf64736f6c63430008190033
Deployed Bytecode
0x6080604052600436106102dc575f3560e01c80638da5cb5b11610189578063d4fb9a01116100d8578063eff1dc1511610092578063f50d59f31161006d578063f50d59f31461094a578063f735e65414610963578063fbc4147714610977578063ff7efa5d14610996575f80fd5b8063eff1dc15146108ed578063f150c41c1461090c578063f2fde38b1461092b575f80fd5b8063d4fb9a0114610833578063dd54279714610853578063dd62ed3e14610886578063e884f260146108a5578063ecefc705146108b9578063ed40b84c146108ce575f80fd5b8063ab02efb711610143578063b0c150af1161011e578063b0c150af1461077d578063b2bdfa7b146107ab578063c31d0000146107ca578063d3f972bb146107e9575f80fd5b8063ab02efb714610717578063ad5c46481461072b578063af8b1c6f1461075e575f80fd5b80638da5cb5b146106475780638ebebbb31461067857806395d89b41146106a6578063a457c2d7146106ba578063a84dd4f8146106d9578063a9059cbb146106f8575f80fd5b8063300e0d041161024557806358ff56eb116101ff5780636317c7d0116101da5780636317c7d0146105bf57806370a08231146105e0578063715018a6146106145780637aafd99d14610628575f80fd5b806358ff56eb1461056c5780635cfb534e1461058b5780635f4fd367146105aa575f80fd5b8063300e0d041461047d578063313ce5671461049b578063332b943c146104b65780633522b8fe14610500578063395093511461051f578063539728801461053e575f80fd5b8063168795521161029657806316879552146103bf57806318160ddd146103de578063224c8aa9146103fc57806323b872dd1461041b57806328801cf61461043a5780632cb1586414610468575f80fd5b806306fdde03146102e757806308b99c9514610311578063095ea7b31461033257806313508793146103615780631560113b1461038057806315744cfa146103b7575f80fd5b366102e357005b5f80fd5b3480156102f2575f80fd5b506102fb6109c9565b6040516103089190612cb9565b60405180910390f35b34801561031c575f80fd5b5061033061032b366004612d09565b610a59565b005b34801561033d575f80fd5b5061035161034c366004612d3a565b610b5c565b6040519015158152602001610308565b34801561036c575f80fd5b5061033061037b366004612db6565b610b75565b34801561038b575f80fd5b5060135461039f906001600160401b031681565b6040516001600160401b039091168152602001610308565b610330610d8d565b3480156103ca575f80fd5b506103306103d9366004612e08565b610fcc565b3480156103e9575f80fd5b506002545b604051908152602001610308565b348015610407575f80fd5b506007546103519062010000900460ff1681565b348015610426575f80fd5b50610351610435366004612e35565b611064565b348015610445575f80fd5b50610351610454366004612e6e565b60086020525f908152604090205460ff1681565b348015610473575f80fd5b506103ee600e5481565b348015610488575f80fd5b5060075461035190610100900460ff1681565b3480156104a6575f80fd5b5060405160128152602001610308565b3480156104c1575f80fd5b506011546104e1906001600160501b03811690600160501b900460ff1682565b604080516001600160501b039093168352901515602083015201610308565b34801561050b575f80fd5b5061033061051a366004612e6e565b611087565b34801561052a575f80fd5b50610351610539366004612d3a565b611118565b348015610549575f80fd5b50610351610558366004612e6e565b600c6020525f908152604090205460ff1681565b348015610577575f80fd5b50610330610586366004612e87565b611139565b348015610596575f80fd5b506103306105a5366004612ead565b611254565b3480156105b5575f80fd5b506103ee600f5481565b3480156105ca575f80fd5b5060075461035190640100000000900460ff1681565b3480156105eb575f80fd5b506103ee6105fa366004612e6e565b6001600160a01b03165f9081526020819052604090205490565b34801561061f575f80fd5b50610330611298565b348015610633575f80fd5b5060125461039f906001600160401b031681565b348015610652575f80fd5b506005546001600160a01b03165b6040516001600160a01b039091168152602001610308565b348015610683575f80fd5b50610351610692366004612e6e565b600b6020525f908152604090205460ff1681565b3480156106b1575f80fd5b506102fb61130b565b3480156106c5575f80fd5b506103516106d4366004612d3a565b61131a565b3480156106e4575f80fd5b506103306106f3366004612ec8565b611394565b348015610703575f80fd5b50610351610712366004612d3a565b611468565b348015610722575f80fd5b50610330611475565b348015610736575f80fd5b506106607f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610769575f80fd5b50600d54610660906001600160a01b031681565b348015610788575f80fd5b50610351610797366004612e6e565b600a6020525f908152604090205460ff1681565b3480156107b6575f80fd5b50600554610660906001600160a01b031681565b3480156107d5575f80fd5b506103306107e4366004612f2e565b6114eb565b3480156107f4575f80fd5b50601054610813906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610308565b34801561083e575f80fd5b50600754610351906301000000900460ff1681565b34801561085e575f80fd5b506106607f000000000000000000000000eef3a9a855e0aa2204dd255606022c73fe497ba181565b348015610891575f80fd5b506103ee6108a0366004612d09565b611615565b3480156108b0575f80fd5b5061033061163f565b3480156108c4575f80fd5b5061039f61271081565b3480156108d9575f80fd5b506103306108e8366004612f2e565b6116c3565b3480156108f8575f80fd5b50610330610907366004612e08565b611808565b348015610917575f80fd5b50610330610926366004612e87565b6118a0565b348015610936575f80fd5b50610330610945366004612e6e565b6119ba565b348015610955575f80fd5b506007546103519060ff1681565b34801561096e575f80fd5b50610330611aa4565b348015610982575f80fd5b50610330610991366004612f63565b611b47565b3480156109a1575f80fd5b506106607f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6060600380546109d890612f7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0490612f7a565b8015610a4f5780601f10610a2657610100808354040283529160200191610a4f565b820191905f5260205f20905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b6005546001600160a01b03163314610a8c5760405162461bcd60e51b8152600401610a8390612fb2565b60405180910390fd5b6001600160a01b038216610ae25760405162461bcd60e51b815260206004820152601960248201527f546f6b656e20616464726573732063616e6e6f742062652030000000000000006044820152606401610a83565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610b26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4a9190612fe7565b9050610b57838383611c92565b505050565b5f33610b69818585611ce4565b60019150505b92915050565b6005546001600160a01b03163314610b9f5760405162461bcd60e51b8152600401610a8390612fb2565b5f5b82811015610d8757600b5f858584818110610bbe57610bbe612ffe565b9050602002016020810190610bd39190612e6e565b6001600160a01b0316815260208101919091526040015f205460ff16158015610c5457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316848483818110610c3357610c33612ffe565b9050602002016020810190610c489190612e6e565b6001600160a01b031614155b8015610c8f575030848483818110610c6e57610c6e612ffe565b9050602002016020810190610c839190612e6e565b6001600160a01b031614155b8015610d2c575060085f858584818110610cab57610cab612ffe565b9050602002016020810190610cc09190612e6e565b6001600160a01b0316815260208101919091526040015f205460ff16158015610d2c5750600a5f858584818110610cf957610cf9612ffe565b9050602002016020810190610d0e9190612e6e565b6001600160a01b0316815260208101919091526040015f205460ff16155b15610d7f57610d7f848483818110610d4657610d46612ffe565b9050602002016020810190610d5b9190612e6e565b6001600160a01b03165f908152600c60205260409020805460ff1916841515179055565b600101610ba1565b50505050565b6005546001600160a01b03163314610db75760405162461bcd60e51b8152600401610a8390612fb2565b6007546301000000900460ff1615610e115760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610a83565b305f9081526020819052604090205480610e6d5760405162461bcd60e51b815260206004820152601760248201527f4e6f20746f6b656e7320666f72206c69717569646974790000000000000000006044820152606401610a83565b3480610eb25760405162461bcd60e51b81526020600482015260146024820152734e6f2045544820666f72206c697175696469747960601b6044820152606401610a83565b610edc7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83610b5c565b507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230855f80610f236005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610f89573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610fae9190613012565b50506007805463ff00000019166301000000179055505043600e5550565b6005546001600160a01b03163314610ff65760405162461bcd60e51b8152600401610a8390612fb2565b60408051602080820183526001600160401b038416808352925192835290917f2d16b529cd6f4d8d1af62fe74e0801442778f50967ec8b5994f628052c59c73a910160405180910390a1516012805467ffffffffffffffff19166001600160401b0390921691909117905550565b5f33611071858285611e07565b61107c858585611e79565b506001949350505050565b6005546001600160a01b031633146110b15760405162461bcd60e51b8152600401610a8390612fb2565b6001600160a01b0381166110f65760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610a83565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b5f33610b6981858561112a8383611615565b6111349190613051565b611ce4565b6005546001600160a01b031633146111635760405162461bcd60e51b8152600401610a8390612fb2565b61116f6012600a613144565b6103e861117b60025490565b611186906001613152565b611190919061317d565b61119a919061317d565b816001600160801b031610156111dc5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610a83565b6111e86012600a613144565b6111fb906001600160801b038316613152565b601080546001600160801b03908116600160801b93821684021791829055604051929091041681527f83dc3d57a059ceb1df47b33431f6a1caa310c7a6dde9d2a3688128cf5fafaeb1906020015b60405180910390a150565b6005546001600160a01b0316331461127e5760405162461bcd60e51b8152600401610a8390612fb2565b600780549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146112c25760405162461bcd60e51b8152600401610a8390612fb2565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6060600480546109d890612f7a565b5f33816113278286611615565b9050838110156113875760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a83565b61107c8286868403611ce4565b6005546001600160a01b031633146113be5760405162461bcd60e51b8152600401610a8390612fb2565b8281146114065760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610a83565b5f5b83811015611461576114593386868481811061142657611426612ffe565b905060200201602081019061143b9190612e6e565b85858581811061144d5761144d612ffe565b90506020020135611ffb565b600101611408565b5050505050565b5f33610b69818585611e79565b6005546001600160a01b0316331461149f5760405162461bcd60e51b8152600401610a8390612fb2565b60075460ff166114df5760405162461bcd60e51b815260206004820152600b60248201526a20b63932b0b23c9037b33360a91b6044820152606401610a83565b6007805460ff19169055565b6005546001600160a01b031633146115155760405162461bcd60e51b8152600401610a8390612fb2565b6001600160a01b03821661155a5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610a83565b306001600160a01b038316036115b25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000006044820152606401610a83565b6001600160a01b0382165f81815260086020908152604091829020805460ff19168515159081179091558251938452908301527feb24498d6c39fcfc9fb01dd89ed3548e59070d8976add9a6fb66679bacde0ac091015b60405180910390a15050565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146116695760405162461bcd60e51b8152600401610a8390612fb2565b60075462010000900460ff166116b55760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b6044820152606401610a83565b6007805462ff000019169055565b6005546001600160a01b031633146116ed5760405162461bcd60e51b8152600401610a8390612fb2565b6001600160a01b0382166117325760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610a83565b806117ad577f000000000000000000000000eef3a9a855e0aa2204dd255606022c73fe497ba16001600160a01b0316826001600160a01b0316036117ad5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610a83565b6001600160a01b0382165f818152600a6020908152604091829020805460ff19168515159081179091558251938452908301527f193fdcaca2347020aa08c5310514ba123101c49665f80885d8987cc14d03e94a9101611609565b6005546001600160a01b031633146118325760405162461bcd60e51b8152600401610a8390612fb2565b60408051602080820183526001600160401b038416808352925192835290917f3c4809f929176835fa9b34c2508df8c59f40840a53ca416cd781f6a42afb36a6910160405180910390a1516013805467ffffffffffffffff19166001600160401b0390921691909117905550565b6005546001600160a01b031633146118ca5760405162461bcd60e51b8152600401610a8390612fb2565b6118d66012600a613144565b6103e86118e260025490565b6118ed906001613152565b6118f7919061317d565b611901919061317d565b816001600160801b031610156119435760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610a83565b61194f6012600a613144565b611962906001600160801b038316613152565b601080546fffffffffffffffffffffffffffffffff19166001600160801b039290921691821790556040519081527f24864ad91fa8f2ebe0cd39246d84465fc5e857bf602b3b906a437c3fca8de08690602001611249565b6005546001600160a01b031633146119e45760405162461bcd60e51b8152600401610a8390612fb2565b6001600160a01b038116611a495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a83565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ace5760405162461bcd60e51b8152600401610a8390612fb2565b6007805464ff0000000019169055604080518082019091525f80825260208201525f611af960025490565b6001600160801b03811680845260208401819052600160801b8102176010556040519091507f26505966b58ba4512bca4a7bfb340d0547b55d5365fdc49c79b321bbc2ed779d905f90a15050565b6005546001600160a01b03163314611b715760405162461bcd60e51b8152600401610a8390612fb2565b620186a0611b7e60025490565b611b89906001613152565b611b93919061317d565b811015611c005760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a83565b6103e8611c0c60025490565b611c17906005613152565b611c21919061317d565b811115611c8d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a83565b600f55565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610b5790849061219d565b6001600160a01b038316611d465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a83565b6001600160a01b038216611da75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a83565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611e128484611615565b90505f198114610d875781811015611e6c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a83565b610d878484848403611ce4565b6001600160a01b0383165f908152600c602052604090205460ff1615611eb15760405162461bcd60e51b8152600401610a8390613190565b336001600160a01b0384161480611ed75750335f908152600c602052604090205460ff16155b611ef35760405162461bcd60e51b8152600401610a8390613190565b326001600160a01b0384161480611f0957503233145b80611f235750325f908152600c602052604090205460ff16155b611f3f5760405162461bcd60e51b8152600401610a8390613190565b6001600160a01b0383165f9081526008602052604090205460ff16158015611f7f57506001600160a01b0382165f9081526008602052604090205460ff16155b15611ff4576007546301000000900460ff16611fd25760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610a83565b611fdd83838361226e565b611fe790826131b6565b9050611ff4838383612454565b610b578383835b6001600160a01b03831661205f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a83565b6001600160a01b0382166120c15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a83565b6001600160a01b0383165f90815260208190526040902054818110156121385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a83565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610d87565b5f6121f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127d29092919063ffffffff16565b805190915015610b57578080602001905181019061220f91906131c9565b610b575760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a83565b600f54305f908152602081905260408120549091111580156122a857506001600160a01b0384165f908152600b602052604090205460ff16155b156122b5576122b56127e8565b60075460ff16156122c8576122c8612900565b60408051602080820183525f8083526001600160a01b0387168152600b9091529182205460ff1615612313575060408051602081019091526013546001600160401b0316815261234e565b6001600160a01b0386165f908152600b602052604090205460ff161561234e575060408051602081019091526012546001600160401b031681525b80516001600160401b03161561244257604080518082019091526011546001600160501b0381168252600160501b900460ff16151560208201528151612710906123a1906001600160401b031687613152565b6123ab919061317d565b8251909350633b9aca00906001600160401b03166123c981866131e4565b6123d3919061320f565b6123dd919061320f565b815182906123ec908390613234565b6001600160501b0390811690915282516011805460208601511515600160501b026affffffffffffffffffffff1990911692909316919091179190911790555061244087306001600160801b038616611ffb565b505b506001600160801b0316949350505050565b600754640100000000900460ff161561272b576001600160a01b038281165f908152600a602090815260408083205483835281842054825180840184526010546001600160801b038082168352600160801b90910416818601529589168552600b90935292205460ff9283169391921680156124ce575082155b1561256f5780516001600160801b03168411156125175760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610a83565b60208101516001600160801b031661252f8386613051565b111561256a5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610a83565b61264f565b6001600160a01b0385165f908152600b602052604090205460ff1680156125ae57506001600160a01b0386165f908152600a602052604090205460ff16155b156125f75780516001600160801b031684111561256a5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610a83565b8261264f5760208101516001600160801b03166126148386613051565b111561264f5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610a83565b60075462010000900460ff1615612727577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b0316141580156126d457507f000000000000000000000000eef3a9a855e0aa2204dd255606022c73fe497ba16001600160a01b0316856001600160a01b031614155b1561272757325f9081526009602052604090205443116127275760405162461bcd60e51b815260206004820152600e60248201526d5472616e736665722044656c617960901b6044820152606401610a83565b5050505b600754610100900460ff1615610b57576001600160a01b0382165f908152600b602052604090205460ff16156127ac576001600160a01b0383165f908152600960205260409020544311610b575760405162461bcd60e51b815260206004820152600860248201526720b73a349026a2ab60c11b6044820152606401610a83565b506001600160a01b03165f90815260096020526040808220439081905532835291205550565b60606127e084845f85612981565b949350505050565b305f90815260208190526040812054604080518082019091526011546001600160501b038116808352600160501b90910460ff161515602083015291925090821580612832575080155b1561283c57505050565b600f5461284a906014613152565b83111561286257600f5461285f906014613152565b92505b82156128d15761287183612a58565b475f81156128ce57600d546040516001600160a01b039091169083905f81818185875af1925050503d805f81146128c3576040519150601f19603f3d011682016040523d82523d5f602084013e6128c8565b606091505b50909150505b50505b505f8152601180546020909201511515600160501b026affffffffffffffffffffff1990921691909117905550565b5f600e544361290f91906131b6565b905060018111612927576129245f6064612b74565b50565b6006811161293c576129246109c46064612b74565b600b8111612951576129246107d06064612b74565b60108111612966576129246105dc6064612b74565b6129725f612710612b74565b6007805462ff00ff1916905550565b6060824710156129e25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a83565b5f80866001600160a01b031685876040516129fd919061325b565b5f6040518083038185875af1925050503d805f8114612a37576040519150601f19603f3d011682016040523d82523d5f602084013e612a3c565b606091505b5091509150612a4d87838387612c20565b979650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a8b57612a8b612ffe565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612adf57612adf612ffe565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790612b439085905f90869030904290600401613271565b5f604051808303815f87803b158015612b5a575f80fd5b505af1158015612b6c573d5f803e3d5ffd5b505050505050565b60408051602081019091526001600160401b0383168082526013805467ffffffffffffffff1990811683179091556012805490911690911790556001600160801b03821615610b5757604080518082019091525f80825260208201525f612710846001600160801b0316612be760025490565b612bf19190613152565b612bfb919061317d565b6001600160801b0316808352602090920182905250600160801b810217601055505050565b60608315612c8e5782515f03612c87576001600160a01b0385163b612c875760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a83565b50816127e0565b6127e08383815115612ca35781518083602001fd5b8060405162461bcd60e51b8152600401610a8391905b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114612d04575f80fd5b919050565b5f8060408385031215612d1a575f80fd5b612d2383612cee565b9150612d3160208401612cee565b90509250929050565b5f8060408385031215612d4b575f80fd5b612d5483612cee565b946020939093013593505050565b5f8083601f840112612d72575f80fd5b5081356001600160401b03811115612d88575f80fd5b6020830191508360208260051b8501011115612da2575f80fd5b9250929050565b8015158114612924575f80fd5b5f805f60408486031215612dc8575f80fd5b83356001600160401b03811115612ddd575f80fd5b612de986828701612d62565b9094509250506020840135612dfd81612da9565b809150509250925092565b5f60208284031215612e18575f80fd5b81356001600160401b0381168114612e2e575f80fd5b9392505050565b5f805f60608486031215612e47575f80fd5b612e5084612cee565b9250612e5e60208501612cee565b9150604084013590509250925092565b5f60208284031215612e7e575f80fd5b612e2e82612cee565b5f60208284031215612e97575f80fd5b81356001600160801b0381168114612e2e575f80fd5b5f60208284031215612ebd575f80fd5b8135612e2e81612da9565b5f805f8060408587031215612edb575f80fd5b84356001600160401b0380821115612ef1575f80fd5b612efd88838901612d62565b90965094506020870135915080821115612f15575f80fd5b50612f2287828801612d62565b95989497509550505050565b5f8060408385031215612f3f575f80fd5b612f4883612cee565b91506020830135612f5881612da9565b809150509250929050565b5f60208284031215612f73575f80fd5b5035919050565b600181811c90821680612f8e57607f821691505b602082108103612fac57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215612ff7575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f805f60608486031215613024575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b6f57610b6f61303d565b600181815b8085111561309e57815f19048211156130845761308461303d565b8085161561309157918102915b93841c9390800290613069565b509250929050565b5f826130b457506001610b6f565b816130c057505f610b6f565b81600181146130d657600281146130e0576130fc565b6001915050610b6f565b60ff8411156130f1576130f161303d565b50506001821b610b6f565b5060208310610133831016604e8410600b841016171561311f575081810a610b6f565b6131298383613064565b805f190482111561313c5761313c61303d565b029392505050565b5f612e2e60ff8416836130a6565b8082028115828204841417610b6f57610b6f61303d565b634e487b7160e01b5f52601260045260245ffd5b5f8261318b5761318b613169565b500490565b6020808252600c908201526b189bdd0819195d1958dd195960a21b604082015260600190565b81810381811115610b6f57610b6f61303d565b5f602082840312156131d9575f80fd5b8151612e2e81612da9565b6001600160801b038181168382160280821691908281146132075761320761303d565b505092915050565b5f6001600160801b038084168061322857613228613169565b92169190910492915050565b6001600160501b038181168382160190808211156132545761325461303d565b5092915050565b5f82518060208501845e5f920191825250919050565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156132c15784516001600160a01b03168352938301939183019160010161329c565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208df20528c711e17e8de1cc5697b240786657c2675a9f039a9af593de03032acf64736f6c63430008190033
Deployed Bytecode Sourcemap
28293:15807:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6269:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39482:364;;;;;;;;;;-1:-1:-1;39482:364:0;;;;;:::i;:::-;;:::i;:::-;;8508:202;;;;;;;;;;-1:-1:-1;8508:202:0;;;;;:::i;:::-;;:::i;:::-;;;1304:14:1;;1297:22;1279:41;;1267:2;1252:18;8508:202:0;1139:187:1;43600:493:0;;;;;;;;;;-1:-1:-1;43600:493:0;;;;;:::i;:::-;;:::i;29908:32::-;;;;;;;;;;-1:-1:-1;29908:32:0;;;;-1:-1:-1;;;;;29908:32:0;;;;;;-1:-1:-1;;;;;2559:31:1;;;2541:50;;2529:2;2514:18;29908:32:0;2397:200:1;32583:848:0;;;:::i;35194:259::-;;;;;;;;;;-1:-1:-1;35194:259:0;;;;;:::i;:::-;;:::i;7325:102::-;;;;;;;;;;-1:-1:-1;7409:12:0;;7325:102;;;3037:25:1;;;3025:2;3010:18;7325:102:0;2891:177:1;28397:36:0;;;;;;;;;;-1:-1:-1;28397:36:0;;;;;;;;;;;9256:263;;;;;;;;;;-1:-1:-1;9256:263:0;;;;;:::i;:::-;;:::i;28519:42::-;;;;;;;;;;-1:-1:-1;28519:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28970:27;;;;;;;;;;;;;;;;28363;;;;;;;;;;-1:-1:-1;28363:27:0;;;;;;;;;;;7181:87;;;;;;;;;;-1:-1:-1;7181:87:0;;7260:2;3739:36:1;;3727:2;3712:18;7181:87:0;3597:184:1;29811:35:0;;;;;;;;;;-1:-1:-1;29811:35:0;;;;-1:-1:-1;;;;;29811:35:0;;;-1:-1:-1;;;29811:35:0;;;;;;;;;;-1:-1:-1;;;;;3970:35:1;;;3952:54;;4049:14;;4042:22;4037:2;4022:18;;4015:50;3925:18;29811:35:0;3786:285:1;34990:192:0;;;;;;;;;;-1:-1:-1;34990:192:0;;;;;:::i;:::-;;:::i;9902:239::-;;;;;;;;;;-1:-1:-1;9902:239:0;;;;;:::i;:::-;;:::i;28759:40::-;;;;;;;;;;-1:-1:-1;28759:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33443:357;;;;;;;;;;-1:-1:-1;33443:357:0;;;;;:::i;:::-;;:::i;32471:100::-;;;;;;;;;;-1:-1:-1;32471:100:0;;;;;:::i;:::-;;:::i;29004:24::-;;;;;;;;;;;;;;;;28472:38;;;;;;;;;;-1:-1:-1;28472:38:0;;;;;;;;;;;7482:131;;;;;;;;;;-1:-1:-1;7482:131:0;;;;;:::i;:::-;-1:-1:-1;;;;;7589:18:0;7566:7;7589:18;;;;;;;;;;;;7482:131;18458:138;;;;;;;;;;;;;:::i;29861:40::-;;;;;;;;;;-1:-1:-1;29861:40:0;;;;-1:-1:-1;;;;;29861:40:0;;;18264:73;;;;;;;;;;-1:-1:-1;18325:6:0;;-1:-1:-1;;;;;18325:6:0;18264:73;;;-1:-1:-1;;;;;4792:32:1;;;4774:51;;4762:2;4747:18;18264:73:0;4628:203:1;28699:53:0;;;;;;;;;;-1:-1:-1;28699:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6472:98;;;;;;;;;;;;;:::i;10614:440::-;;;;;;;;;;-1:-1:-1;10614:440:0;;;;;:::i;:::-;;:::i;42145:453::-;;;;;;;;;;-1:-1:-1;42145:453:0;;;;;:::i;:::-;;:::i;7801:194::-;;;;;;;;;;-1:-1:-1;7801:194:0;;;;;:::i;:::-;;:::i;43036:131::-;;;;;;;;;;;;;:::i;28886:29::-;;;;;;;;;;;;;;;28808:28;;;;;;;;;;-1:-1:-1;28808:28:0;;;;-1:-1:-1;;;;;28808:28:0;;;28647:45;;;;;;;;;;-1:-1:-1;28647:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17895:21;;;;;;;;;;-1:-1:-1;17895:21:0;;;;-1:-1:-1;;;;;17895:21:0;;;43208:380;;;;;;;;;;-1:-1:-1;43208:380:0;;;;;:::i;:::-;;:::i;29762:42::-;;;;;;;;;;-1:-1:-1;29762:42:0;;;;-1:-1:-1;;;;;29762:42:0;;;;-1:-1:-1;;;29762:42:0;;;;;;;;;-1:-1:-1;;;;;6179:15:1;;;6161:34;;6231:15;;;;6226:2;6211:18;;6204:43;6081:18;29762:42:0;5934:319:1;28440:25:0;;;;;;;;;;-1:-1:-1;28440:25:0;;;;;;;;;;;28843:36;;;;;;;;;;;;;;;8050:160;;;;;;;;;;-1:-1:-1;8050:160:0;;;;;:::i;:::-;;:::i;36973:153::-;;;;;;;;;;;;;:::i;28924:39::-;;;;;;;;;;;;28958:5;28924:39;;35465:421;;;;;;;;;;-1:-1:-1;35465:421:0;;;;;:::i;:::-;;:::i;39215:255::-;;;;;;;;;;-1:-1:-1;39215:255:0;;;;;:::i;:::-;;:::i;41201:365::-;;;;;;;;;;-1:-1:-1;41201:365:0;;;;;:::i;:::-;;:::i;18602:230::-;;;;;;;;;;-1:-1:-1;18602:230:0;;;;;:::i;:::-;;:::i;28332:24::-;;;;;;;;;;-1:-1:-1;28332:24:0;;;;;;;;36586:375;;;;;;;;;;;;;:::i;42610:414::-;;;;;;;;;;-1:-1:-1;42610:414:0;;;;;:::i;:::-;;:::i;29037:53::-;;;;;;;;;;;;;;;6269:94;6323:13;6352:5;6345:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6269:94;:::o;39482:364::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;39591:34:0;::::1;39583:72;;;::::0;-1:-1:-1;;;39583:72:0;;7626:2:1;39583:72:0::1;::::0;::::1;7608:21:1::0;7665:2;7645:18;;;7638:30;7704:27;7684:18;;;7677:55;7749:18;;39583:72:0::1;7424:349:1::0;39583:72:0::1;39693:53;::::0;-1:-1:-1;;;39693:53:0;;39740:4:::1;39693:53;::::0;::::1;4774:51:1::0;39666:24:0::1;::::0;-1:-1:-1;;;;;39693:38:0;::::1;::::0;::::1;::::0;4747:18:1;;39693:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39666:80;;39757:81;39787:20;39810:9;39821:16;39757:22;:81::i;:::-;39572:274;39482:364:::0;;:::o;8508:202::-;8606:4;810:10;8654:32;810:10;8670:7;8679:6;8654:8;:32::i;:::-;8700:4;8693:11;;;8508:202;;;;;:::o;43600:493::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;43710:9:::1;43705:381;43725:20:::0;;::::1;43705:381;;;43791:21;:35;43813:9;;43823:1;43813:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43791:35:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43791:35:0;;::::1;;43790:36;43789:103:::0;::::1;;;;43873:17;-1:-1:-1::0;;;;;43849:42:0::1;:9;;43859:1;43849:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43849:42:0::1;;;43789:103;:155;;;;-1:-1:-1::0;43938:4:0::1;43914:9:::0;;43924:1;43914:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43914:29:0::1;;;43789:155;:235;;;;;43967:10;:24;43978:9;;43988:1;43978:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43967:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43967:24:0;;::::1;;43966:25;:57:::0;::::1;;;;43996:13;:27;44010:9;;44020:1;44010:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43996:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43996:27:0;;::::1;;43995:28;43966:57;43767:307;;;44040:34;44049:9;;44059:1;44049:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37225:24:0;;;;;:8;:24;;;;;:37;;-1:-1:-1;;37225:37:0;;;;;;;37138:132;44040:34:::1;43747:3;;43705:381;;;;43600:493:::0;;;:::o;32583:848::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;32656:13:::1;::::0;;;::::1;;;32655:14;32647:50;;;::::0;-1:-1:-1;;;32647:50:0;;8301:2:1;32647:50:0::1;::::0;::::1;8283:21:1::0;8340:2;8320:18;;;8313:30;8379:25;8359:18;;;8352:53;8422:18;;32647:50:0::1;8099:347:1::0;32647:50:0::1;32760:4;32710:29;7589:18:::0;;;;;;;;;;;32785:25;32777:61:::1;;;::::0;-1:-1:-1;;;32777:61:0;;8653:2:1;32777:61:0::1;::::0;::::1;8635:21:1::0;8692:2;8672:18;;;8665:30;8731:25;8711:18;;;8704:53;8774:18;;32777:61:0::1;8451:347:1::0;32777:61:0::1;32872:9;32900:14:::0;32892:47:::1;;;::::0;-1:-1:-1;;;32892:47:0;;9005:2:1;32892:47:0::1;::::0;::::1;8987:21:1::0;9044:2;9024:18;;;9017:30;-1:-1:-1;;;9063:18:1;;;9056:50;9123:18;;32892:47:0::1;8803:344:1::0;32892:47:0::1;32952:58;32968:17;32988:21;32952:7;:58::i;:::-;;33060:17;-1:-1:-1::0;;;;;33060:33:0::1;;33101:10;33135:4;33155:21;33191:1;33234::::0;33277:7:::1;18325:6:::0;;-1:-1:-1;;;;;18325:6:0;;18264:73;33277:7:::1;33060:265;::::0;::::1;::::0;;;-1:-1:-1;;;;;;33060:265:0;;;-1:-1:-1;;;;;9511:15:1;;;33060:265:0::1;::::0;::::1;9493:34:1::0;9543:18;;;9536:34;;;;9586:18;;;9579:34;;;;9629:18;;;9622:34;9693:15;;;9672:19;;;9665:44;33299:15:0::1;9725:19:1::0;;;9718:35;9427:19;;33060:265:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;33365:13:0::1;:20:::0;;-1:-1:-1;;33365:20:0::1;::::0;::::1;::::0;;-1:-1:-1;;33411:12:0::1;33396;:27:::0;-1:-1:-1;32583:848:0:o;35194:259::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;35319:36:0;::::1;::::0;;;35371:32;;2541:50:1;;;-1:-1:-1;;35371:32:0::1;::::0;2514:18:1;35371:32:0::1;;;;;;;35414:31:::0;:19:::1;:31:::0;;-1:-1:-1;;35414:31:0::1;-1:-1:-1::0;;;;;35414:31:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;35194:259:0:o;9256:263::-;9373:4;810:10;9423:38;9439:4;810:10;9454:6;9423:15;:38::i;:::-;9468:27;9478:4;9484:2;9488:6;9468:9;:27::i;:::-;-1:-1:-1;9509:4:0;;9256:263;-1:-1:-1;;;;9256:263:0:o;34990:192::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35080:32:0;::::1;35072:57;;;::::0;-1:-1:-1;;;35072:57:0;;10483:2:1;35072:57:0::1;::::0;::::1;10465:21:1::0;10522:2;10502:18;;;10495:30;-1:-1:-1;;;10541:18:1;;;10534:42;10593:18;;35072:57:0::1;10281:336:1::0;35072:57:0::1;35140:13;:34:::0;;-1:-1:-1;;;;;;35140:34:0::1;-1:-1:-1::0;;;;;35140:34:0;;;::::1;::::0;;;::::1;::::0;;34990:192::o;9902:239::-;10005:4;810:10;10053:64;810:10;10069:7;10106:10;10078:25;810:10;10069:7;10078:9;:25::i;:::-;:38;;;;:::i;:::-;10053:8;:64::i;33443:357::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;33592:14:::1;7260:2:::0;33592::::1;:14;:::i;:::-;33583:4;33562:13;7409:12:::0;;;7325:102;33562:13:::1;:17;::::0;33578:1:::1;33562:17;:::i;:::-;33561:26;;;;:::i;:::-;33560:47;;;;:::i;:::-;33543:13;-1:-1:-1::0;;;;;33543:64:0::1;;;33521:121;;;::::0;-1:-1:-1;;;33521:121:0;;12893:2:1;33521:121:0::1;::::0;::::1;12875:21:1::0;12932:1;12912:18;;;12905:29;-1:-1:-1;;;12950:18:1;;;12943:37;12997:18;;33521:121:0::1;12691:330:1::0;33521:121:0::1;33712:14;7260:2:::0;33712::::1;:14;:::i;:::-;33695:32;::::0;-1:-1:-1;;;;;33695:32:0;::::1;;:::i;:::-;33653:13;:75:::0;;-1:-1:-1;;;;;33653:75:0;;::::1;-1:-1:-1::0;;;33653:75:0;;::::1;::::0;::::1;;::::0;;;;33744:48:::1;::::0;33760:31;;;::::1;;13172:66:1::0;;33744:48:0::1;::::0;13160:2:1;13145:18;33744:48:0::1;;;;;;;;33443:357:::0;:::o;32471:100::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;32545:8:::1;:18:::0;;;::::1;;;;-1:-1:-1::0;;32545:18:0;;::::1;::::0;;;::::1;::::0;;32471:100::o;18458:138::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;18545:6:::1;::::0;18524:40:::1;::::0;18561:1:::1;::::0;-1:-1:-1;;;;;18545:6:0::1;::::0;18524:40:::1;::::0;18561:1;;18524:40:::1;18571:6;:19:::0;;-1:-1:-1;;;;;;18571:19:0::1;::::0;;18458:138::o;6472:98::-;6528:13;6557:7;6550:14;;;;;:::i;10614:440::-;10722:4;810:10;10722:4;10797:25;810:10;10814:7;10797:9;:25::i;:::-;10770:52;;10865:15;10845:16;:35;;10829:106;;;;-1:-1:-1;;;10829:106:0;;13451:2:1;10829:106:0;;;13433:21:1;13490:2;13470:18;;;13463:30;13529:34;13509:18;;;13502:62;-1:-1:-1;;;13580:18:1;;;13573:35;13625:19;;10829:106:0;13249:401:1;10829:106:0;10961:60;10970:5;10977:7;11005:15;10986:16;:34;10961:8;:60::i;42145:453::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;42329:49;;::::1;42307:121;;;::::0;-1:-1:-1;;;42307:121:0;;13857:2:1;42307:121:0::1;::::0;::::1;13839:21:1::0;13896:2;13876:18;;;13869:30;-1:-1:-1;;;13915:18:1;;;13908:52;13977:18;;42307:121:0::1;13655:346:1::0;42307:121:0::1;42444:9;42439:152;42459:30:::0;;::::1;42439:152;;;42511:68;42527:10;42539:19;;42559:1;42539:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;42563:12;;42576:1;42563:15;;;;;;;:::i;:::-;;;;;;;42511;:68::i;:::-;42491:3;;42439:152;;;;42145:453:::0;;;;:::o;7801:194::-;7895:4;810:10;7943:28;810:10;7960:2;7964:6;7943:9;:28::i;43036:131::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;43100:12:::1;::::0;::::1;;43092:36;;;::::0;-1:-1:-1;;;43092:36:0;;14208:2:1;43092:36:0::1;::::0;::::1;14190:21:1::0;14247:2;14227:18;;;14220:30;-1:-1:-1;;;14266:18:1;;;14259:41;14317:18;;43092:36:0::1;14006:335:1::0;43092:36:0::1;43139:12;:20:::0;;-1:-1:-1;;43139:20:0::1;::::0;;43036:131::o;43208:380::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43340:28:0;::::1;43332:53;;;::::0;-1:-1:-1;;;43332:53:0;;14548:2:1;43332:53:0::1;::::0;::::1;14530:21:1::0;14587:2;14567:18;;;14560:30;-1:-1:-1;;;14606:18:1;;;14599:42;14658:18;;43332:53:0::1;14346:336:1::0;43332:53:0::1;43430:4;-1:-1:-1::0;;;;;43404:31:0;::::1;::::0;43396:68:::1;;;::::0;-1:-1:-1;;;43396:68:0;;14889:2:1;43396:68:0::1;::::0;::::1;14871:21:1::0;14928:2;14908:18;;;14901:30;14967:26;14947:18;;;14940:54;15011:18;;43396:68:0::1;14687:348:1::0;43396:68:0::1;-1:-1:-1::0;;;;;43475:26:0;::::1;;::::0;;;:10:::1;:26;::::0;;;;;;;;:41;;-1:-1:-1;;43475:41:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43532:48;;15208:51:1;;;15275:18;;;15268:50;43532:48:0::1;::::0;15181:18:1;43532:48:0::1;;;;;;;;43208:380:::0;;:::o;8050:160::-;-1:-1:-1;;;;;8177:18:0;;;8154:7;8177:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8050:160::o;36973:153::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;37043:17:::1;::::0;;;::::1;;;37035:47;;;::::0;-1:-1:-1;;;37035:47:0;;15531:2:1;37035:47:0::1;::::0;::::1;15513:21:1::0;15570:2;15550:18;;;15543:30;-1:-1:-1;;;15589:18:1;;;15582:47;15646:18;;37035:47:0::1;15329:341:1::0;37035:47:0::1;37093:17;:25:::0;;-1:-1:-1;;37093:25:0::1;::::0;;36973:153::o;35465:421::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35596:28:0;::::1;35588:53;;;::::0;-1:-1:-1;;;35588:53:0;;14548:2:1;35588:53:0::1;::::0;::::1;14530:21:1::0;14587:2;14567:18;;;14560:30;-1:-1:-1;;;14606:18:1;;;14599:42;14658:18;;35588:53:0::1;14346:336:1::0;35588:53:0::1;35657:12;35652:106;;35712:11;-1:-1:-1::0;;;;;35694:29:0::1;:14;-1:-1:-1::0;;;;;35694:29:0::1;::::0;35686:60:::1;;;::::0;-1:-1:-1;;;35686:60:0;;15877:2:1;35686:60:0::1;::::0;::::1;15859:21:1::0;15916:2;15896:18;;;15889:30;-1:-1:-1;;;15935:18:1;;;15928:48;15993:18;;35686:60:0::1;15675:342:1::0;35686:60:0::1;-1:-1:-1::0;;;;;35768:29:0;::::1;;::::0;;;:13:::1;:29;::::0;;;;;;;;:44;;-1:-1:-1;;35768:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35828:50;;15208:51:1;;;15275:18;;;15268:50;35828::0::1;::::0;15181:18:1;35828:50:0::1;15040:284:1::0;39215:255:0;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;39341:36:0;::::1;::::0;;;39393:35;;2541:50:1;;;-1:-1:-1;;39393:35:0::1;::::0;2514:18:1;39393:35:0::1;;;;;;;39439:23:::0;:11:::1;:23:::0;;-1:-1:-1;;39439:23:0::1;-1:-1:-1::0;;;;;39439:23:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;39215:255:0:o;41201:365::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;41355:14:::1;7260:2:::0;41355::::1;:14;:::i;:::-;41346:4;41325:13;7409:12:::0;;;7325:102;41325:13:::1;:17;::::0;41341:1:::1;41325:17;:::i;:::-;41324:26;;;;:::i;:::-;41323:47;;;;:::i;:::-;41306:13;-1:-1:-1::0;;;;;41306:64:0::1;;;41284:121;;;::::0;-1:-1:-1;;;41284:121:0;;12893:2:1;41284:121:0::1;::::0;::::1;12875:21:1::0;12932:1;12912:18;;;12905:29;-1:-1:-1;;;12950:18:1;;;12943:37;12997:18;;41284:121:0::1;12691:330:1::0;41284:121:0::1;41474:14;7260:2:::0;41474::::1;:14;:::i;:::-;41457:32;::::0;-1:-1:-1;;;;;41457:32:0;::::1;;:::i;:::-;41416:13;:74:::0;;-1:-1:-1;;41416:74:0::1;-1:-1:-1::0;;;;;41416:74:0;;;::::1;::::0;;::::1;::::0;;41506:52:::1;::::0;13172:66:1;;;41506:52:0::1;::::0;13160:2:1;13145:18;41506:52:0::1;13026:218:1::0;18602:230:0;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18687:22:0;::::1;18679:73;;;::::0;-1:-1:-1;;;18679:73:0;;16224:2:1;18679:73:0::1;::::0;::::1;16206:21:1::0;16263:2;16243:18;;;16236:30;16302:34;16282:18;;;16275:62;-1:-1:-1;;;16353:18:1;;;16346:36;16399:19;;18679:73:0::1;16022:402:1::0;18679:73:0::1;18785:6;::::0;18764:38:::1;::::0;-1:-1:-1;;;;;18764:38:0;;::::1;::::0;18785:6:::1;::::0;18764:38:::1;::::0;18785:6:::1;::::0;18764:38:::1;18809:6;:17:::0;;-1:-1:-1;;;;;;18809:17:0::1;-1:-1:-1::0;;;;;18809:17:0;;;::::1;::::0;;;::::1;::::0;;18602:230::o;36586:375::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;36643:19:::1;:27:::0;;-1:-1:-1;;36643:27:0::1;::::0;;-1:-1:-1;;;;;;;;;36665:5:0::1;-1:-1:-1::0;;;;;;;36734:14:0::1;36751:13;7409:12:::0;;;7325:102;36751:13:::1;-1:-1:-1::0;;;;;36775:48:0;::::1;::::0;;;36834:31:::1;::::0;::::1;:49:::0;;;-1:-1:-1;;;36894:29:0;::::1;;:13;:29:::0;36939:14:::1;::::0;36734:30;;-1:-1:-1;36939:14:0::1;::::0;36775:30:::1;::::0;36939:14:::1;36632:329;;36586:375::o:0;42610:414::-;18379:6;;-1:-1:-1;;;;;18379:6:0;810:10;18379:22;18371:67;;;;-1:-1:-1;;;18371:67:0;;;;;;;:::i;:::-;42745:6:::1;42724:13;7409:12:::0;;;7325:102;42724:13:::1;:17;::::0;42740:1:::1;42724:17;:::i;:::-;42723:28;;;;:::i;:::-;42710:9;:41;;42688:144;;;::::0;-1:-1:-1;;;42688:144:0;;16631:2:1;42688:144:0::1;::::0;::::1;16613:21:1::0;16670:2;16650:18;;;16643:30;16709:34;16689:18;;;16682:62;-1:-1:-1;;;16760:18:1;;;16753:51;16821:19;;42688:144:0::1;16429:417:1::0;42688:144:0::1;42900:4;42879:13;7409:12:::0;;;7325:102;42879:13:::1;:17;::::0;42895:1:::1;42879:17;:::i;:::-;42878:26;;;;:::i;:::-;42865:9;:39;;42843:141;;;::::0;-1:-1:-1;;;42843:141:0;;17053:2:1;42843:141:0::1;::::0;::::1;17035:21:1::0;17092:2;17072:18;;;17065:30;17131:34;17111:18;;;17104:62;-1:-1:-1;;;17182:18:1;;;17175:50;17242:19;;42843:141:0::1;16851:416:1::0;42843:141:0::1;42995:9;:21:::0;42610:414::o;19679:248::-;19850:58;;;-1:-1:-1;;;;;17464:32:1;;19850:58:0;;;17446:51:1;17513:18;;;;17506:34;;;19850:58:0;;;;;;;;;;17419:18:1;;;;19850:58:0;;;;;;;;-1:-1:-1;;;;;19850:58:0;-1:-1:-1;;;19850:58:0;;;19796:123;;19830:5;;19796:19;:123::i;14373:348::-;-1:-1:-1;;;;;14491:19:0;;14483:68;;;;-1:-1:-1;;;14483:68:0;;17753:2:1;14483:68:0;;;17735:21:1;17792:2;17772:18;;;17765:30;17831:34;17811:18;;;17804:62;-1:-1:-1;;;17882:18:1;;;17875:34;17926:19;;14483:68:0;17551:400:1;14483:68:0;-1:-1:-1;;;;;14566:21:0;;14558:68;;;;-1:-1:-1;;;14558:68:0;;18158:2:1;14558:68:0;;;18140:21:1;18197:2;18177:18;;;18170:30;18236:34;18216:18;;;18209:62;-1:-1:-1;;;18287:18:1;;;18280:32;18329:19;;14558:68:0;17956:398:1;14558:68:0;-1:-1:-1;;;;;14635:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14683:32;;3037:25:1;;;14683:32:0;;3010:18:1;14683:32:0;;;;;;;14373:348;;;:::o;14994:399::-;15111:24;15138:25;15148:5;15155:7;15138:9;:25::i;:::-;15111:52;;-1:-1:-1;;15174:16:0;:37;15170:218;;15250:6;15230:16;:26;;15222:68;;;;-1:-1:-1;;;15222:68:0;;18561:2:1;15222:68:0;;;18543:21:1;18600:2;18580:18;;;18573:30;18639:31;18619:18;;;18612:59;18688:18;;15222:68:0;18359:353:1;15222:68:0;15320:51;15329:5;15336:7;15364:6;15345:16;:25;15320:8;:51::i;31711:748::-;-1:-1:-1;;;;;31865:16:0;;;;;;:8;:16;;;;;;;;31864:17;31856:42;;;;-1:-1:-1;;;31856:42:0;;;;;;;:::i;:::-;810:10;-1:-1:-1;;;;;31917:22:0;;;;:49;;-1:-1:-1;810:10:0;31944:22;;;;:8;:22;;;;;;;;31943:23;31917:49;31909:74;;;;-1:-1:-1;;;31909:74:0;;;;;;;:::i;:::-;32016:9;-1:-1:-1;;;;;32016:19:0;;;;:48;;-1:-1:-1;32039:9:0;810:10;32039:25;32016:48;:72;;;-1:-1:-1;32078:9:0;32069:19;;;;:8;:19;;;;;;;;32068:20;32016:72;31994:134;;;;-1:-1:-1;;;31994:134:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32144:18:0;;;;;;:10;:18;;;;;;;;32143:19;:45;;;;-1:-1:-1;;;;;;32167:21:0;;;;;;:10;:21;;;;;;;;32166:22;32143:45;32139:254;;;32213:13;;;;;;;32205:44;;;;-1:-1:-1;;;32205:44:0;;19260:2:1;32205:44:0;;;19242:21:1;19299:2;19279:18;;;19272:30;-1:-1:-1;;;19318:18:1;;;19311:48;19376:18;;32205:44:0;19058:342:1;32205:44:0;32278;32292:6;32300:9;32311:10;32278:13;:44::i;:::-;32264:58;;;;:::i;:::-;;;32337:44;32351:6;32359:9;32370:10;32337:13;:44::i;:::-;32405:46;32421:6;32429:9;32440:10;11494:764;-1:-1:-1;;;;;11607:18:0;;11599:68;;;;-1:-1:-1;;;11599:68:0;;19740:2:1;11599:68:0;;;19722:21:1;19779:2;19759:18;;;19752:30;19818:34;19798:18;;;19791:62;-1:-1:-1;;;19869:18:1;;;19862:35;19914:19;;11599:68:0;19538:401:1;11599:68:0;-1:-1:-1;;;;;11682:16:0;;11674:64;;;;-1:-1:-1;;;11674:64:0;;20146:2:1;11674:64:0;;;20128:21:1;20185:2;20165:18;;;20158:30;20224:34;20204:18;;;20197:62;-1:-1:-1;;;20275:18:1;;;20268:33;20318:19;;11674:64:0;19944:399:1;11674:64:0;-1:-1:-1;;;;;11816:15:0;;11794:19;11816:15;;;;;;;;;;;11846:21;;;;11838:72;;;;-1:-1:-1;;;11838:72:0;;20550:2:1;11838:72:0;;;20532:21:1;20589:2;20569:18;;;20562:30;20628:34;20608:18;;;20601:62;-1:-1:-1;;;20679:18:1;;;20672:36;20725:19;;11838:72:0;20348:402:1;11838:72:0;-1:-1:-1;;;;;11936:15:0;;;:9;:15;;;;;;;;;;;11954:20;;;11936:38;;12136:13;;;;;;;;;;:23;;;;;;12180:26;;3037:25:1;;;12136:13:0;;12180:26;;3010:18:1;12180:26:0;;;;;;;12215:37;39482:364;20228:419;20309:23;20335:106;20377:4;20335:106;;;;;;;;;;;;;;;;;20343:5;-1:-1:-1;;;;;20335:27:0;;;:106;;;;;:::i;:::-;20456:17;;20309:132;;-1:-1:-1;20456:21:0;20452:188;;20531:10;20520:30;;;;;;;;;;;;:::i;:::-;20494:134;;;;-1:-1:-1;;;20494:134:0;;21207:2:1;20494:134:0;;;21189:21:1;21246:2;21226:18;;;21219:30;21285:34;21265:18;;;21258:62;-1:-1:-1;;;21336:18:1;;;21329:40;21386:19;;20494:134:0;21005:406:1;33812:1166:0;33994:9;;33984:4;33942:7;7589:18;;;;;;;;;;;33942:7;;-1:-1:-1;33966:37:0;:71;;;;-1:-1:-1;;;;;;34008:29:0;;;;;;:21;:29;;;;;;;;34007:30;33966:71;33962:122;;;34054:18;:16;:18::i;:::-;34100:12;;;;34096:66;;;34129:21;:19;:21::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;34260:32:0;;;;:21;:32;;;;;;;;;34256:197;;;-1:-1:-1;34309:28:0;;;;;;;;;34326:11;34309:28;-1:-1:-1;;;;;34309:28:0;;;34256:197;;;-1:-1:-1;;;;;34359:29:0;;;;;;:21;:29;;;;;;;;34355:98;;;-1:-1:-1;34405:36:0;;;;;;;;;34422:19;34405:36;-1:-1:-1;;;;;34405:36:0;;;34355:98;34469:23;;-1:-1:-1;;;;;34469:27:0;;34465:477;;34513:54;;;;;;;;;34552:15;34513:54;-1:-1:-1;;;;;34513:54:0;;;;-1:-1:-1;;;34513:54:0;;;;;;;;;;34616:23;;28958:5;;34603:36;;-1:-1:-1;;;;;34603:36:0;:10;:36;:::i;:::-;34602:49;;;;:::i;:::-;34773:23;;34582:70;;-1:-1:-1;34799:3:0;;-1:-1:-1;;;;;34733:63:0;34734:35;34733:63;34582:70;34734:35;:::i;:::-;34733:63;;;;:::i;:::-;:69;;;;:::i;:::-;34667:150;;:16;;:150;;;;;:::i;:::-;-1:-1:-1;;;;;34667:150:0;;;;;;34832:34;;:15;:34;;;;;;;;-1:-1:-1;;;34832:34:0;-1:-1:-1;;34832:34:0;;;;;;;;;;;;;;;;;-1:-1:-1;34881:49:0;34897:6;34913:4;-1:-1:-1;;;;;34881:49:0;;:15;:49::i;:::-;34498:444;34465:477;-1:-1:-1;;;;;;34954:16:0;;33812:1166;-1:-1:-1;;;;33812:1166:0:o;37282:1921::-;37418:19;;;;;;;37414:1386;;;-1:-1:-1;;;;;37482:24:0;;;37454:25;37482:24;;;:13;:24;;;;;;;;;7589:18;;;;;;;37585:62;;;;;;;37634:13;37585:62;-1:-1:-1;;;;;37585:62:0;;;;;-1:-1:-1;;;37585:62:0;;;;;;;;37686:29;;;;;:21;:29;;;;;;37482:24;;;;;7589:18;;37686:29;:54;;;;;37720:20;37719:21;37686:54;37682:765;;;37783:34;;-1:-1:-1;;;;;37769:48:0;;;;37761:68;;;;-1:-1:-1;;;37761:68:0;;22307:2:1;37761:68:0;;;22289:21:1;22346:1;22326:18;;;22319:29;-1:-1:-1;;;22364:18:1;;;22357:37;22411:18;;37761:68:0;22105:330:1;37761:68:0;37913:35;;;;-1:-1:-1;;;;;37878:70:0;:31;37891:18;37878:10;:31;:::i;:::-;:70;;37848:154;;;;-1:-1:-1;;;37848:154:0;;22642:2:1;37848:154:0;;;22624:21:1;22681:2;22661:18;;;22654:30;-1:-1:-1;;;22700:18:1;;;22693:40;22750:18;;37848:154:0;22440:334:1;37848:154:0;37682:765;;;-1:-1:-1;;;;;38062:32:0;;;;;;:21;:32;;;;;;;;:58;;;;-1:-1:-1;;;;;;38099:21:0;;;;;;:13;:21;;;;;;;;38098:22;38062:58;38058:389;;;38163:34;;-1:-1:-1;;;;;38149:48:0;;;;38141:68;;;;-1:-1:-1;;;38141:68:0;;22307:2:1;38141:68:0;;;22289:21:1;22346:1;22326:18;;;22319:29;-1:-1:-1;;;22364:18:1;;;22357:37;22411:18;;38141:68:0;22105:330:1;38058:389:0;38236:20;38231:216;;38342:35;;;;-1:-1:-1;;;;;38307:70:0;:31;38320:18;38307:10;:31;:::i;:::-;:70;;38277:154;;;;-1:-1:-1;;;38277:154:0;;22642:2:1;38277:154:0;;;22624:21:1;22681:2;22661:18;;;22654:30;-1:-1:-1;;;22700:18:1;;;22693:40;22750:18;;38277:154:0;22440:334:1;38277:154:0;38467:17;;;;;;;38463:326;;;38530:17;-1:-1:-1;;;;;38509:39:0;:9;-1:-1:-1;;;;;38509:39:0;;;:76;;;;;38573:11;-1:-1:-1;;;;;38552:33:0;:9;-1:-1:-1;;;;;38552:33:0;;;38509:76;38505:269;;;38663:9;38644:29;;;;:18;:29;;;;;;38676:12;-1:-1:-1;38610:144:0;;;;-1:-1:-1;;;38610:144:0;;22981:2:1;38610:144:0;;;22963:21:1;23020:2;23000:18;;;22993:30;-1:-1:-1;;;23039:18:1;;;23032:44;23093:18;;38610:144:0;22779:338:1;38610:144:0;37439:1361;;;37414:1386;38816:8;;;;;;;38812:384;;;-1:-1:-1;;;;;38845:32:0;;;;;;:21;:32;;;;;;;;38841:344;;;-1:-1:-1;;;;;38928:26:0;;;;;;:18;:26;;;;;;38957:12;-1:-1:-1;38898:123:0;;;;-1:-1:-1;;;38898:123:0;;23324:2:1;38898:123:0;;;23306:21:1;23363:1;23343:18;;;23336:29;-1:-1:-1;;;23381:18:1;;;23374:38;23429:18;;38898:123:0;23122:331:1;38841:344:0;-1:-1:-1;;;;;;39062:29:0;;;;;:18;:29;;;;;;39094:12;39062:44;;;;39144:9;39125:29;;;;:44;-1:-1:-1;37282:1921:0:o;22174:229::-;22311:12;22343:52;22365:6;22373:4;22379:1;22382:12;22343:21;:52::i;:::-;22336:59;22174:229;-1:-1:-1;;;;22174:229:0:o;40277:912::-;40368:4;40324:23;7589:18;;;;;;;;;;;40385:50;;;;;;;;;40420:15;40385:50;-1:-1:-1;;;;;40385:50:0;;;;;-1:-1:-1;;;40385:50:0;;;;;;;;;;;40324;;-1:-1:-1;40385:50:0;40522:20;;;:44;;-1:-1:-1;40546:20:0;;40522:44;40518:83;;;40583:7;;;40277:912::o;40518:83::-;40635:9;;:14;;40647:2;40635:14;:::i;:::-;40617:15;:32;40613:97;;;40684:9;;:14;;40696:2;40684:14;:::i;:::-;40666:32;;40613:97;40726:19;;40722:369;;40762:34;40780:15;40762:17;:34::i;:::-;40923:21;40813:18;40965:14;;40961:119;;41023:13;;:41;;-1:-1:-1;;;;;41023:13:0;;;;41049:10;;41023:41;;;;41049:10;41023:13;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41000:64:0;;-1:-1:-1;;40961:119:0;40747:344;;40722:369;-1:-1:-1;41139:1:0;41103:37;;41151:15;:30;;;;;;;;;-1:-1:-1;;;41151:30:0;-1:-1:-1;;41151:30:0;;;;;;;;;-1:-1:-1;40277:912:0:o;41578:555::-;41629:27;41674:12;;41659;:27;;;;:::i;:::-;41629:57;;41724:1;41701:19;:24;41697:429;;41738:23;41754:1;41757:3;41738:15;:23::i;:::-;41618:515;41578:555::o;41697:429::-;41804:1;41781:19;:24;41777:349;;41818:26;41834:4;41840:3;41818:15;:26::i;41777:349::-;41887:2;41864:19;:25;41860:266;;41902:26;41918:4;41924:3;41902:15;:26::i;41860:266::-;41971:2;41948:19;:25;41944:182;;41986:26;42002:4;42008:3;41986:15;:26::i;41944:182::-;42035:25;42051:1;42054:5;42035:15;:25::i;:::-;42068:12;:20;;-1:-1:-1;;42095:25:0;;;41618:515;41578:555::o;23390:612::-;23560:12;23632:5;23607:21;:30;;23585:118;;;;-1:-1:-1;;;23585:118:0;;23870:2:1;23585:118:0;;;23852:21:1;23909:2;23889:18;;;23882:30;23948:34;23928:18;;;23921:62;-1:-1:-1;;;23999:18:1;;;23992:36;24045:19;;23585:118:0;23668:402:1;23585:118:0;23715:12;23729:23;23756:6;-1:-1:-1;;;;;23756:11:0;23775:5;23796:4;23756:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23714:97;;;;23842:152;23887:6;23912:7;23938:10;23967:12;23842:26;:152::i;:::-;23822:172;23390:612;-1:-1:-1;;;;;;;23390:612:0:o;39858:407::-;39955:16;;;39969:1;39955:16;;;;;;;;39926:26;;39955:16;;;;;;;;;;-1:-1:-1;39955:16:0;39926:45;;40005:4;39982:9;39992:1;39982:12;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;39982:28:0;;;-1:-1:-1;;;;;39982:28:0;;;;;40036:4;40021:9;40031:1;40021:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40021:19:0;;;:12;;;;;;;;;:19;40053:204;;-1:-1:-1;;;40053:204:0;;:17;:68;;;;;;:204;;40136:12;;40163:1;;40179:9;;40211:4;;40231:15;;40053:204;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39915:350;39858:407;:::o;35898:676::-;-1:-1:-1;;;;;;;;;;;;;;36038:37:0;;;;;36086:11;:23;;-1:-1:-1;;36086:23:0;;;;;;;;36120:19;:31;;;;;;;;;;-1:-1:-1;;;;;36168:23:0;;;36164:403;;-1:-1:-1;;;;;;;;;;;;;;;;;36269:20:0;36358:5;36335:19;-1:-1:-1;;;;;36319:35:0;:13;7409:12;;;7325:102;36319:13;:35;;;;:::i;:::-;36318:45;;;;:::i;:::-;-1:-1:-1;;;;;36393:49:0;;;;36457:35;;;;:50;;;-1:-1:-1;;;;36522:33:0;;;:13;:33;35986:588;35898:676;;:::o;26525:644::-;26710:12;26739:7;26735:427;;;26767:10;:17;26788:1;26767:22;26763:290;;-1:-1:-1;;;;;21422:19:0;;;26977:60;;;;-1:-1:-1;;;26977:60:0;;25700:2:1;26977:60:0;;;25682:21:1;25739:2;25719:18;;;25712:30;25778:31;25758:18;;;25751:59;25827:18;;26977:60:0;25498:353:1;26977:60:0;-1:-1:-1;27074:10:0;27067:17;;26735:427;27117:33;27125:10;27137:12;27895:17;;:21;27891:388;;28127:10;28121:17;28184:15;28171:10;28167:2;28163:19;28156:44;27891:388;28254:12;28247:20;;-1:-1:-1;;;28247:20:0;;;;;;;14:418:1;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:173::-;505:20;;-1:-1:-1;;;;;554:31:1;;544:42;;534:70;;600:1;597;590:12;534:70;437:173;;;:::o;615:260::-;683:6;691;744:2;732:9;723:7;719:23;715:32;712:52;;;760:1;757;750:12;712:52;783:29;802:9;783:29;:::i;:::-;773:39;;831:38;865:2;854:9;850:18;831:38;:::i;:::-;821:48;;615:260;;;;;:::o;880:254::-;948:6;956;1009:2;997:9;988:7;984:23;980:32;977:52;;;1025:1;1022;1015:12;977:52;1048:29;1067:9;1048:29;:::i;:::-;1038:39;1124:2;1109:18;;;;1096:32;;-1:-1:-1;;;880:254:1:o;1331:367::-;1394:8;1404:6;1458:3;1451:4;1443:6;1439:17;1435:27;1425:55;;1476:1;1473;1466:12;1425:55;-1:-1:-1;1499:20:1;;-1:-1:-1;;;;;1531:30:1;;1528:50;;;1574:1;1571;1564:12;1528:50;1611:4;1603:6;1599:17;1587:29;;1671:3;1664:4;1654:6;1651:1;1647:14;1639:6;1635:27;1631:38;1628:47;1625:67;;;1688:1;1685;1678:12;1625:67;1331:367;;;;;:::o;1703:118::-;1789:5;1782:13;1775:21;1768:5;1765:32;1755:60;;1811:1;1808;1801:12;1826:566;1918:6;1926;1934;1987:2;1975:9;1966:7;1962:23;1958:32;1955:52;;;2003:1;2000;1993:12;1955:52;2043:9;2030:23;-1:-1:-1;;;;;2068:6:1;2065:30;2062:50;;;2108:1;2105;2098:12;2062:50;2147:70;2209:7;2200:6;2189:9;2185:22;2147:70;:::i;:::-;2236:8;;-1:-1:-1;2121:96:1;-1:-1:-1;;2321:2:1;2306:18;;2293:32;2334:28;2293:32;2334:28;:::i;:::-;2381:5;2371:15;;;1826:566;;;;;:::o;2602:284::-;2660:6;2713:2;2701:9;2692:7;2688:23;2684:32;2681:52;;;2729:1;2726;2719:12;2681:52;2768:9;2755:23;-1:-1:-1;;;;;2811:5:1;2807:30;2800:5;2797:41;2787:69;;2852:1;2849;2842:12;2787:69;2875:5;2602:284;-1:-1:-1;;;2602:284:1:o;3073:328::-;3150:6;3158;3166;3219:2;3207:9;3198:7;3194:23;3190:32;3187:52;;;3235:1;3232;3225:12;3187:52;3258:29;3277:9;3258:29;:::i;:::-;3248:39;;3306:38;3340:2;3329:9;3325:18;3306:38;:::i;:::-;3296:48;;3391:2;3380:9;3376:18;3363:32;3353:42;;3073:328;;;;;:::o;3406:186::-;3465:6;3518:2;3506:9;3497:7;3493:23;3489:32;3486:52;;;3534:1;3531;3524:12;3486:52;3557:29;3576:9;3557:29;:::i;4076:301::-;4135:6;4188:2;4176:9;4167:7;4163:23;4159:32;4156:52;;;4204:1;4201;4194:12;4156:52;4243:9;4230:23;-1:-1:-1;;;;;4286:5:1;4282:46;4275:5;4272:57;4262:85;;4343:1;4340;4333:12;4382:241;4438:6;4491:2;4479:9;4470:7;4466:23;4462:32;4459:52;;;4507:1;4504;4497:12;4459:52;4546:9;4533:23;4565:28;4587:5;4565:28;:::i;4836:773::-;4958:6;4966;4974;4982;5035:2;5023:9;5014:7;5010:23;5006:32;5003:52;;;5051:1;5048;5041:12;5003:52;5091:9;5078:23;-1:-1:-1;;;;;5161:2:1;5153:6;5150:14;5147:34;;;5177:1;5174;5167:12;5147:34;5216:70;5278:7;5269:6;5258:9;5254:22;5216:70;:::i;:::-;5305:8;;-1:-1:-1;5190:96:1;-1:-1:-1;5393:2:1;5378:18;;5365:32;;-1:-1:-1;5409:16:1;;;5406:36;;;5438:1;5435;5428:12;5406:36;;5477:72;5541:7;5530:8;5519:9;5515:24;5477:72;:::i;:::-;4836:773;;;;-1:-1:-1;5568:8:1;-1:-1:-1;;;;4836:773:1:o;5614:315::-;5679:6;5687;5740:2;5728:9;5719:7;5715:23;5711:32;5708:52;;;5756:1;5753;5746:12;5708:52;5779:29;5798:9;5779:29;:::i;:::-;5769:39;;5858:2;5847:9;5843:18;5830:32;5871:28;5893:5;5871:28;:::i;:::-;5918:5;5908:15;;;5614:315;;;;;:::o;6258:180::-;6317:6;6370:2;6358:9;6349:7;6345:23;6341:32;6338:52;;;6386:1;6383;6376:12;6338:52;-1:-1:-1;6409:23:1;;6258:180;-1:-1:-1;6258:180:1:o;6678:380::-;6757:1;6753:12;;;;6800;;;6821:61;;6875:4;6867:6;6863:17;6853:27;;6821:61;6928:2;6920:6;6917:14;6897:18;6894:38;6891:161;;6974:10;6969:3;6965:20;6962:1;6955:31;7009:4;7006:1;6999:15;7037:4;7034:1;7027:15;6891:161;;6678:380;;;:::o;7063:356::-;7265:2;7247:21;;;7284:18;;;7277:30;7343:34;7338:2;7323:18;;7316:62;7410:2;7395:18;;7063:356::o;7778:184::-;7848:6;7901:2;7889:9;7880:7;7876:23;7872:32;7869:52;;;7917:1;7914;7907:12;7869:52;-1:-1:-1;7940:16:1;;7778:184;-1:-1:-1;7778:184:1:o;7967:127::-;8028:10;8023:3;8019:20;8016:1;8009:31;8059:4;8056:1;8049:15;8083:4;8080:1;8073:15;9764:306;9852:6;9860;9868;9921:2;9909:9;9900:7;9896:23;9892:32;9889:52;;;9937:1;9934;9927:12;9889:52;9966:9;9960:16;9950:26;;10016:2;10005:9;10001:18;9995:25;9985:35;;10060:2;10049:9;10045:18;10039:25;10029:35;;9764:306;;;;;:::o;10622:127::-;10683:10;10678:3;10674:20;10671:1;10664:31;10714:4;10711:1;10704:15;10738:4;10735:1;10728:15;10754:125;10819:9;;;10840:10;;;10837:36;;;10853:18;;:::i;10884:416::-;10973:1;11010:5;10973:1;11024:270;11045:7;11035:8;11032:21;11024:270;;;11104:4;11100:1;11096:6;11092:17;11086:4;11083:27;11080:53;;;11113:18;;:::i;:::-;11163:7;11153:8;11149:22;11146:55;;;11183:16;;;;11146:55;11262:22;;;;11222:15;;;;11024:270;;;11028:3;10884:416;;;;;:::o;11305:806::-;11354:5;11384:8;11374:80;;-1:-1:-1;11425:1:1;11439:5;;11374:80;11473:4;11463:76;;-1:-1:-1;11510:1:1;11524:5;;11463:76;11555:4;11573:1;11568:59;;;;11641:1;11636:130;;;;11548:218;;11568:59;11598:1;11589:10;;11612:5;;;11636:130;11673:3;11663:8;11660:17;11657:43;;;11680:18;;:::i;:::-;-1:-1:-1;;11736:1:1;11722:16;;11751:5;;11548:218;;11850:2;11840:8;11837:16;11831:3;11825:4;11822:13;11818:36;11812:2;11802:8;11799:16;11794:2;11788:4;11785:12;11781:35;11778:77;11775:159;;;-1:-1:-1;11887:19:1;;;11919:5;;11775:159;11966:34;11991:8;11985:4;11966:34;:::i;:::-;12036:6;12032:1;12028:6;12024:19;12015:7;12012:32;12009:58;;;12047:18;;:::i;:::-;12085:20;;11305:806;-1:-1:-1;;;11305:806:1:o;12116:140::-;12174:5;12203:47;12244:4;12234:8;12230:19;12224:4;12203:47;:::i;12261:168::-;12334:9;;;12365;;12382:15;;;12376:22;;12362:37;12352:71;;12403:18;;:::i;12434:127::-;12495:10;12490:3;12486:20;12483:1;12476:31;12526:4;12523:1;12516:15;12550:4;12547:1;12540:15;12566:120;12606:1;12632;12622:35;;12637:18;;:::i;:::-;-1:-1:-1;12671:9:1;;12566:120::o;18717:336::-;18919:2;18901:21;;;18958:2;18938:18;;;18931:30;-1:-1:-1;;;18992:2:1;18977:18;;18970:42;19044:2;19029:18;;18717:336::o;19405:128::-;19472:9;;;19493:11;;;19490:37;;;19507:18;;:::i;20755:245::-;20822:6;20875:2;20863:9;20854:7;20850:23;20846:32;20843:52;;;20891:1;20888;20881:12;20843:52;20923:9;20917:16;20942:28;20964:5;20942:28;:::i;21416:274::-;-1:-1:-1;;;;;21554:10:1;;;21566;;;21550:27;21597:20;;;;21488:34;21636:24;;;21626:58;;21664:18;;:::i;:::-;21626:58;;21416:274;;;;:::o;21695:216::-;21735:1;-1:-1:-1;;;;;21822:2:1;21819:1;21815:10;21844:3;21834:37;;21851:18;;:::i;:::-;21889:10;;21885:20;;;;;21695:216;-1:-1:-1;;21695:216:1:o;21916:184::-;-1:-1:-1;;;;;22025:10:1;;;22037;;;22021:27;;22060:11;;;22057:37;;;22074:18;;:::i;:::-;22057:37;21916:184;;;;:::o;24075:301::-;24204:3;24242:6;24236:13;24288:6;24281:4;24273:6;24269:17;24264:3;24258:37;24350:1;24314:16;;24339:13;;;-1:-1:-1;24314:16:1;24075:301;-1:-1:-1;24075:301:1:o;24513:980::-;24775:4;24823:3;24812:9;24808:19;24854:6;24843:9;24836:25;24880:2;24918:6;24913:2;24902:9;24898:18;24891:34;24961:3;24956:2;24945:9;24941:18;24934:31;24985:6;25020;25014:13;25051:6;25043;25036:22;25089:3;25078:9;25074:19;25067:26;;25128:2;25120:6;25116:15;25102:29;;25149:1;25159:195;25173:6;25170:1;25167:13;25159:195;;;25238:13;;-1:-1:-1;;;;;25234:39:1;25222:52;;25329:15;;;;25294:12;;;;25270:1;25188:9;25159:195;;;-1:-1:-1;;;;;;;25410:32:1;;;;25405:2;25390:18;;25383:60;-1:-1:-1;;;25474:3:1;25459:19;25452:35;25371:3;24513:980;-1:-1:-1;;;24513:980:1:o
Swarm Source
ipfs://8df20528c711e17e8de1cc5697b240786657c2675a9f039a9af593de03032acf
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.