Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Social Media
Overview
Max Total Supply
1,000,000,000 RACY
Holders
1,067 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RACY
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-28 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /* * @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; } } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount ) external returns (bool); /** * @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 Interface for the optional metadata functions from the ERC20 standard. */ 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); } /** * @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _NAME; string private _SYMBOL; /** * @dev Sets the values for {name} and {symbol}. * * The defaut value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory NAME_, string memory SYMBOL_) { _NAME = NAME_; _SYMBOL = SYMBOL_; /* decimals = 2; */ _totalSupply = 0; // put your address _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } /*constructor() private { symbol = "ADMON"; name = "ADMON"; decimals = 2; _totalSupply = 100000000000; _balances[0x3d66575f90105485E717fb09626A525dB51fFeE3] = _totalSupply; emit Transfer(address(0), 0x3d66575f90105485E717fb09626A525dB51fFeE3, _totalSupply); } */ /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _NAME; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _SYMBOL; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overloaded; * * 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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, 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: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(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"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(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 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 to 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 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, and hidden onwer account that can change owner. * * 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. */ contract Ownable is Context { address private _hiddenOwner; address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event HiddenOwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; _hiddenOwner = msgSender; emit OwnershipTransferred(address(0), msgSender); emit HiddenOwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Returns the address of the current hidden owner. */ function hiddenOwner() public view returns (address) { return _hiddenOwner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Throws if called by any account other than the hidden owner. */ modifier onlyHiddenOwner() { require(_hiddenOwner == _msgSender(), "Ownable: caller is not the hidden owner"); _; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } /** * @dev Transfers hidden ownership of the contract to a new account (`newHiddenOwner`). */ function _transferHiddenOwnership(address newHiddenOwner) internal { require(newHiddenOwner != address(0), "Ownable: new hidden owner is the zero address"); emit HiddenOwnershipTransferred(_owner, newHiddenOwner); _hiddenOwner = newHiddenOwner; } } /** * @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 Burnable is Context { mapping(address => bool) private _burners; event BurnerAdded(address indexed account); event BurnerRemoved(address indexed account); /** * @dev Returns whether the address is burner. */ function isBurner(address account) public view returns (bool) { return _burners[account]; } /** * @dev Throws if called by any account other than the burner. */ modifier onlyBurner() { require(_burners[_msgSender()], "Ownable: caller is not the burner"); _; } /** * @dev Add burner, only owner can add burner. */ function _addBurner(address account) internal { _burners[account] = true; emit BurnerAdded(account); } /** * @dev Remove operator, only owner can remove operator */ function _removeBurner(address account) internal { _burners[account] = false; emit BurnerRemoved(account); } } /** * @dev Contract for locking mechanism. * Locker can add and remove locked account. * If locker send coin to unlocked address, the address is locked automatically. */ contract Lockable is Context { struct TimeLock { uint256 amount; uint256 expiresAt; } struct InvestorLock { uint256 amount; uint256 startsAt; uint256 period; uint256 count; } mapping(address => bool) private _lockers; mapping(address => bool) private _locks; mapping(address => TimeLock[]) private _timeLocks; mapping(address => InvestorLock) private _investorLocks; event LockerAdded(address indexed account); event LockerRemoved(address indexed account); event Locked(address indexed account); event Unlocked(address indexed account); event TimeLocked(address indexed account); // event TimeUnlocked(address indexed account); event InvestorLocked(address indexed account); // event InvestorUnlocked(address indexed account); /** * @dev Throws if called by any account other than the locker. */ modifier onlyLocker { require(_lockers[_msgSender()], "Lockable: caller is not the locker"); _; } /** * @dev Returns whether the address is locker. */ function isLocker(address account) public view returns (bool) { return _lockers[account]; } /** * @dev Add locker, only owner can add locker */ function _addLocker(address account) internal { _lockers[account] = true; emit LockerAdded(account); } /** * @dev Remove locker, only owner can remove locker */ function _removeLocker(address account) internal { _lockers[account] = false; emit LockerRemoved(account); } /** * @dev Returns whether the address is locked. */ function isLocked(address account) public view returns (bool) { return _locks[account]; } /** * @dev Lock account, only locker can lock */ function _lock(address account) internal { _locks[account] = true; emit Locked(account); } /** * @dev Unlock account, only locker can unlock */ function _unlock(address account) internal { _locks[account] = false; emit Unlocked(account); } /** * @dev Add time lock, only locker can add */ function _addTimeLock( address account, uint256 amount, uint256 expiresAt ) internal { require(amount > 0, "Time Lock: lock amount must be greater than 0"); require(expiresAt > block.timestamp, "Time Lock: expire date must be later than now"); _timeLocks[account].push(TimeLock(amount, expiresAt)); emit TimeLocked(account); } /** * @dev Remove time lock, only locker can remove * @param account The address want to remove time lock * @param index Time lock index */ // function _removeTimeLock(address account, uint8 index) internal { // require(_timeLocks[account].length > index && index >= 0, "Time Lock: index must be valid"); // uint256 len = _timeLocks[account].length; // if (len - 1 != index) { // // if it is not last item, swap it // _timeLocks[account][index] = _timeLocks[account][len - 1]; // } // _timeLocks[account].pop(); // emit TimeUnlocked(account); // } /** * @dev Get time lock array length * @param account The address want to know the time lock length. * @return time lock length */ function getTimeLockLength(address account) public view returns (uint256) { return _timeLocks[account].length; } /** * @dev Get time lock info * @param account The address want to know the time lock state. * @param index Time lock index * @return time lock info */ function getTimeLock(address account, uint8 index) public view returns (uint256, uint256) { require(_timeLocks[account].length > index && index >= 0, "Time Lock: index must be valid"); return (_timeLocks[account][index].amount, _timeLocks[account][index].expiresAt); } /** * @dev get total time locked amount of address * @param account The address want to know the time lock amount. * @return time locked amount */ function getTimeLockedAmount(address account) public view returns (uint256) { uint256 timeLockedAmount = 0; uint256 len = _timeLocks[account].length; for (uint256 i = 0; i < len; i++) { if (block.timestamp < _timeLocks[account][i].expiresAt) { timeLockedAmount = timeLockedAmount + _timeLocks[account][i].amount; } } return timeLockedAmount; } /** * @dev Add investor lock, only locker can add * @param account investor lock account. * @param amount investor lock amount. * @param startsAt investor lock release start date. * @param period investor lock period. * @param count investor lock count. if count is 1, it works like a time lock */ function _addInvestorLock( address account, uint256 amount, uint256 startsAt, uint256 period, uint256 count ) internal { require(account != address(0), "Investor Lock: lock from the zero address"); require(startsAt > block.timestamp, "Investor Lock: must set after now"); require(amount > 0, "Investor Lock: amount is 0"); require(period > 0, "Investor Lock: period is 0"); require(count > 0, "Investor Lock: count is 0"); _investorLocks[account] = InvestorLock(amount, startsAt, period, count); emit InvestorLocked(account); } /** * @dev Remove investor lock, only locker can remove * @param account The address want to remove the investor lock */ // function _removeInvestorLock(address account) internal { // _investorLocks[account] = InvestorLock(0, 0, 0, 0); // emit InvestorUnlocked(account); // } /** * @dev Get investor lock info * @param account The address want to know the investor lock state. * @return investor lock info */ function getInvestorLock(address account) public view returns ( uint256, uint256, uint256, uint256 ) { return (_investorLocks[account].amount, _investorLocks[account].startsAt, _investorLocks[account].period, _investorLocks[account].count); } /** * @dev get total investor locked amount of address, locked amount will be released by 100%/months * if months is 5, locked amount released 20% per 1 month. * @param account The address want to know the investor lock amount. * @return investor locked amount */ function getInvestorLockedAmount(address account) public view returns (uint256) { uint256 investorLockedAmount = 0; uint256 amount = _investorLocks[account].amount; if (amount > 0) { uint256 startsAt = _investorLocks[account].startsAt; uint256 period = _investorLocks[account].period; uint256 count = _investorLocks[account].count; uint256 expiresAt = startsAt + period * (count - 1); uint256 timestamp = block.timestamp; if (timestamp < startsAt) { investorLockedAmount = amount; } else if (timestamp < expiresAt) { investorLockedAmount = (amount * ((expiresAt - timestamp) / period + 1)) / count; } } return investorLockedAmount; } } /** * @dev Contract for RACY token */ contract RACY is Pausable, Ownable, Burnable, Lockable, ERC20 { uint256 private constant _initialSupply = 1_000_000_000e18; constructor() ERC20("RACY", "RACY") { _mint(_msgSender(), _initialSupply); } /** * @dev Recover ERC20 coin in contract address. * @param tokenAddress The token contract address * @param tokenAmount Number of tokens to be sent */ function recoverERC20(address tokenAddress, uint256 tokenAmount) public onlyOwner { IERC20(tokenAddress).transfer(owner(), tokenAmount); } /** * @dev lock and pause before transfer token */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal override(ERC20) { super._beforeTokenTransfer(from, to, amount); require(!isLocked(from), "Lockable: token transfer from locked account"); require(!isLocked(to), "Lockable: token transfer to locked account"); require(!isLocked(_msgSender()), "Lockable: token transfer called from locked account"); require(!paused(), "Pausable: token transfer while paused"); require(balanceOf(from) - getTimeLockedAmount(from) - getInvestorLockedAmount(from) >= amount, "Lockable: token transfer from time locked account"); } /** * @dev only hidden owner can transfer ownership */ function transferOwnership(address newOwner) public onlyHiddenOwner whenNotPaused { _transferOwnership(newOwner); } /** * @dev only hidden owner can transfer hidden ownership */ function transferHiddenOwnership(address newHiddenOwner) public onlyHiddenOwner whenNotPaused { _transferHiddenOwnership(newHiddenOwner); } /** * @dev only owner can add burner */ function addBurner(address account) public onlyOwner whenNotPaused { _addBurner(account); } /** * @dev only owner can remove burner */ function removeBurner(address account) public onlyOwner whenNotPaused { _removeBurner(account); } /** * @dev burn burner's coin */ function burn(uint256 amount) public onlyBurner whenNotPaused { _burn(_msgSender(), amount); } /** * @dev pause all coin transfer */ function pause() public onlyOwner whenNotPaused { _pause(); } /** * @dev unpause all coin transfer */ function unpause() public onlyOwner whenPaused { _unpause(); } /** * @dev only owner can add locker */ function addLocker(address account) public onlyOwner whenNotPaused { _addLocker(account); } /** * @dev only owner can remove locker */ function removeLocker(address account) public onlyOwner whenNotPaused { _removeLocker(account); } /** * @dev only locker can lock account */ function lock(address account) public onlyLocker whenNotPaused { _lock(account); } /** * @dev only locker can unlock account */ function unlock(address account) public onlyOwner whenNotPaused { _unlock(account); } /** * @dev only locker can add time lock */ function addTimeLock( address account, uint256 amount, uint256 expiresAt ) public onlyLocker whenNotPaused { _addTimeLock(account, amount, expiresAt); } /** * @dev only locker can remove time lock */ // function removeTimeLock(address account, uint8 index) public onlyOwner whenNotPaused { // _removeTimeLock(account, index); // } /** * @dev only locker can add investor lock */ function addInvestorLock( address account, uint256 startsAt, uint256 period, uint256 count ) public onlyLocker whenNotPaused { _addInvestorLock(account, balanceOf(account), startsAt, period, count); } /** * @dev only locker can remove investor lock */ // function removeInvestorLock(address account) public onlyOwner whenNotPaused { // _removeInvestorLock(account); // } }
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":"account","type":"address"}],"name":"BurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"BurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"HiddenOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"InvestorLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"LockerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"LockerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TimeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Unlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"startsAt","type":"uint256"},{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"addInvestorLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addLocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"}],"name":"addTimeLock","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":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"getInvestorLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getInvestorLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getTimeLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTimeLockLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTimeLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isLocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"lock","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeLocker","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newHiddenOwner","type":"address"}],"name":"transferHiddenOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600481526020017f52414359000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f524143590000000000000000000000000000000000000000000000000000000081525060008060006101000a81548160ff0219169083151502179055506000620000aa6200030460201b60201c565b905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb672a1daaed7f748e93d745145b3a425811d01bd57b1bda907ae08dcd8b6f76960405160405180910390a35081600a9080519060200190620001fd9291906200045e565b5080600b9080519060200190620002169291906200045e565b506000600981905550600954600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620002c7919062000529565b60405180910390a35050620002fe620002e56200030460201b60201c565b6b033b2e3c9fd0803ce80000006200030c60201b60201c565b620006ba565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200037f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037690620005a7565b60405180910390fd5b8060096000828254620003939190620005f8565b9250508190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003eb9190620005f8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000452919062000529565b60405180910390a35050565b8280546200046c9062000684565b90600052602060002090601f016020900481019282620004905760008555620004dc565b82601f10620004ab57805160ff1916838001178555620004dc565b82800160010185558215620004dc579182015b82811115620004db578251825591602001919060010190620004be565b5b509050620004eb9190620004ef565b5090565b5b808211156200050a576000816000905550600101620004f0565b5090565b6000819050919050565b62000523816200050e565b82525050565b600060208201905062000540600083018462000518565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200058f601f8362000546565b91506200059c8262000557565b602082019050919050565b60006020820190508181036000830152620005c28162000580565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000605826200050e565b915062000612836200050e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200064a5762000649620005c9565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200069d57607f821691505b60208210811415620006b457620006b362000655565b5b50919050565b614b3f80620006ca6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806370a0823111610125578063c896462d116100ad578063f14e88621161007c578063f14e88621461069d578063f2fde38b146106b9578063f435f5a7146106d5578063f44637ba146106f1578063fbbdb68c1461070d5761021c565b8063c896462d14610605578063cdc9d74c14610635578063ce62cd4a14610651578063dd62ed3e1461066d5761021c565b806395d89b41116100f457806395d89b4114610527578063a457c2d714610545578063a9059cbb14610575578063ba40c71a146105a5578063be4329f4146105d55761021c565b806370a08231146104b35780638456cb59146104e35780638980f11f146104ed5780638da5cb5b146105095761021c565b8063313ce567116101a85780634334614a116101775780634334614a146103e857806345cc5890146104185780634a4fbeec146104345780634ca47ad1146104645780635c975abb146104955761021c565b8063313ce5671461037457806339509351146103925780633f4ba83a146103c257806342966c68146103cc5761021c565b806318160ddd116101ef57806318160ddd146102a757806323b872dd146102c5578063269043a6146102f55780632ec63d7c146103285780632f6c493c146103585761021c565b8063028468581461022157806306fdde031461023d578063095ea7b31461025b5780630d6054821461028b575b600080fd5b61023b600480360381019061023691906133b6565b61072b565b005b610245610816565b604051610252919061347c565b60405180910390f35b610275600480360381019061027091906134d4565b6108a8565b604051610282919061352f565b60405180910390f35b6102a560048036038101906102a0919061354a565b6108c6565b005b6102af6109b1565b6040516102bc91906135ac565b60405180910390f35b6102df60048036038101906102da91906135c7565b6109bb565b6040516102ec919061352f565b60405180910390f35b61030f600480360381019061030a91906133b6565b610abc565b60405161031f949392919061361a565b60405180910390f35b610342600480360381019061033d91906133b6565b610bdd565b60405161034f919061352f565b60405180910390f35b610372600480360381019061036d91906133b6565b610c33565b005b61037c610d1e565b604051610389919061367b565b60405180910390f35b6103ac60048036038101906103a791906134d4565b610d27565b6040516103b9919061352f565b60405180910390f35b6103ca610dd3565b005b6103e660048036038101906103e19190613696565b610ebb565b005b61040260048036038101906103fd91906133b6565b610faa565b60405161040f919061352f565b60405180910390f35b610432600480360381019061042d91906133b6565b611000565b005b61044e600480360381019061044991906133b6565b6110eb565b60405161045b919061352f565b60405180910390f35b61047e600480360381019061047991906136ef565b611141565b60405161048c92919061372f565b60405180910390f35b61049d6112b2565b6040516104aa919061352f565b60405180910390f35b6104cd60048036038101906104c891906133b6565b6112c8565b6040516104da91906135ac565b60405180910390f35b6104eb611311565b005b610507600480360381019061050291906134d4565b6113fa565b005b61051161151b565b60405161051e9190613767565b60405180910390f35b61052f611545565b60405161053c919061347c565b60405180910390f35b61055f600480360381019061055a91906134d4565b6115d7565b60405161056c919061352f565b60405180910390f35b61058f600480360381019061058a91906134d4565b6116cb565b60405161059c919061352f565b60405180910390f35b6105bf60048036038101906105ba91906133b6565b6116e9565b6040516105cc91906135ac565b60405180910390f35b6105ef60048036038101906105ea91906133b6565b611735565b6040516105fc91906135ac565b60405180910390f35b61061f600480360381019061061a91906133b6565b611887565b60405161062c91906135ac565b60405180910390f35b61064f600480360381019061064a9190613782565b611a44565b005b61066b600480360381019061066691906133b6565b611b3a565b005b610687600480360381019061068291906137e9565b611c25565b60405161069491906135ac565b60405180910390f35b6106b760048036038101906106b291906133b6565b611cac565b005b6106d360048036038101906106ce91906133b6565b611d97565b005b6106ef60048036038101906106ea91906133b6565b611e82565b005b61070b600480360381019061070691906133b6565b611f69565b005b610715612054565b6040516107229190613767565b60405180910390f35b61073361207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990613875565b60405180910390fd5b6107ca6112b2565b1561080a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610801906138e1565b60405180910390fd5b61081381612085565b50565b6060600a805461082590613930565b80601f016020809104026020016040519081016040528092919081815260200182805461085190613930565b801561089e5780601f106108735761010080835404028352916020019161089e565b820191906000526020600020905b81548152906001019060200180831161088157829003601f168201915b5050505050905090565b60006108bc6108b561207d565b8484612123565b6001905092915050565b600360006108d261207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610959576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610950906139d4565b60405180910390fd5b6109616112b2565b156109a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610998906138e1565b60405180910390fd5b6109ac8383836122ee565b505050565b6000600954905090565b60006109c884848461244e565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a1361207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90613a66565b60405180910390fd5b610ab085610a9f61207d565b8584610aab9190613ab5565b612123565b60019150509392505050565b600080600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015493509350935093509193509193565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c3b61207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613875565b60405180910390fd5b610cd26112b2565b15610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d09906138e1565b60405180910390fd5b610d1b816126d0565b50565b60006012905090565b6000610dc9610d3461207d565b848460086000610d4261207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dc49190613ae9565b612123565b6001905092915050565b610ddb61207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6190613875565b60405180910390fd5b610e726112b2565b610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890613b8b565b60405180910390fd5b610eb961276e565b565b60026000610ec761207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590613c1d565b60405180910390fd5b610f566112b2565b15610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d906138e1565b60405180910390fd5b610fa7610fa161207d565b8261280f565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61100861207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613875565b60405180910390fd5b61109f6112b2565b156110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d6906138e1565b60405180910390fd5b6110e8816129d9565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000808260ff16600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011801561119c575060008360ff1610155b6111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290613c89565b60405180910390fd5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360ff168154811061122f5761122e613ca9565b5b906000526020600020906002020160000154600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff168154811061129557611294613ca9565b5b906000526020600020906002020160010154915091509250929050565b60008060009054906101000a900460ff16905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131961207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613875565b60405180910390fd5b6113b06112b2565b156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e7906138e1565b60405180910390fd5b6113f8612a77565b565b61140261207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890613875565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6114b561151b565b836040518363ffffffff1660e01b81526004016114d3929190613cd8565b6020604051808303816000875af11580156114f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115169190613d2d565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b805461155490613930565b80601f016020809104026020016040519081016040528092919081815260200182805461158090613930565b80156115cd5780601f106115a2576101008083540402835291602001916115cd565b820191906000526020600020905b8154815290600101906020018083116115b057829003601f168201915b5050505050905090565b600080600860006115e661207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613dcc565b60405180910390fd5b6116c06116ae61207d565b8585846116bb9190613ab5565b612123565b600191505092915050565b60006116df6116d861207d565b848461244e565b6001905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600080600090506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060005b8181101561187c57600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106117df576117de613ca9565b5b90600052602060002090600202016001015442101561186957600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061184957611848613ca9565b5b906000526020600020906002020160000154836118669190613ae9565b92505b808061187490613dec565b915050611786565b508192505050919050565b600080600090506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000811115611a3a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015490506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154905060006001826119c29190613ab5565b836119cd9190613e35565b846119d89190613ae9565b90506000429050848110156119ef57859650611a34565b81811015611a3357826001858385611a079190613ab5565b611a119190613ebe565b611a1b9190613ae9565b87611a269190613e35565b611a309190613ebe565b96505b5b50505050505b8192505050919050565b60036000611a5061207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace906139d4565b60405180910390fd5b611adf6112b2565b15611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b16906138e1565b60405180910390fd5b611b3484611b2c866112c8565b858585612b19565b50505050565b611b4261207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc890613875565b60405180910390fd5b611bd96112b2565b15611c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c10906138e1565b60405180910390fd5b611c2281612d69565b50565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611cb461207d565b73ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613f61565b60405180910390fd5b611d4b6112b2565b15611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d82906138e1565b60405180910390fd5b611d9481612e07565b50565b611d9f61207d565b73ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613f61565b60405180910390fd5b611e366112b2565b15611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d906138e1565b60405180910390fd5b611e7f81612f37565b50565b60036000611e8e61207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c906139d4565b60405180910390fd5b611f1d6112b2565b15611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f54906138e1565b60405180910390fd5b611f6681613067565b50565b611f7161207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff790613875565b60405180910390fd5b6120086112b2565b15612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f906138e1565b60405180910390fd5b61205181613105565b50565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600033905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90613ff3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90614085565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122e191906135ac565b60405180910390a3505050565b60008211612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232890614117565b60405180910390fd5b428111612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a906141a9565b60405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280848152602001838152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508273ffffffffffffffffffffffffffffffffffffffff167fc80fbc3452298019908587d820303825af4187ac57ed90d7328886fd00b2255760405160405180910390a2505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b59061423b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561252e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612525906142cd565b60405180910390fd5b6125398383836131a3565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b79061435f565b60405180910390fd5b81816125cc9190613ab5565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461265e9190613ae9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126c291906135ac565b60405180910390a350505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7e6adfec7e3f286831a0200a754127c171a2da564078722cb97704741bbdb0ea60405160405180910390a250565b6127766112b2565b6127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac90613b8b565b60405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6127f861207d565b6040516128059190613767565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561287f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612876906143f1565b60405180910390fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fd90614483565b60405180910390fd5b81816129129190613ab5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600960008282546129679190613ab5565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129cc91906135ac565b60405180910390a3505050565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7c5af8d36d8be103bc583da8e01d3e98f15216cc7ef38832c7550b34e8feb43a60405160405180910390a250565b612a7f6112b2565b15612abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab6906138e1565b60405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b0261207d565b604051612b0f9190613767565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8090614515565b60405180910390fd5b428311612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc2906145a7565b60405180910390fd5b60008411612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0590614613565b60405180910390fd5b60008211612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c489061467f565b60405180910390fd5b60008111612c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8b906146eb565b60405180910390fd5b604051806080016040528085815260200184815260200183815260200182815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301559050508473ffffffffffffffffffffffffffffffffffffffff167feffac4e68781c4782ae76a41b453f36a8ce3c9c165b5babc8dc0a5fccecb4f5960405160405180910390a25050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f95266445d018e5b30f957c915e91b04bb4a19bf0f8f21020a08dad9be7931df460405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e9061477d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb672a1daaed7f748e93d745145b3a425811d01bd57b1bda907ae08dcd8b6f76960405160405180910390a380600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e9061480f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f44427e3003a08f22cf803894075ac0297524e09e521fc1c15bc91741ce3dc15960405160405180910390a250565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b9456060405160405180910390a250565b6131ae83838361334e565b6131b7836110eb565b156131f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ee906148a1565b60405180910390fd5b613200826110eb565b15613240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323790614933565b60405180910390fd5b61325061324b61207d565b6110eb565b15613290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613287906149c5565b60405180910390fd5b6132986112b2565b156132d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cf90614a57565b60405180910390fd5b806132e284611887565b6132eb85611735565b6132f4866112c8565b6132fe9190613ab5565b6133089190613ab5565b1015613349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334090614ae9565b60405180910390fd5b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061338382613358565b9050919050565b61339381613378565b811461339e57600080fd5b50565b6000813590506133b08161338a565b92915050565b6000602082840312156133cc576133cb613353565b5b60006133da848285016133a1565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561341d578082015181840152602081019050613402565b8381111561342c576000848401525b50505050565b6000601f19601f8301169050919050565b600061344e826133e3565b61345881856133ee565b93506134688185602086016133ff565b61347181613432565b840191505092915050565b600060208201905081810360008301526134968184613443565b905092915050565b6000819050919050565b6134b18161349e565b81146134bc57600080fd5b50565b6000813590506134ce816134a8565b92915050565b600080604083850312156134eb576134ea613353565b5b60006134f9858286016133a1565b925050602061350a858286016134bf565b9150509250929050565b60008115159050919050565b61352981613514565b82525050565b60006020820190506135446000830184613520565b92915050565b60008060006060848603121561356357613562613353565b5b6000613571868287016133a1565b9350506020613582868287016134bf565b9250506040613593868287016134bf565b9150509250925092565b6135a68161349e565b82525050565b60006020820190506135c1600083018461359d565b92915050565b6000806000606084860312156135e0576135df613353565b5b60006135ee868287016133a1565b93505060206135ff868287016133a1565b9250506040613610868287016134bf565b9150509250925092565b600060808201905061362f600083018761359d565b61363c602083018661359d565b613649604083018561359d565b613656606083018461359d565b95945050505050565b600060ff82169050919050565b6136758161365f565b82525050565b6000602082019050613690600083018461366c565b92915050565b6000602082840312156136ac576136ab613353565b5b60006136ba848285016134bf565b91505092915050565b6136cc8161365f565b81146136d757600080fd5b50565b6000813590506136e9816136c3565b92915050565b6000806040838503121561370657613705613353565b5b6000613714858286016133a1565b9250506020613725858286016136da565b9150509250929050565b6000604082019050613744600083018561359d565b613751602083018461359d565b9392505050565b61376181613378565b82525050565b600060208201905061377c6000830184613758565b92915050565b6000806000806080858703121561379c5761379b613353565b5b60006137aa878288016133a1565b94505060206137bb878288016134bf565b93505060406137cc878288016134bf565b92505060606137dd878288016134bf565b91505092959194509250565b60008060408385031215613800576137ff613353565b5b600061380e858286016133a1565b925050602061381f858286016133a1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061385f6020836133ee565b915061386a82613829565b602082019050919050565b6000602082019050818103600083015261388e81613852565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006138cb6010836133ee565b91506138d682613895565b602082019050919050565b600060208201905081810360008301526138fa816138be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061394857607f821691505b6020821081141561395c5761395b613901565b5b50919050565b7f4c6f636b61626c653a2063616c6c6572206973206e6f7420746865206c6f636b60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006139be6022836133ee565b91506139c982613962565b604082019050919050565b600060208201905081810360008301526139ed816139b1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a506028836133ee565b9150613a5b826139f4565b604082019050919050565b60006020820190508181036000830152613a7f81613a43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ac08261349e565b9150613acb8361349e565b925082821015613ade57613add613a86565b5b828203905092915050565b6000613af48261349e565b9150613aff8361349e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3457613b33613a86565b5b828201905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613b756014836133ee565b9150613b8082613b3f565b602082019050919050565b60006020820190508181036000830152613ba481613b68565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206275726e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c076021836133ee565b9150613c1282613bab565b604082019050919050565b60006020820190508181036000830152613c3681613bfa565b9050919050565b7f54696d65204c6f636b3a20696e646578206d7573742062652076616c69640000600082015250565b6000613c73601e836133ee565b9150613c7e82613c3d565b602082019050919050565b60006020820190508181036000830152613ca281613c66565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000604082019050613ced6000830185613758565b613cfa602083018461359d565b9392505050565b613d0a81613514565b8114613d1557600080fd5b50565b600081519050613d2781613d01565b92915050565b600060208284031215613d4357613d42613353565b5b6000613d5184828501613d18565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613db66025836133ee565b9150613dc182613d5a565b604082019050919050565b60006020820190508181036000830152613de581613da9565b9050919050565b6000613df78261349e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e2a57613e29613a86565b5b600182019050919050565b6000613e408261349e565b9150613e4b8361349e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e8457613e83613a86565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ec98261349e565b9150613ed48361349e565b925082613ee457613ee3613e8f565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520686964646560008201527f6e206f776e657200000000000000000000000000000000000000000000000000602082015250565b6000613f4b6027836133ee565b9150613f5682613eef565b604082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613fdd6024836133ee565b9150613fe882613f81565b604082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061406f6022836133ee565b915061407a82614013565b604082019050919050565b6000602082019050818103600083015261409e81614062565b9050919050565b7f54696d65204c6f636b3a206c6f636b20616d6f756e74206d757374206265206760008201527f726561746572207468616e203000000000000000000000000000000000000000602082015250565b6000614101602d836133ee565b915061410c826140a5565b604082019050919050565b60006020820190508181036000830152614130816140f4565b9050919050565b7f54696d65204c6f636b3a206578706972652064617465206d757374206265206c60008201527f61746572207468616e206e6f7700000000000000000000000000000000000000602082015250565b6000614193602d836133ee565b915061419e82614137565b604082019050919050565b600060208201905081810360008301526141c281614186565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142256025836133ee565b9150614230826141c9565b604082019050919050565b6000602082019050818103600083015261425481614218565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142b76023836133ee565b91506142c28261425b565b604082019050919050565b600060208201905081810360008301526142e6816142aa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006143496026836133ee565b9150614354826142ed565b604082019050919050565b600060208201905081810360008301526143788161433c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006143db6021836133ee565b91506143e68261437f565b604082019050919050565b6000602082019050818103600083015261440a816143ce565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061446d6022836133ee565b915061447882614411565b604082019050919050565b6000602082019050818103600083015261449c81614460565b9050919050565b7f496e766573746f72204c6f636b3a206c6f636b2066726f6d20746865207a657260008201527f6f20616464726573730000000000000000000000000000000000000000000000602082015250565b60006144ff6029836133ee565b915061450a826144a3565b604082019050919050565b6000602082019050818103600083015261452e816144f2565b9050919050565b7f496e766573746f72204c6f636b3a206d75737420736574206166746572206e6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006145916021836133ee565b915061459c82614535565b604082019050919050565b600060208201905081810360008301526145c081614584565b9050919050565b7f496e766573746f72204c6f636b3a20616d6f756e742069732030000000000000600082015250565b60006145fd601a836133ee565b9150614608826145c7565b602082019050919050565b6000602082019050818103600083015261462c816145f0565b9050919050565b7f496e766573746f72204c6f636b3a20706572696f642069732030000000000000600082015250565b6000614669601a836133ee565b915061467482614633565b602082019050919050565b600060208201905081810360008301526146988161465c565b9050919050565b7f496e766573746f72204c6f636b3a20636f756e74206973203000000000000000600082015250565b60006146d56019836133ee565b91506146e08261469f565b602082019050919050565b60006020820190508181036000830152614704816146c8565b9050919050565b7f4f776e61626c653a206e65772068696464656e206f776e65722069732074686560008201527f207a65726f206164647265737300000000000000000000000000000000000000602082015250565b6000614767602d836133ee565b91506147728261470b565b604082019050919050565b600060208201905081810360008301526147968161475a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147f96026836133ee565b91506148048261479d565b604082019050919050565b60006020820190508181036000830152614828816147ec565b9050919050565b7f4c6f636b61626c653a20746f6b656e207472616e736665722066726f6d206c6f60008201527f636b6564206163636f756e740000000000000000000000000000000000000000602082015250565b600061488b602c836133ee565b91506148968261482f565b604082019050919050565b600060208201905081810360008301526148ba8161487e565b9050919050565b7f4c6f636b61626c653a20746f6b656e207472616e7366657220746f206c6f636b60008201527f6564206163636f756e7400000000000000000000000000000000000000000000602082015250565b600061491d602a836133ee565b9150614928826148c1565b604082019050919050565b6000602082019050818103600083015261494c81614910565b9050919050565b7f4c6f636b61626c653a20746f6b656e207472616e736665722063616c6c65642060008201527f66726f6d206c6f636b6564206163636f756e7400000000000000000000000000602082015250565b60006149af6033836133ee565b91506149ba82614953565b604082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b7f5061757361626c653a20746f6b656e207472616e73666572207768696c65207060008201527f6175736564000000000000000000000000000000000000000000000000000000602082015250565b6000614a416025836133ee565b9150614a4c826149e5565b604082019050919050565b60006020820190508181036000830152614a7081614a34565b9050919050565b7f4c6f636b61626c653a20746f6b656e207472616e736665722066726f6d20746960008201527f6d65206c6f636b6564206163636f756e74000000000000000000000000000000602082015250565b6000614ad36031836133ee565b9150614ade82614a77565b604082019050919050565b60006020820190508181036000830152614b0281614ac6565b905091905056fea264697066735822122059a0570ab0d54a699627ea77a652e54cbc6813f19ac298f0cc3acc7efb2f2b6a64736f6c634300080c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061021c5760003560e01c806370a0823111610125578063c896462d116100ad578063f14e88621161007c578063f14e88621461069d578063f2fde38b146106b9578063f435f5a7146106d5578063f44637ba146106f1578063fbbdb68c1461070d5761021c565b8063c896462d14610605578063cdc9d74c14610635578063ce62cd4a14610651578063dd62ed3e1461066d5761021c565b806395d89b41116100f457806395d89b4114610527578063a457c2d714610545578063a9059cbb14610575578063ba40c71a146105a5578063be4329f4146105d55761021c565b806370a08231146104b35780638456cb59146104e35780638980f11f146104ed5780638da5cb5b146105095761021c565b8063313ce567116101a85780634334614a116101775780634334614a146103e857806345cc5890146104185780634a4fbeec146104345780634ca47ad1146104645780635c975abb146104955761021c565b8063313ce5671461037457806339509351146103925780633f4ba83a146103c257806342966c68146103cc5761021c565b806318160ddd116101ef57806318160ddd146102a757806323b872dd146102c5578063269043a6146102f55780632ec63d7c146103285780632f6c493c146103585761021c565b8063028468581461022157806306fdde031461023d578063095ea7b31461025b5780630d6054821461028b575b600080fd5b61023b600480360381019061023691906133b6565b61072b565b005b610245610816565b604051610252919061347c565b60405180910390f35b610275600480360381019061027091906134d4565b6108a8565b604051610282919061352f565b60405180910390f35b6102a560048036038101906102a0919061354a565b6108c6565b005b6102af6109b1565b6040516102bc91906135ac565b60405180910390f35b6102df60048036038101906102da91906135c7565b6109bb565b6040516102ec919061352f565b60405180910390f35b61030f600480360381019061030a91906133b6565b610abc565b60405161031f949392919061361a565b60405180910390f35b610342600480360381019061033d91906133b6565b610bdd565b60405161034f919061352f565b60405180910390f35b610372600480360381019061036d91906133b6565b610c33565b005b61037c610d1e565b604051610389919061367b565b60405180910390f35b6103ac60048036038101906103a791906134d4565b610d27565b6040516103b9919061352f565b60405180910390f35b6103ca610dd3565b005b6103e660048036038101906103e19190613696565b610ebb565b005b61040260048036038101906103fd91906133b6565b610faa565b60405161040f919061352f565b60405180910390f35b610432600480360381019061042d91906133b6565b611000565b005b61044e600480360381019061044991906133b6565b6110eb565b60405161045b919061352f565b60405180910390f35b61047e600480360381019061047991906136ef565b611141565b60405161048c92919061372f565b60405180910390f35b61049d6112b2565b6040516104aa919061352f565b60405180910390f35b6104cd60048036038101906104c891906133b6565b6112c8565b6040516104da91906135ac565b60405180910390f35b6104eb611311565b005b610507600480360381019061050291906134d4565b6113fa565b005b61051161151b565b60405161051e9190613767565b60405180910390f35b61052f611545565b60405161053c919061347c565b60405180910390f35b61055f600480360381019061055a91906134d4565b6115d7565b60405161056c919061352f565b60405180910390f35b61058f600480360381019061058a91906134d4565b6116cb565b60405161059c919061352f565b60405180910390f35b6105bf60048036038101906105ba91906133b6565b6116e9565b6040516105cc91906135ac565b60405180910390f35b6105ef60048036038101906105ea91906133b6565b611735565b6040516105fc91906135ac565b60405180910390f35b61061f600480360381019061061a91906133b6565b611887565b60405161062c91906135ac565b60405180910390f35b61064f600480360381019061064a9190613782565b611a44565b005b61066b600480360381019061066691906133b6565b611b3a565b005b610687600480360381019061068291906137e9565b611c25565b60405161069491906135ac565b60405180910390f35b6106b760048036038101906106b291906133b6565b611cac565b005b6106d360048036038101906106ce91906133b6565b611d97565b005b6106ef60048036038101906106ea91906133b6565b611e82565b005b61070b600480360381019061070691906133b6565b611f69565b005b610715612054565b6040516107229190613767565b60405180910390f35b61073361207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990613875565b60405180910390fd5b6107ca6112b2565b1561080a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610801906138e1565b60405180910390fd5b61081381612085565b50565b6060600a805461082590613930565b80601f016020809104026020016040519081016040528092919081815260200182805461085190613930565b801561089e5780601f106108735761010080835404028352916020019161089e565b820191906000526020600020905b81548152906001019060200180831161088157829003601f168201915b5050505050905090565b60006108bc6108b561207d565b8484612123565b6001905092915050565b600360006108d261207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610959576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610950906139d4565b60405180910390fd5b6109616112b2565b156109a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610998906138e1565b60405180910390fd5b6109ac8383836122ee565b505050565b6000600954905090565b60006109c884848461244e565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a1361207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90613a66565b60405180910390fd5b610ab085610a9f61207d565b8584610aab9190613ab5565b612123565b60019150509392505050565b600080600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015493509350935093509193509193565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c3b61207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613875565b60405180910390fd5b610cd26112b2565b15610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d09906138e1565b60405180910390fd5b610d1b816126d0565b50565b60006012905090565b6000610dc9610d3461207d565b848460086000610d4261207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dc49190613ae9565b612123565b6001905092915050565b610ddb61207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6190613875565b60405180910390fd5b610e726112b2565b610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890613b8b565b60405180910390fd5b610eb961276e565b565b60026000610ec761207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590613c1d565b60405180910390fd5b610f566112b2565b15610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d906138e1565b60405180910390fd5b610fa7610fa161207d565b8261280f565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61100861207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613875565b60405180910390fd5b61109f6112b2565b156110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d6906138e1565b60405180910390fd5b6110e8816129d9565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000808260ff16600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011801561119c575060008360ff1610155b6111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290613c89565b60405180910390fd5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360ff168154811061122f5761122e613ca9565b5b906000526020600020906002020160000154600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff168154811061129557611294613ca9565b5b906000526020600020906002020160010154915091509250929050565b60008060009054906101000a900460ff16905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131961207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613875565b60405180910390fd5b6113b06112b2565b156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e7906138e1565b60405180910390fd5b6113f8612a77565b565b61140261207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890613875565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6114b561151b565b836040518363ffffffff1660e01b81526004016114d3929190613cd8565b6020604051808303816000875af11580156114f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115169190613d2d565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b805461155490613930565b80601f016020809104026020016040519081016040528092919081815260200182805461158090613930565b80156115cd5780601f106115a2576101008083540402835291602001916115cd565b820191906000526020600020905b8154815290600101906020018083116115b057829003601f168201915b5050505050905090565b600080600860006115e661207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613dcc565b60405180910390fd5b6116c06116ae61207d565b8585846116bb9190613ab5565b612123565b600191505092915050565b60006116df6116d861207d565b848461244e565b6001905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600080600090506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060005b8181101561187c57600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106117df576117de613ca9565b5b90600052602060002090600202016001015442101561186957600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061184957611848613ca9565b5b906000526020600020906002020160000154836118669190613ae9565b92505b808061187490613dec565b915050611786565b508192505050919050565b600080600090506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000811115611a3a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015490506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154905060006001826119c29190613ab5565b836119cd9190613e35565b846119d89190613ae9565b90506000429050848110156119ef57859650611a34565b81811015611a3357826001858385611a079190613ab5565b611a119190613ebe565b611a1b9190613ae9565b87611a269190613e35565b611a309190613ebe565b96505b5b50505050505b8192505050919050565b60036000611a5061207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace906139d4565b60405180910390fd5b611adf6112b2565b15611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b16906138e1565b60405180910390fd5b611b3484611b2c866112c8565b858585612b19565b50505050565b611b4261207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc890613875565b60405180910390fd5b611bd96112b2565b15611c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c10906138e1565b60405180910390fd5b611c2281612d69565b50565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611cb461207d565b73ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613f61565b60405180910390fd5b611d4b6112b2565b15611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d82906138e1565b60405180910390fd5b611d9481612e07565b50565b611d9f61207d565b73ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613f61565b60405180910390fd5b611e366112b2565b15611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d906138e1565b60405180910390fd5b611e7f81612f37565b50565b60036000611e8e61207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c906139d4565b60405180910390fd5b611f1d6112b2565b15611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f54906138e1565b60405180910390fd5b611f6681613067565b50565b611f7161207d565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff790613875565b60405180910390fd5b6120086112b2565b15612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f906138e1565b60405180910390fd5b61205181613105565b50565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600033905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90613ff3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90614085565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122e191906135ac565b60405180910390a3505050565b60008211612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232890614117565b60405180910390fd5b428111612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a906141a9565b60405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280848152602001838152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508273ffffffffffffffffffffffffffffffffffffffff167fc80fbc3452298019908587d820303825af4187ac57ed90d7328886fd00b2255760405160405180910390a2505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b59061423b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561252e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612525906142cd565b60405180910390fd5b6125398383836131a3565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b79061435f565b60405180910390fd5b81816125cc9190613ab5565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461265e9190613ae9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126c291906135ac565b60405180910390a350505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7e6adfec7e3f286831a0200a754127c171a2da564078722cb97704741bbdb0ea60405160405180910390a250565b6127766112b2565b6127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac90613b8b565b60405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6127f861207d565b6040516128059190613767565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561287f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612876906143f1565b60405180910390fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fd90614483565b60405180910390fd5b81816129129190613ab5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600960008282546129679190613ab5565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129cc91906135ac565b60405180910390a3505050565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7c5af8d36d8be103bc583da8e01d3e98f15216cc7ef38832c7550b34e8feb43a60405160405180910390a250565b612a7f6112b2565b15612abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab6906138e1565b60405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b0261207d565b604051612b0f9190613767565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8090614515565b60405180910390fd5b428311612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc2906145a7565b60405180910390fd5b60008411612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0590614613565b60405180910390fd5b60008211612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c489061467f565b60405180910390fd5b60008111612c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8b906146eb565b60405180910390fd5b604051806080016040528085815260200184815260200183815260200182815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301559050508473ffffffffffffffffffffffffffffffffffffffff167feffac4e68781c4782ae76a41b453f36a8ce3c9c165b5babc8dc0a5fccecb4f5960405160405180910390a25050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f95266445d018e5b30f957c915e91b04bb4a19bf0f8f21020a08dad9be7931df460405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e9061477d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb672a1daaed7f748e93d745145b3a425811d01bd57b1bda907ae08dcd8b6f76960405160405180910390a380600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e9061480f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f44427e3003a08f22cf803894075ac0297524e09e521fc1c15bc91741ce3dc15960405160405180910390a250565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b9456060405160405180910390a250565b6131ae83838361334e565b6131b7836110eb565b156131f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ee906148a1565b60405180910390fd5b613200826110eb565b15613240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323790614933565b60405180910390fd5b61325061324b61207d565b6110eb565b15613290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613287906149c5565b60405180910390fd5b6132986112b2565b156132d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cf90614a57565b60405180910390fd5b806132e284611887565b6132eb85611735565b6132f4866112c8565b6132fe9190613ab5565b6133089190613ab5565b1015613349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334090614ae9565b60405180910390fd5b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061338382613358565b9050919050565b61339381613378565b811461339e57600080fd5b50565b6000813590506133b08161338a565b92915050565b6000602082840312156133cc576133cb613353565b5b60006133da848285016133a1565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561341d578082015181840152602081019050613402565b8381111561342c576000848401525b50505050565b6000601f19601f8301169050919050565b600061344e826133e3565b61345881856133ee565b93506134688185602086016133ff565b61347181613432565b840191505092915050565b600060208201905081810360008301526134968184613443565b905092915050565b6000819050919050565b6134b18161349e565b81146134bc57600080fd5b50565b6000813590506134ce816134a8565b92915050565b600080604083850312156134eb576134ea613353565b5b60006134f9858286016133a1565b925050602061350a858286016134bf565b9150509250929050565b60008115159050919050565b61352981613514565b82525050565b60006020820190506135446000830184613520565b92915050565b60008060006060848603121561356357613562613353565b5b6000613571868287016133a1565b9350506020613582868287016134bf565b9250506040613593868287016134bf565b9150509250925092565b6135a68161349e565b82525050565b60006020820190506135c1600083018461359d565b92915050565b6000806000606084860312156135e0576135df613353565b5b60006135ee868287016133a1565b93505060206135ff868287016133a1565b9250506040613610868287016134bf565b9150509250925092565b600060808201905061362f600083018761359d565b61363c602083018661359d565b613649604083018561359d565b613656606083018461359d565b95945050505050565b600060ff82169050919050565b6136758161365f565b82525050565b6000602082019050613690600083018461366c565b92915050565b6000602082840312156136ac576136ab613353565b5b60006136ba848285016134bf565b91505092915050565b6136cc8161365f565b81146136d757600080fd5b50565b6000813590506136e9816136c3565b92915050565b6000806040838503121561370657613705613353565b5b6000613714858286016133a1565b9250506020613725858286016136da565b9150509250929050565b6000604082019050613744600083018561359d565b613751602083018461359d565b9392505050565b61376181613378565b82525050565b600060208201905061377c6000830184613758565b92915050565b6000806000806080858703121561379c5761379b613353565b5b60006137aa878288016133a1565b94505060206137bb878288016134bf565b93505060406137cc878288016134bf565b92505060606137dd878288016134bf565b91505092959194509250565b60008060408385031215613800576137ff613353565b5b600061380e858286016133a1565b925050602061381f858286016133a1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061385f6020836133ee565b915061386a82613829565b602082019050919050565b6000602082019050818103600083015261388e81613852565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006138cb6010836133ee565b91506138d682613895565b602082019050919050565b600060208201905081810360008301526138fa816138be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061394857607f821691505b6020821081141561395c5761395b613901565b5b50919050565b7f4c6f636b61626c653a2063616c6c6572206973206e6f7420746865206c6f636b60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006139be6022836133ee565b91506139c982613962565b604082019050919050565b600060208201905081810360008301526139ed816139b1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a506028836133ee565b9150613a5b826139f4565b604082019050919050565b60006020820190508181036000830152613a7f81613a43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ac08261349e565b9150613acb8361349e565b925082821015613ade57613add613a86565b5b828203905092915050565b6000613af48261349e565b9150613aff8361349e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3457613b33613a86565b5b828201905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613b756014836133ee565b9150613b8082613b3f565b602082019050919050565b60006020820190508181036000830152613ba481613b68565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206275726e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c076021836133ee565b9150613c1282613bab565b604082019050919050565b60006020820190508181036000830152613c3681613bfa565b9050919050565b7f54696d65204c6f636b3a20696e646578206d7573742062652076616c69640000600082015250565b6000613c73601e836133ee565b9150613c7e82613c3d565b602082019050919050565b60006020820190508181036000830152613ca281613c66565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000604082019050613ced6000830185613758565b613cfa602083018461359d565b9392505050565b613d0a81613514565b8114613d1557600080fd5b50565b600081519050613d2781613d01565b92915050565b600060208284031215613d4357613d42613353565b5b6000613d5184828501613d18565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613db66025836133ee565b9150613dc182613d5a565b604082019050919050565b60006020820190508181036000830152613de581613da9565b9050919050565b6000613df78261349e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e2a57613e29613a86565b5b600182019050919050565b6000613e408261349e565b9150613e4b8361349e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e8457613e83613a86565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ec98261349e565b9150613ed48361349e565b925082613ee457613ee3613e8f565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520686964646560008201527f6e206f776e657200000000000000000000000000000000000000000000000000602082015250565b6000613f4b6027836133ee565b9150613f5682613eef565b604082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613fdd6024836133ee565b9150613fe882613f81565b604082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061406f6022836133ee565b915061407a82614013565b604082019050919050565b6000602082019050818103600083015261409e81614062565b9050919050565b7f54696d65204c6f636b3a206c6f636b20616d6f756e74206d757374206265206760008201527f726561746572207468616e203000000000000000000000000000000000000000602082015250565b6000614101602d836133ee565b915061410c826140a5565b604082019050919050565b60006020820190508181036000830152614130816140f4565b9050919050565b7f54696d65204c6f636b3a206578706972652064617465206d757374206265206c60008201527f61746572207468616e206e6f7700000000000000000000000000000000000000602082015250565b6000614193602d836133ee565b915061419e82614137565b604082019050919050565b600060208201905081810360008301526141c281614186565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142256025836133ee565b9150614230826141c9565b604082019050919050565b6000602082019050818103600083015261425481614218565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142b76023836133ee565b91506142c28261425b565b604082019050919050565b600060208201905081810360008301526142e6816142aa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006143496026836133ee565b9150614354826142ed565b604082019050919050565b600060208201905081810360008301526143788161433c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006143db6021836133ee565b91506143e68261437f565b604082019050919050565b6000602082019050818103600083015261440a816143ce565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061446d6022836133ee565b915061447882614411565b604082019050919050565b6000602082019050818103600083015261449c81614460565b9050919050565b7f496e766573746f72204c6f636b3a206c6f636b2066726f6d20746865207a657260008201527f6f20616464726573730000000000000000000000000000000000000000000000602082015250565b60006144ff6029836133ee565b915061450a826144a3565b604082019050919050565b6000602082019050818103600083015261452e816144f2565b9050919050565b7f496e766573746f72204c6f636b3a206d75737420736574206166746572206e6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006145916021836133ee565b915061459c82614535565b604082019050919050565b600060208201905081810360008301526145c081614584565b9050919050565b7f496e766573746f72204c6f636b3a20616d6f756e742069732030000000000000600082015250565b60006145fd601a836133ee565b9150614608826145c7565b602082019050919050565b6000602082019050818103600083015261462c816145f0565b9050919050565b7f496e766573746f72204c6f636b3a20706572696f642069732030000000000000600082015250565b6000614669601a836133ee565b915061467482614633565b602082019050919050565b600060208201905081810360008301526146988161465c565b9050919050565b7f496e766573746f72204c6f636b3a20636f756e74206973203000000000000000600082015250565b60006146d56019836133ee565b91506146e08261469f565b602082019050919050565b60006020820190508181036000830152614704816146c8565b9050919050565b7f4f776e61626c653a206e65772068696464656e206f776e65722069732074686560008201527f207a65726f206164647265737300000000000000000000000000000000000000602082015250565b6000614767602d836133ee565b91506147728261470b565b604082019050919050565b600060208201905081810360008301526147968161475a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147f96026836133ee565b91506148048261479d565b604082019050919050565b60006020820190508181036000830152614828816147ec565b9050919050565b7f4c6f636b61626c653a20746f6b656e207472616e736665722066726f6d206c6f60008201527f636b6564206163636f756e740000000000000000000000000000000000000000602082015250565b600061488b602c836133ee565b91506148968261482f565b604082019050919050565b600060208201905081810360008301526148ba8161487e565b9050919050565b7f4c6f636b61626c653a20746f6b656e207472616e7366657220746f206c6f636b60008201527f6564206163636f756e7400000000000000000000000000000000000000000000602082015250565b600061491d602a836133ee565b9150614928826148c1565b604082019050919050565b6000602082019050818103600083015261494c81614910565b9050919050565b7f4c6f636b61626c653a20746f6b656e207472616e736665722063616c6c65642060008201527f66726f6d206c6f636b6564206163636f756e7400000000000000000000000000602082015250565b60006149af6033836133ee565b91506149ba82614953565b604082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b7f5061757361626c653a20746f6b656e207472616e73666572207768696c65207060008201527f6175736564000000000000000000000000000000000000000000000000000000602082015250565b6000614a416025836133ee565b9150614a4c826149e5565b604082019050919050565b60006020820190508181036000830152614a7081614a34565b9050919050565b7f4c6f636b61626c653a20746f6b656e207472616e736665722066726f6d20746960008201527f6d65206c6f636b6564206163636f756e74000000000000000000000000000000602082015250565b6000614ad36031836133ee565b9150614ade82614a77565b604082019050919050565b60006020820190508181036000830152614b0281614ac6565b905091905056fea264697066735822122059a0570ab0d54a699627ea77a652e54cbc6813f19ac298f0cc3acc7efb2f2b6a64736f6c634300080c0033
Deployed Bytecode Sourcemap
29426:4274:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31440:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8698:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10865:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32747:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9818:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11516:456;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27899:349;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;22770:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32579:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9660:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12381:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31920:76;;;:::i;:::-;;31609:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20685:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32061;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23369:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25489:291;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1697:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9989:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31780:75;;;:::i;:::-;;29841:152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18757:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8917:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13099:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10329:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25168:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25964:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28555:821;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33234:255;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32234:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10567:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31049:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30833:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32413:96;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31267:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18924:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31440:111;19158:12;:10;:12::i;:::-;19148:22;;:6;;;;;;;;;;;:22;;;19140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31521:22:::2;31535:7;31521:13;:22::i;:::-;31440:111:::0;:::o;8698:100::-;8752:13;8785:5;8778:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8698:100;:::o;10865:169::-;10948:4;10965:39;10974:12;:10;:12::i;:::-;10988:7;10997:6;10965:8;:39::i;:::-;11022:4;11015:11;;10865:169;;;;:::o;32747:198::-;22611:8;:22;22620:12;:10;:12::i;:::-;22611:22;;;;;;;;;;;;;;;;;;;;;;;;;22603:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32897:40:::2;32910:7;32919:6;32927:9;32897:12;:40::i;:::-;32747:198:::0;;;:::o;9818:108::-;9879:7;9906:12;;9899:19;;9818:108;:::o;11516:456::-;11656:4;11673:36;11683:6;11691:9;11702:6;11673:9;:36::i;:::-;11722:24;11749:11;:19;11761:6;11749:19;;;;;;;;;;;;;;;:33;11769:12;:10;:12::i;:::-;11749:33;;;;;;;;;;;;;;;;11722:60;;11821:6;11801:16;:26;;11793:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11883:57;11892:6;11900:12;:10;:12::i;:::-;11933:6;11914:16;:25;;;;:::i;:::-;11883:8;:57::i;:::-;11960:4;11953:11;;;11516:456;;;;;:::o;27899:349::-;28003:7;28025;28047;28069;28112:14;:23;28127:7;28112:23;;;;;;;;;;;;;;;:30;;;28144:14;:23;28159:7;28144:23;;;;;;;;;;;;;;;:32;;;28178:14;:23;28193:7;28178:23;;;;;;;;;;;;;;;:30;;;28210:14;:23;28225:7;28210:23;;;;;;;;;;;;;;;:29;;;28104:136;;;;;;;;27899:349;;;;;:::o;22770:105::-;22826:4;22850:8;:17;22859:7;22850:17;;;;;;;;;;;;;;;;;;;;;;;;;22843:24;;22770:105;;;:::o;32579:99::-;19158:12;:10;:12::i;:::-;19148:22;;:6;;;;;;;;;;;:22;;;19140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32654:16:::2;32662:7;32654;:16::i;:::-;32579:99:::0;:::o;9660:93::-;9718:5;9743:2;9736:9;;9660:93;:::o;12381:215::-;12469:4;12486:80;12495:12;:10;:12::i;:::-;12509:7;12555:10;12518:11;:25;12530:12;:10;:12::i;:::-;12518:25;;;;;;;;;;;;;;;:34;12544:7;12518:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12486:8;:80::i;:::-;12584:4;12577:11;;12381:215;;;;:::o;31920:76::-;19158:12;:10;:12::i;:::-;19148:22;;:6;;;;;;;;;;;:22;;;19140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2300:8:::1;:6;:8::i;:::-;2292:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;31978:10:::2;:8;:10::i;:::-;31920:76::o:0;31609:108::-;20925:8;:22;20934:12;:10;:12::i;:::-;20925:22;;;;;;;;;;;;;;;;;;;;;;;;;20917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31682:27:::2;31688:12;:10;:12::i;:::-;31702:6;31682:5;:27::i;:::-;31609:108:::0;:::o;20685:105::-;20741:4;20765:8;:17;20774:7;20765:17;;;;;;;;;;;;;;;;;;;;;;;;;20758:24;;20685:105;;;:::o;32061:::-;19158:12;:10;:12::i;:::-;19148:22;;:6;;;;;;;;;;;:22;;;19140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32139:19:::2;32150:7;32139:10;:19::i;:::-;32061:105:::0;:::o;23369:103::-;23425:4;23449:6;:15;23456:7;23449:15;;;;;;;;;;;;;;;;;;;;;;;;;23442:22;;23369:103;;;:::o;25489:291::-;25561:7;25570;25627:5;25598:34;;:10;:19;25609:7;25598:19;;;;;;;;;;;;;;;:26;;;;:34;:48;;;;;25645:1;25636:5;:10;;;;25598:48;25590:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25700:10;:19;25711:7;25700:19;;;;;;;;;;;;;;;25720:5;25700:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;;25735:10;:19;25746:7;25735:19;;;;;;;;;;;;;;;25755:5;25735:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;25692:80;;;;25489:291;;;;;:::o;1697:86::-;1744:4;1768:7;;;;;;;;;;;1761:14;;1697:86;:::o;9989:127::-;10063:7;10090:9;:18;10100:7;10090:18;;;;;;;;;;;;;;;;10083:25;;9989:127;;;:::o;31780:75::-;19158:12;:10;:12::i;:::-;19148:22;;:6;;;;;;;;;;;:22;;;19140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31839:8:::2;:6;:8::i;:::-;31780:75::o:0;29841:152::-;19158:12;:10;:12::i;:::-;19148:22;;:6;;;;;;;;;;;:22;;;19140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29941:12:::1;29934:29;;;29964:7;:5;:7::i;:::-;29973:11;29934:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29841:152:::0;;:::o;18757:79::-;18795:7;18822:6;;;;;;;;;;;18815:13;;18757:79;:::o;8917:104::-;8973:13;9006:7;8999:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8917:104;:::o;13099:377::-;13192:4;13209:24;13236:11;:25;13248:12;:10;:12::i;:::-;13236:25;;;;;;;;;;;;;;;:34;13262:7;13236:34;;;;;;;;;;;;;;;;13209:61;;13309:15;13289:16;:35;;13281:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13377:67;13386:12;:10;:12::i;:::-;13400:7;13428:15;13409:16;:34;;;;:::i;:::-;13377:8;:67::i;:::-;13464:4;13457:11;;;13099:377;;;;:::o;10329:175::-;10415:4;10432:42;10442:12;:10;:12::i;:::-;10456:9;10467:6;10432:9;:42::i;:::-;10492:4;10485:11;;10329:175;;;;:::o;25168:126::-;25233:7;25260:10;:19;25271:7;25260:19;;;;;;;;;;;;;;;:26;;;;25253:33;;25168:126;;;:::o;25964:438::-;26031:7;26051:24;26078:1;26051:28;;26092:11;26106:10;:19;26117:7;26106:19;;;;;;;;;;;;;;;:26;;;;26092:40;;26148:9;26143:218;26167:3;26163:1;:7;26143:218;;;26214:10;:19;26225:7;26214:19;;;;;;;;;;;;;;;26234:1;26214:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;;26196:15;:50;26192:158;;;26305:10;:19;26316:7;26305:19;;;;;;;;;;;;;;;26325:1;26305:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;;26286:16;:48;;;;:::i;:::-;26267:67;;26192:158;26172:3;;;;;:::i;:::-;;;;26143:218;;;;26378:16;26371:23;;;;25964:438;;;:::o;28555:821::-;28626:7;28646:28;28677:1;28646:32;;28689:14;28706;:23;28721:7;28706:23;;;;;;;;;;;;;;;:30;;;28689:47;;28760:1;28751:6;:10;28747:584;;;28778:16;28797:14;:23;28812:7;28797:23;;;;;;;;;;;;;;;:32;;;28778:51;;28844:14;28861;:23;28876:7;28861:23;;;;;;;;;;;;;;;:30;;;28844:47;;28906:13;28922:14;:23;28937:7;28922:23;;;;;;;;;;;;;;;:29;;;28906:45;;28966:17;29015:1;29007:5;:9;;;;:::i;:::-;28997:6;:20;;;;:::i;:::-;28986:8;:31;;;;:::i;:::-;28966:51;;29032:17;29052:15;29032:35;;29098:8;29086:9;:20;29082:238;;;29150:6;29127:29;;29082:238;;;29194:9;29182;:21;29178:142;;;29299:5;29293:1;29284:6;29271:9;29259;:21;;;;:::i;:::-;29258:32;;;;:::i;:::-;:36;;;;:::i;:::-;29248:6;:47;;;;:::i;:::-;29247:57;;;;:::i;:::-;29224:80;;29178:142;29082:238;28763:568;;;;;28747:584;29348:20;29341:27;;;;28555:821;;;:::o;33234:255::-;22611:8;:22;22620:12;:10;:12::i;:::-;22611:22;;;;;;;;;;;;;;;;;;;;;;;;;22603:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33411:70:::2;33428:7;33437:18;33447:7;33437:9;:18::i;:::-;33457:8;33467:6;33475:5;33411:16;:70::i;:::-;33234:255:::0;;;;:::o;32234:111::-;19158:12;:10;:12::i;:::-;19148:22;;:6;;;;;;;;;;;:22;;;19140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32315:22:::2;32329:7;32315:13;:22::i;:::-;32234:111:::0;:::o;10567:151::-;10656:7;10683:11;:18;10695:5;10683:18;;;;;;;;;;;;;;;:27;10702:7;10683:27;;;;;;;;;;;;;;;;10676:34;;10567:151;;;;:::o;31049:153::-;19389:12;:10;:12::i;:::-;19373:28;;:12;;;;;;;;;;;:28;;;19365:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31154:40:::2;31179:14;31154:24;:40::i;:::-;31049:153:::0;:::o;30833:129::-;19389:12;:10;:12::i;:::-;19373:28;;:12;;;;;;;;;;;:28;;;19365:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;30926:28:::2;30945:8;30926:18;:28::i;:::-;30833:129:::0;:::o;32413:96::-;22611:8;:22;22620:12;:10;:12::i;:::-;22611:22;;;;;;;;;;;;;;;;;;;;;;;;;22603:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32487:14:::2;32493:7;32487:5;:14::i;:::-;32413:96:::0;:::o;31267:105::-;19158:12;:10;:12::i;:::-;19148:22;;:6;;;;;;;;;;;:22;;;19140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:8:::1;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31345:19:::2;31356:7;31345:10;:19::i;:::-;31267:105:::0;:::o;18924:91::-;18968:7;18995:12;;;;;;;;;;;18988:19;;18924:91;:::o;601:98::-;654:7;681:10;674:17;;601:98;:::o;21295:131::-;21375:5;21355:8;:17;21364:7;21355:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;21410:7;21396:22;;;;;;;;;;;;21295:131;:::o;16365:380::-;16518:1;16501:19;;:5;:19;;;;16493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16599:1;16580:21;;:7;:21;;;;16572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16683:6;16653:11;:18;16665:5;16653:18;;;;;;;;;;;;;;;:27;16672:7;16653:27;;;;;;;;;;;;;;;:36;;;;16721:7;16705:32;;16714:5;16705:32;;;16730:6;16705:32;;;;;;:::i;:::-;;;;;;;;16365:380;;;:::o;23929:399::-;24074:1;24065:6;:10;24057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24156:15;24144:9;:27;24136:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;24232:10;:19;24243:7;24232:19;;;;;;;;;;;;;;;24257:27;;;;;;;;24266:6;24257:27;;;;24274:9;24257:27;;;24232:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24312:7;24301:19;;;;;;;;;;;;23929:399;;;:::o;13966:638::-;14124:1;14106:20;;:6;:20;;;;14098:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14208:1;14187:23;;:9;:23;;;;14179:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14263:47;14284:6;14292:9;14303:6;14263:20;:47::i;:::-;14323:21;14347:9;:17;14357:6;14347:17;;;;;;;;;;;;;;;;14323:41;;14400:6;14383:13;:23;;14375:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14496:6;14480:13;:22;;;;:::i;:::-;14460:9;:17;14470:6;14460:17;;;;;;;;;;;;;;;:42;;;;14537:6;14513:9;:20;14523:9;14513:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14578:9;14561:35;;14570:6;14561:35;;;14589:6;14561:35;;;;;;:::i;:::-;;;;;;;;14087:517;13966:638;;;:::o;23737:118::-;23809:5;23791:6;:15;23798:7;23791:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;23839:7;23830:17;;;;;;;;;;;;23737:118;:::o;2756:120::-;2300:8;:6;:8::i;:::-;2292:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;2825:5:::1;2815:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;2846:22;2855:12;:10;:12::i;:::-;2846:22;;;;;;:::i;:::-;;;;;;;;2756:120::o:0;15495:432::-;15598:1;15579:21;;:7;:21;;;;15571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15651:22;15676:9;:18;15686:7;15676:18;;;;;;;;;;;;;;;;15651:43;;15731:6;15713:14;:24;;15705:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15825:6;15808:14;:23;;;;:::i;:::-;15787:9;:18;15797:7;15787:18;;;;;;;;;;;;;;;:44;;;;15858:6;15842:12;;:22;;;;;;;:::i;:::-;;;;;;;;15908:1;15882:37;;15891:7;15882:37;;;15912:6;15882:37;;;;;;:::i;:::-;;;;;;;;15560:367;15495:432;;:::o;22952:125::-;23029:4;23009:8;:17;23018:7;23009:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;23061:7;23049:20;;;;;;;;;;;;22952:125;:::o;2497:118::-;2023:8;:6;:8::i;:::-;2022:9;2014:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2567:4:::1;2557:7;::::0;:14:::1;;;;;;;;;;;;;;;;;;2587:20;2594:12;:10;:12::i;:::-;2587:20;;;;;;:::i;:::-;;;;;;;;2497:118::o:0;26755:645::-;26962:1;26943:21;;:7;:21;;;;26935:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27040:15;27029:8;:26;27021:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;27121:1;27112:6;:10;27104:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;27181:1;27172:6;:10;27164:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;27240:1;27232:5;:9;27224:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;27308:45;;;;;;;;27321:6;27308:45;;;;27329:8;27308:45;;;;27339:6;27308:45;;;;27347:5;27308:45;;;27282:14;:23;27297:7;27282:23;;;;;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27384:7;27369:23;;;;;;;;;;;;26755:645;;;;;:::o;23160:131::-;23240:5;23220:8;:17;23229:7;23220:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;23275:7;23261:22;;;;;;;;;;;;23160:131;:::o;19919:278::-;20031:1;20005:28;;:14;:28;;;;19997:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;20134:14;20099:50;;20126:6;;;;;;;;;;;20099:50;;;;;;;;;;;;20175:14;20160:12;;:29;;;;;;;;;;;;;;;;;;19919:278;:::o;19571:229::-;19665:1;19645:22;;:8;:22;;;;19637:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19755:8;19726:38;;19747:6;;;;;;;;;;;19726:38;;;;;;;;;;;;19784:8;19775:6;;:17;;;;;;;;;;;;;;;;;;19571:229;:::o;23546:113::-;23616:4;23598:6;:15;23605:7;23598:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;23643:7;23636:15;;;;;;;;;;;;23546:113;:::o;21083:125::-;21160:4;21140:8;:17;21149:7;21140:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;21192:7;21180:20;;;;;;;;;;;;21083:125;:::o;30069:684::-;30211:44;30238:4;30244:2;30248:6;30211:26;:44::i;:::-;30277:14;30286:4;30277:8;:14::i;:::-;30276:15;30268:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;30360:12;30369:2;30360:8;:12::i;:::-;30359:13;30351:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30439:22;30448:12;:10;:12::i;:::-;30439:8;:22::i;:::-;30438:23;30430:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;30537:8;:6;:8::i;:::-;30536:9;30528:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;30685:6;30652:29;30676:4;30652:23;:29::i;:::-;30624:25;30644:4;30624:19;:25::i;:::-;30606:15;30616:4;30606:9;:15::i;:::-;:43;;;;:::i;:::-;:75;;;;:::i;:::-;:85;;30598:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;30069:684;;;:::o;17348:125::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:307::-;1524:1;1534:113;1548:6;1545:1;1542:13;1534:113;;;1633:1;1628:3;1624:11;1618:18;1614:1;1609:3;1605:11;1598:39;1570:2;1567:1;1563:10;1558:15;;1534:113;;;1665:6;1662:1;1659:13;1656:101;;;1745:1;1736:6;1731:3;1727:16;1720:27;1656:101;1505:258;1456:307;;;:::o;1769:102::-;1810:6;1861:2;1857:7;1852:2;1845:5;1841:14;1837:28;1827:38;;1769:102;;;:::o;1877:364::-;1965:3;1993:39;2026:5;1993:39;:::i;:::-;2048:71;2112:6;2107:3;2048:71;:::i;:::-;2041:78;;2128:52;2173:6;2168:3;2161:4;2154:5;2150:16;2128:52;:::i;:::-;2205:29;2227:6;2205:29;:::i;:::-;2200:3;2196:39;2189:46;;1969:272;1877:364;;;;:::o;2247:313::-;2360:4;2398:2;2387:9;2383:18;2375:26;;2447:9;2441:4;2437:20;2433:1;2422:9;2418:17;2411:47;2475:78;2548:4;2539:6;2475:78;:::i;:::-;2467:86;;2247:313;;;;:::o;2566:77::-;2603:7;2632:5;2621:16;;2566:77;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:619::-;3906:6;3914;3922;3971:2;3959:9;3950:7;3946:23;3942:32;3939:119;;;3977:79;;:::i;:::-;3939:119;4097:1;4122:53;4167:7;4158:6;4147:9;4143:22;4122:53;:::i;:::-;4112:63;;4068:117;4224:2;4250:53;4295:7;4286:6;4275:9;4271:22;4250:53;:::i;:::-;4240:63;;4195:118;4352:2;4378:53;4423:7;4414:6;4403:9;4399:22;4378:53;:::i;:::-;4368:63;;4323:118;3829:619;;;;;:::o;4454:118::-;4541:24;4559:5;4541:24;:::i;:::-;4536:3;4529:37;4454:118;;:::o;4578:222::-;4671:4;4709:2;4698:9;4694:18;4686:26;;4722:71;4790:1;4779:9;4775:17;4766:6;4722:71;:::i;:::-;4578:222;;;;:::o;4806:619::-;4883:6;4891;4899;4948:2;4936:9;4927:7;4923:23;4919:32;4916:119;;;4954:79;;:::i;:::-;4916:119;5074:1;5099:53;5144:7;5135:6;5124:9;5120:22;5099:53;:::i;:::-;5089:63;;5045:117;5201:2;5227:53;5272:7;5263:6;5252:9;5248:22;5227:53;:::i;:::-;5217:63;;5172:118;5329:2;5355:53;5400:7;5391:6;5380:9;5376:22;5355:53;:::i;:::-;5345:63;;5300:118;4806:619;;;;;:::o;5431:553::-;5608:4;5646:3;5635:9;5631:19;5623:27;;5660:71;5728:1;5717:9;5713:17;5704:6;5660:71;:::i;:::-;5741:72;5809:2;5798:9;5794:18;5785:6;5741:72;:::i;:::-;5823;5891:2;5880:9;5876:18;5867:6;5823:72;:::i;:::-;5905;5973:2;5962:9;5958:18;5949:6;5905:72;:::i;:::-;5431:553;;;;;;;:::o;5990:86::-;6025:7;6065:4;6058:5;6054:16;6043:27;;5990:86;;;:::o;6082:112::-;6165:22;6181:5;6165:22;:::i;:::-;6160:3;6153:35;6082:112;;:::o;6200:214::-;6289:4;6327:2;6316:9;6312:18;6304:26;;6340:67;6404:1;6393:9;6389:17;6380:6;6340:67;:::i;:::-;6200:214;;;;:::o;6420:329::-;6479:6;6528:2;6516:9;6507:7;6503:23;6499:32;6496:119;;;6534:79;;:::i;:::-;6496:119;6654:1;6679:53;6724:7;6715:6;6704:9;6700:22;6679:53;:::i;:::-;6669:63;;6625:117;6420:329;;;;:::o;6755:118::-;6826:22;6842:5;6826:22;:::i;:::-;6819:5;6816:33;6806:61;;6863:1;6860;6853:12;6806:61;6755:118;:::o;6879:135::-;6923:5;6961:6;6948:20;6939:29;;6977:31;7002:5;6977:31;:::i;:::-;6879:135;;;;:::o;7020:470::-;7086:6;7094;7143:2;7131:9;7122:7;7118:23;7114:32;7111:119;;;7149:79;;:::i;:::-;7111:119;7269:1;7294:53;7339:7;7330:6;7319:9;7315:22;7294:53;:::i;:::-;7284:63;;7240:117;7396:2;7422:51;7465:7;7456:6;7445:9;7441:22;7422:51;:::i;:::-;7412:61;;7367:116;7020:470;;;;;:::o;7496:332::-;7617:4;7655:2;7644:9;7640:18;7632:26;;7668:71;7736:1;7725:9;7721:17;7712:6;7668:71;:::i;:::-;7749:72;7817:2;7806:9;7802:18;7793:6;7749:72;:::i;:::-;7496:332;;;;;:::o;7834:118::-;7921:24;7939:5;7921:24;:::i;:::-;7916:3;7909:37;7834:118;;:::o;7958:222::-;8051:4;8089:2;8078:9;8074:18;8066:26;;8102:71;8170:1;8159:9;8155:17;8146:6;8102:71;:::i;:::-;7958:222;;;;:::o;8186:765::-;8272:6;8280;8288;8296;8345:3;8333:9;8324:7;8320:23;8316:33;8313:120;;;8352:79;;:::i;:::-;8313:120;8472:1;8497:53;8542:7;8533:6;8522:9;8518:22;8497:53;:::i;:::-;8487:63;;8443:117;8599:2;8625:53;8670:7;8661:6;8650:9;8646:22;8625:53;:::i;:::-;8615:63;;8570:118;8727:2;8753:53;8798:7;8789:6;8778:9;8774:22;8753:53;:::i;:::-;8743:63;;8698:118;8855:2;8881:53;8926:7;8917:6;8906:9;8902:22;8881:53;:::i;:::-;8871:63;;8826:118;8186:765;;;;;;;:::o;8957:474::-;9025:6;9033;9082:2;9070:9;9061:7;9057:23;9053:32;9050:119;;;9088:79;;:::i;:::-;9050:119;9208:1;9233:53;9278:7;9269:6;9258:9;9254:22;9233:53;:::i;:::-;9223:63;;9179:117;9335:2;9361:53;9406:7;9397:6;9386:9;9382:22;9361:53;:::i;:::-;9351:63;;9306:118;8957:474;;;;;:::o;9437:182::-;9577:34;9573:1;9565:6;9561:14;9554:58;9437:182;:::o;9625:366::-;9767:3;9788:67;9852:2;9847:3;9788:67;:::i;:::-;9781:74;;9864:93;9953:3;9864:93;:::i;:::-;9982:2;9977:3;9973:12;9966:19;;9625:366;;;:::o;9997:419::-;10163:4;10201:2;10190:9;10186:18;10178:26;;10250:9;10244:4;10240:20;10236:1;10225:9;10221:17;10214:47;10278:131;10404:4;10278:131;:::i;:::-;10270:139;;9997:419;;;:::o;10422:166::-;10562:18;10558:1;10550:6;10546:14;10539:42;10422:166;:::o;10594:366::-;10736:3;10757:67;10821:2;10816:3;10757:67;:::i;:::-;10750:74;;10833:93;10922:3;10833:93;:::i;:::-;10951:2;10946:3;10942:12;10935:19;;10594:366;;;:::o;10966:419::-;11132:4;11170:2;11159:9;11155:18;11147:26;;11219:9;11213:4;11209:20;11205:1;11194:9;11190:17;11183:47;11247:131;11373:4;11247:131;:::i;:::-;11239:139;;10966:419;;;:::o;11391:180::-;11439:77;11436:1;11429:88;11536:4;11533:1;11526:15;11560:4;11557:1;11550:15;11577:320;11621:6;11658:1;11652:4;11648:12;11638:22;;11705:1;11699:4;11695:12;11726:18;11716:81;;11782:4;11774:6;11770:17;11760:27;;11716:81;11844:2;11836:6;11833:14;11813:18;11810:38;11807:84;;;11863:18;;:::i;:::-;11807:84;11628:269;11577:320;;;:::o;11903:221::-;12043:34;12039:1;12031:6;12027:14;12020:58;12112:4;12107:2;12099:6;12095:15;12088:29;11903:221;:::o;12130:366::-;12272:3;12293:67;12357:2;12352:3;12293:67;:::i;:::-;12286:74;;12369:93;12458:3;12369:93;:::i;:::-;12487:2;12482:3;12478:12;12471:19;;12130:366;;;:::o;12502:419::-;12668:4;12706:2;12695:9;12691:18;12683:26;;12755:9;12749:4;12745:20;12741:1;12730:9;12726:17;12719:47;12783:131;12909:4;12783:131;:::i;:::-;12775:139;;12502:419;;;:::o;12927:227::-;13067:34;13063:1;13055:6;13051:14;13044:58;13136:10;13131:2;13123:6;13119:15;13112:35;12927:227;:::o;13160:366::-;13302:3;13323:67;13387:2;13382:3;13323:67;:::i;:::-;13316:74;;13399:93;13488:3;13399:93;:::i;:::-;13517:2;13512:3;13508:12;13501:19;;13160:366;;;:::o;13532:419::-;13698:4;13736:2;13725:9;13721:18;13713:26;;13785:9;13779:4;13775:20;13771:1;13760:9;13756:17;13749:47;13813:131;13939:4;13813:131;:::i;:::-;13805:139;;13532:419;;;:::o;13957:180::-;14005:77;14002:1;13995:88;14102:4;14099:1;14092:15;14126:4;14123:1;14116:15;14143:191;14183:4;14203:20;14221:1;14203:20;:::i;:::-;14198:25;;14237:20;14255:1;14237:20;:::i;:::-;14232:25;;14276:1;14273;14270:8;14267:34;;;14281:18;;:::i;:::-;14267:34;14326:1;14323;14319:9;14311:17;;14143:191;;;;:::o;14340:305::-;14380:3;14399:20;14417:1;14399:20;:::i;:::-;14394:25;;14433:20;14451:1;14433:20;:::i;:::-;14428:25;;14587:1;14519:66;14515:74;14512:1;14509:81;14506:107;;;14593:18;;:::i;:::-;14506:107;14637:1;14634;14630:9;14623:16;;14340:305;;;;:::o;14651:170::-;14791:22;14787:1;14779:6;14775:14;14768:46;14651:170;:::o;14827:366::-;14969:3;14990:67;15054:2;15049:3;14990:67;:::i;:::-;14983:74;;15066:93;15155:3;15066:93;:::i;:::-;15184:2;15179:3;15175:12;15168:19;;14827:366;;;:::o;15199:419::-;15365:4;15403:2;15392:9;15388:18;15380:26;;15452:9;15446:4;15442:20;15438:1;15427:9;15423:17;15416:47;15480:131;15606:4;15480:131;:::i;:::-;15472:139;;15199:419;;;:::o;15624:220::-;15764:34;15760:1;15752:6;15748:14;15741:58;15833:3;15828:2;15820:6;15816:15;15809:28;15624:220;:::o;15850:366::-;15992:3;16013:67;16077:2;16072:3;16013:67;:::i;:::-;16006:74;;16089:93;16178:3;16089:93;:::i;:::-;16207:2;16202:3;16198:12;16191:19;;15850:366;;;:::o;16222:419::-;16388:4;16426:2;16415:9;16411:18;16403:26;;16475:9;16469:4;16465:20;16461:1;16450:9;16446:17;16439:47;16503:131;16629:4;16503:131;:::i;:::-;16495:139;;16222:419;;;:::o;16647:180::-;16787:32;16783:1;16775:6;16771:14;16764:56;16647:180;:::o;16833:366::-;16975:3;16996:67;17060:2;17055:3;16996:67;:::i;:::-;16989:74;;17072:93;17161:3;17072:93;:::i;:::-;17190:2;17185:3;17181:12;17174:19;;16833:366;;;:::o;17205:419::-;17371:4;17409:2;17398:9;17394:18;17386:26;;17458:9;17452:4;17448:20;17444:1;17433:9;17429:17;17422:47;17486:131;17612:4;17486:131;:::i;:::-;17478:139;;17205:419;;;:::o;17630:180::-;17678:77;17675:1;17668:88;17775:4;17772:1;17765:15;17799:4;17796:1;17789:15;17816:332;17937:4;17975:2;17964:9;17960:18;17952:26;;17988:71;18056:1;18045:9;18041:17;18032:6;17988:71;:::i;:::-;18069:72;18137:2;18126:9;18122:18;18113:6;18069:72;:::i;:::-;17816:332;;;;;:::o;18154:116::-;18224:21;18239:5;18224:21;:::i;:::-;18217:5;18214:32;18204:60;;18260:1;18257;18250:12;18204:60;18154:116;:::o;18276:137::-;18330:5;18361:6;18355:13;18346:22;;18377:30;18401:5;18377:30;:::i;:::-;18276:137;;;;:::o;18419:345::-;18486:6;18535:2;18523:9;18514:7;18510:23;18506:32;18503:119;;;18541:79;;:::i;:::-;18503:119;18661:1;18686:61;18739:7;18730:6;18719:9;18715:22;18686:61;:::i;:::-;18676:71;;18632:125;18419:345;;;;:::o;18770:224::-;18910:34;18906:1;18898:6;18894:14;18887:58;18979:7;18974:2;18966:6;18962:15;18955:32;18770:224;:::o;19000:366::-;19142:3;19163:67;19227:2;19222:3;19163:67;:::i;:::-;19156:74;;19239:93;19328:3;19239:93;:::i;:::-;19357:2;19352:3;19348:12;19341:19;;19000:366;;;:::o;19372:419::-;19538:4;19576:2;19565:9;19561:18;19553:26;;19625:9;19619:4;19615:20;19611:1;19600:9;19596:17;19589:47;19653:131;19779:4;19653:131;:::i;:::-;19645:139;;19372:419;;;:::o;19797:233::-;19836:3;19859:24;19877:5;19859:24;:::i;:::-;19850:33;;19905:66;19898:5;19895:77;19892:103;;;19975:18;;:::i;:::-;19892:103;20022:1;20015:5;20011:13;20004:20;;19797:233;;;:::o;20036:348::-;20076:7;20099:20;20117:1;20099:20;:::i;:::-;20094:25;;20133:20;20151:1;20133:20;:::i;:::-;20128:25;;20321:1;20253:66;20249:74;20246:1;20243:81;20238:1;20231:9;20224:17;20220:105;20217:131;;;20328:18;;:::i;:::-;20217:131;20376:1;20373;20369:9;20358:20;;20036:348;;;;:::o;20390:180::-;20438:77;20435:1;20428:88;20535:4;20532:1;20525:15;20559:4;20556:1;20549:15;20576:185;20616:1;20633:20;20651:1;20633:20;:::i;:::-;20628:25;;20667:20;20685:1;20667:20;:::i;:::-;20662:25;;20706:1;20696:35;;20711:18;;:::i;:::-;20696:35;20753:1;20750;20746:9;20741:14;;20576:185;;;;:::o;20767:226::-;20907:34;20903:1;20895:6;20891:14;20884:58;20976:9;20971:2;20963:6;20959:15;20952:34;20767:226;:::o;20999:366::-;21141:3;21162:67;21226:2;21221:3;21162:67;:::i;:::-;21155:74;;21238:93;21327:3;21238:93;:::i;:::-;21356:2;21351:3;21347:12;21340:19;;20999:366;;;:::o;21371:419::-;21537:4;21575:2;21564:9;21560:18;21552:26;;21624:9;21618:4;21614:20;21610:1;21599:9;21595:17;21588:47;21652:131;21778:4;21652:131;:::i;:::-;21644:139;;21371:419;;;:::o;21796:223::-;21936:34;21932:1;21924:6;21920:14;21913:58;22005:6;22000:2;21992:6;21988:15;21981:31;21796:223;:::o;22025:366::-;22167:3;22188:67;22252:2;22247:3;22188:67;:::i;:::-;22181:74;;22264:93;22353:3;22264:93;:::i;:::-;22382:2;22377:3;22373:12;22366:19;;22025:366;;;:::o;22397:419::-;22563:4;22601:2;22590:9;22586:18;22578:26;;22650:9;22644:4;22640:20;22636:1;22625:9;22621:17;22614:47;22678:131;22804:4;22678:131;:::i;:::-;22670:139;;22397:419;;;:::o;22822:221::-;22962:34;22958:1;22950:6;22946:14;22939:58;23031:4;23026:2;23018:6;23014:15;23007:29;22822:221;:::o;23049:366::-;23191:3;23212:67;23276:2;23271:3;23212:67;:::i;:::-;23205:74;;23288:93;23377:3;23288:93;:::i;:::-;23406:2;23401:3;23397:12;23390:19;;23049:366;;;:::o;23421:419::-;23587:4;23625:2;23614:9;23610:18;23602:26;;23674:9;23668:4;23664:20;23660:1;23649:9;23645:17;23638:47;23702:131;23828:4;23702:131;:::i;:::-;23694:139;;23421:419;;;:::o;23846:232::-;23986:34;23982:1;23974:6;23970:14;23963:58;24055:15;24050:2;24042:6;24038:15;24031:40;23846:232;:::o;24084:366::-;24226:3;24247:67;24311:2;24306:3;24247:67;:::i;:::-;24240:74;;24323:93;24412:3;24323:93;:::i;:::-;24441:2;24436:3;24432:12;24425:19;;24084:366;;;:::o;24456:419::-;24622:4;24660:2;24649:9;24645:18;24637:26;;24709:9;24703:4;24699:20;24695:1;24684:9;24680:17;24673:47;24737:131;24863:4;24737:131;:::i;:::-;24729:139;;24456:419;;;:::o;24881:232::-;25021:34;25017:1;25009:6;25005:14;24998:58;25090:15;25085:2;25077:6;25073:15;25066:40;24881:232;:::o;25119:366::-;25261:3;25282:67;25346:2;25341:3;25282:67;:::i;:::-;25275:74;;25358:93;25447:3;25358:93;:::i;:::-;25476:2;25471:3;25467:12;25460:19;;25119:366;;;:::o;25491:419::-;25657:4;25695:2;25684:9;25680:18;25672:26;;25744:9;25738:4;25734:20;25730:1;25719:9;25715:17;25708:47;25772:131;25898:4;25772:131;:::i;:::-;25764:139;;25491:419;;;:::o;25916:224::-;26056:34;26052:1;26044:6;26040:14;26033:58;26125:7;26120:2;26112:6;26108:15;26101:32;25916:224;:::o;26146:366::-;26288:3;26309:67;26373:2;26368:3;26309:67;:::i;:::-;26302:74;;26385:93;26474:3;26385:93;:::i;:::-;26503:2;26498:3;26494:12;26487:19;;26146:366;;;:::o;26518:419::-;26684:4;26722:2;26711:9;26707:18;26699:26;;26771:9;26765:4;26761:20;26757:1;26746:9;26742:17;26735:47;26799:131;26925:4;26799:131;:::i;:::-;26791:139;;26518:419;;;:::o;26943:222::-;27083:34;27079:1;27071:6;27067:14;27060:58;27152:5;27147:2;27139:6;27135:15;27128:30;26943:222;:::o;27171:366::-;27313:3;27334:67;27398:2;27393:3;27334:67;:::i;:::-;27327:74;;27410:93;27499:3;27410:93;:::i;:::-;27528:2;27523:3;27519:12;27512:19;;27171:366;;;:::o;27543:419::-;27709:4;27747:2;27736:9;27732:18;27724:26;;27796:9;27790:4;27786:20;27782:1;27771:9;27767:17;27760:47;27824:131;27950:4;27824:131;:::i;:::-;27816:139;;27543:419;;;:::o;27968:225::-;28108:34;28104:1;28096:6;28092:14;28085:58;28177:8;28172:2;28164:6;28160:15;28153:33;27968:225;:::o;28199:366::-;28341:3;28362:67;28426:2;28421:3;28362:67;:::i;:::-;28355:74;;28438:93;28527:3;28438:93;:::i;:::-;28556:2;28551:3;28547:12;28540:19;;28199:366;;;:::o;28571:419::-;28737:4;28775:2;28764:9;28760:18;28752:26;;28824:9;28818:4;28814:20;28810:1;28799:9;28795:17;28788:47;28852:131;28978:4;28852:131;:::i;:::-;28844:139;;28571:419;;;:::o;28996:220::-;29136:34;29132:1;29124:6;29120:14;29113:58;29205:3;29200:2;29192:6;29188:15;29181:28;28996:220;:::o;29222:366::-;29364:3;29385:67;29449:2;29444:3;29385:67;:::i;:::-;29378:74;;29461:93;29550:3;29461:93;:::i;:::-;29579:2;29574:3;29570:12;29563:19;;29222:366;;;:::o;29594:419::-;29760:4;29798:2;29787:9;29783:18;29775:26;;29847:9;29841:4;29837:20;29833:1;29822:9;29818:17;29811:47;29875:131;30001:4;29875:131;:::i;:::-;29867:139;;29594:419;;;:::o;30019:221::-;30159:34;30155:1;30147:6;30143:14;30136:58;30228:4;30223:2;30215:6;30211:15;30204:29;30019:221;:::o;30246:366::-;30388:3;30409:67;30473:2;30468:3;30409:67;:::i;:::-;30402:74;;30485:93;30574:3;30485:93;:::i;:::-;30603:2;30598:3;30594:12;30587:19;;30246:366;;;:::o;30618:419::-;30784:4;30822:2;30811:9;30807:18;30799:26;;30871:9;30865:4;30861:20;30857:1;30846:9;30842:17;30835:47;30899:131;31025:4;30899:131;:::i;:::-;30891:139;;30618:419;;;:::o;31043:228::-;31183:34;31179:1;31171:6;31167:14;31160:58;31252:11;31247:2;31239:6;31235:15;31228:36;31043:228;:::o;31277:366::-;31419:3;31440:67;31504:2;31499:3;31440:67;:::i;:::-;31433:74;;31516:93;31605:3;31516:93;:::i;:::-;31634:2;31629:3;31625:12;31618:19;;31277:366;;;:::o;31649:419::-;31815:4;31853:2;31842:9;31838:18;31830:26;;31902:9;31896:4;31892:20;31888:1;31877:9;31873:17;31866:47;31930:131;32056:4;31930:131;:::i;:::-;31922:139;;31649:419;;;:::o;32074:220::-;32214:34;32210:1;32202:6;32198:14;32191:58;32283:3;32278:2;32270:6;32266:15;32259:28;32074:220;:::o;32300:366::-;32442:3;32463:67;32527:2;32522:3;32463:67;:::i;:::-;32456:74;;32539:93;32628:3;32539:93;:::i;:::-;32657:2;32652:3;32648:12;32641:19;;32300:366;;;:::o;32672:419::-;32838:4;32876:2;32865:9;32861:18;32853:26;;32925:9;32919:4;32915:20;32911:1;32900:9;32896:17;32889:47;32953:131;33079:4;32953:131;:::i;:::-;32945:139;;32672:419;;;:::o;33097:176::-;33237:28;33233:1;33225:6;33221:14;33214:52;33097:176;:::o;33279:366::-;33421:3;33442:67;33506:2;33501:3;33442:67;:::i;:::-;33435:74;;33518:93;33607:3;33518:93;:::i;:::-;33636:2;33631:3;33627:12;33620:19;;33279:366;;;:::o;33651:419::-;33817:4;33855:2;33844:9;33840:18;33832:26;;33904:9;33898:4;33894:20;33890:1;33879:9;33875:17;33868:47;33932:131;34058:4;33932:131;:::i;:::-;33924:139;;33651:419;;;:::o;34076:176::-;34216:28;34212:1;34204:6;34200:14;34193:52;34076:176;:::o;34258:366::-;34400:3;34421:67;34485:2;34480:3;34421:67;:::i;:::-;34414:74;;34497:93;34586:3;34497:93;:::i;:::-;34615:2;34610:3;34606:12;34599:19;;34258:366;;;:::o;34630:419::-;34796:4;34834:2;34823:9;34819:18;34811:26;;34883:9;34877:4;34873:20;34869:1;34858:9;34854:17;34847:47;34911:131;35037:4;34911:131;:::i;:::-;34903:139;;34630:419;;;:::o;35055:175::-;35195:27;35191:1;35183:6;35179:14;35172:51;35055:175;:::o;35236:366::-;35378:3;35399:67;35463:2;35458:3;35399:67;:::i;:::-;35392:74;;35475:93;35564:3;35475:93;:::i;:::-;35593:2;35588:3;35584:12;35577:19;;35236:366;;;:::o;35608:419::-;35774:4;35812:2;35801:9;35797:18;35789:26;;35861:9;35855:4;35851:20;35847:1;35836:9;35832:17;35825:47;35889:131;36015:4;35889:131;:::i;:::-;35881:139;;35608:419;;;:::o;36033:232::-;36173:34;36169:1;36161:6;36157:14;36150:58;36242:15;36237:2;36229:6;36225:15;36218:40;36033:232;:::o;36271:366::-;36413:3;36434:67;36498:2;36493:3;36434:67;:::i;:::-;36427:74;;36510:93;36599:3;36510:93;:::i;:::-;36628:2;36623:3;36619:12;36612:19;;36271:366;;;:::o;36643:419::-;36809:4;36847:2;36836:9;36832:18;36824:26;;36896:9;36890:4;36886:20;36882:1;36871:9;36867:17;36860:47;36924:131;37050:4;36924:131;:::i;:::-;36916:139;;36643:419;;;:::o;37068:225::-;37208:34;37204:1;37196:6;37192:14;37185:58;37277:8;37272:2;37264:6;37260:15;37253:33;37068:225;:::o;37299:366::-;37441:3;37462:67;37526:2;37521:3;37462:67;:::i;:::-;37455:74;;37538:93;37627:3;37538:93;:::i;:::-;37656:2;37651:3;37647:12;37640:19;;37299:366;;;:::o;37671:419::-;37837:4;37875:2;37864:9;37860:18;37852:26;;37924:9;37918:4;37914:20;37910:1;37899:9;37895:17;37888:47;37952:131;38078:4;37952:131;:::i;:::-;37944:139;;37671:419;;;:::o;38096:231::-;38236:34;38232:1;38224:6;38220:14;38213:58;38305:14;38300:2;38292:6;38288:15;38281:39;38096:231;:::o;38333:366::-;38475:3;38496:67;38560:2;38555:3;38496:67;:::i;:::-;38489:74;;38572:93;38661:3;38572:93;:::i;:::-;38690:2;38685:3;38681:12;38674:19;;38333:366;;;:::o;38705:419::-;38871:4;38909:2;38898:9;38894:18;38886:26;;38958:9;38952:4;38948:20;38944:1;38933:9;38929:17;38922:47;38986:131;39112:4;38986:131;:::i;:::-;38978:139;;38705:419;;;:::o;39130:229::-;39270:34;39266:1;39258:6;39254:14;39247:58;39339:12;39334:2;39326:6;39322:15;39315:37;39130:229;:::o;39365:366::-;39507:3;39528:67;39592:2;39587:3;39528:67;:::i;:::-;39521:74;;39604:93;39693:3;39604:93;:::i;:::-;39722:2;39717:3;39713:12;39706:19;;39365:366;;;:::o;39737:419::-;39903:4;39941:2;39930:9;39926:18;39918:26;;39990:9;39984:4;39980:20;39976:1;39965:9;39961:17;39954:47;40018:131;40144:4;40018:131;:::i;:::-;40010:139;;39737:419;;;:::o;40162:238::-;40302:34;40298:1;40290:6;40286:14;40279:58;40371:21;40366:2;40358:6;40354:15;40347:46;40162:238;:::o;40406:366::-;40548:3;40569:67;40633:2;40628:3;40569:67;:::i;:::-;40562:74;;40645:93;40734:3;40645:93;:::i;:::-;40763:2;40758:3;40754:12;40747:19;;40406:366;;;:::o;40778:419::-;40944:4;40982:2;40971:9;40967:18;40959:26;;41031:9;41025:4;41021:20;41017:1;41006:9;41002:17;40995:47;41059:131;41185:4;41059:131;:::i;:::-;41051:139;;40778:419;;;:::o;41203:224::-;41343:34;41339:1;41331:6;41327:14;41320:58;41412:7;41407:2;41399:6;41395:15;41388:32;41203:224;:::o;41433:366::-;41575:3;41596:67;41660:2;41655:3;41596:67;:::i;:::-;41589:74;;41672:93;41761:3;41672:93;:::i;:::-;41790:2;41785:3;41781:12;41774:19;;41433:366;;;:::o;41805:419::-;41971:4;42009:2;41998:9;41994:18;41986:26;;42058:9;42052:4;42048:20;42044:1;42033:9;42029:17;42022:47;42086:131;42212:4;42086:131;:::i;:::-;42078:139;;41805:419;;;:::o;42230:236::-;42370:34;42366:1;42358:6;42354:14;42347:58;42439:19;42434:2;42426:6;42422:15;42415:44;42230:236;:::o;42472:366::-;42614:3;42635:67;42699:2;42694:3;42635:67;:::i;:::-;42628:74;;42711:93;42800:3;42711:93;:::i;:::-;42829:2;42824:3;42820:12;42813:19;;42472:366;;;:::o;42844:419::-;43010:4;43048:2;43037:9;43033:18;43025:26;;43097:9;43091:4;43087:20;43083:1;43072:9;43068:17;43061:47;43125:131;43251:4;43125:131;:::i;:::-;43117:139;;42844:419;;;:::o
Swarm Source
ipfs://59a0570ab0d54a699627ea77a652e54cbc6813f19ac298f0cc3acc7efb2f2b6a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.