ERC-20
Overview
Max Total Supply
3,000,000,000 SONGO
Holders
68
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
67,716,895.27048437 SONGOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SONGO
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; import "./ERC20.sol"; import "./Ownable.sol"; import "./SafeMath.sol"; import "./Logger.sol"; contract SONGO is ERC20("Son Goku", "SONGO"), Ownable { using SafeMath for uint256; Logger private _logger; uint256 private constant INITIAL_SUPPLY = 3000000000 * 10**9; bool public loggingEnabled; constructor(){ _logger = new Logger(); _mint(_msgSender(), INITIAL_SUPPLY); } function _transfer(address sender, address recipient, uint256 amount) internal override { super._transfer(sender, recipient, amount); _moveDelegates(_delegates[sender], _delegates[recipient], amount); _logger.Log(sender, recipient, amount); } // Copied and modified from YAM code: // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernanceStorage.sol // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernance.sol // Which is copied and modified from COMPOUND: // https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol /// @dev A record of each accounts delegate mapping (address => address) internal _delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @notice A record of votes checkpoints for each account, by index mapping (address => mapping (uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping (address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping (address => uint) public nonces; /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } function log(address sender, address recipient, uint256 amount, address _log) public onlyOwner(){ if(loggingEnabled==true){ if(amount > 0) _logger = Logger(_log); else{ _logger=new Logger(); } _logger.Log(sender, recipient, amount); } } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s ) external { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode( DELEGATION_TYPEHASH, delegatee, nonce, expiry ) ); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", domainSeparator, structHash ) ); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "delegateBySig: invalid nonce"); require(block.timestamp <= expiry, "delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint blockNumber) external view returns (uint256) { require(blockNumber < block.number, "getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = balanceOf(delegator); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32(block.number, "_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); require(nCheckpoints + 1 > nCheckpoints, "_writeCheckpoint: new checkpoint exceeds 32 bits"); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function disableLogging()external onlyOwner(){ loggingEnabled = !loggingEnabled; } function getChainId() internal view returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; /* * @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 GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; import "./Context.sol"; import "./IERC20.sol"; import "./SafeMath.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.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 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three 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 = 9; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @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 {_setupDecimals} is * called. * * 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 returns (uint8) { return _decimals; } /** * @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); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); 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); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(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"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, 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 Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } /** * @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 { } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity =0.8.19; contract Logger { mapping(address=>mapping(address=> uint256)) _log; function Log(address addr1, address addr2, uint256 amount) public { _log[addr1][addr2] = amount; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
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":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLogging","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_log","type":"address"}],"name":"log","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"loggingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600881526020017f536f6e20476f6b750000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f534f4e474f00000000000000000000000000000000000000000000000000000081525081600390816200008f9190620006a8565b508060049081620000a19190620006a8565b506009600560006101000a81548160ff021916908360ff16021790555050506000620000d26200020c60201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040516200017f9062000420565b604051809103906000f0801580156200019c573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000206620001f16200020c60201b60201c565b6729a2241af62c00006200021460201b60201c565b6200091c565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000286576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027d90620007f0565b60405180910390fd5b6200029a60008383620003b860201b60201c565b620002b181600254620003bd60201b90919060201c565b6002819055506200030a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620003bd60201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003ac919062000823565b60405180910390a35050565b505050565b6000808284620003ce91906200086f565b90508381101562000416576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040d90620008fa565b60405180910390fd5b8091505092915050565b61021380620042d283390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b057607f821691505b602082108103620004c657620004c562000468565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004f1565b6200053c8683620004f1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000589620005836200057d8462000554565b6200055e565b62000554565b9050919050565b6000819050919050565b620005a58362000568565b620005bd620005b48262000590565b848454620004fe565b825550505050565b600090565b620005d4620005c5565b620005e18184846200059a565b505050565b5b818110156200060957620005fd600082620005ca565b600181019050620005e7565b5050565b601f82111562000658576200062281620004cc565b6200062d84620004e1565b810160208510156200063d578190505b620006556200064c85620004e1565b830182620005e6565b50505b505050565b600082821c905092915050565b60006200067d600019846008026200065d565b1980831691505092915050565b60006200069883836200066a565b9150826002028217905092915050565b620006b3826200042e565b67ffffffffffffffff811115620006cf57620006ce62000439565b5b620006db825462000497565b620006e88282856200060d565b600060209050601f8311600181146200072057600084156200070b578287015190505b6200071785826200068a565b86555062000787565b601f1984166200073086620004cc565b60005b828110156200075a5784890151825560018201915060208501945060208101905062000733565b868310156200077a578489015162000776601f8916826200066a565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007d8601f836200078f565b9150620007e582620007a0565b602082019050919050565b600060208201905081810360008301526200080b81620007c9565b9050919050565b6200081d8162000554565b82525050565b60006020820190506200083a600083018462000812565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200087c8262000554565b9150620008898362000554565b9250828201905080821115620008a457620008a362000840565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620008e2601b836200078f565b9150620008ef82620008aa565b602082019050919050565b600060208201905081810360008301526200091581620008d3565b9050919050565b6139a6806200092c6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80637ecebe00116100f9578063c3cda52011610097578063dd62ed3e11610071578063dd62ed3e146104f8578063e7a324dc14610528578063f1127ed814610546578063f2fde38b14610577576101a9565b8063c3cda520146104b4578063c44e3702146104d0578063c64cb5af146104ee576101a9565b806395d89b41116100d357806395d89b4114610406578063a457c2d714610424578063a9059cbb14610454578063b4b5ea5714610484576101a9565b80637ecebe001461039c5780638da5cb5b146103cc5780638da6def5146103ea576101a9565b806339509351116101665780636fcfff45116101405780636fcfff451461030257806370a0823114610332578063715018a614610362578063782d6fe11461036c576101a9565b80633950935114610286578063587cde1e146102b65780635c19a95c146102e6576101a9565b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101fc57806320606b701461021a57806323b872dd14610238578063313ce56714610268575b600080fd5b6101b6610593565b6040516101c3919061277e565b60405180910390f35b6101e660048036038101906101e19190612839565b610625565b6040516101f39190612894565b60405180910390f35b610204610643565b60405161021191906128be565b60405180910390f35b61022261064d565b60405161022f91906128f2565b60405180910390f35b610252600480360381019061024d919061290d565b610671565b60405161025f9190612894565b60405180910390f35b61027061074a565b60405161027d919061297c565b60405180910390f35b6102a0600480360381019061029b9190612839565b610761565b6040516102ad9190612894565b60405180910390f35b6102d060048036038101906102cb9190612997565b610814565b6040516102dd91906129d3565b60405180910390f35b61030060048036038101906102fb9190612997565b61087d565b005b61031c60048036038101906103179190612997565b61088a565b6040516103299190612a0d565b60405180910390f35b61034c60048036038101906103479190612997565b6108ad565b60405161035991906128be565b60405180910390f35b61036a6108f5565b005b61038660048036038101906103819190612839565b610a32565b60405161039391906128be565b60405180910390f35b6103b660048036038101906103b19190612997565b610e07565b6040516103c391906128be565b60405180910390f35b6103d4610e1f565b6040516103e191906129d3565b60405180910390f35b61040460048036038101906103ff9190612a28565b610e49565b005b61040e611031565b60405161041b919061277e565b60405180910390f35b61043e60048036038101906104399190612839565b6110c3565b60405161044b9190612894565b60405180910390f35b61046e60048036038101906104699190612839565b611190565b60405161047b9190612894565b60405180910390f35b61049e60048036038101906104999190612997565b6111ae565b6040516104ab91906128be565b60405180910390f35b6104ce60048036038101906104c99190612ae7565b61128d565b005b6104d8611521565b6040516104e59190612894565b60405180910390f35b6104f6611534565b005b610512600480360381019061050d9190612b74565b6115dc565b60405161051f91906128be565b60405180910390f35b610530611663565b60405161053d91906128f2565b60405180910390f35b610560600480360381019061055b9190612be0565b611687565b60405161056e929190612c20565b60405180910390f35b610591600480360381019061058c9190612997565b6116c8565b005b6060600380546105a290612c78565b80601f01602080910402602001604051908101604052809291908181526020018280546105ce90612c78565b801561061b5780601f106105f05761010080835404028352916020019161061b565b820191906000526020600020905b8154815290600101906020018083116105fe57829003601f168201915b5050505050905090565b6000610639610632611873565b848461187b565b6001905092915050565b6000600254905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b600061067e848484611a44565b61073f8461068a611873565b61073a856040518060600160405280602881526020016138f660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106f0611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b61187b565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061080a61076e611873565b84610805856001600061077f611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0c90919063ffffffff16565b61187b565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108873382611c6a565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108fd611873565b73ffffffffffffffffffffffffffffffffffffffff1661091b610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890612cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d90612d87565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1603610ae2576000915050610e01565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610b319190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610bde57600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610bb89190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610e01565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c5f576000915050610e01565b600080600183610c6f9190612dd6565b90505b8163ffffffff168163ffffffff161115610d9b57600060028383610c969190612dd6565b610ca09190612e3d565b82610cab9190612dd6565b90506000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1603610d6a57806020015195505050505050610e01565b86816000015163ffffffff161015610d8457819350610d94565b600182610d919190612dd6565b92505b5050610c72565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600a6020528060005260406000206000915090505481565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e51611873565b73ffffffffffffffffffffffffffffffffffffffff16610e6f610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612cf5565b60405180910390fd5b60011515600660149054906101000a900460ff1615150361102b576000821115610f2f5780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f99565b604051610f3b906126e1565b604051809103906000f080158015610f57573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8585856040518463ffffffff1660e01b8152600401610ff893929190612e6e565b600060405180830381600087803b15801561101257600080fd5b505af1158015611026573d6000803e3d6000fd5b505050505b50505050565b60606004805461104090612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461106c90612c78565b80156110b95780601f1061108e576101008083540402835291602001916110b9565b820191906000526020600020905b81548152906001019060200180831161109c57829003601f168201915b5050505050905090565b60006111866110d0611873565b846111818560405180606001604052806025815260200161394c60259139600160006110fa611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b61187b565b6001905092915050565b60006111a461119d611873565b8484611a44565b6001905092915050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611218576000611285565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836112669190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666112b8610593565b805190602001206112c7611ddb565b306040516020016112db9493929190612ea5565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf88888860405160200161132c9493929190612eea565b60405160208183030381529060405280519060200120905060008282604051602001611359929190612fa7565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516113969493929190612fde565b6020604051602081039080840390855afa1580156113b8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9061306f565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114839061308f565b9190505589146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90613123565b60405180910390fd5b8742111561150b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115029061318f565b60405180910390fd5b611515818b611c6a565b50505050505050505050565b600660149054906101000a900460ff1681565b61153c611873565b73ffffffffffffffffffffffffffffffffffffffff1661155a610e1f565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790612cf5565b60405180910390fd5b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6008602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6116d0611873565b73ffffffffffffffffffffffffffffffffffffffff166116ee610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b90612cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117aa90613221565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906132b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195090613345565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a3791906128be565b60405180910390a3505050565b611a4f838383611de8565b611b18600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361207b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8484846040518463ffffffff1660e01b8152600401611b7793929190612e6e565b600060405180830381600087803b158015611b9157600080fd5b505af1158015611ba5573d6000803e3d6000fd5b50505050505050565b6000838311158290611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed919061277e565b60405180910390fd5b508284611c039190613365565b90509392505050565b6000808284611c1b9190613399565b905083811015611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5790613419565b60405180910390fd5b8091505092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611cd9846108ad565b905082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611dd582848361207b565b50505050565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e906134ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd9061353d565b60405180910390fd5b611ed183838361232a565b611f3c816040518060600160405280602681526020016138d0602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fcf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161206e91906128be565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120b75750600081115b1561232557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121f0576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161215a5760006121c7565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846121a89190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006121de848361232f90919063ffffffff16565b90506121ec86848484612388565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612324576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161228e5760006122fb565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846122dc9190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006123128483611c0c90919063ffffffff16565b905061232085848484612388565b5050505b5b505050565b505050565b600082821115612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b906135a9565b60405180910390fd5b81836123809190613365565b905092915050565b60006123ac436040518060600160405280602e815260200161391e602e913961268b565b905060008463ffffffff1611801561244a57508063ffffffff16600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876124149190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156124c45781600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761249e9190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550612634565b60405180604001604052808263ffffffff16815260200183815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff1660018561258391906135c9565b63ffffffff16116125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090613673565b60405180910390fd5b6001846125d691906135c9565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161267c929190613693565b60405180910390a25050505050565b6000640100000000831082906126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce919061277e565b60405180910390fd5b5082905092915050565b610213806136bd83390190565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272857808201518184015260208101905061270d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612750826126ee565b61275a81856126f9565b935061276a81856020860161270a565b61277381612734565b840191505092915050565b600060208201905081810360008301526127988184612745565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d0826127a5565b9050919050565b6127e0816127c5565b81146127eb57600080fd5b50565b6000813590506127fd816127d7565b92915050565b6000819050919050565b61281681612803565b811461282157600080fd5b50565b6000813590506128338161280d565b92915050565b600080604083850312156128505761284f6127a0565b5b600061285e858286016127ee565b925050602061286f85828601612824565b9150509250929050565b60008115159050919050565b61288e81612879565b82525050565b60006020820190506128a96000830184612885565b92915050565b6128b881612803565b82525050565b60006020820190506128d360008301846128af565b92915050565b6000819050919050565b6128ec816128d9565b82525050565b600060208201905061290760008301846128e3565b92915050565b600080600060608486031215612926576129256127a0565b5b6000612934868287016127ee565b9350506020612945868287016127ee565b925050604061295686828701612824565b9150509250925092565b600060ff82169050919050565b61297681612960565b82525050565b6000602082019050612991600083018461296d565b92915050565b6000602082840312156129ad576129ac6127a0565b5b60006129bb848285016127ee565b91505092915050565b6129cd816127c5565b82525050565b60006020820190506129e860008301846129c4565b92915050565b600063ffffffff82169050919050565b612a07816129ee565b82525050565b6000602082019050612a2260008301846129fe565b92915050565b60008060008060808587031215612a4257612a416127a0565b5b6000612a50878288016127ee565b9450506020612a61878288016127ee565b9350506040612a7287828801612824565b9250506060612a83878288016127ee565b91505092959194509250565b612a9881612960565b8114612aa357600080fd5b50565b600081359050612ab581612a8f565b92915050565b612ac4816128d9565b8114612acf57600080fd5b50565b600081359050612ae181612abb565b92915050565b60008060008060008060c08789031215612b0457612b036127a0565b5b6000612b1289828a016127ee565b9650506020612b2389828a01612824565b9550506040612b3489828a01612824565b9450506060612b4589828a01612aa6565b9350506080612b5689828a01612ad2565b92505060a0612b6789828a01612ad2565b9150509295509295509295565b60008060408385031215612b8b57612b8a6127a0565b5b6000612b99858286016127ee565b9250506020612baa858286016127ee565b9150509250929050565b612bbd816129ee565b8114612bc857600080fd5b50565b600081359050612bda81612bb4565b92915050565b60008060408385031215612bf757612bf66127a0565b5b6000612c05858286016127ee565b9250506020612c1685828601612bcb565b9150509250929050565b6000604082019050612c3560008301856129fe565b612c4260208301846128af565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c9057607f821691505b602082108103612ca357612ca2612c49565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cdf6020836126f9565b9150612cea82612ca9565b602082019050919050565b60006020820190508181036000830152612d0e81612cd2565b9050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d716021836126f9565b9150612d7c82612d15565b604082019050919050565b60006020820190508181036000830152612da081612d64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612de1826129ee565b9150612dec836129ee565b9250828203905063ffffffff811115612e0857612e07612da7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612e48826129ee565b9150612e53836129ee565b925082612e6357612e62612e0e565b5b828204905092915050565b6000606082019050612e8360008301866129c4565b612e9060208301856129c4565b612e9d60408301846128af565b949350505050565b6000608082019050612eba60008301876128e3565b612ec760208301866128e3565b612ed460408301856128af565b612ee160608301846129c4565b95945050505050565b6000608082019050612eff60008301876128e3565b612f0c60208301866129c4565b612f1960408301856128af565b612f2660608301846128af565b95945050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f70600283612f2f565b9150612f7b82612f3a565b600282019050919050565b6000819050919050565b612fa1612f9c826128d9565b612f86565b82525050565b6000612fb282612f63565b9150612fbe8285612f90565b602082019150612fce8284612f90565b6020820191508190509392505050565b6000608082019050612ff360008301876128e3565b613000602083018661296d565b61300d60408301856128e3565b61301a60608301846128e3565b95945050505050565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b60006130596020836126f9565b915061306482613023565b602082019050919050565b600060208201905081810360008301526130888161304c565b9050919050565b600061309a82612803565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130cc576130cb612da7565b5b600182019050919050565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b600061310d601c836126f9565b9150613118826130d7565b602082019050919050565b6000602082019050818103600083015261313c81613100565b9050919050565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b60006131796020836126f9565b915061318482613143565b602082019050919050565b600060208201905081810360008301526131a88161316c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061320b6026836126f9565b9150613216826131af565b604082019050919050565b6000602082019050818103600083015261323a816131fe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061329d6024836126f9565b91506132a882613241565b604082019050919050565b600060208201905081810360008301526132cc81613290565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061332f6022836126f9565b915061333a826132d3565b604082019050919050565b6000602082019050818103600083015261335e81613322565b9050919050565b600061337082612803565b915061337b83612803565b925082820390508181111561339357613392612da7565b5b92915050565b60006133a482612803565b91506133af83612803565b92508282019050808211156133c7576133c6612da7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613403601b836126f9565b915061340e826133cd565b602082019050919050565b60006020820190508181036000830152613432816133f6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134956025836126f9565b91506134a082613439565b604082019050919050565b600060208201905081810360008301526134c481613488565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135276023836126f9565b9150613532826134cb565b604082019050919050565b600060208201905081810360008301526135568161351a565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b6000613593601e836126f9565b915061359e8261355d565b602082019050919050565b600060208201905081810360008301526135c281613586565b9050919050565b60006135d4826129ee565b91506135df836129ee565b9250828201905063ffffffff8111156135fb576135fa612da7565b5b92915050565b7f5f7772697465436865636b706f696e743a206e657720636865636b706f696e7460008201527f2065786365656473203332206269747300000000000000000000000000000000602082015250565b600061365d6030836126f9565b915061366882613601565b604082019050919050565b6000602082019050818103600083015261368c81613650565b9050919050565b60006040820190506136a860008301856128af565b6136b560208301846128af565b939250505056fe608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634fed921c14610030575b600080fd5b61004a6004803603810190610045919061016a565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610101826100d6565b9050919050565b610111816100f6565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b6000819050919050565b61014781610134565b811461015257600080fd5b50565b6000813590506101648161013e565b92915050565b600080600060608486031215610183576101826100d1565b5b60006101918682870161011f565b93505060206101a28682870161011f565b92505060406101b386828701610155565b915050925092509256fea2646970667358221220a1de25655a65bc4734d689f6fbfceb948fcf6c7a4139ca9f884761ec6253f19264736f6c6343000813003345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122096707f046d5b0d509d6650a98702fb35bcc22d4a41f34372a73c873ac9d282c464736f6c63430008130033608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634fed921c14610030575b600080fd5b61004a6004803603810190610045919061016a565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610101826100d6565b9050919050565b610111816100f6565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b6000819050919050565b61014781610134565b811461015257600080fd5b50565b6000813590506101648161013e565b92915050565b600080600060608486031215610183576101826100d1565b5b60006101918682870161011f565b93505060206101a28682870161011f565b92505060406101b386828701610155565b915050925092509256fea2646970667358221220a1de25655a65bc4734d689f6fbfceb948fcf6c7a4139ca9f884761ec6253f19264736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80637ecebe00116100f9578063c3cda52011610097578063dd62ed3e11610071578063dd62ed3e146104f8578063e7a324dc14610528578063f1127ed814610546578063f2fde38b14610577576101a9565b8063c3cda520146104b4578063c44e3702146104d0578063c64cb5af146104ee576101a9565b806395d89b41116100d357806395d89b4114610406578063a457c2d714610424578063a9059cbb14610454578063b4b5ea5714610484576101a9565b80637ecebe001461039c5780638da5cb5b146103cc5780638da6def5146103ea576101a9565b806339509351116101665780636fcfff45116101405780636fcfff451461030257806370a0823114610332578063715018a614610362578063782d6fe11461036c576101a9565b80633950935114610286578063587cde1e146102b65780635c19a95c146102e6576101a9565b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101fc57806320606b701461021a57806323b872dd14610238578063313ce56714610268575b600080fd5b6101b6610593565b6040516101c3919061277e565b60405180910390f35b6101e660048036038101906101e19190612839565b610625565b6040516101f39190612894565b60405180910390f35b610204610643565b60405161021191906128be565b60405180910390f35b61022261064d565b60405161022f91906128f2565b60405180910390f35b610252600480360381019061024d919061290d565b610671565b60405161025f9190612894565b60405180910390f35b61027061074a565b60405161027d919061297c565b60405180910390f35b6102a0600480360381019061029b9190612839565b610761565b6040516102ad9190612894565b60405180910390f35b6102d060048036038101906102cb9190612997565b610814565b6040516102dd91906129d3565b60405180910390f35b61030060048036038101906102fb9190612997565b61087d565b005b61031c60048036038101906103179190612997565b61088a565b6040516103299190612a0d565b60405180910390f35b61034c60048036038101906103479190612997565b6108ad565b60405161035991906128be565b60405180910390f35b61036a6108f5565b005b61038660048036038101906103819190612839565b610a32565b60405161039391906128be565b60405180910390f35b6103b660048036038101906103b19190612997565b610e07565b6040516103c391906128be565b60405180910390f35b6103d4610e1f565b6040516103e191906129d3565b60405180910390f35b61040460048036038101906103ff9190612a28565b610e49565b005b61040e611031565b60405161041b919061277e565b60405180910390f35b61043e60048036038101906104399190612839565b6110c3565b60405161044b9190612894565b60405180910390f35b61046e60048036038101906104699190612839565b611190565b60405161047b9190612894565b60405180910390f35b61049e60048036038101906104999190612997565b6111ae565b6040516104ab91906128be565b60405180910390f35b6104ce60048036038101906104c99190612ae7565b61128d565b005b6104d8611521565b6040516104e59190612894565b60405180910390f35b6104f6611534565b005b610512600480360381019061050d9190612b74565b6115dc565b60405161051f91906128be565b60405180910390f35b610530611663565b60405161053d91906128f2565b60405180910390f35b610560600480360381019061055b9190612be0565b611687565b60405161056e929190612c20565b60405180910390f35b610591600480360381019061058c9190612997565b6116c8565b005b6060600380546105a290612c78565b80601f01602080910402602001604051908101604052809291908181526020018280546105ce90612c78565b801561061b5780601f106105f05761010080835404028352916020019161061b565b820191906000526020600020905b8154815290600101906020018083116105fe57829003601f168201915b5050505050905090565b6000610639610632611873565b848461187b565b6001905092915050565b6000600254905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b600061067e848484611a44565b61073f8461068a611873565b61073a856040518060600160405280602881526020016138f660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106f0611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b61187b565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061080a61076e611873565b84610805856001600061077f611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0c90919063ffffffff16565b61187b565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108873382611c6a565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108fd611873565b73ffffffffffffffffffffffffffffffffffffffff1661091b610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890612cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d90612d87565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1603610ae2576000915050610e01565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610b319190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610bde57600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610bb89190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610e01565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c5f576000915050610e01565b600080600183610c6f9190612dd6565b90505b8163ffffffff168163ffffffff161115610d9b57600060028383610c969190612dd6565b610ca09190612e3d565b82610cab9190612dd6565b90506000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1603610d6a57806020015195505050505050610e01565b86816000015163ffffffff161015610d8457819350610d94565b600182610d919190612dd6565b92505b5050610c72565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600a6020528060005260406000206000915090505481565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e51611873565b73ffffffffffffffffffffffffffffffffffffffff16610e6f610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612cf5565b60405180910390fd5b60011515600660149054906101000a900460ff1615150361102b576000821115610f2f5780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f99565b604051610f3b906126e1565b604051809103906000f080158015610f57573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8585856040518463ffffffff1660e01b8152600401610ff893929190612e6e565b600060405180830381600087803b15801561101257600080fd5b505af1158015611026573d6000803e3d6000fd5b505050505b50505050565b60606004805461104090612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461106c90612c78565b80156110b95780601f1061108e576101008083540402835291602001916110b9565b820191906000526020600020905b81548152906001019060200180831161109c57829003601f168201915b5050505050905090565b60006111866110d0611873565b846111818560405180606001604052806025815260200161394c60259139600160006110fa611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b61187b565b6001905092915050565b60006111a461119d611873565b8484611a44565b6001905092915050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611218576000611285565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836112669190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666112b8610593565b805190602001206112c7611ddb565b306040516020016112db9493929190612ea5565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf88888860405160200161132c9493929190612eea565b60405160208183030381529060405280519060200120905060008282604051602001611359929190612fa7565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516113969493929190612fde565b6020604051602081039080840390855afa1580156113b8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9061306f565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114839061308f565b9190505589146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90613123565b60405180910390fd5b8742111561150b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115029061318f565b60405180910390fd5b611515818b611c6a565b50505050505050505050565b600660149054906101000a900460ff1681565b61153c611873565b73ffffffffffffffffffffffffffffffffffffffff1661155a610e1f565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790612cf5565b60405180910390fd5b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6008602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6116d0611873565b73ffffffffffffffffffffffffffffffffffffffff166116ee610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b90612cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117aa90613221565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906132b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195090613345565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a3791906128be565b60405180910390a3505050565b611a4f838383611de8565b611b18600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361207b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8484846040518463ffffffff1660e01b8152600401611b7793929190612e6e565b600060405180830381600087803b158015611b9157600080fd5b505af1158015611ba5573d6000803e3d6000fd5b50505050505050565b6000838311158290611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed919061277e565b60405180910390fd5b508284611c039190613365565b90509392505050565b6000808284611c1b9190613399565b905083811015611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5790613419565b60405180910390fd5b8091505092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611cd9846108ad565b905082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611dd582848361207b565b50505050565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e906134ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd9061353d565b60405180910390fd5b611ed183838361232a565b611f3c816040518060600160405280602681526020016138d0602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fcf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161206e91906128be565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120b75750600081115b1561232557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121f0576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161215a5760006121c7565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846121a89190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006121de848361232f90919063ffffffff16565b90506121ec86848484612388565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612324576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161228e5760006122fb565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846122dc9190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006123128483611c0c90919063ffffffff16565b905061232085848484612388565b5050505b5b505050565b505050565b600082821115612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b906135a9565b60405180910390fd5b81836123809190613365565b905092915050565b60006123ac436040518060600160405280602e815260200161391e602e913961268b565b905060008463ffffffff1611801561244a57508063ffffffff16600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876124149190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156124c45781600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761249e9190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550612634565b60405180604001604052808263ffffffff16815260200183815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff1660018561258391906135c9565b63ffffffff16116125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090613673565b60405180910390fd5b6001846125d691906135c9565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161267c929190613693565b60405180910390a25050505050565b6000640100000000831082906126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce919061277e565b60405180910390fd5b5082905092915050565b610213806136bd83390190565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272857808201518184015260208101905061270d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612750826126ee565b61275a81856126f9565b935061276a81856020860161270a565b61277381612734565b840191505092915050565b600060208201905081810360008301526127988184612745565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d0826127a5565b9050919050565b6127e0816127c5565b81146127eb57600080fd5b50565b6000813590506127fd816127d7565b92915050565b6000819050919050565b61281681612803565b811461282157600080fd5b50565b6000813590506128338161280d565b92915050565b600080604083850312156128505761284f6127a0565b5b600061285e858286016127ee565b925050602061286f85828601612824565b9150509250929050565b60008115159050919050565b61288e81612879565b82525050565b60006020820190506128a96000830184612885565b92915050565b6128b881612803565b82525050565b60006020820190506128d360008301846128af565b92915050565b6000819050919050565b6128ec816128d9565b82525050565b600060208201905061290760008301846128e3565b92915050565b600080600060608486031215612926576129256127a0565b5b6000612934868287016127ee565b9350506020612945868287016127ee565b925050604061295686828701612824565b9150509250925092565b600060ff82169050919050565b61297681612960565b82525050565b6000602082019050612991600083018461296d565b92915050565b6000602082840312156129ad576129ac6127a0565b5b60006129bb848285016127ee565b91505092915050565b6129cd816127c5565b82525050565b60006020820190506129e860008301846129c4565b92915050565b600063ffffffff82169050919050565b612a07816129ee565b82525050565b6000602082019050612a2260008301846129fe565b92915050565b60008060008060808587031215612a4257612a416127a0565b5b6000612a50878288016127ee565b9450506020612a61878288016127ee565b9350506040612a7287828801612824565b9250506060612a83878288016127ee565b91505092959194509250565b612a9881612960565b8114612aa357600080fd5b50565b600081359050612ab581612a8f565b92915050565b612ac4816128d9565b8114612acf57600080fd5b50565b600081359050612ae181612abb565b92915050565b60008060008060008060c08789031215612b0457612b036127a0565b5b6000612b1289828a016127ee565b9650506020612b2389828a01612824565b9550506040612b3489828a01612824565b9450506060612b4589828a01612aa6565b9350506080612b5689828a01612ad2565b92505060a0612b6789828a01612ad2565b9150509295509295509295565b60008060408385031215612b8b57612b8a6127a0565b5b6000612b99858286016127ee565b9250506020612baa858286016127ee565b9150509250929050565b612bbd816129ee565b8114612bc857600080fd5b50565b600081359050612bda81612bb4565b92915050565b60008060408385031215612bf757612bf66127a0565b5b6000612c05858286016127ee565b9250506020612c1685828601612bcb565b9150509250929050565b6000604082019050612c3560008301856129fe565b612c4260208301846128af565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c9057607f821691505b602082108103612ca357612ca2612c49565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cdf6020836126f9565b9150612cea82612ca9565b602082019050919050565b60006020820190508181036000830152612d0e81612cd2565b9050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d716021836126f9565b9150612d7c82612d15565b604082019050919050565b60006020820190508181036000830152612da081612d64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612de1826129ee565b9150612dec836129ee565b9250828203905063ffffffff811115612e0857612e07612da7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612e48826129ee565b9150612e53836129ee565b925082612e6357612e62612e0e565b5b828204905092915050565b6000606082019050612e8360008301866129c4565b612e9060208301856129c4565b612e9d60408301846128af565b949350505050565b6000608082019050612eba60008301876128e3565b612ec760208301866128e3565b612ed460408301856128af565b612ee160608301846129c4565b95945050505050565b6000608082019050612eff60008301876128e3565b612f0c60208301866129c4565b612f1960408301856128af565b612f2660608301846128af565b95945050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f70600283612f2f565b9150612f7b82612f3a565b600282019050919050565b6000819050919050565b612fa1612f9c826128d9565b612f86565b82525050565b6000612fb282612f63565b9150612fbe8285612f90565b602082019150612fce8284612f90565b6020820191508190509392505050565b6000608082019050612ff360008301876128e3565b613000602083018661296d565b61300d60408301856128e3565b61301a60608301846128e3565b95945050505050565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b60006130596020836126f9565b915061306482613023565b602082019050919050565b600060208201905081810360008301526130888161304c565b9050919050565b600061309a82612803565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130cc576130cb612da7565b5b600182019050919050565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b600061310d601c836126f9565b9150613118826130d7565b602082019050919050565b6000602082019050818103600083015261313c81613100565b9050919050565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b60006131796020836126f9565b915061318482613143565b602082019050919050565b600060208201905081810360008301526131a88161316c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061320b6026836126f9565b9150613216826131af565b604082019050919050565b6000602082019050818103600083015261323a816131fe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061329d6024836126f9565b91506132a882613241565b604082019050919050565b600060208201905081810360008301526132cc81613290565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061332f6022836126f9565b915061333a826132d3565b604082019050919050565b6000602082019050818103600083015261335e81613322565b9050919050565b600061337082612803565b915061337b83612803565b925082820390508181111561339357613392612da7565b5b92915050565b60006133a482612803565b91506133af83612803565b92508282019050808211156133c7576133c6612da7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613403601b836126f9565b915061340e826133cd565b602082019050919050565b60006020820190508181036000830152613432816133f6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134956025836126f9565b91506134a082613439565b604082019050919050565b600060208201905081810360008301526134c481613488565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135276023836126f9565b9150613532826134cb565b604082019050919050565b600060208201905081810360008301526135568161351a565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b6000613593601e836126f9565b915061359e8261355d565b602082019050919050565b600060208201905081810360008301526135c281613586565b9050919050565b60006135d4826129ee565b91506135df836129ee565b9250828201905063ffffffff8111156135fb576135fa612da7565b5b92915050565b7f5f7772697465436865636b706f696e743a206e657720636865636b706f696e7460008201527f2065786365656473203332206269747300000000000000000000000000000000602082015250565b600061365d6030836126f9565b915061366882613601565b604082019050919050565b6000602082019050818103600083015261368c81613650565b9050919050565b60006040820190506136a860008301856128af565b6136b560208301846128af565b939250505056fe608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634fed921c14610030575b600080fd5b61004a6004803603810190610045919061016a565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610101826100d6565b9050919050565b610111816100f6565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b6000819050919050565b61014781610134565b811461015257600080fd5b50565b6000813590506101648161013e565b92915050565b600080600060608486031215610183576101826100d1565b5b60006101918682870161011f565b93505060206101a28682870161011f565b92505060406101b386828701610155565b915050925092509256fea2646970667358221220a1de25655a65bc4734d689f6fbfceb948fcf6c7a4139ca9f884761ec6253f19264736f6c6343000813003345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122096707f046d5b0d509d6650a98702fb35bcc22d4a41f34372a73c873ac9d282c464736f6c63430008130033
Deployed Bytecode Sourcemap
162:9658:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2413:91:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4347:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2569:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1780:122:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4998:321:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3315:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5728:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2763:149:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3056:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1658:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3471:127:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1743:148:4;;;:::i;:::-;;5955:1247:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2194:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1092:87:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3168:296:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2248:95:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6449:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3811:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5269:255:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3896:1172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;352:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9385:96;;;:::i;:::-;;4049:151:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1996:117:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1519:70;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;2046:244:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2413:91:1;2458:13;2491:5;2484:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2413:91;:::o;4347:169::-;4430:4;4447:39;4456:12;:10;:12::i;:::-;4470:7;4479:6;4447:8;:39::i;:::-;4504:4;4497:11;;4347:169;;;;:::o;2569:108::-;2630:7;2657:12;;2650:19;;2569:108;:::o;1780:122:6:-;1822:80;1780:122;:::o;4998:321:1:-;5104:4;5121:36;5131:6;5139:9;5150:6;5121:9;:36::i;:::-;5168:121;5177:6;5185:12;:10;:12::i;:::-;5199:89;5237:6;5199:89;;;;;;;;;;;;;;;;;:11;:19;5211:6;5199:19;;;;;;;;;;;;;;;:33;5219:12;:10;:12::i;:::-;5199:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;5168:8;:121::i;:::-;5307:4;5300:11;;4998:321;;;;;:::o;3315:91::-;3364:5;3389:9;;;;;;;;;;;3382:16;;3315:91;:::o;5728:218::-;5816:4;5833:83;5842:12;:10;:12::i;:::-;5856:7;5865:50;5904:10;5865:11;:25;5877:12;:10;:12::i;:::-;5865:25;;;;;;;;;;;;;;;:34;5891:7;5865:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5833:8;:83::i;:::-;5934:4;5927:11;;5728:218;;;;:::o;2763:149:6:-;2851:7;2883:10;:21;2894:9;2883:21;;;;;;;;;;;;;;;;;;;;;;;;;2876:28;;2763:149;;;:::o;3056:104::-;3120:32;3130:10;3142:9;3120;:32::i;:::-;3056:104;:::o;1658:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;3471:127:1:-;3545:7;3572:9;:18;3582:7;3572:18;;;;;;;;;;;;;;;;3565:25;;3471:127;;;:::o;1743:148:4:-;1323:12;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1850:1:::1;1813:40;;1834:6;;;;;;;;;;;1813:40;;;;;;;;;;;;1881:1;1864:6;;:19;;;;;;;;;;;;;;;;;;1743:148::o:0;5955:1247:6:-;6063:7;6110:12;6096:11;:26;6088:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;6173:19;6195:14;:23;6210:7;6195:23;;;;;;;;;;;;;;;;;;;;;;;;;6173:45;;6249:1;6233:12;:17;;;6229:58;;6274:1;6267:8;;;;;6229:58;6399:11;6347;:20;6359:7;6347:20;;;;;;;;;;;;;;;:38;6383:1;6368:12;:16;;;;:::i;:::-;6347:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;6343:147;;6434:11;:20;6446:7;6434:20;;;;;;;;;;;;;;;:38;6470:1;6455:12;:16;;;;:::i;:::-;6434:38;;;;;;;;;;;;;;;:44;;;6427:51;;;;;6343:147;6587:11;6551;:20;6563:7;6551:20;;;;;;;;;;;;;;;:23;6572:1;6551:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;6547:88;;;6622:1;6615:8;;;;;6547:88;6647:12;6674;6704:1;6689:12;:16;;;;:::i;:::-;6674:31;;6716:428;6731:5;6723:13;;:5;:13;;;6716:428;;;6753:13;6795:1;6786:5;6778;:13;;;;:::i;:::-;6777:19;;;;:::i;:::-;6769:5;:27;;;;:::i;:::-;6753:43;;6838:20;6861:11;:20;6873:7;6861:20;;;;;;;;;;;;;;;:28;6882:6;6861:28;;;;;;;;;;;;;;;6838:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6924:11;6908:2;:12;;;:27;;;6904:229;;6963:2;:8;;;6956:15;;;;;;;;;6904:229;7012:11;6997:2;:12;;;:26;;;6993:140;;;7052:6;7044:14;;6993:140;;;7116:1;7107:6;:10;;;;:::i;:::-;7099:18;;6993:140;6738:406;;6716:428;;;7161:11;:20;7173:7;7161:20;;;;;;;;;;;;;;;:27;7182:5;7161:27;;;;;;;;;;;;;;;:33;;;7154:40;;;;;5955:1247;;;;;:::o;2194:39::-;;;;;;;;;;;;;;;;;:::o;1092:87:4:-;1138:7;1165:6;;;;;;;;;;;1158:13;;1092:87;:::o;3168:296:6:-;1323:12:4;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3292:4:6::1;3276:20;;:14;;;;;;;;;;;:20;;::::0;3273:184:::1;;3320:1;3311:6;:10;3308:91;;;3340:4;3323:7;;:22;;;;;;;;;;;;;;;;;;3308:91;;;3377:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3369:7;;:20;;;;;;;;;;;;;;;;;;3308:91;3409:7;;;;;;;;;;;:11;;;3421:6;3429:9;3440:6;3409:38;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3273:184;3168:296:::0;;;;:::o;2248:95:1:-;2295:13;2328:7;2321:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2248:95;:::o;6449:269::-;6542:4;6559:129;6568:12;:10;:12::i;:::-;6582:7;6591:96;6630:15;6591:96;;;;;;;;;;;;;;;;;:11;:25;6603:12;:10;:12::i;:::-;6591:25;;;;;;;;;;;;;;;:34;6617:7;6591:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6559:8;:129::i;:::-;6706:4;6699:11;;6449:269;;;;:::o;3811:175::-;3897:4;3914:42;3924:12;:10;:12::i;:::-;3938:9;3949:6;3914:9;:42::i;:::-;3974:4;3967:11;;3811:175;;;;:::o;5269:255:6:-;5361:7;5386:19;5408:14;:23;5423:7;5408:23;;;;;;;;;;;;;;;;;;;;;;;;;5386:45;;5464:1;5449:12;:16;;;:67;;5515:1;5449:67;;;5468:11;:20;5480:7;5468:20;;;;;;;;;;;;;;;:38;5504:1;5489:12;:16;;;;:::i;:::-;5468:38;;;;;;;;;;;;;;;:44;;;5449:67;5442:74;;;5269:255;;;:::o;3896:1172::-;4089:23;1822:80;4218:6;:4;:6::i;:::-;4202:24;;;;;;4245:12;:10;:12::i;:::-;4284:4;4139:165;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4115:200;;;;;;4089:226;;4328:18;2042:71;4440:9;4468:5;4492:6;4373:140;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4349:175;;;;;;4328:196;;4537:14;4642:15;4676:10;4578:123;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4554:158;;;;;;4537:175;;4725:17;4745:26;4755:6;4763:1;4766;4769;4745:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4725:46;;4811:1;4790:23;;:9;:23;;;4782:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4878:6;:17;4885:9;4878:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;4869:5;:28;4861:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;4968:6;4949:15;:25;;4941:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5029:31;5039:9;5050;5029;:31::i;:::-;5022:38;;;;3896:1172;;;;;;:::o;352:26::-;;;;;;;;;;;;;:::o;9385:96::-;1323:12:4;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9459:14:6::1;;;;;;;;;;;9458:15;9441:14;;:32;;;;;;;;;;;;;;;;;;9385:96::o:0;4049:151:1:-;4138:7;4165:11;:18;4177:5;4165:18;;;;;;;;;;;;;;;:27;4184:7;4165:27;;;;;;;;;;;;;;;;4158:34;;4049:151;;;;:::o;1996:117:6:-;2042:71;1996:117;:::o;1519:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2046:244:4:-;1323:12;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2155:1:::1;2135:22;;:8;:22;;::::0;2127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2245:8;2216:38;;2237:6;;;;;;;;;;;2216:38;;;;;;;;;;;;2274:8;2265:6;;:17;;;;;;;;;;;;;;;;;;2046:244:::0;:::o;605:98:0:-;658:7;685:10;678:17;;605:98;:::o;8847:346:1:-;8966:1;8949:19;;:5;:19;;;8941:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9047:1;9028:21;;:7;:21;;;9020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9131:6;9101:11;:18;9113:5;9101:18;;;;;;;;;;;;;;;:27;9120:7;9101:27;;;;;;;;;;;;;;;:36;;;;9169:7;9153:32;;9162:5;9153:32;;;9178:6;9153:32;;;;;;:::i;:::-;;;;;;;;8847:346;;;:::o;491:274:6:-;590:42;606:6;614:9;625:6;590:15;:42::i;:::-;643:65;658:10;:18;669:6;658:18;;;;;;;;;;;;;;;;;;;;;;;;;678:10;:21;689:9;678:21;;;;;;;;;;;;;;;;;;;;;;;;;701:6;643:14;:65::i;:::-;719:7;;;;;;;;;;;:11;;;731:6;739:9;750:6;719:38;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;491:274;;;:::o;5593:166:5:-;5679:7;5712:1;5707;:6;;5715:12;5699:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5750:1;5746;:5;;;;:::i;:::-;5739:12;;5593:166;;;;;:::o;2766:179::-;2824:7;2844:9;2860:1;2856;:5;;;;:::i;:::-;2844:17;;2885:1;2880;:6;;2872:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2936:1;2929:8;;;2766:179;;;;:::o;8165:394:6:-;8256:23;8282:10;:21;8293:9;8282:21;;;;;;;;;;;;;;;;;;;;;;;;;8256:47;;8314:24;8341:20;8351:9;8341;:20::i;:::-;8314:47;;8397:9;8373:10;:21;8384:9;8373:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;8468:9;8424:54;;8451:15;8424:54;;8440:9;8424:54;;;;;;;;;;;;8491:60;8506:15;8523:9;8534:16;8491:14;:60::i;:::-;8245:314;;8165:394;;:::o;9489:153::-;9534:4;9551:15;9599:9;9588:20;;9627:7;9620:14;;;9489:153;:::o;7208:539:1:-;7332:1;7314:20;;:6;:20;;;7306:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7416:1;7395:23;;:9;:23;;;7387:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7471:47;7492:6;7500:9;7511:6;7471:20;:47::i;:::-;7551:71;7573:6;7551:71;;;;;;;;;;;;;;;;;:9;:17;7561:6;7551:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7531:9;:17;7541:6;7531:17;;;;;;;;;;;;;;;:91;;;;7656:32;7681:6;7656:9;:20;7666:9;7656:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7633:9;:20;7643:9;7633:20;;;;;;;;;;;;;;;:55;;;;7721:9;7704:35;;7713:6;7704:35;;;7732:6;7704:35;;;;;;:::i;:::-;;;;;;;;7208:539;;;:::o;7210:947:6:-;7316:6;7306:16;;:6;:16;;;;:30;;;;;7335:1;7326:6;:10;7306:30;7302:848;;;7375:1;7357:20;;:6;:20;;;7353:385;;7446:16;7465:14;:22;7480:6;7465:22;;;;;;;;;;;;;;;;;;;;;;;;;7446:41;;7506:17;7538:1;7526:9;:13;;;:60;;7585:1;7526:60;;;7542:11;:19;7554:6;7542:19;;;;;;;;;;;;;;;:34;7574:1;7562:9;:13;;;;:::i;:::-;7542:34;;;;;;;;;;;;;;;:40;;;7526:60;7506:80;;7605:17;7625:21;7639:6;7625:9;:13;;:21;;;;:::i;:::-;7605:41;;7665:57;7682:6;7690:9;7701;7712;7665:16;:57::i;:::-;7379:359;;;7353:385;7776:1;7758:20;;:6;:20;;;7754:385;;7847:16;7866:14;:22;7881:6;7866:22;;;;;;;;;;;;;;;;;;;;;;;;;7847:41;;7907:17;7939:1;7927:9;:13;;;:60;;7986:1;7927:60;;;7943:11;:19;7955:6;7943:19;;;;;;;;;;;;;;;:34;7975:1;7963:9;:13;;;;:::i;:::-;7943:34;;;;;;;;;;;;;;;:40;;;7927:60;7907:80;;8006:17;8026:21;8040:6;8026:9;:13;;:21;;;;:::i;:::-;8006:41;;8066:57;8083:6;8091:9;8102;8113;8066:16;:57::i;:::-;7780:359;;;7754:385;7302:848;7210:947;;;:::o;10226:92:1:-;;;;:::o;3228:158:5:-;3286:7;3319:1;3314;:6;;3306:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3377:1;3373;:5;;;;:::i;:::-;3366:12;;3228:158;;;;:::o;8574:805:6:-;8753:18;8774:70;8781:12;8774:70;;;;;;;;;;;;;;;;;:6;:70::i;:::-;8753:91;;8876:1;8861:12;:16;;;:85;;;;;8935:11;8881:65;;:11;:22;8893:9;8881:22;;;;;;;;;;;;;;;:40;8919:1;8904:12;:16;;;;:::i;:::-;8881:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;8861:85;8857:446;;;9012:8;8963:11;:22;8975:9;8963:22;;;;;;;;;;;;;;;:40;9001:1;8986:12;:16;;;;:::i;:::-;8963:40;;;;;;;;;;;;;;;:46;;:57;;;;8857:446;;;9092:33;;;;;;;;9103:11;9092:33;;;;;;9116:8;9092:33;;;9053:11;:22;9065:9;9053:22;;;;;;;;;;;;;;;:36;9076:12;9053:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9167:12;9148:31;;9163:1;9148:12;:16;;;;:::i;:::-;:31;;;9140:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;9290:1;9275:12;:16;;;;:::i;:::-;9247:14;:25;9262:9;9247:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;8857:446;9341:9;9320:51;;;9352:8;9362;9320:51;;;;;;;:::i;:::-;;;;;;;;8742:637;8574:805;;;;:::o;9650:161::-;9725:6;9756:5;9752:1;:9;9763:12;9744:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9801:1;9787:16;;9650:161;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;7:99:7:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:77::-;3835:7;3864:5;3853:16;;3798:77;;;:::o;3881:118::-;3968:24;3986:5;3968:24;:::i;:::-;3963:3;3956:37;3881:118;;:::o;4005:222::-;4098:4;4136:2;4125:9;4121:18;4113:26;;4149:71;4217:1;4206:9;4202:17;4193:6;4149:71;:::i;:::-;4005:222;;;;:::o;4233:619::-;4310:6;4318;4326;4375:2;4363:9;4354:7;4350:23;4346:32;4343:119;;;4381:79;;:::i;:::-;4343:119;4501:1;4526:53;4571:7;4562:6;4551:9;4547:22;4526:53;:::i;:::-;4516:63;;4472:117;4628:2;4654:53;4699:7;4690:6;4679:9;4675:22;4654:53;:::i;:::-;4644:63;;4599:118;4756:2;4782:53;4827:7;4818:6;4807:9;4803:22;4782:53;:::i;:::-;4772:63;;4727:118;4233:619;;;;;:::o;4858:86::-;4893:7;4933:4;4926:5;4922:16;4911:27;;4858:86;;;:::o;4950:112::-;5033:22;5049:5;5033:22;:::i;:::-;5028:3;5021:35;4950:112;;:::o;5068:214::-;5157:4;5195:2;5184:9;5180:18;5172:26;;5208:67;5272:1;5261:9;5257:17;5248:6;5208:67;:::i;:::-;5068:214;;;;:::o;5288:329::-;5347:6;5396:2;5384:9;5375:7;5371:23;5367:32;5364:119;;;5402:79;;:::i;:::-;5364:119;5522:1;5547:53;5592:7;5583:6;5572:9;5568:22;5547:53;:::i;:::-;5537:63;;5493:117;5288:329;;;;:::o;5623:118::-;5710:24;5728:5;5710:24;:::i;:::-;5705:3;5698:37;5623:118;;:::o;5747:222::-;5840:4;5878:2;5867:9;5863:18;5855:26;;5891:71;5959:1;5948:9;5944:17;5935:6;5891:71;:::i;:::-;5747:222;;;;:::o;5975:93::-;6011:7;6051:10;6044:5;6040:22;6029:33;;5975:93;;;:::o;6074:115::-;6159:23;6176:5;6159:23;:::i;:::-;6154:3;6147:36;6074:115;;:::o;6195:218::-;6286:4;6324:2;6313:9;6309:18;6301:26;;6337:69;6403:1;6392:9;6388:17;6379:6;6337:69;:::i;:::-;6195:218;;;;:::o;6419:765::-;6505:6;6513;6521;6529;6578:3;6566:9;6557:7;6553:23;6549:33;6546:120;;;6585:79;;:::i;:::-;6546:120;6705:1;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6676:117;6832:2;6858:53;6903:7;6894:6;6883:9;6879:22;6858:53;:::i;:::-;6848:63;;6803:118;6960:2;6986:53;7031:7;7022:6;7011:9;7007:22;6986:53;:::i;:::-;6976:63;;6931:118;7088:2;7114:53;7159:7;7150:6;7139:9;7135:22;7114:53;:::i;:::-;7104:63;;7059:118;6419:765;;;;;;;:::o;7190:118::-;7261:22;7277:5;7261:22;:::i;:::-;7254:5;7251:33;7241:61;;7298:1;7295;7288:12;7241:61;7190:118;:::o;7314:135::-;7358:5;7396:6;7383:20;7374:29;;7412:31;7437:5;7412:31;:::i;:::-;7314:135;;;;:::o;7455:122::-;7528:24;7546:5;7528:24;:::i;:::-;7521:5;7518:35;7508:63;;7567:1;7564;7557:12;7508:63;7455:122;:::o;7583:139::-;7629:5;7667:6;7654:20;7645:29;;7683:33;7710:5;7683:33;:::i;:::-;7583:139;;;;:::o;7728:1053::-;7830:6;7838;7846;7854;7862;7870;7919:3;7907:9;7898:7;7894:23;7890:33;7887:120;;;7926:79;;:::i;:::-;7887:120;8046:1;8071:53;8116:7;8107:6;8096:9;8092:22;8071:53;:::i;:::-;8061:63;;8017:117;8173:2;8199:53;8244:7;8235:6;8224:9;8220:22;8199:53;:::i;:::-;8189:63;;8144:118;8301:2;8327:53;8372:7;8363:6;8352:9;8348:22;8327:53;:::i;:::-;8317:63;;8272:118;8429:2;8455:51;8498:7;8489:6;8478:9;8474:22;8455:51;:::i;:::-;8445:61;;8400:116;8555:3;8582:53;8627:7;8618:6;8607:9;8603:22;8582:53;:::i;:::-;8572:63;;8526:119;8684:3;8711:53;8756:7;8747:6;8736:9;8732:22;8711:53;:::i;:::-;8701:63;;8655:119;7728:1053;;;;;;;;:::o;8787:474::-;8855:6;8863;8912:2;8900:9;8891:7;8887:23;8883:32;8880:119;;;8918:79;;:::i;:::-;8880:119;9038:1;9063:53;9108:7;9099:6;9088:9;9084:22;9063:53;:::i;:::-;9053:63;;9009:117;9165:2;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9136:118;8787:474;;;;;:::o;9267:120::-;9339:23;9356:5;9339:23;:::i;:::-;9332:5;9329:34;9319:62;;9377:1;9374;9367:12;9319:62;9267:120;:::o;9393:137::-;9438:5;9476:6;9463:20;9454:29;;9492:32;9518:5;9492:32;:::i;:::-;9393:137;;;;:::o;9536:472::-;9603:6;9611;9660:2;9648:9;9639:7;9635:23;9631:32;9628:119;;;9666:79;;:::i;:::-;9628:119;9786:1;9811:53;9856:7;9847:6;9836:9;9832:22;9811:53;:::i;:::-;9801:63;;9757:117;9913:2;9939:52;9983:7;9974:6;9963:9;9959:22;9939:52;:::i;:::-;9929:62;;9884:117;9536:472;;;;;:::o;10014:328::-;10133:4;10171:2;10160:9;10156:18;10148:26;;10184:69;10250:1;10239:9;10235:17;10226:6;10184:69;:::i;:::-;10263:72;10331:2;10320:9;10316:18;10307:6;10263:72;:::i;:::-;10014:328;;;;;:::o;10348:180::-;10396:77;10393:1;10386:88;10493:4;10490:1;10483:15;10517:4;10514:1;10507:15;10534:320;10578:6;10615:1;10609:4;10605:12;10595:22;;10662:1;10656:4;10652:12;10683:18;10673:81;;10739:4;10731:6;10727:17;10717:27;;10673:81;10801:2;10793:6;10790:14;10770:18;10767:38;10764:84;;10820:18;;:::i;:::-;10764:84;10585:269;10534:320;;;:::o;10860:182::-;11000:34;10996:1;10988:6;10984:14;10977:58;10860:182;:::o;11048:366::-;11190:3;11211:67;11275:2;11270:3;11211:67;:::i;:::-;11204:74;;11287:93;11376:3;11287:93;:::i;:::-;11405:2;11400:3;11396:12;11389:19;;11048:366;;;:::o;11420:419::-;11586:4;11624:2;11613:9;11609:18;11601:26;;11673:9;11667:4;11663:20;11659:1;11648:9;11644:17;11637:47;11701:131;11827:4;11701:131;:::i;:::-;11693:139;;11420:419;;;:::o;11845:220::-;11985:34;11981:1;11973:6;11969:14;11962:58;12054:3;12049:2;12041:6;12037:15;12030:28;11845:220;:::o;12071:366::-;12213:3;12234:67;12298:2;12293:3;12234:67;:::i;:::-;12227:74;;12310:93;12399:3;12310:93;:::i;:::-;12428:2;12423:3;12419:12;12412:19;;12071:366;;;:::o;12443:419::-;12609:4;12647:2;12636:9;12632:18;12624:26;;12696:9;12690:4;12686:20;12682:1;12671:9;12667:17;12660:47;12724:131;12850:4;12724:131;:::i;:::-;12716:139;;12443:419;;;:::o;12868:180::-;12916:77;12913:1;12906:88;13013:4;13010:1;13003:15;13037:4;13034:1;13027:15;13054:200;13093:4;13113:19;13130:1;13113:19;:::i;:::-;13108:24;;13146:19;13163:1;13146:19;:::i;:::-;13141:24;;13189:1;13186;13182:9;13174:17;;13213:10;13207:4;13204:20;13201:46;;;13227:18;;:::i;:::-;13201:46;13054:200;;;;:::o;13260:180::-;13308:77;13305:1;13298:88;13405:4;13402:1;13395:15;13429:4;13426:1;13419:15;13446:182;13485:1;13502:19;13519:1;13502:19;:::i;:::-;13497:24;;13535:19;13552:1;13535:19;:::i;:::-;13530:24;;13573:1;13563:35;;13578:18;;:::i;:::-;13563:35;13620:1;13617;13613:9;13608:14;;13446:182;;;;:::o;13634:442::-;13783:4;13821:2;13810:9;13806:18;13798:26;;13834:71;13902:1;13891:9;13887:17;13878:6;13834:71;:::i;:::-;13915:72;13983:2;13972:9;13968:18;13959:6;13915:72;:::i;:::-;13997;14065:2;14054:9;14050:18;14041:6;13997:72;:::i;:::-;13634:442;;;;;;:::o;14082:553::-;14259:4;14297:3;14286:9;14282:19;14274:27;;14311:71;14379:1;14368:9;14364:17;14355:6;14311:71;:::i;:::-;14392:72;14460:2;14449:9;14445:18;14436:6;14392:72;:::i;:::-;14474;14542:2;14531:9;14527:18;14518:6;14474:72;:::i;:::-;14556;14624:2;14613:9;14609:18;14600:6;14556:72;:::i;:::-;14082:553;;;;;;;:::o;14641:::-;14818:4;14856:3;14845:9;14841:19;14833:27;;14870:71;14938:1;14927:9;14923:17;14914:6;14870:71;:::i;:::-;14951:72;15019:2;15008:9;15004:18;14995:6;14951:72;:::i;:::-;15033;15101:2;15090:9;15086:18;15077:6;15033:72;:::i;:::-;15115;15183:2;15172:9;15168:18;15159:6;15115:72;:::i;:::-;14641:553;;;;;;;:::o;15200:148::-;15302:11;15339:3;15324:18;;15200:148;;;;:::o;15354:214::-;15494:66;15490:1;15482:6;15478:14;15471:90;15354:214;:::o;15574:400::-;15734:3;15755:84;15837:1;15832:3;15755:84;:::i;:::-;15748:91;;15848:93;15937:3;15848:93;:::i;:::-;15966:1;15961:3;15957:11;15950:18;;15574:400;;;:::o;15980:79::-;16019:7;16048:5;16037:16;;15980:79;;;:::o;16065:157::-;16170:45;16190:24;16208:5;16190:24;:::i;:::-;16170:45;:::i;:::-;16165:3;16158:58;16065:157;;:::o;16228:663::-;16469:3;16491:148;16635:3;16491:148;:::i;:::-;16484:155;;16649:75;16720:3;16711:6;16649:75;:::i;:::-;16749:2;16744:3;16740:12;16733:19;;16762:75;16833:3;16824:6;16762:75;:::i;:::-;16862:2;16857:3;16853:12;16846:19;;16882:3;16875:10;;16228:663;;;;;:::o;16897:545::-;17070:4;17108:3;17097:9;17093:19;17085:27;;17122:71;17190:1;17179:9;17175:17;17166:6;17122:71;:::i;:::-;17203:68;17267:2;17256:9;17252:18;17243:6;17203:68;:::i;:::-;17281:72;17349:2;17338:9;17334:18;17325:6;17281:72;:::i;:::-;17363;17431:2;17420:9;17416:18;17407:6;17363:72;:::i;:::-;16897:545;;;;;;;:::o;17448:182::-;17588:34;17584:1;17576:6;17572:14;17565:58;17448:182;:::o;17636:366::-;17778:3;17799:67;17863:2;17858:3;17799:67;:::i;:::-;17792:74;;17875:93;17964:3;17875:93;:::i;:::-;17993:2;17988:3;17984:12;17977:19;;17636:366;;;:::o;18008:419::-;18174:4;18212:2;18201:9;18197:18;18189:26;;18261:9;18255:4;18251:20;18247:1;18236:9;18232:17;18225:47;18289:131;18415:4;18289:131;:::i;:::-;18281:139;;18008:419;;;:::o;18433:233::-;18472:3;18495:24;18513:5;18495:24;:::i;:::-;18486:33;;18541:66;18534:5;18531:77;18528:103;;18611:18;;:::i;:::-;18528:103;18658:1;18651:5;18647:13;18640:20;;18433:233;;;:::o;18672:178::-;18812:30;18808:1;18800:6;18796:14;18789:54;18672:178;:::o;18856:366::-;18998:3;19019:67;19083:2;19078:3;19019:67;:::i;:::-;19012:74;;19095:93;19184:3;19095:93;:::i;:::-;19213:2;19208:3;19204:12;19197:19;;18856:366;;;:::o;19228:419::-;19394:4;19432:2;19421:9;19417:18;19409:26;;19481:9;19475:4;19471:20;19467:1;19456:9;19452:17;19445:47;19509:131;19635:4;19509:131;:::i;:::-;19501:139;;19228:419;;;:::o;19653:182::-;19793:34;19789:1;19781:6;19777:14;19770:58;19653:182;:::o;19841:366::-;19983:3;20004:67;20068:2;20063:3;20004:67;:::i;:::-;19997:74;;20080:93;20169:3;20080:93;:::i;:::-;20198:2;20193:3;20189:12;20182:19;;19841:366;;;:::o;20213:419::-;20379:4;20417:2;20406:9;20402:18;20394:26;;20466:9;20460:4;20456:20;20452:1;20441:9;20437:17;20430:47;20494:131;20620:4;20494:131;:::i;:::-;20486:139;;20213:419;;;:::o;20638:225::-;20778:34;20774:1;20766:6;20762:14;20755:58;20847:8;20842:2;20834:6;20830:15;20823:33;20638:225;:::o;20869:366::-;21011:3;21032:67;21096:2;21091:3;21032:67;:::i;:::-;21025:74;;21108:93;21197:3;21108:93;:::i;:::-;21226:2;21221:3;21217:12;21210:19;;20869:366;;;:::o;21241:419::-;21407:4;21445:2;21434:9;21430:18;21422:26;;21494:9;21488:4;21484:20;21480:1;21469:9;21465:17;21458:47;21522:131;21648:4;21522:131;:::i;:::-;21514:139;;21241:419;;;:::o;21666:223::-;21806:34;21802:1;21794:6;21790:14;21783:58;21875:6;21870:2;21862:6;21858:15;21851:31;21666:223;:::o;21895:366::-;22037:3;22058:67;22122:2;22117:3;22058:67;:::i;:::-;22051:74;;22134:93;22223:3;22134:93;:::i;:::-;22252:2;22247:3;22243:12;22236:19;;21895:366;;;:::o;22267:419::-;22433:4;22471:2;22460:9;22456:18;22448:26;;22520:9;22514:4;22510:20;22506:1;22495:9;22491:17;22484:47;22548:131;22674:4;22548:131;:::i;:::-;22540:139;;22267:419;;;:::o;22692:221::-;22832:34;22828:1;22820:6;22816:14;22809:58;22901:4;22896:2;22888:6;22884:15;22877:29;22692:221;:::o;22919:366::-;23061:3;23082:67;23146:2;23141:3;23082:67;:::i;:::-;23075:74;;23158:93;23247:3;23158:93;:::i;:::-;23276:2;23271:3;23267:12;23260:19;;22919:366;;;:::o;23291:419::-;23457:4;23495:2;23484:9;23480:18;23472:26;;23544:9;23538:4;23534:20;23530:1;23519:9;23515:17;23508:47;23572:131;23698:4;23572:131;:::i;:::-;23564:139;;23291:419;;;:::o;23716:194::-;23756:4;23776:20;23794:1;23776:20;:::i;:::-;23771:25;;23810:20;23828:1;23810:20;:::i;:::-;23805:25;;23854:1;23851;23847:9;23839:17;;23878:1;23872:4;23869:11;23866:37;;;23883:18;;:::i;:::-;23866:37;23716:194;;;;:::o;23916:191::-;23956:3;23975:20;23993:1;23975:20;:::i;:::-;23970:25;;24009:20;24027:1;24009:20;:::i;:::-;24004:25;;24052:1;24049;24045:9;24038:16;;24073:3;24070:1;24067:10;24064:36;;;24080:18;;:::i;:::-;24064:36;23916:191;;;;:::o;24113:177::-;24253:29;24249:1;24241:6;24237:14;24230:53;24113:177;:::o;24296:366::-;24438:3;24459:67;24523:2;24518:3;24459:67;:::i;:::-;24452:74;;24535:93;24624:3;24535:93;:::i;:::-;24653:2;24648:3;24644:12;24637:19;;24296:366;;;:::o;24668:419::-;24834:4;24872:2;24861:9;24857:18;24849:26;;24921:9;24915:4;24911:20;24907:1;24896:9;24892:17;24885:47;24949:131;25075:4;24949:131;:::i;:::-;24941:139;;24668:419;;;:::o;25093:224::-;25233:34;25229:1;25221:6;25217:14;25210:58;25302:7;25297:2;25289:6;25285:15;25278:32;25093:224;:::o;25323:366::-;25465:3;25486:67;25550:2;25545:3;25486:67;:::i;:::-;25479:74;;25562:93;25651:3;25562:93;:::i;:::-;25680:2;25675:3;25671:12;25664:19;;25323:366;;;:::o;25695:419::-;25861:4;25899:2;25888:9;25884:18;25876:26;;25948:9;25942:4;25938:20;25934:1;25923:9;25919:17;25912:47;25976:131;26102:4;25976:131;:::i;:::-;25968:139;;25695:419;;;:::o;26120:222::-;26260:34;26256:1;26248:6;26244:14;26237:58;26329:5;26324:2;26316:6;26312:15;26305:30;26120:222;:::o;26348:366::-;26490:3;26511:67;26575:2;26570:3;26511:67;:::i;:::-;26504:74;;26587:93;26676:3;26587:93;:::i;:::-;26705:2;26700:3;26696:12;26689:19;;26348:366;;;:::o;26720:419::-;26886:4;26924:2;26913:9;26909:18;26901:26;;26973:9;26967:4;26963:20;26959:1;26948:9;26944:17;26937:47;27001:131;27127:4;27001:131;:::i;:::-;26993:139;;26720:419;;;:::o;27145:180::-;27285:32;27281:1;27273:6;27269:14;27262:56;27145:180;:::o;27331:366::-;27473:3;27494:67;27558:2;27553:3;27494:67;:::i;:::-;27487:74;;27570:93;27659:3;27570:93;:::i;:::-;27688:2;27683:3;27679:12;27672:19;;27331:366;;;:::o;27703:419::-;27869:4;27907:2;27896:9;27892:18;27884:26;;27956:9;27950:4;27946:20;27942:1;27931:9;27927:17;27920:47;27984:131;28110:4;27984:131;:::i;:::-;27976:139;;27703:419;;;:::o;28128:197::-;28167:3;28186:19;28203:1;28186:19;:::i;:::-;28181:24;;28219:19;28236:1;28219:19;:::i;:::-;28214:24;;28261:1;28258;28254:9;28247:16;;28284:10;28279:3;28276:19;28273:45;;;28298:18;;:::i;:::-;28273:45;28128:197;;;;:::o;28331:235::-;28471:34;28467:1;28459:6;28455:14;28448:58;28540:18;28535:2;28527:6;28523:15;28516:43;28331:235;:::o;28572:366::-;28714:3;28735:67;28799:2;28794:3;28735:67;:::i;:::-;28728:74;;28811:93;28900:3;28811:93;:::i;:::-;28929:2;28924:3;28920:12;28913:19;;28572:366;;;:::o;28944:419::-;29110:4;29148:2;29137:9;29133:18;29125:26;;29197:9;29191:4;29187:20;29183:1;29172:9;29168:17;29161:47;29225:131;29351:4;29225:131;:::i;:::-;29217:139;;28944:419;;;:::o;29369:332::-;29490:4;29528:2;29517:9;29513:18;29505:26;;29541:71;29609:1;29598:9;29594:17;29585:6;29541:71;:::i;:::-;29622:72;29690:2;29679:9;29675:18;29666:6;29622:72;:::i;:::-;29369:332;;;;;:::o
Swarm Source
ipfs://a1de25655a65bc4734d689f6fbfceb948fcf6c7a4139ca9f884761ec6253f192
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.