Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 43 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 18305204 | 455 days ago | IN | 0 ETH | 0.00014921 | ||||
Approve | 18223389 | 467 days ago | IN | 0 ETH | 0.00045502 | ||||
Approve | 18223295 | 467 days ago | IN | 0 ETH | 0.00039424 | ||||
Approve | 18223217 | 467 days ago | IN | 0 ETH | 0.00039583 | ||||
Approve | 18181097 | 473 days ago | IN | 0 ETH | 0.00024309 | ||||
Approve | 18181097 | 473 days ago | IN | 0 ETH | 0.00041999 | ||||
Approve | 18160468 | 476 days ago | IN | 0 ETH | 0.00034869 | ||||
Transfer | 18157658 | 476 days ago | IN | 0 ETH | 0.00081708 | ||||
Transfer | 18147259 | 478 days ago | IN | 0.13171297 ETH | 0.00020728 | ||||
Approve | 18147246 | 478 days ago | IN | 0 ETH | 0.00044954 | ||||
Approve | 18109705 | 483 days ago | IN | 0 ETH | 0.00042956 | ||||
Approve | 17970066 | 502 days ago | IN | 0 ETH | 0.00106817 | ||||
Approve | 17939973 | 507 days ago | IN | 0 ETH | 0.00080241 | ||||
Approve | 17925628 | 509 days ago | IN | 0 ETH | 0.00093689 | ||||
Approve | 17852323 | 519 days ago | IN | 0 ETH | 0.00055855 | ||||
Approve | 17849384 | 519 days ago | IN | 0 ETH | 0.00129753 | ||||
Transfer | 17765023 | 531 days ago | IN | 0 ETH | 0.00199183 | ||||
Transfer | 17764949 | 531 days ago | IN | 0 ETH | 0.00313427 | ||||
Transfer | 17764944 | 531 days ago | IN | 0 ETH | 0.0033175 | ||||
Transfer | 17764941 | 531 days ago | IN | 0 ETH | 0.00324859 | ||||
Transfer | 17764937 | 531 days ago | IN | 0 ETH | 0.00330396 | ||||
Transfer | 17764933 | 531 days ago | IN | 0 ETH | 0.00348788 | ||||
Transfer | 17764927 | 531 days ago | IN | 0 ETH | 0.00360902 | ||||
Transfer | 17764909 | 531 days ago | IN | 0 ETH | 0.00309664 | ||||
Approve | 17750191 | 533 days ago | IN | 0 ETH | 0.00083351 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
FlipCoin
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-18 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * 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}. * * 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 default value returned by this function, unless * it's 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 {} } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/FlipCoin.sol pragma solidity 0.8.19; contract FlipCoin is ERC20, ERC20Burnable, Ownable { // uint256 price = 0.01 ether; // price of 1 token in ether //events event FundsWithdrawn(address indexed recipient, uint256 amount); event FundsDeposited(address indexed sender, uint256 amount); event TokensBurned(address indexed burner, uint256 amount); event TokensMinted(address indexed minter, uint256 amount); mapping(address => string) private referralCodes; mapping(string => address) private referralCodeToUser; mapping(address => string) private userToReferralCode; mapping(address => uint256) private referralRewards; mapping(address => uint256) private referralRewardsClaimed; mapping(address => uint256) private referralRewardsClaimedTotal; mapping(address => uint256) private referralRewardsClaimedTotalUSD; mapping(address => uint256) private referralRewardsClaimedTotalETH; // Wallet addresses address private marketingWallet; address private teamWallet; address private uniswapLiquidityWallet; address private cexLiquidityWallet; address private rewardsWallet; //wallets address private constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD; address private constant UNISWAP_WALLET = 0x81bb380C73B34a7385B8E2Aee2080f38d35c49Ac; address private constant MARKETING_WALLET = 0x1A200dE668F641C97fF5e4Af5c1608995D9a0Cc1; address private constant CEX_WALLET = 0xfBA41705a99657B9871bCd52e676B9e43E870A7a; address private constant REWARDS_WALLET = 0x5360090AEB43ff0c24E9265D378DE20e6a653B12; address private constant TEAM_WALLET = 0x54582dFB78E7002E15A68AB9E19266124BDdfCCd; //allocations uint256 private marketingAllocation = 50_000_000 * 10 ** 18; uint256 private teamAllocation = 50_000_000 * 10 ** 18; uint256 private uniswapLiquidityAllocation = 100_000_000 * 10 ** 18; uint256 private cexLiquidityAllocation = 100_000_000 * 10 ** 18; uint256 private rewardsAllocation = 50_000_000 * 10 ** 18; uint256 private publicFloat = 650_000_000 * 10 ** 18; uint256 private initialSupply = 1_000_000_000 * 10 ** 18; constructor() ERC20("FlipCoin", "FLP") { //mint allocations _mint(TEAM_WALLET, teamAllocation); _mint(MARKETING_WALLET, marketingAllocation); _mint(REWARDS_WALLET, rewardsAllocation); _mint(UNISWAP_WALLET, uniswapLiquidityAllocation); _mint(CEX_WALLET, cexLiquidityAllocation); _mint(address(this), (initialSupply - teamAllocation - marketingAllocation - rewardsAllocation - uniswapLiquidityAllocation - cexLiquidityAllocation)); // Set initial wallet addresses marketingWallet = MARKETING_WALLET; teamWallet = TEAM_WALLET; uniswapLiquidityWallet = UNISWAP_WALLET; cexLiquidityWallet = CEX_WALLET; rewardsWallet = REWARDS_WALLET; } // function buy() external payable { // require(msg.value > 0, "You must send some ether"); // _mint(msg.sender, msg.value * 10 ** 18 / price); // } function _transfer( address sender, address recipient, uint256 amount ) internal virtual override { uint256 marketingFee = (amount * 2) / 100; uint256 teamFee = (amount * 2) / 100; uint256 burnFee = (amount * 1) / 100; super._transfer(sender, MARKETING_WALLET, marketingFee); super._transfer(sender, TEAM_WALLET, teamFee); super._transfer(sender, BURN_ADDRESS, burnFee); super._transfer( sender, recipient, amount - (marketingFee + teamFee + burnFee) ); } function withdrawFunds( address payable recipient, uint256 amount ) external onlyOwner { require( address(this).balance >= amount, "Insufficient contract balance" ); require(amount > 0, "Amount must be greater than zero"); // Transfer the funds to the recipient (bool success, ) = recipient.call{value: amount}(""); require(success, "Transfer failed"); emit FundsWithdrawn(recipient, amount); } function depositFunds() external payable { require(msg.value > 0, "Amount must be greater than zero"); emit FundsDeposited(msg.sender, msg.value); } function burnTokens(uint256 amount) external onlyOwner { require(balanceOf(msg.sender) >= amount, "Insufficient balance"); require(amount > 0, "Amount must be greater than zero"); _burn(msg.sender, amount); emit TokensBurned(msg.sender, amount); } function mintTokens(uint256 amount) external onlyOwner { require(amount > 0, "Amount must be greater than zero"); _mint(msg.sender, amount); emit TokensMinted(msg.sender, amount); } // Function to set the marketing wallet address function setMarketingWallet(address newWallet) external onlyOwner { marketingWallet = newWallet; } // Function to set the team wallet address function setTeamWallet(address newWallet) external onlyOwner { teamWallet = newWallet; } // Function to set the Uniswap liquidity wallet address function setUniswapLiquidityWallet(address newWallet) external onlyOwner { uniswapLiquidityWallet = newWallet; } // Function to set the CEX liquidity wallet address function setCexLiquidityWallet(address newWallet) external onlyOwner { cexLiquidityWallet = newWallet; } // Function to set the rewards wallet address function setRewardsWallet(address newWallet) external onlyOwner { rewardsWallet = newWallet; } // Function to allocate rewards to a recipient function allocateReferralRewards( string calldata referralCode, uint256 amount ) external onlyOwner { address referredUser = referralCodeToUser[referralCode]; require(referredUser != address(0), "Invalid referral code"); require(amount > 0, "Amount must be greater than zero"); _mint(referredUser, amount); emit TokensMinted(referredUser, amount); } // Function to allow users to claim their rewards function claimRewards() external { uint256 rewards = balanceOf(msg.sender); require(rewards > 0, "No rewards to claim"); _transfer(msg.sender, rewardsWallet, rewards); emit Transfer(msg.sender, rewardsWallet, rewards); } // Function to generate the referral code for a user as an 8 character string function generateReferralCode() internal view returns (string memory) { bytes memory code = new bytes(8); string memory characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; uint256 maxNum = bytes(characters).length; for (uint256 i = 0; i < 8; i++) { code[i] = bytes(characters)[block.timestamp % maxNum]; maxNum--; } return string(code); } // Function to set the referral code for a user function setReferralCode() external { if (bytes(userToReferralCode[msg.sender]).length > 0) { revert("Referral code already set"); } string memory referralCode = generateReferralCode(); while (referralCodeToUser[referralCode] != address(0)) { referralCode = generateReferralCode(); } referralCodeToUser[referralCode] = msg.sender; userToReferralCode[msg.sender] = referralCode; } // Function to get the referral code for a user function getReferralCode( address user ) external view returns (string memory) { return userToReferralCode[user]; } // Array to store the addresses of token holders address[] private _holders; // Mapping to track staked balances for each user mapping(address => uint256) private stakedBalances; // Total staked balance uint256 private totalStakedBalance; // Function to stake tokens function stakeTokens(uint256 amount) external { require(amount > 0, "Amount must be greater than zero"); require(amount <= balanceOf(msg.sender), "Insufficient balance"); // Transfer tokens from sender to contract _transfer(msg.sender, address(this), amount); // Update staked balance for the sender stakedBalances[msg.sender] += amount; // Add the sender to the holders array if not already present if (stakedBalances[msg.sender] == amount) { _holders.push(msg.sender); } // Update total staked balance totalStakedBalance += amount; } // Function to unstake tokens function unstakeTokens(uint256 amount) external { require(amount > 0, "Amount must be greater than zero"); require( amount <= stakedBalances[msg.sender], "Insufficient staked balance" ); // Update staked balance for the sender stakedBalances[msg.sender] -= amount; // Remove the sender from the holders array if their staked balance becomes zero if (stakedBalances[msg.sender] == 0) { _removeHolder(msg.sender); } // Update total staked balance totalStakedBalance -= amount; // Transfer tokens from contract to sender _transfer(address(this), msg.sender, amount); } // Internal function to remove a holder from the holders array function _removeHolder(address holder) internal { for (uint256 i = 0; i < _holders.length; i++) { if (_holders[i] == holder) { if (i != _holders.length - 1) { _holders[i] = _holders[_holders.length - 1]; } _holders.pop(); break; } } } // Mapping to track issued referral codes and rewards balance mapping(address => string) private issuedReferralCodes; mapping(address => uint256) private rewardsBalance; // Function to get a user's issued referral code function getIssuedReferralCode(address user) external view returns (string memory) { return issuedReferralCodes[user]; } // Function to get a user's rewards balance function getRewardsBalance(address user) external view returns (uint256) { return rewardsBalance[user]; } // Mapping to track valid referral codes mapping(string => bool) private validReferralCodes; // Function to validate a referral code function validateReferralCode(string calldata referralCode) external view returns (bool) { return validReferralCodes[referralCode]; } // Function to set the validity of a referral code function setReferralCodeValidity(string calldata referralCode, bool isValid) external onlyOwner { validReferralCodes[referralCode] = isValid; } }
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":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"string","name":"referralCode","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"allocateReferralRewards","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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","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":"depositFunds","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getIssuedReferralCode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReferralCode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getRewardsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintTokens","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setCexLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setReferralCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"referralCode","type":"string"},{"internalType":"bool","name":"isValid","type":"bool"}],"name":"setReferralCodeValidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setRewardsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setUniswapLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"referralCode","type":"string"}],"name":"validateReferralCode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526a295be96e640669720000006013556a295be96e640669720000006014556a52b7d2dcc80cd2e40000006015556a52b7d2dcc80cd2e40000006016556a295be96e640669720000006017556b0219aada9b14535aca0000006018556b033b2e3c9fd0803ce80000006019553480156200007c57600080fd5b506040518060400160405280600881526020017f466c6970436f696e0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f464c5000000000000000000000000000000000000000000000000000000000008152508160039081620000fa9190620008c4565b5080600490816200010c9190620008c4565b5050506200012f620001236200040560201b60201c565b6200040d60201b60201c565b620001577354582dfb78e7002e15a68ab9e19266124bddfccd601454620004d360201b60201c565b6200017f731a200de668f641c97ff5e4af5c1608995d9a0cc1601354620004d360201b60201c565b620001a7735360090aeb43ff0c24e9265d378de20e6a653b12601754620004d360201b60201c565b620001cf7381bb380c73b34a7385b8e2aee2080f38d35c49ac601554620004d360201b60201c565b620001f773fba41705a99657b9871bcd52e676b9e43e870a7a601654620004d360201b60201c565b62000256306016546015546017546013546014546019546200021a9190620009da565b620002269190620009da565b620002329190620009da565b6200023e9190620009da565b6200024a9190620009da565b620004d360201b60201c565b731a200de668f641c97ff5e4af5c1608995d9a0cc1600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507354582dfb78e7002e15a68ab9e19266124bddfccd600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507381bb380c73b34a7385b8e2aee2080f38d35c49ac601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fba41705a99657b9871bcd52e676b9e43e870a7a601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735360090aeb43ff0c24e9265d378de20e6a653b12601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000b01565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000545576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200053c9062000a76565b60405180910390fd5b62000559600083836200064060201b60201c565b80600260008282546200056d919062000a98565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000620919062000ae4565b60405180910390a36200063c600083836200064560201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006cc57607f821691505b602082108103620006e257620006e162000684565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200074c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200070d565b6200075886836200070d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007a56200079f620007998462000770565b6200077a565b62000770565b9050919050565b6000819050919050565b620007c18362000784565b620007d9620007d082620007ac565b8484546200071a565b825550505050565b600090565b620007f0620007e1565b620007fd818484620007b6565b505050565b5b81811015620008255762000819600082620007e6565b60018101905062000803565b5050565b601f82111562000874576200083e81620006e8565b6200084984620006fd565b8101602085101562000859578190505b620008716200086885620006fd565b83018262000802565b50505b505050565b600082821c905092915050565b6000620008996000198460080262000879565b1980831691505092915050565b6000620008b4838362000886565b9150826002028217905092915050565b620008cf826200064a565b67ffffffffffffffff811115620008eb57620008ea62000655565b5b620008f78254620006b3565b6200090482828562000829565b600060209050601f8311600181146200093c576000841562000927578287015190505b620009338582620008a6565b865550620009a3565b601f1984166200094c86620006e8565b60005b8281101562000976578489015182556001820191506020850194506020810190506200094f565b8683101562000996578489015162000992601f89168262000886565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009e78262000770565b9150620009f48362000770565b925082820390508181111562000a0f5762000a0e620009ab565b5b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a5e601f8362000a15565b915062000a6b8262000a26565b602082019050919050565b6000602082019050818103600083015262000a918162000a4f565b9050919050565b600062000aa58262000770565b915062000ab28362000770565b925082820190508082111562000acd5762000acc620009ab565b5b92915050565b62000ade8162000770565b82525050565b600060208201905062000afb600083018462000ad3565b92915050565b613e008062000b116000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063a457c2d7116100a0578063c10753291161006f578063c107532914610773578063dd62ed3e1461079c578063e221106b146107d9578063e2c41dbc14610802578063f2fde38b1461080c57610204565b8063a457c2d714610693578063a59aa2da146106d0578063a9059cbb146106f9578063aa2168451461073657610204565b80638da5cb5b116100e75780638da5cb5b146105ae57806392c40344146105d957806395d89b411461061657806397304ced14610641578063a19804301461066a57610204565b8063715018a6146105085780637547c7a31461051f57806379cc6790146105485780638a67f4bf1461057157610204565b8063372500ab1161019b57806342966c681161016a57806342966c68146104275780635d098b3814610450578063608e4dd0146104795780636d1b229d146104a257806370a08231146104cb57610204565b8063372500ab1461036d57806339509351146103845780633c46d1b0146103c1578063428b45c4146103ea57610204565b806318160ddd116101d757806318160ddd146102b157806323b872dd146102dc57806323bf8da314610319578063313ce5671461034257610204565b806306fdde0314610209578063095ea7b314610234578063144b5480146102715780631525ff7d14610288575b600080fd5b34801561021557600080fd5b5061021e610835565b60405161022b91906128d0565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612990565b6108c7565b60405161026891906129eb565b60405180910390f35b34801561027d57600080fd5b506102866108ea565b005b34801561029457600080fd5b506102af60048036038101906102aa9190612a06565b610ab4565b005b3480156102bd57600080fd5b506102c6610b00565b6040516102d39190612a42565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190612a5d565b610b0a565b60405161031091906129eb565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190612a06565b610b39565b005b34801561034e57600080fd5b50610357610b85565b6040516103649190612acc565b60405180910390f35b34801561037957600080fd5b50610382610b8e565b005b34801561039057600080fd5b506103ab60048036038101906103a69190612990565b610c95565b6040516103b891906129eb565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190612b4c565b610ccc565b005b3480156103f657600080fd5b50610411600480360381019061040c9190612a06565b610e29565b60405161041e91906128d0565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612bac565b610efa565b005b34801561045c57600080fd5b5061047760048036038101906104729190612a06565b610f0e565b005b34801561048557600080fd5b506104a0600480360381019061049b9190612bac565b610f5a565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190612bac565b6110ed565b005b3480156104d757600080fd5b506104f260048036038101906104ed9190612a06565b6111de565b6040516104ff9190612a42565b60405180910390f35b34801561051457600080fd5b5061051d611226565b005b34801561052b57600080fd5b5061054660048036038101906105419190612bac565b61123a565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612990565b6113ef565b005b34801561057d57600080fd5b5061059860048036038101906105939190612a06565b61140f565b6040516105a59190612a42565b60405180910390f35b3480156105ba57600080fd5b506105c3611458565b6040516105d09190612be8565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190612a06565b611482565b60405161060d91906128d0565b60405180910390f35b34801561062257600080fd5b5061062b611553565b60405161063891906128d0565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190612bac565b6115e5565b005b34801561067657600080fd5b50610691600480360381019061068c9190612a06565b61168b565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190612990565b6116d7565b6040516106c791906129eb565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612c2f565b61174e565b005b34801561070557600080fd5b50610720600480360381019061071b9190612990565b611793565b60405161072d91906129eb565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190612c8f565b6117b6565b60405161076a91906129eb565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190612d1a565b6117ee565b005b3480156107a857600080fd5b506107c360048036038101906107be9190612d5a565b61197b565b6040516107d09190612a42565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190612a06565b611a02565b005b61080a611a4e565b005b34801561081857600080fd5b50610833600480360381019061082e9190612a06565b611ae1565b005b60606003805461084490612dc9565b80601f016020809104026020016040519081016040528092919081815260200182805461087090612dc9565b80156108bd5780601f10610892576101008083540402835291602001916108bd565b820191906000526020600020905b8154815290600101906020018083116108a057829003601f168201915b5050505050905090565b6000806108d2611b64565b90506108df818585611b6c565b600191505092915050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805461093690612dc9565b90501115610979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097090612e46565b60405180910390fd5b6000610983611d35565b90505b600073ffffffffffffffffffffffffffffffffffffffff166007826040516109ae9190612ea2565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0757610a00611d35565b9050610986565b33600782604051610a189190612ea2565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209081610ab09190613094565b5050565b610abc611e4e565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b600080610b15611b64565b9050610b22858285611ecc565b610b2d858585611f58565b60019150509392505050565b610b41611e4e565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b6000610b99336111de565b905060008111610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd5906131b2565b60405180910390fd5b610c0b33601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611f58565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c8a9190612a42565b60405180910390a350565b600080610ca0611b64565b9050610cc1818585610cb2858961197b565b610cbc9190613201565b611b6c565b600191505092915050565b610cd4611e4e565b600060078484604051610ce8929190613269565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f906132ce565b60405180910390fd5b60008211610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc29061333a565b60405180910390fd5b610dd5818361202e565b8073ffffffffffffffffffffffffffffffffffffffff167f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a427383604051610e1b9190612a42565b60405180910390a250505050565b6060601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054610e7590612dc9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea190612dc9565b8015610eee5780601f10610ec357610100808354040283529160200191610eee565b820191906000526020600020905b815481529060010190602001808311610ed157829003601f168201915b50505050509050919050565b610f0b610f05611b64565b82612184565b50565b610f16611e4e565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008111610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f949061333a565b60405180910390fd5b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111561101f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611016906133a6565b60405180910390fd5b80601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461106e91906133c6565b925050819055506000601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036110c6576110c533612351565b5b80601c60008282546110d891906133c6565b925050819055506110ea303383611f58565b50565b6110f5611e4e565b806110ff336111de565b1015611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790613446565b60405180910390fd5b60008111611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a9061333a565b60405180910390fd5b61118d3382612184565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb6826040516111d39190612a42565b60405180910390a250565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61122e611e4e565b61123860006124fa565b565b6000811161127d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112749061333a565b60405180910390fd5b611286336111de565b8111156112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90613446565b60405180910390fd5b6112d3333083611f58565b80601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113229190613201565b9250508190555080601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036113d357601a339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80601c60008282546113e59190613201565b9250508190555050565b611401826113fb611b64565b83611ecc565b61140b8282612184565b5050565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080546114ce90612dc9565b80601f01602080910402602001604051908101604052809291908181526020018280546114fa90612dc9565b80156115475780601f1061151c57610100808354040283529160200191611547565b820191906000526020600020905b81548152906001019060200180831161152a57829003601f168201915b50505050509050919050565b60606004805461156290612dc9565b80601f016020809104026020016040519081016040528092919081815260200182805461158e90612dc9565b80156115db5780601f106115b0576101008083540402835291602001916115db565b820191906000526020600020905b8154815290600101906020018083116115be57829003601f168201915b5050505050905090565b6115ed611e4e565b60008111611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116279061333a565b60405180910390fd5b61163a338261202e565b3373ffffffffffffffffffffffffffffffffffffffff167f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273826040516116809190612a42565b60405180910390a250565b611693611e4e565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806116e2611b64565b905060006116f0828661197b565b905083811015611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c906134d8565b60405180910390fd5b6117428286868403611b6c565b60019250505092915050565b611756611e4e565b80601f8484604051611769929190613269565b908152602001604051809103902060006101000a81548160ff021916908315150217905550505050565b60008061179e611b64565b90506117ab818585611f58565b600191505092915050565b6000601f83836040516117ca929190613269565b908152602001604051809103902060009054906101000a900460ff16905092915050565b6117f6611e4e565b80471015611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090613544565b60405180910390fd5b6000811161187c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118739061333a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516118a290613595565b60006040518083038185875af1925050503d80600081146118df576040519150601f19603f3d011682016040523d82523d6000602084013e6118e4565b606091505b5050905080611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906135f6565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8360405161196e9190612a42565b60405180910390a2505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a0a611e4e565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60003411611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a889061333a565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f543ba50a5eec5e6178218e364b1d0f396157b3c8fa278522c2cb7fd99407d47434604051611ad79190612a42565b60405180910390a2565b611ae9611e4e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f90613688565b60405180910390fd5b611b61816124fa565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd29061371a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c41906137ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d289190612a42565b60405180910390a3505050565b60606000600867ffffffffffffffff811115611d5457611d53612eb9565b5b6040519080825280601f01601f191660200182016040528015611d865781602001600182028036833780820191505090505b50905060006040518060600160405280603e8152602001613d8d603e9139905060008151905060005b6008811015611e4457828242611dc591906137fb565b81518110611dd657611dd561382c565b5b602001015160f81c60f81b848281518110611df457611df361382c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611e2e9061385b565b9250508080611e3c90613884565b915050611daf565b5082935050505090565b611e56611b64565b73ffffffffffffffffffffffffffffffffffffffff16611e74611458565b73ffffffffffffffffffffffffffffffffffffffff1614611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190613918565b60405180910390fd5b565b6000611ed8848461197b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f525781811015611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613984565b60405180910390fd5b611f518484848403611b6c565b5b50505050565b60006064600283611f6991906139a4565b611f7391906139e6565b905060006064600284611f8691906139a4565b611f9091906139e6565b905060006064600185611fa391906139a4565b611fad91906139e6565b9050611fce86731a200de668f641c97ff5e4af5c1608995d9a0cc1856125c0565b611fed867354582dfb78e7002e15a68ab9e19266124bddfccd846125c0565b611ffa8661dead836125c0565b612026868683858761200c9190613201565b6120169190613201565b8761202191906133c6565b6125c0565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209490613a63565b60405180910390fd5b6120a960008383612836565b80600260008282546120bb9190613201565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161216c9190612a42565b60405180910390a36121806000838361283b565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea90613af5565b60405180910390fd5b6121ff82600083612836565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c90613b87565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123389190612a42565b60405180910390a361234c8360008461283b565b505050565b60005b601a805490508110156124f6578173ffffffffffffffffffffffffffffffffffffffff16601a828154811061238c5761238b61382c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036124e3576001601a805490506123e491906133c6565b811461249757601a6001601a805490506123fe91906133c6565b8154811061240f5761240e61382c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a828154811061244e5761244d61382c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b601a8054806124a9576124a8613ba7565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556124f6565b80806124ee90613884565b915050612354565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361262f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262690613c48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269590613cda565b60405180910390fd5b6126a9838383612836565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561272f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272690613d6c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161281d9190612a42565b60405180910390a361283084848461283b565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561287a57808201518184015260208101905061285f565b60008484015250505050565b6000601f19601f8301169050919050565b60006128a282612840565b6128ac818561284b565b93506128bc81856020860161285c565b6128c581612886565b840191505092915050565b600060208201905081810360008301526128ea8184612897565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612927826128fc565b9050919050565b6129378161291c565b811461294257600080fd5b50565b6000813590506129548161292e565b92915050565b6000819050919050565b61296d8161295a565b811461297857600080fd5b50565b60008135905061298a81612964565b92915050565b600080604083850312156129a7576129a66128f2565b5b60006129b585828601612945565b92505060206129c68582860161297b565b9150509250929050565b60008115159050919050565b6129e5816129d0565b82525050565b6000602082019050612a0060008301846129dc565b92915050565b600060208284031215612a1c57612a1b6128f2565b5b6000612a2a84828501612945565b91505092915050565b612a3c8161295a565b82525050565b6000602082019050612a576000830184612a33565b92915050565b600080600060608486031215612a7657612a756128f2565b5b6000612a8486828701612945565b9350506020612a9586828701612945565b9250506040612aa68682870161297b565b9150509250925092565b600060ff82169050919050565b612ac681612ab0565b82525050565b6000602082019050612ae16000830184612abd565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612b0c57612b0b612ae7565b5b8235905067ffffffffffffffff811115612b2957612b28612aec565b5b602083019150836001820283011115612b4557612b44612af1565b5b9250929050565b600080600060408486031215612b6557612b646128f2565b5b600084013567ffffffffffffffff811115612b8357612b826128f7565b5b612b8f86828701612af6565b93509350506020612ba28682870161297b565b9150509250925092565b600060208284031215612bc257612bc16128f2565b5b6000612bd08482850161297b565b91505092915050565b612be28161291c565b82525050565b6000602082019050612bfd6000830184612bd9565b92915050565b612c0c816129d0565b8114612c1757600080fd5b50565b600081359050612c2981612c03565b92915050565b600080600060408486031215612c4857612c476128f2565b5b600084013567ffffffffffffffff811115612c6657612c656128f7565b5b612c7286828701612af6565b93509350506020612c8586828701612c1a565b9150509250925092565b60008060208385031215612ca657612ca56128f2565b5b600083013567ffffffffffffffff811115612cc457612cc36128f7565b5b612cd085828601612af6565b92509250509250929050565b6000612ce7826128fc565b9050919050565b612cf781612cdc565b8114612d0257600080fd5b50565b600081359050612d1481612cee565b92915050565b60008060408385031215612d3157612d306128f2565b5b6000612d3f85828601612d05565b9250506020612d508582860161297b565b9150509250929050565b60008060408385031215612d7157612d706128f2565b5b6000612d7f85828601612945565b9250506020612d9085828601612945565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612de157607f821691505b602082108103612df457612df3612d9a565b5b50919050565b7f526566657272616c20636f646520616c72656164792073657400000000000000600082015250565b6000612e3060198361284b565b9150612e3b82612dfa565b602082019050919050565b60006020820190508181036000830152612e5f81612e23565b9050919050565b600081905092915050565b6000612e7c82612840565b612e868185612e66565b9350612e9681856020860161285c565b80840191505092915050565b6000612eae8284612e71565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612f4a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f0d565b612f548683612f0d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612f91612f8c612f878461295a565b612f6c565b61295a565b9050919050565b6000819050919050565b612fab83612f76565b612fbf612fb782612f98565b848454612f1a565b825550505050565b600090565b612fd4612fc7565b612fdf818484612fa2565b505050565b5b8181101561300357612ff8600082612fcc565b600181019050612fe5565b5050565b601f8211156130485761301981612ee8565b61302284612efd565b81016020851015613031578190505b61304561303d85612efd565b830182612fe4565b50505b505050565b600082821c905092915050565b600061306b6000198460080261304d565b1980831691505092915050565b6000613084838361305a565b9150826002028217905092915050565b61309d82612840565b67ffffffffffffffff8111156130b6576130b5612eb9565b5b6130c08254612dc9565b6130cb828285613007565b600060209050601f8311600181146130fe57600084156130ec578287015190505b6130f68582613078565b86555061315e565b601f19841661310c86612ee8565b60005b828110156131345784890151825560018201915060208501945060208101905061310f565b86831015613151578489015161314d601f89168261305a565b8355505b6001600288020188555050505b505050505050565b7f4e6f207265776172647320746f20636c61696d00000000000000000000000000600082015250565b600061319c60138361284b565b91506131a782613166565b602082019050919050565b600060208201905081810360008301526131cb8161318f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061320c8261295a565b91506132178361295a565b925082820190508082111561322f5761322e6131d2565b5b92915050565b82818337600083830152505050565b60006132508385612e66565b935061325d838584613235565b82840190509392505050565b6000613276828486613244565b91508190509392505050565b7f496e76616c696420726566657272616c20636f64650000000000000000000000600082015250565b60006132b860158361284b565b91506132c382613282565b602082019050919050565b600060208201905081810360008301526132e7816132ab565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b600061332460208361284b565b915061332f826132ee565b602082019050919050565b6000602082019050818103600083015261335381613317565b9050919050565b7f496e73756666696369656e74207374616b65642062616c616e63650000000000600082015250565b6000613390601b8361284b565b915061339b8261335a565b602082019050919050565b600060208201905081810360008301526133bf81613383565b9050919050565b60006133d18261295a565b91506133dc8361295a565b92508282039050818111156133f4576133f36131d2565b5b92915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061343060148361284b565b915061343b826133fa565b602082019050919050565b6000602082019050818103600083015261345f81613423565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134c260258361284b565b91506134cd82613466565b604082019050919050565b600060208201905081810360008301526134f1816134b5565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e6365000000600082015250565b600061352e601d8361284b565b9150613539826134f8565b602082019050919050565b6000602082019050818103600083015261355d81613521565b9050919050565b600081905092915050565b50565b600061357f600083613564565b915061358a8261356f565b600082019050919050565b60006135a082613572565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b60006135e0600f8361284b565b91506135eb826135aa565b602082019050919050565b6000602082019050818103600083015261360f816135d3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061367260268361284b565b915061367d82613616565b604082019050919050565b600060208201905081810360008301526136a181613665565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061370460248361284b565b915061370f826136a8565b604082019050919050565b60006020820190508181036000830152613733816136f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061379660228361284b565b91506137a18261373a565b604082019050919050565b600060208201905081810360008301526137c581613789565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138068261295a565b91506138118361295a565b925082613821576138206137cc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006138668261295a565b915060008203613879576138786131d2565b5b600182039050919050565b600061388f8261295a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138c1576138c06131d2565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061390260208361284b565b915061390d826138cc565b602082019050919050565b60006020820190508181036000830152613931816138f5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061396e601d8361284b565b915061397982613938565b602082019050919050565b6000602082019050818103600083015261399d81613961565b9050919050565b60006139af8261295a565b91506139ba8361295a565b92508282026139c88161295a565b915082820484148315176139df576139de6131d2565b5b5092915050565b60006139f18261295a565b91506139fc8361295a565b925082613a0c57613a0b6137cc565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613a4d601f8361284b565b9150613a5882613a17565b602082019050919050565b60006020820190508181036000830152613a7c81613a40565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613adf60218361284b565b9150613aea82613a83565b604082019050919050565b60006020820190508181036000830152613b0e81613ad2565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b7160228361284b565b9150613b7c82613b15565b604082019050919050565b60006020820190508181036000830152613ba081613b64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c3260258361284b565b9150613c3d82613bd6565b604082019050919050565b60006020820190508181036000830152613c6181613c25565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc460238361284b565b9150613ccf82613c68565b604082019050919050565b60006020820190508181036000830152613cf381613cb7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613d5660268361284b565b9150613d6182613cfa565b604082019050919050565b60006020820190508181036000830152613d8581613d49565b905091905056fe6162636465666768696a6b6c6d6e6f707172737475767778797a4142434445464748494a4b4c4d4e4f505152535455565758595a30313233343536373839a26469706673582212204808ded02b12390f42ad9d48cccb295a241dd867734d44ca4baded6804d673f364736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102045760003560e01c8063715018a611610118578063a457c2d7116100a0578063c10753291161006f578063c107532914610773578063dd62ed3e1461079c578063e221106b146107d9578063e2c41dbc14610802578063f2fde38b1461080c57610204565b8063a457c2d714610693578063a59aa2da146106d0578063a9059cbb146106f9578063aa2168451461073657610204565b80638da5cb5b116100e75780638da5cb5b146105ae57806392c40344146105d957806395d89b411461061657806397304ced14610641578063a19804301461066a57610204565b8063715018a6146105085780637547c7a31461051f57806379cc6790146105485780638a67f4bf1461057157610204565b8063372500ab1161019b57806342966c681161016a57806342966c68146104275780635d098b3814610450578063608e4dd0146104795780636d1b229d146104a257806370a08231146104cb57610204565b8063372500ab1461036d57806339509351146103845780633c46d1b0146103c1578063428b45c4146103ea57610204565b806318160ddd116101d757806318160ddd146102b157806323b872dd146102dc57806323bf8da314610319578063313ce5671461034257610204565b806306fdde0314610209578063095ea7b314610234578063144b5480146102715780631525ff7d14610288575b600080fd5b34801561021557600080fd5b5061021e610835565b60405161022b91906128d0565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612990565b6108c7565b60405161026891906129eb565b60405180910390f35b34801561027d57600080fd5b506102866108ea565b005b34801561029457600080fd5b506102af60048036038101906102aa9190612a06565b610ab4565b005b3480156102bd57600080fd5b506102c6610b00565b6040516102d39190612a42565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190612a5d565b610b0a565b60405161031091906129eb565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190612a06565b610b39565b005b34801561034e57600080fd5b50610357610b85565b6040516103649190612acc565b60405180910390f35b34801561037957600080fd5b50610382610b8e565b005b34801561039057600080fd5b506103ab60048036038101906103a69190612990565b610c95565b6040516103b891906129eb565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190612b4c565b610ccc565b005b3480156103f657600080fd5b50610411600480360381019061040c9190612a06565b610e29565b60405161041e91906128d0565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612bac565b610efa565b005b34801561045c57600080fd5b5061047760048036038101906104729190612a06565b610f0e565b005b34801561048557600080fd5b506104a0600480360381019061049b9190612bac565b610f5a565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190612bac565b6110ed565b005b3480156104d757600080fd5b506104f260048036038101906104ed9190612a06565b6111de565b6040516104ff9190612a42565b60405180910390f35b34801561051457600080fd5b5061051d611226565b005b34801561052b57600080fd5b5061054660048036038101906105419190612bac565b61123a565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612990565b6113ef565b005b34801561057d57600080fd5b5061059860048036038101906105939190612a06565b61140f565b6040516105a59190612a42565b60405180910390f35b3480156105ba57600080fd5b506105c3611458565b6040516105d09190612be8565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190612a06565b611482565b60405161060d91906128d0565b60405180910390f35b34801561062257600080fd5b5061062b611553565b60405161063891906128d0565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190612bac565b6115e5565b005b34801561067657600080fd5b50610691600480360381019061068c9190612a06565b61168b565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190612990565b6116d7565b6040516106c791906129eb565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612c2f565b61174e565b005b34801561070557600080fd5b50610720600480360381019061071b9190612990565b611793565b60405161072d91906129eb565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190612c8f565b6117b6565b60405161076a91906129eb565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190612d1a565b6117ee565b005b3480156107a857600080fd5b506107c360048036038101906107be9190612d5a565b61197b565b6040516107d09190612a42565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190612a06565b611a02565b005b61080a611a4e565b005b34801561081857600080fd5b50610833600480360381019061082e9190612a06565b611ae1565b005b60606003805461084490612dc9565b80601f016020809104026020016040519081016040528092919081815260200182805461087090612dc9565b80156108bd5780601f10610892576101008083540402835291602001916108bd565b820191906000526020600020905b8154815290600101906020018083116108a057829003601f168201915b5050505050905090565b6000806108d2611b64565b90506108df818585611b6c565b600191505092915050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805461093690612dc9565b90501115610979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097090612e46565b60405180910390fd5b6000610983611d35565b90505b600073ffffffffffffffffffffffffffffffffffffffff166007826040516109ae9190612ea2565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0757610a00611d35565b9050610986565b33600782604051610a189190612ea2565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209081610ab09190613094565b5050565b610abc611e4e565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b600080610b15611b64565b9050610b22858285611ecc565b610b2d858585611f58565b60019150509392505050565b610b41611e4e565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b6000610b99336111de565b905060008111610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd5906131b2565b60405180910390fd5b610c0b33601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611f58565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c8a9190612a42565b60405180910390a350565b600080610ca0611b64565b9050610cc1818585610cb2858961197b565b610cbc9190613201565b611b6c565b600191505092915050565b610cd4611e4e565b600060078484604051610ce8929190613269565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f906132ce565b60405180910390fd5b60008211610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc29061333a565b60405180910390fd5b610dd5818361202e565b8073ffffffffffffffffffffffffffffffffffffffff167f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a427383604051610e1b9190612a42565b60405180910390a250505050565b6060601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054610e7590612dc9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea190612dc9565b8015610eee5780601f10610ec357610100808354040283529160200191610eee565b820191906000526020600020905b815481529060010190602001808311610ed157829003601f168201915b50505050509050919050565b610f0b610f05611b64565b82612184565b50565b610f16611e4e565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008111610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f949061333a565b60405180910390fd5b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111561101f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611016906133a6565b60405180910390fd5b80601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461106e91906133c6565b925050819055506000601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036110c6576110c533612351565b5b80601c60008282546110d891906133c6565b925050819055506110ea303383611f58565b50565b6110f5611e4e565b806110ff336111de565b1015611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790613446565b60405180910390fd5b60008111611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a9061333a565b60405180910390fd5b61118d3382612184565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb6826040516111d39190612a42565b60405180910390a250565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61122e611e4e565b61123860006124fa565b565b6000811161127d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112749061333a565b60405180910390fd5b611286336111de565b8111156112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90613446565b60405180910390fd5b6112d3333083611f58565b80601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113229190613201565b9250508190555080601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036113d357601a339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80601c60008282546113e59190613201565b9250508190555050565b611401826113fb611b64565b83611ecc565b61140b8282612184565b5050565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080546114ce90612dc9565b80601f01602080910402602001604051908101604052809291908181526020018280546114fa90612dc9565b80156115475780601f1061151c57610100808354040283529160200191611547565b820191906000526020600020905b81548152906001019060200180831161152a57829003601f168201915b50505050509050919050565b60606004805461156290612dc9565b80601f016020809104026020016040519081016040528092919081815260200182805461158e90612dc9565b80156115db5780601f106115b0576101008083540402835291602001916115db565b820191906000526020600020905b8154815290600101906020018083116115be57829003601f168201915b5050505050905090565b6115ed611e4e565b60008111611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116279061333a565b60405180910390fd5b61163a338261202e565b3373ffffffffffffffffffffffffffffffffffffffff167f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273826040516116809190612a42565b60405180910390a250565b611693611e4e565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806116e2611b64565b905060006116f0828661197b565b905083811015611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c906134d8565b60405180910390fd5b6117428286868403611b6c565b60019250505092915050565b611756611e4e565b80601f8484604051611769929190613269565b908152602001604051809103902060006101000a81548160ff021916908315150217905550505050565b60008061179e611b64565b90506117ab818585611f58565b600191505092915050565b6000601f83836040516117ca929190613269565b908152602001604051809103902060009054906101000a900460ff16905092915050565b6117f6611e4e565b80471015611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090613544565b60405180910390fd5b6000811161187c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118739061333a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516118a290613595565b60006040518083038185875af1925050503d80600081146118df576040519150601f19603f3d011682016040523d82523d6000602084013e6118e4565b606091505b5050905080611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906135f6565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8360405161196e9190612a42565b60405180910390a2505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a0a611e4e565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60003411611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a889061333a565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f543ba50a5eec5e6178218e364b1d0f396157b3c8fa278522c2cb7fd99407d47434604051611ad79190612a42565b60405180910390a2565b611ae9611e4e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f90613688565b60405180910390fd5b611b61816124fa565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd29061371a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c41906137ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d289190612a42565b60405180910390a3505050565b60606000600867ffffffffffffffff811115611d5457611d53612eb9565b5b6040519080825280601f01601f191660200182016040528015611d865781602001600182028036833780820191505090505b50905060006040518060600160405280603e8152602001613d8d603e9139905060008151905060005b6008811015611e4457828242611dc591906137fb565b81518110611dd657611dd561382c565b5b602001015160f81c60f81b848281518110611df457611df361382c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611e2e9061385b565b9250508080611e3c90613884565b915050611daf565b5082935050505090565b611e56611b64565b73ffffffffffffffffffffffffffffffffffffffff16611e74611458565b73ffffffffffffffffffffffffffffffffffffffff1614611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190613918565b60405180910390fd5b565b6000611ed8848461197b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f525781811015611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613984565b60405180910390fd5b611f518484848403611b6c565b5b50505050565b60006064600283611f6991906139a4565b611f7391906139e6565b905060006064600284611f8691906139a4565b611f9091906139e6565b905060006064600185611fa391906139a4565b611fad91906139e6565b9050611fce86731a200de668f641c97ff5e4af5c1608995d9a0cc1856125c0565b611fed867354582dfb78e7002e15a68ab9e19266124bddfccd846125c0565b611ffa8661dead836125c0565b612026868683858761200c9190613201565b6120169190613201565b8761202191906133c6565b6125c0565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209490613a63565b60405180910390fd5b6120a960008383612836565b80600260008282546120bb9190613201565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161216c9190612a42565b60405180910390a36121806000838361283b565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea90613af5565b60405180910390fd5b6121ff82600083612836565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c90613b87565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123389190612a42565b60405180910390a361234c8360008461283b565b505050565b60005b601a805490508110156124f6578173ffffffffffffffffffffffffffffffffffffffff16601a828154811061238c5761238b61382c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036124e3576001601a805490506123e491906133c6565b811461249757601a6001601a805490506123fe91906133c6565b8154811061240f5761240e61382c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a828154811061244e5761244d61382c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b601a8054806124a9576124a8613ba7565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556124f6565b80806124ee90613884565b915050612354565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361262f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262690613c48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269590613cda565b60405180910390fd5b6126a9838383612836565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561272f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272690613d6c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161281d9190612a42565b60405180910390a361283084848461283b565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561287a57808201518184015260208101905061285f565b60008484015250505050565b6000601f19601f8301169050919050565b60006128a282612840565b6128ac818561284b565b93506128bc81856020860161285c565b6128c581612886565b840191505092915050565b600060208201905081810360008301526128ea8184612897565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612927826128fc565b9050919050565b6129378161291c565b811461294257600080fd5b50565b6000813590506129548161292e565b92915050565b6000819050919050565b61296d8161295a565b811461297857600080fd5b50565b60008135905061298a81612964565b92915050565b600080604083850312156129a7576129a66128f2565b5b60006129b585828601612945565b92505060206129c68582860161297b565b9150509250929050565b60008115159050919050565b6129e5816129d0565b82525050565b6000602082019050612a0060008301846129dc565b92915050565b600060208284031215612a1c57612a1b6128f2565b5b6000612a2a84828501612945565b91505092915050565b612a3c8161295a565b82525050565b6000602082019050612a576000830184612a33565b92915050565b600080600060608486031215612a7657612a756128f2565b5b6000612a8486828701612945565b9350506020612a9586828701612945565b9250506040612aa68682870161297b565b9150509250925092565b600060ff82169050919050565b612ac681612ab0565b82525050565b6000602082019050612ae16000830184612abd565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612b0c57612b0b612ae7565b5b8235905067ffffffffffffffff811115612b2957612b28612aec565b5b602083019150836001820283011115612b4557612b44612af1565b5b9250929050565b600080600060408486031215612b6557612b646128f2565b5b600084013567ffffffffffffffff811115612b8357612b826128f7565b5b612b8f86828701612af6565b93509350506020612ba28682870161297b565b9150509250925092565b600060208284031215612bc257612bc16128f2565b5b6000612bd08482850161297b565b91505092915050565b612be28161291c565b82525050565b6000602082019050612bfd6000830184612bd9565b92915050565b612c0c816129d0565b8114612c1757600080fd5b50565b600081359050612c2981612c03565b92915050565b600080600060408486031215612c4857612c476128f2565b5b600084013567ffffffffffffffff811115612c6657612c656128f7565b5b612c7286828701612af6565b93509350506020612c8586828701612c1a565b9150509250925092565b60008060208385031215612ca657612ca56128f2565b5b600083013567ffffffffffffffff811115612cc457612cc36128f7565b5b612cd085828601612af6565b92509250509250929050565b6000612ce7826128fc565b9050919050565b612cf781612cdc565b8114612d0257600080fd5b50565b600081359050612d1481612cee565b92915050565b60008060408385031215612d3157612d306128f2565b5b6000612d3f85828601612d05565b9250506020612d508582860161297b565b9150509250929050565b60008060408385031215612d7157612d706128f2565b5b6000612d7f85828601612945565b9250506020612d9085828601612945565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612de157607f821691505b602082108103612df457612df3612d9a565b5b50919050565b7f526566657272616c20636f646520616c72656164792073657400000000000000600082015250565b6000612e3060198361284b565b9150612e3b82612dfa565b602082019050919050565b60006020820190508181036000830152612e5f81612e23565b9050919050565b600081905092915050565b6000612e7c82612840565b612e868185612e66565b9350612e9681856020860161285c565b80840191505092915050565b6000612eae8284612e71565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612f4a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f0d565b612f548683612f0d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612f91612f8c612f878461295a565b612f6c565b61295a565b9050919050565b6000819050919050565b612fab83612f76565b612fbf612fb782612f98565b848454612f1a565b825550505050565b600090565b612fd4612fc7565b612fdf818484612fa2565b505050565b5b8181101561300357612ff8600082612fcc565b600181019050612fe5565b5050565b601f8211156130485761301981612ee8565b61302284612efd565b81016020851015613031578190505b61304561303d85612efd565b830182612fe4565b50505b505050565b600082821c905092915050565b600061306b6000198460080261304d565b1980831691505092915050565b6000613084838361305a565b9150826002028217905092915050565b61309d82612840565b67ffffffffffffffff8111156130b6576130b5612eb9565b5b6130c08254612dc9565b6130cb828285613007565b600060209050601f8311600181146130fe57600084156130ec578287015190505b6130f68582613078565b86555061315e565b601f19841661310c86612ee8565b60005b828110156131345784890151825560018201915060208501945060208101905061310f565b86831015613151578489015161314d601f89168261305a565b8355505b6001600288020188555050505b505050505050565b7f4e6f207265776172647320746f20636c61696d00000000000000000000000000600082015250565b600061319c60138361284b565b91506131a782613166565b602082019050919050565b600060208201905081810360008301526131cb8161318f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061320c8261295a565b91506132178361295a565b925082820190508082111561322f5761322e6131d2565b5b92915050565b82818337600083830152505050565b60006132508385612e66565b935061325d838584613235565b82840190509392505050565b6000613276828486613244565b91508190509392505050565b7f496e76616c696420726566657272616c20636f64650000000000000000000000600082015250565b60006132b860158361284b565b91506132c382613282565b602082019050919050565b600060208201905081810360008301526132e7816132ab565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b600061332460208361284b565b915061332f826132ee565b602082019050919050565b6000602082019050818103600083015261335381613317565b9050919050565b7f496e73756666696369656e74207374616b65642062616c616e63650000000000600082015250565b6000613390601b8361284b565b915061339b8261335a565b602082019050919050565b600060208201905081810360008301526133bf81613383565b9050919050565b60006133d18261295a565b91506133dc8361295a565b92508282039050818111156133f4576133f36131d2565b5b92915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061343060148361284b565b915061343b826133fa565b602082019050919050565b6000602082019050818103600083015261345f81613423565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134c260258361284b565b91506134cd82613466565b604082019050919050565b600060208201905081810360008301526134f1816134b5565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e6365000000600082015250565b600061352e601d8361284b565b9150613539826134f8565b602082019050919050565b6000602082019050818103600083015261355d81613521565b9050919050565b600081905092915050565b50565b600061357f600083613564565b915061358a8261356f565b600082019050919050565b60006135a082613572565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b60006135e0600f8361284b565b91506135eb826135aa565b602082019050919050565b6000602082019050818103600083015261360f816135d3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061367260268361284b565b915061367d82613616565b604082019050919050565b600060208201905081810360008301526136a181613665565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061370460248361284b565b915061370f826136a8565b604082019050919050565b60006020820190508181036000830152613733816136f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061379660228361284b565b91506137a18261373a565b604082019050919050565b600060208201905081810360008301526137c581613789565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138068261295a565b91506138118361295a565b925082613821576138206137cc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006138668261295a565b915060008203613879576138786131d2565b5b600182039050919050565b600061388f8261295a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138c1576138c06131d2565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061390260208361284b565b915061390d826138cc565b602082019050919050565b60006020820190508181036000830152613931816138f5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061396e601d8361284b565b915061397982613938565b602082019050919050565b6000602082019050818103600083015261399d81613961565b9050919050565b60006139af8261295a565b91506139ba8361295a565b92508282026139c88161295a565b915082820484148315176139df576139de6131d2565b5b5092915050565b60006139f18261295a565b91506139fc8361295a565b925082613a0c57613a0b6137cc565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613a4d601f8361284b565b9150613a5882613a17565b602082019050919050565b60006020820190508181036000830152613a7c81613a40565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613adf60218361284b565b9150613aea82613a83565b604082019050919050565b60006020820190508181036000830152613b0e81613ad2565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b7160228361284b565b9150613b7c82613b15565b604082019050919050565b60006020820190508181036000830152613ba081613b64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c3260258361284b565b9150613c3d82613bd6565b604082019050919050565b60006020820190508181036000830152613c6181613c25565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc460238361284b565b9150613ccf82613c68565b604082019050919050565b60006020820190508181036000830152613cf381613cb7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613d5660268361284b565b9150613d6182613cfa565b604082019050919050565b60006020820190508181036000830152613d8581613d49565b905091905056fe6162636465666768696a6b6c6d6e6f707172737475767778797a4142434445464748494a4b4c4d4e4f505152535455565758595a30313233343536373839a26469706673582212204808ded02b12390f42ad9d48cccb295a241dd867734d44ca4baded6804d673f364736f6c63430008130033
Deployed Bytecode Sourcemap
21411:11255:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6507:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8867:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28703:477;;;;;;;;;;;;;:::i;:::-;;26631:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7636:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9648:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26993:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7478:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27823:261;;;;;;;;;;;;;:::i;:::-;;10318:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27338:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31825:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18079:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26463:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30403:725;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25893:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7807:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20532:103;;;;;;;;;;;;;:::i;:::-;;29700:660;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18489:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32016:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19891:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29241:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6726:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26189:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27170:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11059:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32504:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8140:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32293:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25195:511;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8396:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26802:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25714:171;;;:::i;:::-;;20790:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6507:100;6561:13;6594:5;6587:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6507:100;:::o;8867:201::-;8950:4;8967:13;8983:12;:10;:12::i;:::-;8967:28;;9006:32;9015:5;9022:7;9031:6;9006:8;:32::i;:::-;9056:4;9049:11;;;8867:201;;;;:::o;28703:477::-;28801:1;28760:18;:30;28779:10;28760:30;;;;;;;;;;;;;;;28754:44;;;;;:::i;:::-;;;:48;28750:116;;;28819:35;;;;;;;;;;:::i;:::-;;;;;;;;28750:116;28878:26;28907:22;:20;:22::i;:::-;28878:51;;28940:119;28991:1;28947:46;;:18;28966:12;28947:32;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:46;;;28940:119;;29025:22;:20;:22::i;:::-;29010:37;;28940:119;;;29106:10;29071:18;29090:12;29071:32;;;;;;:::i;:::-;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;29160:12;29127:18;:30;29146:10;29127:30;;;;;;;;;;;;;;;:45;;;;;;:::i;:::-;;28739:441;28703:477::o;26631:102::-;19777:13;:11;:13::i;:::-;26716:9:::1;26703:10;;:22;;;;;;;;;;;;;;;;;;26631:102:::0;:::o;7636:108::-;7697:7;7724:12;;7717:19;;7636:108;:::o;9648:261::-;9745:4;9762:15;9780:12;:10;:12::i;:::-;9762:30;;9803:38;9819:4;9825:7;9834:6;9803:15;:38::i;:::-;9852:27;9862:4;9868:2;9872:6;9852:9;:27::i;:::-;9897:4;9890:11;;;9648:261;;;;;:::o;26993:118::-;19777:13;:11;:13::i;:::-;27094:9:::1;27073:18;;:30;;;;;;;;;;;;;;;;;;26993:118:::0;:::o;7478:93::-;7536:5;7561:2;7554:9;;7478:93;:::o;27823:261::-;27867:15;27885:21;27895:10;27885:9;:21::i;:::-;27867:39;;27935:1;27925:7;:11;27917:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;27971:45;27981:10;27993:13;;;;;;;;;;;28008:7;27971:9;:45::i;:::-;28053:13;;;;;;;;;;;28032:44;;28041:10;28032:44;;;28068:7;28032:44;;;;;;:::i;:::-;;;;;;;;27856:228;27823:261::o;10318:238::-;10406:4;10423:13;10439:12;:10;:12::i;:::-;10423:28;;10462:64;10471:5;10478:7;10515:10;10487:25;10497:5;10504:7;10487:9;:25::i;:::-;:38;;;;:::i;:::-;10462:8;:64::i;:::-;10544:4;10537:11;;;10318:238;;;;:::o;27338:422::-;19777:13;:11;:13::i;:::-;27472:20:::1;27495:18;27514:12;;27495:32;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27472:55;;27570:1;27546:26;;:12;:26;;::::0;27538:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27626:1;27617:6;:10;27609:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;27675:27;27681:12;27695:6;27675:5;:27::i;:::-;27731:12;27718:34;;;27745:6;27718:34;;;;;;:::i;:::-;;;;;;;;27461:299;27338:422:::0;;;:::o;31825:134::-;31893:13;31926:19;:25;31946:4;31926:25;;;;;;;;;;;;;;;31919:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31825:134;;;:::o;18079:91::-;18135:27;18141:12;:10;:12::i;:::-;18155:6;18135:5;:27::i;:::-;18079:91;:::o;26463:112::-;19777:13;:11;:13::i;:::-;26558:9:::1;26540:15;;:27;;;;;;;;;;;;;;;;;;26463:112:::0;:::o;30403:725::-;30479:1;30470:6;:10;30462:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;30560:14;:26;30575:10;30560:26;;;;;;;;;;;;;;;;30550:6;:36;;30528:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;30733:6;30703:14;:26;30718:10;30703:26;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;30876:1;30846:14;:26;30861:10;30846:26;;;;;;;;;;;;;;;;:31;30842:89;;30894:25;30908:10;30894:13;:25::i;:::-;30842:89;31005:6;30983:18;;:28;;;;;;;:::i;:::-;;;;;;;;31076:44;31094:4;31101:10;31113:6;31076:9;:44::i;:::-;30403:725;:::o;25893:288::-;19777:13;:11;:13::i;:::-;25992:6:::1;25967:21;25977:10;25967:9;:21::i;:::-;:31;;25959:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26051:1;26042:6;:10;26034:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;26100:25;26106:10;26118:6;26100:5;:25::i;:::-;26154:10;26141:32;;;26166:6;26141:32;;;;;;:::i;:::-;;;;;;;;25893:288:::0;:::o;7807:127::-;7881:7;7908:9;:18;7918:7;7908:18;;;;;;;;;;;;;;;;7901:25;;7807:127;;;:::o;20532:103::-;19777:13;:11;:13::i;:::-;20597:30:::1;20624:1;20597:18;:30::i;:::-;20532:103::o:0;29700:660::-;29774:1;29765:6;:10;29757:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29841:21;29851:10;29841:9;:21::i;:::-;29831:6;:31;;29823:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29952:44;29962:10;29982:4;29989:6;29952:9;:44::i;:::-;30088:6;30058:14;:26;30073:10;30058:26;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;30212:6;30182:14;:26;30197:10;30182:26;;;;;;;;;;;;;;;;:36;30178:94;;30235:8;30249:10;30235:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30178:94;30346:6;30324:18;;:28;;;;;;;:::i;:::-;;;;;;;;29700:660;:::o;18489:164::-;18566:46;18582:7;18591:12;:10;:12::i;:::-;18605:6;18566:15;:46::i;:::-;18623:22;18629:7;18638:6;18623:5;:22::i;:::-;18489:164;;:::o;32016:119::-;32080:7;32107:14;:20;32122:4;32107:20;;;;;;;;;;;;;;;;32100:27;;32016:119;;;:::o;19891:87::-;19937:7;19964:6;;;;;;;;;;;19957:13;;19891:87;:::o;29241:143::-;29319:13;29352:18;:24;29371:4;29352:24;;;;;;;;;;;;;;;29345:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29241:143;;;:::o;6726:104::-;6782:13;6815:7;6808:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6726:104;:::o;26189:213::-;19777:13;:11;:13::i;:::-;26272:1:::1;26263:6;:10;26255:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;26321:25;26327:10;26339:6;26321:5;:25::i;:::-;26375:10;26362:32;;;26387:6;26362:32;;;;;;:::i;:::-;;;;;;;;26189:213:::0;:::o;27170:108::-;19777:13;:11;:13::i;:::-;27261:9:::1;27245:13;;:25;;;;;;;;;;;;;;;;;;27170:108:::0;:::o;11059:436::-;11152:4;11169:13;11185:12;:10;:12::i;:::-;11169:28;;11208:24;11235:25;11245:5;11252:7;11235:9;:25::i;:::-;11208:52;;11299:15;11279:16;:35;;11271:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11392:60;11401:5;11408:7;11436:15;11417:16;:34;11392:8;:60::i;:::-;11483:4;11476:11;;;;11059:436;;;;:::o;32504:157::-;19777:13;:11;:13::i;:::-;32646:7:::1;32611:18;32630:12;;32611:32;;;;;;;:::i;:::-;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;32504:157:::0;;;:::o;8140:193::-;8219:4;8236:13;8252:12;:10;:12::i;:::-;8236:28;;8275;8285:5;8292:2;8296:6;8275:9;:28::i;:::-;8321:4;8314:11;;;8140:193;;;;:::o;32293:147::-;32376:4;32400:18;32419:12;;32400:32;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32393:39;;32293:147;;;;:::o;25195:511::-;19777:13;:11;:13::i;:::-;25363:6:::1;25338:21;:31;;25316:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25454:1;25445:6;:10;25437:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;25552:12;25570:9;:14;;25592:6;25570:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25551:52;;;25622:7;25614:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;25680:9;25665:33;;;25691:6;25665:33;;;;;;:::i;:::-;;;;;;;;25305:401;25195:511:::0;;:::o;8396:151::-;8485:7;8512:11;:18;8524:5;8512:18;;;;;;;;;;;;;;;:27;8531:7;8512:27;;;;;;;;;;;;;;;;8505:34;;8396:151;;;;:::o;26802:126::-;19777:13;:11;:13::i;:::-;26911:9:::1;26886:22;;:34;;;;;;;;;;;;;;;;;;26802:126:::0;:::o;25714:171::-;25786:1;25774:9;:13;25766:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25855:10;25840:37;;;25867:9;25840:37;;;;;;:::i;:::-;;;;;;;;25714:171::o;20790:201::-;19777:13;:11;:13::i;:::-;20899:1:::1;20879:22;;:8;:22;;::::0;20871:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20955:28;20974:8;20955:18;:28::i;:::-;20790:201:::0;:::o;4149:98::-;4202:7;4229:10;4222:17;;4149:98;:::o;15052:346::-;15171:1;15154:19;;:5;:19;;;15146:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15252:1;15233:21;;:7;:21;;;15225:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15336:6;15306:11;:18;15318:5;15306:18;;;;;;;;;;;;;;;:27;15325:7;15306:27;;;;;;;;;;;;;;;:36;;;;15374:7;15358:32;;15367:5;15358:32;;;15383:6;15358:32;;;;;;:::i;:::-;;;;;;;;15052:346;;;:::o;28175:467::-;28230:13;28256:17;28286:1;28276:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28256:32;;28299:37;:104;;;;;;;;;;;;;;;;;;;28414:14;28437:10;28431:24;28414:41;;28473:9;28468:135;28492:1;28488;:5;28468:135;;;28531:10;28561:6;28543:15;:24;;;;:::i;:::-;28525:43;;;;;;;;:::i;:::-;;;;;;;;;;28515:4;28520:1;28515:7;;;;;;;;:::i;:::-;;;;;:53;;;;;;;;;;;28583:8;;;;;:::i;:::-;;;;28495:3;;;;;:::i;:::-;;;;28468:135;;;;28629:4;28615:19;;;;;28175:467;:::o;20056:132::-;20131:12;:10;:12::i;:::-;20120:23;;:7;:5;:7::i;:::-;:23;;;20112:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20056:132::o;15689:419::-;15790:24;15817:25;15827:5;15834:7;15817:9;:25::i;:::-;15790:52;;15877:17;15857:16;:37;15853:248;;15939:6;15919:16;:26;;15911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16023:51;16032:5;16039:7;16067:6;16048:16;:25;16023:8;:51::i;:::-;15853:248;15779:329;15689:419;;;:::o;24584:603::-;24725:20;24763:3;24758:1;24749:6;:10;;;;:::i;:::-;24748:18;;;;:::i;:::-;24725:41;;24777:15;24810:3;24805:1;24796:6;:10;;;;:::i;:::-;24795:18;;;;:::i;:::-;24777:36;;24824:15;24857:3;24852:1;24843:6;:10;;;;:::i;:::-;24842:18;;;;:::i;:::-;24824:36;;24871:55;24887:6;22819:42;24913:12;24871:15;:55::i;:::-;24937:45;24953:6;23112:42;24974:7;24937:15;:45::i;:::-;24993:46;25009:6;22617:42;25031:7;24993:15;:46::i;:::-;25050:129;25080:6;25101:9;25160:7;25150;25135:12;:22;;;;:::i;:::-;:32;;;;:::i;:::-;25125:6;:43;;;;:::i;:::-;25050:15;:129::i;:::-;24714:473;;;24584:603;;;:::o;13058:548::-;13161:1;13142:21;;:7;:21;;;13134:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13212:49;13241:1;13245:7;13254:6;13212:20;:49::i;:::-;13290:6;13274:12;;:22;;;;;;;:::i;:::-;;;;;;;;13467:6;13445:9;:18;13455:7;13445:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;13521:7;13500:37;;13517:1;13500:37;;;13530:6;13500:37;;;;;;:::i;:::-;;;;;;;;13550:48;13578:1;13582:7;13591:6;13550:19;:48::i;:::-;13058:548;;:::o;13939:675::-;14042:1;14023:21;;:7;:21;;;14015:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14095:49;14116:7;14133:1;14137:6;14095:20;:49::i;:::-;14157:22;14182:9;:18;14192:7;14182:18;;;;;;;;;;;;;;;;14157:43;;14237:6;14219:14;:24;;14211:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14356:6;14339:14;:23;14318:9;:18;14328:7;14318:18;;;;;;;;;;;;;;;:44;;;;14473:6;14457:12;;:22;;;;;;;;;;;14534:1;14508:37;;14517:7;14508:37;;;14538:6;14508:37;;;;;;:::i;:::-;;;;;;;;14558:48;14578:7;14595:1;14599:6;14558:19;:48::i;:::-;14004:610;13939:675;;:::o;31204:372::-;31268:9;31263:306;31287:8;:15;;;;31283:1;:19;31263:306;;;31343:6;31328:21;;:8;31337:1;31328:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;31324:234;;31397:1;31379:8;:15;;;;:19;;;;:::i;:::-;31374:1;:24;31370:116;;31437:8;31464:1;31446:8;:15;;;;:19;;;;:::i;:::-;31437:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31423:8;31432:1;31423:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;31370:116;31504:8;:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;31537:5;;31324:234;31304:3;;;;;:::i;:::-;;;;31263:306;;;;31204:372;:::o;21151:191::-;21225:16;21244:6;;;;;;;;;;;21225:25;;21270:8;21261:6;;:17;;;;;;;;;;;;;;;;;;21325:8;21294:40;;21315:8;21294:40;;;;;;;;;;;;21214:128;21151:191;:::o;11965:806::-;12078:1;12062:18;;:4;:18;;;12054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12155:1;12141:16;;:2;:16;;;12133:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12210:38;12231:4;12237:2;12241:6;12210:20;:38::i;:::-;12261:19;12283:9;:15;12293:4;12283:15;;;;;;;;;;;;;;;;12261:37;;12332:6;12317:11;:21;;12309:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12449:6;12435:11;:20;12417:9;:15;12427:4;12417:15;;;;;;;;;;;;;;;:38;;;;12652:6;12635:9;:13;12645:2;12635:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12702:2;12687:26;;12696:4;12687:26;;;12706:6;12687:26;;;;;;:::i;:::-;;;;;;;;12726:37;12746:4;12752:2;12756:6;12726:19;:37::i;:::-;12043:728;11965:806;;;:::o;16708:91::-;;;;:::o;17403:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:117::-;5297:1;5294;5287:12;5311:117;5420:1;5417;5410:12;5434:117;5543:1;5540;5533:12;5571:553;5629:8;5639:6;5689:3;5682:4;5674:6;5670:17;5666:27;5656:122;;5697:79;;:::i;:::-;5656:122;5810:6;5797:20;5787:30;;5840:18;5832:6;5829:30;5826:117;;;5862:79;;:::i;:::-;5826:117;5976:4;5968:6;5964:17;5952:29;;6030:3;6022:4;6014:6;6010:17;6000:8;5996:32;5993:41;5990:128;;;6037:79;;:::i;:::-;5990:128;5571:553;;;;;:::o;6130:674::-;6210:6;6218;6226;6275:2;6263:9;6254:7;6250:23;6246:32;6243:119;;;6281:79;;:::i;:::-;6243:119;6429:1;6418:9;6414:17;6401:31;6459:18;6451:6;6448:30;6445:117;;;6481:79;;:::i;:::-;6445:117;6594:65;6651:7;6642:6;6631:9;6627:22;6594:65;:::i;:::-;6576:83;;;;6372:297;6708:2;6734:53;6779:7;6770:6;6759:9;6755:22;6734:53;:::i;:::-;6724:63;;6679:118;6130:674;;;;;:::o;6810:329::-;6869:6;6918:2;6906:9;6897:7;6893:23;6889:32;6886:119;;;6924:79;;:::i;:::-;6886:119;7044:1;7069:53;7114:7;7105:6;7094:9;7090:22;7069:53;:::i;:::-;7059:63;;7015:117;6810:329;;;;:::o;7145:118::-;7232:24;7250:5;7232:24;:::i;:::-;7227:3;7220:37;7145:118;;:::o;7269:222::-;7362:4;7400:2;7389:9;7385:18;7377:26;;7413:71;7481:1;7470:9;7466:17;7457:6;7413:71;:::i;:::-;7269:222;;;;:::o;7497:116::-;7567:21;7582:5;7567:21;:::i;:::-;7560:5;7557:32;7547:60;;7603:1;7600;7593:12;7547:60;7497:116;:::o;7619:133::-;7662:5;7700:6;7687:20;7678:29;;7716:30;7740:5;7716:30;:::i;:::-;7619:133;;;;:::o;7758:668::-;7835:6;7843;7851;7900:2;7888:9;7879:7;7875:23;7871:32;7868:119;;;7906:79;;:::i;:::-;7868:119;8054:1;8043:9;8039:17;8026:31;8084:18;8076:6;8073:30;8070:117;;;8106:79;;:::i;:::-;8070:117;8219:65;8276:7;8267:6;8256:9;8252:22;8219:65;:::i;:::-;8201:83;;;;7997:297;8333:2;8359:50;8401:7;8392:6;8381:9;8377:22;8359:50;:::i;:::-;8349:60;;8304:115;7758:668;;;;;:::o;8432:529::-;8503:6;8511;8560:2;8548:9;8539:7;8535:23;8531:32;8528:119;;;8566:79;;:::i;:::-;8528:119;8714:1;8703:9;8699:17;8686:31;8744:18;8736:6;8733:30;8730:117;;;8766:79;;:::i;:::-;8730:117;8879:65;8936:7;8927:6;8916:9;8912:22;8879:65;:::i;:::-;8861:83;;;;8657:297;8432:529;;;;;:::o;8967:104::-;9012:7;9041:24;9059:5;9041:24;:::i;:::-;9030:35;;8967:104;;;:::o;9077:138::-;9158:32;9184:5;9158:32;:::i;:::-;9151:5;9148:43;9138:71;;9205:1;9202;9195:12;9138:71;9077:138;:::o;9221:155::-;9275:5;9313:6;9300:20;9291:29;;9329:41;9364:5;9329:41;:::i;:::-;9221:155;;;;:::o;9382:490::-;9458:6;9466;9515:2;9503:9;9494:7;9490:23;9486:32;9483:119;;;9521:79;;:::i;:::-;9483:119;9641:1;9666:61;9719:7;9710:6;9699:9;9695:22;9666:61;:::i;:::-;9656:71;;9612:125;9776:2;9802:53;9847:7;9838:6;9827:9;9823:22;9802:53;:::i;:::-;9792:63;;9747:118;9382:490;;;;;:::o;9878:474::-;9946:6;9954;10003:2;9991:9;9982:7;9978:23;9974:32;9971:119;;;10009:79;;:::i;:::-;9971:119;10129:1;10154:53;10199:7;10190:6;10179:9;10175:22;10154:53;:::i;:::-;10144:63;;10100:117;10256:2;10282:53;10327:7;10318:6;10307:9;10303:22;10282:53;:::i;:::-;10272:63;;10227:118;9878:474;;;;;:::o;10358:180::-;10406:77;10403:1;10396:88;10503:4;10500:1;10493:15;10527:4;10524:1;10517:15;10544:320;10588:6;10625:1;10619:4;10615:12;10605:22;;10672:1;10666:4;10662:12;10693:18;10683:81;;10749:4;10741:6;10737:17;10727:27;;10683:81;10811:2;10803:6;10800:14;10780:18;10777:38;10774:84;;10830:18;;:::i;:::-;10774:84;10595:269;10544:320;;;:::o;10870:175::-;11010:27;11006:1;10998:6;10994:14;10987:51;10870:175;:::o;11051:366::-;11193:3;11214:67;11278:2;11273:3;11214:67;:::i;:::-;11207:74;;11290:93;11379:3;11290:93;:::i;:::-;11408:2;11403:3;11399:12;11392:19;;11051:366;;;:::o;11423:419::-;11589:4;11627:2;11616:9;11612:18;11604:26;;11676:9;11670:4;11666:20;11662:1;11651:9;11647:17;11640:47;11704:131;11830:4;11704:131;:::i;:::-;11696:139;;11423:419;;;:::o;11848:148::-;11950:11;11987:3;11972:18;;11848:148;;;;:::o;12002:390::-;12108:3;12136:39;12169:5;12136:39;:::i;:::-;12191:89;12273:6;12268:3;12191:89;:::i;:::-;12184:96;;12289:65;12347:6;12342:3;12335:4;12328:5;12324:16;12289:65;:::i;:::-;12379:6;12374:3;12370:16;12363:23;;12112:280;12002:390;;;;:::o;12398:275::-;12530:3;12552:95;12643:3;12634:6;12552:95;:::i;:::-;12545:102;;12664:3;12657:10;;12398:275;;;;:::o;12679:180::-;12727:77;12724:1;12717:88;12824:4;12821:1;12814:15;12848:4;12845:1;12838:15;12865:141;12914:4;12937:3;12929:11;;12960:3;12957:1;12950:14;12994:4;12991:1;12981:18;12973:26;;12865:141;;;:::o;13012:93::-;13049:6;13096:2;13091;13084:5;13080:14;13076:23;13066:33;;13012:93;;;:::o;13111:107::-;13155:8;13205:5;13199:4;13195:16;13174:37;;13111:107;;;;:::o;13224:393::-;13293:6;13343:1;13331:10;13327:18;13366:97;13396:66;13385:9;13366:97;:::i;:::-;13484:39;13514:8;13503:9;13484:39;:::i;:::-;13472:51;;13556:4;13552:9;13545:5;13541:21;13532:30;;13605:4;13595:8;13591:19;13584:5;13581:30;13571:40;;13300:317;;13224:393;;;;;:::o;13623:60::-;13651:3;13672:5;13665:12;;13623:60;;;:::o;13689:142::-;13739:9;13772:53;13790:34;13799:24;13817:5;13799:24;:::i;:::-;13790:34;:::i;:::-;13772:53;:::i;:::-;13759:66;;13689:142;;;:::o;13837:75::-;13880:3;13901:5;13894:12;;13837:75;;;:::o;13918:269::-;14028:39;14059:7;14028:39;:::i;:::-;14089:91;14138:41;14162:16;14138:41;:::i;:::-;14130:6;14123:4;14117:11;14089:91;:::i;:::-;14083:4;14076:105;13994:193;13918:269;;;:::o;14193:73::-;14238:3;14193:73;:::o;14272:189::-;14349:32;;:::i;:::-;14390:65;14448:6;14440;14434:4;14390:65;:::i;:::-;14325:136;14272:189;;:::o;14467:186::-;14527:120;14544:3;14537:5;14534:14;14527:120;;;14598:39;14635:1;14628:5;14598:39;:::i;:::-;14571:1;14564:5;14560:13;14551:22;;14527:120;;;14467:186;;:::o;14659:543::-;14760:2;14755:3;14752:11;14749:446;;;14794:38;14826:5;14794:38;:::i;:::-;14878:29;14896:10;14878:29;:::i;:::-;14868:8;14864:44;15061:2;15049:10;15046:18;15043:49;;;15082:8;15067:23;;15043:49;15105:80;15161:22;15179:3;15161:22;:::i;:::-;15151:8;15147:37;15134:11;15105:80;:::i;:::-;14764:431;;14749:446;14659:543;;;:::o;15208:117::-;15262:8;15312:5;15306:4;15302:16;15281:37;;15208:117;;;;:::o;15331:169::-;15375:6;15408:51;15456:1;15452:6;15444:5;15441:1;15437:13;15408:51;:::i;:::-;15404:56;15489:4;15483;15479:15;15469:25;;15382:118;15331:169;;;;:::o;15505:295::-;15581:4;15727:29;15752:3;15746:4;15727:29;:::i;:::-;15719:37;;15789:3;15786:1;15782:11;15776:4;15773:21;15765:29;;15505:295;;;;:::o;15805:1395::-;15922:37;15955:3;15922:37;:::i;:::-;16024:18;16016:6;16013:30;16010:56;;;16046:18;;:::i;:::-;16010:56;16090:38;16122:4;16116:11;16090:38;:::i;:::-;16175:67;16235:6;16227;16221:4;16175:67;:::i;:::-;16269:1;16293:4;16280:17;;16325:2;16317:6;16314:14;16342:1;16337:618;;;;16999:1;17016:6;17013:77;;;17065:9;17060:3;17056:19;17050:26;17041:35;;17013:77;17116:67;17176:6;17169:5;17116:67;:::i;:::-;17110:4;17103:81;16972:222;16307:887;;16337:618;16389:4;16385:9;16377:6;16373:22;16423:37;16455:4;16423:37;:::i;:::-;16482:1;16496:208;16510:7;16507:1;16504:14;16496:208;;;16589:9;16584:3;16580:19;16574:26;16566:6;16559:42;16640:1;16632:6;16628:14;16618:24;;16687:2;16676:9;16672:18;16659:31;;16533:4;16530:1;16526:12;16521:17;;16496:208;;;16732:6;16723:7;16720:19;16717:179;;;16790:9;16785:3;16781:19;16775:26;16833:48;16875:4;16867:6;16863:17;16852:9;16833:48;:::i;:::-;16825:6;16818:64;16740:156;16717:179;16942:1;16938;16930:6;16926:14;16922:22;16916:4;16909:36;16344:611;;;16307:887;;15897:1303;;;15805:1395;;:::o;17206:169::-;17346:21;17342:1;17334:6;17330:14;17323:45;17206:169;:::o;17381:366::-;17523:3;17544:67;17608:2;17603:3;17544:67;:::i;:::-;17537:74;;17620:93;17709:3;17620:93;:::i;:::-;17738:2;17733:3;17729:12;17722:19;;17381:366;;;:::o;17753:419::-;17919:4;17957:2;17946:9;17942:18;17934:26;;18006:9;18000:4;17996:20;17992:1;17981:9;17977:17;17970:47;18034:131;18160:4;18034:131;:::i;:::-;18026:139;;17753:419;;;:::o;18178:180::-;18226:77;18223:1;18216:88;18323:4;18320:1;18313:15;18347:4;18344:1;18337:15;18364:191;18404:3;18423:20;18441:1;18423:20;:::i;:::-;18418:25;;18457:20;18475:1;18457:20;:::i;:::-;18452:25;;18500:1;18497;18493:9;18486:16;;18521:3;18518:1;18515:10;18512:36;;;18528:18;;:::i;:::-;18512:36;18364:191;;;;:::o;18561:146::-;18658:6;18653:3;18648;18635:30;18699:1;18690:6;18685:3;18681:16;18674:27;18561:146;;;:::o;18737:330::-;18853:3;18874:89;18956:6;18951:3;18874:89;:::i;:::-;18867:96;;18973:56;19022:6;19017:3;19010:5;18973:56;:::i;:::-;19054:6;19049:3;19045:16;19038:23;;18737:330;;;;;:::o;19073:295::-;19215:3;19237:105;19338:3;19329:6;19321;19237:105;:::i;:::-;19230:112;;19359:3;19352:10;;19073:295;;;;;:::o;19374:171::-;19514:23;19510:1;19502:6;19498:14;19491:47;19374:171;:::o;19551:366::-;19693:3;19714:67;19778:2;19773:3;19714:67;:::i;:::-;19707:74;;19790:93;19879:3;19790:93;:::i;:::-;19908:2;19903:3;19899:12;19892:19;;19551:366;;;:::o;19923:419::-;20089:4;20127:2;20116:9;20112:18;20104:26;;20176:9;20170:4;20166:20;20162:1;20151:9;20147:17;20140:47;20204:131;20330:4;20204:131;:::i;:::-;20196:139;;19923:419;;;:::o;20348:182::-;20488:34;20484:1;20476:6;20472:14;20465:58;20348:182;:::o;20536:366::-;20678:3;20699:67;20763:2;20758:3;20699:67;:::i;:::-;20692:74;;20775:93;20864:3;20775:93;:::i;:::-;20893:2;20888:3;20884:12;20877:19;;20536:366;;;:::o;20908:419::-;21074:4;21112:2;21101:9;21097:18;21089:26;;21161:9;21155:4;21151:20;21147:1;21136:9;21132:17;21125:47;21189:131;21315:4;21189:131;:::i;:::-;21181:139;;20908:419;;;:::o;21333:177::-;21473:29;21469:1;21461:6;21457:14;21450:53;21333:177;:::o;21516:366::-;21658:3;21679:67;21743:2;21738:3;21679:67;:::i;:::-;21672:74;;21755:93;21844:3;21755:93;:::i;:::-;21873:2;21868:3;21864:12;21857:19;;21516:366;;;:::o;21888:419::-;22054:4;22092:2;22081:9;22077:18;22069:26;;22141:9;22135:4;22131:20;22127:1;22116:9;22112:17;22105:47;22169:131;22295:4;22169:131;:::i;:::-;22161:139;;21888:419;;;:::o;22313:194::-;22353:4;22373:20;22391:1;22373:20;:::i;:::-;22368:25;;22407:20;22425:1;22407:20;:::i;:::-;22402:25;;22451:1;22448;22444:9;22436:17;;22475:1;22469:4;22466:11;22463:37;;;22480:18;;:::i;:::-;22463:37;22313:194;;;;:::o;22513:170::-;22653:22;22649:1;22641:6;22637:14;22630:46;22513:170;:::o;22689:366::-;22831:3;22852:67;22916:2;22911:3;22852:67;:::i;:::-;22845:74;;22928:93;23017:3;22928:93;:::i;:::-;23046:2;23041:3;23037:12;23030:19;;22689:366;;;:::o;23061:419::-;23227:4;23265:2;23254:9;23250:18;23242:26;;23314:9;23308:4;23304:20;23300:1;23289:9;23285:17;23278:47;23342:131;23468:4;23342:131;:::i;:::-;23334:139;;23061:419;;;:::o;23486:224::-;23626:34;23622:1;23614:6;23610:14;23603:58;23695:7;23690:2;23682:6;23678:15;23671:32;23486:224;:::o;23716:366::-;23858:3;23879:67;23943:2;23938:3;23879:67;:::i;:::-;23872:74;;23955:93;24044:3;23955:93;:::i;:::-;24073:2;24068:3;24064:12;24057:19;;23716:366;;;:::o;24088:419::-;24254:4;24292:2;24281:9;24277:18;24269:26;;24341:9;24335:4;24331:20;24327:1;24316:9;24312:17;24305:47;24369:131;24495:4;24369:131;:::i;:::-;24361:139;;24088:419;;;:::o;24513:179::-;24653:31;24649:1;24641:6;24637:14;24630:55;24513:179;:::o;24698:366::-;24840:3;24861:67;24925:2;24920:3;24861:67;:::i;:::-;24854:74;;24937:93;25026:3;24937:93;:::i;:::-;25055:2;25050:3;25046:12;25039:19;;24698:366;;;:::o;25070:419::-;25236:4;25274:2;25263:9;25259:18;25251:26;;25323:9;25317:4;25313:20;25309:1;25298:9;25294:17;25287:47;25351:131;25477:4;25351:131;:::i;:::-;25343:139;;25070:419;;;:::o;25495:147::-;25596:11;25633:3;25618:18;;25495:147;;;;:::o;25648:114::-;;:::o;25768:398::-;25927:3;25948:83;26029:1;26024:3;25948:83;:::i;:::-;25941:90;;26040:93;26129:3;26040:93;:::i;:::-;26158:1;26153:3;26149:11;26142:18;;25768:398;;;:::o;26172:379::-;26356:3;26378:147;26521:3;26378:147;:::i;:::-;26371:154;;26542:3;26535:10;;26172:379;;;:::o;26557:165::-;26697:17;26693:1;26685:6;26681:14;26674:41;26557:165;:::o;26728:366::-;26870:3;26891:67;26955:2;26950:3;26891:67;:::i;:::-;26884:74;;26967:93;27056:3;26967:93;:::i;:::-;27085:2;27080:3;27076:12;27069:19;;26728:366;;;:::o;27100:419::-;27266:4;27304:2;27293:9;27289:18;27281:26;;27353:9;27347:4;27343:20;27339:1;27328:9;27324:17;27317:47;27381:131;27507:4;27381:131;:::i;:::-;27373:139;;27100:419;;;:::o;27525:225::-;27665:34;27661:1;27653:6;27649:14;27642:58;27734:8;27729:2;27721:6;27717:15;27710:33;27525:225;:::o;27756:366::-;27898:3;27919:67;27983:2;27978:3;27919:67;:::i;:::-;27912:74;;27995:93;28084:3;27995:93;:::i;:::-;28113:2;28108:3;28104:12;28097:19;;27756:366;;;:::o;28128:419::-;28294:4;28332:2;28321:9;28317:18;28309:26;;28381:9;28375:4;28371:20;28367:1;28356:9;28352:17;28345:47;28409:131;28535:4;28409:131;:::i;:::-;28401:139;;28128:419;;;:::o;28553:223::-;28693:34;28689:1;28681:6;28677:14;28670:58;28762:6;28757:2;28749:6;28745:15;28738:31;28553:223;:::o;28782:366::-;28924:3;28945:67;29009:2;29004:3;28945:67;:::i;:::-;28938:74;;29021:93;29110:3;29021:93;:::i;:::-;29139:2;29134:3;29130:12;29123:19;;28782:366;;;:::o;29154:419::-;29320:4;29358:2;29347:9;29343:18;29335:26;;29407:9;29401:4;29397:20;29393:1;29382:9;29378:17;29371:47;29435:131;29561:4;29435:131;:::i;:::-;29427:139;;29154:419;;;:::o;29579:221::-;29719:34;29715:1;29707:6;29703:14;29696:58;29788:4;29783:2;29775:6;29771:15;29764:29;29579:221;:::o;29806:366::-;29948:3;29969:67;30033:2;30028:3;29969:67;:::i;:::-;29962:74;;30045:93;30134:3;30045:93;:::i;:::-;30163:2;30158:3;30154:12;30147:19;;29806:366;;;:::o;30178:419::-;30344:4;30382:2;30371:9;30367:18;30359:26;;30431:9;30425:4;30421:20;30417:1;30406:9;30402:17;30395:47;30459:131;30585:4;30459:131;:::i;:::-;30451:139;;30178:419;;;:::o;30603:180::-;30651:77;30648:1;30641:88;30748:4;30745:1;30738:15;30772:4;30769:1;30762:15;30789:176;30821:1;30838:20;30856:1;30838:20;:::i;:::-;30833:25;;30872:20;30890:1;30872:20;:::i;:::-;30867:25;;30911:1;30901:35;;30916:18;;:::i;:::-;30901:35;30957:1;30954;30950:9;30945:14;;30789:176;;;;:::o;30971:180::-;31019:77;31016:1;31009:88;31116:4;31113:1;31106:15;31140:4;31137:1;31130:15;31157:171;31196:3;31219:24;31237:5;31219:24;:::i;:::-;31210:33;;31265:4;31258:5;31255:15;31252:41;;31273:18;;:::i;:::-;31252:41;31320:1;31313:5;31309:13;31302:20;;31157:171;;;:::o;31334:233::-;31373:3;31396:24;31414:5;31396:24;:::i;:::-;31387:33;;31442:66;31435:5;31432:77;31429:103;;31512:18;;:::i;:::-;31429:103;31559:1;31552:5;31548:13;31541:20;;31334:233;;;:::o;31573:182::-;31713:34;31709:1;31701:6;31697:14;31690:58;31573:182;:::o;31761:366::-;31903:3;31924:67;31988:2;31983:3;31924:67;:::i;:::-;31917:74;;32000:93;32089:3;32000:93;:::i;:::-;32118:2;32113:3;32109:12;32102:19;;31761:366;;;:::o;32133:419::-;32299:4;32337:2;32326:9;32322:18;32314:26;;32386:9;32380:4;32376:20;32372:1;32361:9;32357:17;32350:47;32414:131;32540:4;32414:131;:::i;:::-;32406:139;;32133:419;;;:::o;32558:179::-;32698:31;32694:1;32686:6;32682:14;32675:55;32558:179;:::o;32743:366::-;32885:3;32906:67;32970:2;32965:3;32906:67;:::i;:::-;32899:74;;32982:93;33071:3;32982:93;:::i;:::-;33100:2;33095:3;33091:12;33084:19;;32743:366;;;:::o;33115:419::-;33281:4;33319:2;33308:9;33304:18;33296:26;;33368:9;33362:4;33358:20;33354:1;33343:9;33339:17;33332:47;33396:131;33522:4;33396:131;:::i;:::-;33388:139;;33115:419;;;:::o;33540:410::-;33580:7;33603:20;33621:1;33603:20;:::i;:::-;33598:25;;33637:20;33655:1;33637:20;:::i;:::-;33632:25;;33692:1;33689;33685:9;33714:30;33732:11;33714:30;:::i;:::-;33703:41;;33893:1;33884:7;33880:15;33877:1;33874:22;33854:1;33847:9;33827:83;33804:139;;33923:18;;:::i;:::-;33804:139;33588:362;33540:410;;;;:::o;33956:185::-;33996:1;34013:20;34031:1;34013:20;:::i;:::-;34008:25;;34047:20;34065:1;34047:20;:::i;:::-;34042:25;;34086:1;34076:35;;34091:18;;:::i;:::-;34076:35;34133:1;34130;34126:9;34121:14;;33956:185;;;;:::o;34147:181::-;34287:33;34283:1;34275:6;34271:14;34264:57;34147:181;:::o;34334:366::-;34476:3;34497:67;34561:2;34556:3;34497:67;:::i;:::-;34490:74;;34573:93;34662:3;34573:93;:::i;:::-;34691:2;34686:3;34682:12;34675:19;;34334:366;;;:::o;34706:419::-;34872:4;34910:2;34899:9;34895:18;34887:26;;34959:9;34953:4;34949:20;34945:1;34934:9;34930:17;34923:47;34987:131;35113:4;34987:131;:::i;:::-;34979:139;;34706:419;;;:::o;35131:220::-;35271:34;35267:1;35259:6;35255:14;35248:58;35340:3;35335:2;35327:6;35323:15;35316:28;35131:220;:::o;35357:366::-;35499:3;35520:67;35584:2;35579:3;35520:67;:::i;:::-;35513:74;;35596:93;35685:3;35596:93;:::i;:::-;35714:2;35709:3;35705:12;35698:19;;35357:366;;;:::o;35729:419::-;35895:4;35933:2;35922:9;35918:18;35910:26;;35982:9;35976:4;35972:20;35968:1;35957:9;35953:17;35946:47;36010:131;36136:4;36010:131;:::i;:::-;36002:139;;35729:419;;;:::o;36154:221::-;36294:34;36290:1;36282:6;36278:14;36271:58;36363:4;36358:2;36350:6;36346:15;36339:29;36154:221;:::o;36381:366::-;36523:3;36544:67;36608:2;36603:3;36544:67;:::i;:::-;36537:74;;36620:93;36709:3;36620:93;:::i;:::-;36738:2;36733:3;36729:12;36722:19;;36381:366;;;:::o;36753:419::-;36919:4;36957:2;36946:9;36942:18;36934:26;;37006:9;37000:4;36996:20;36992:1;36981:9;36977:17;36970:47;37034:131;37160:4;37034:131;:::i;:::-;37026:139;;36753:419;;;:::o;37178:180::-;37226:77;37223:1;37216:88;37323:4;37320:1;37313:15;37347:4;37344:1;37337:15;37364:224;37504:34;37500:1;37492:6;37488:14;37481:58;37573:7;37568:2;37560:6;37556:15;37549:32;37364:224;:::o;37594:366::-;37736:3;37757:67;37821:2;37816:3;37757:67;:::i;:::-;37750:74;;37833:93;37922:3;37833:93;:::i;:::-;37951:2;37946:3;37942:12;37935:19;;37594:366;;;:::o;37966:419::-;38132:4;38170:2;38159:9;38155:18;38147:26;;38219:9;38213:4;38209:20;38205:1;38194:9;38190:17;38183:47;38247:131;38373:4;38247:131;:::i;:::-;38239:139;;37966:419;;;:::o;38391:222::-;38531:34;38527:1;38519:6;38515:14;38508:58;38600:5;38595:2;38587:6;38583:15;38576:30;38391:222;:::o;38619:366::-;38761:3;38782:67;38846:2;38841:3;38782:67;:::i;:::-;38775:74;;38858:93;38947:3;38858:93;:::i;:::-;38976:2;38971:3;38967:12;38960:19;;38619:366;;;:::o;38991:419::-;39157:4;39195:2;39184:9;39180:18;39172:26;;39244:9;39238:4;39234:20;39230:1;39219:9;39215:17;39208:47;39272:131;39398:4;39272:131;:::i;:::-;39264:139;;38991:419;;;:::o;39416:225::-;39556:34;39552:1;39544:6;39540:14;39533:58;39625:8;39620:2;39612:6;39608:15;39601:33;39416:225;:::o;39647:366::-;39789:3;39810:67;39874:2;39869:3;39810:67;:::i;:::-;39803:74;;39886:93;39975:3;39886:93;:::i;:::-;40004:2;39999:3;39995:12;39988:19;;39647:366;;;:::o;40019:419::-;40185:4;40223:2;40212:9;40208:18;40200:26;;40272:9;40266:4;40262:20;40258:1;40247:9;40243:17;40236:47;40300:131;40426:4;40300:131;:::i;:::-;40292:139;;40019:419;;;:::o
Swarm Source
ipfs://4808ded02b12390f42ad9d48cccb295a241dd867734d44ca4baded6804d673f3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.