Token BCANcoin
Polygon Sponsored slots available. Book your slot here!
Overview ERC-20
Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
5,909.757037 BCAN
Holders:
11 addresses
Transfers:
-
Contract:
Decimals:
18
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BCANcoin
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-26 */ // File: BCANcoin_flat.sol // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: BCANcoin.sol pragma solidity 0.8.4; contract BCANcoin is ERC20, ERC20Burnable, Ownable { mapping(address => bool) controllers; constructor() ERC20("BCANcoin", "BCAN") { } function mint(address to, uint256 amount) external { require(controllers[msg.sender], "Only controllers can mint"); _mint(to, amount); } function burnFrom(address account, uint256 amount) public override { if (controllers[msg.sender]) { _burn(account, amount); } else { super.burnFrom(account, amount); } } function addController(address controller) external onlyOwner { controllers[controller] = true; } function removeController(address controller) external onlyOwner { controllers[controller] = false; } }
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":"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":[{"internalType":"address","name":"controller","type":"address"}],"name":"addController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"removeController","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600881526020017f4243414e636f696e0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4243414e00000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620001a6565b508060049080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b611e0e80620002cb6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063a7fc7a0711610071578063a7fc7a071461030a578063a9059cbb14610326578063dd62ed3e14610356578063f2fde38b14610386578063f6a74ed7146103a257610121565b8063715018a61461027857806379cc6790146102825780638da5cb5b1461029e57806395d89b41146102bc578063a457c2d7146102da57610121565b8063313ce567116100f4578063313ce567146101c257806339509351146101e057806340c10f191461021057806342966c681461022c57806370a082311461024857610121565b806306fdde0314610126578063095ea7b31461014457806318160ddd1461017457806323b872dd14610192575b600080fd5b61012e6103be565b60405161013b91906116ac565b60405180910390f35b61015e600480360381019061015991906113d5565b610450565b60405161016b9190611691565b60405180910390f35b61017c610473565b604051610189919061186e565b60405180910390f35b6101ac60048036038101906101a79190611386565b61047d565b6040516101b99190611691565b60405180910390f35b6101ca6104ac565b6040516101d79190611889565b60405180910390f35b6101fa60048036038101906101f591906113d5565b6104b5565b6040516102079190611691565b60405180910390f35b61022a600480360381019061022591906113d5565b6104ec565b005b61024660048036038101906102419190611411565b610586565b005b610262600480360381019061025d9190611321565b61059a565b60405161026f919061186e565b60405180910390f35b6102806105e2565b005b61029c600480360381019061029791906113d5565b6105f6565b005b6102a6610666565b6040516102b39190611676565b60405180910390f35b6102c4610690565b6040516102d191906116ac565b60405180910390f35b6102f460048036038101906102ef91906113d5565b610722565b6040516103019190611691565b60405180910390f35b610324600480360381019061031f9190611321565b610799565b005b610340600480360381019061033b91906113d5565b6107fc565b60405161034d9190611691565b60405180910390f35b610370600480360381019061036b919061134a565b61081f565b60405161037d919061186e565b60405180910390f35b6103a0600480360381019061039b9190611321565b6108a6565b005b6103bc60048036038101906103b79190611321565b61092a565b005b6060600380546103cd9061199e565b80601f01602080910402602001604051908101604052809291908181526020018280546103f99061199e565b80156104465780601f1061041b57610100808354040283529160200191610446565b820191906000526020600020905b81548152906001019060200180831161042957829003601f168201915b5050505050905090565b60008061045b61098d565b9050610468818585610995565b600191505092915050565b6000600254905090565b60008061048861098d565b9050610495858285610b60565b6104a0858585610bec565b60019150509392505050565b60006012905090565b6000806104c061098d565b90506104e18185856104d2858961081f565b6104dc91906118c0565b610995565b600191505092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f9061178e565b60405180910390fd5b6105828282610e64565b5050565b61059761059161098d565b82610fbb565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105ea611189565b6105f46000611207565b565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610657576106528282610fbb565b610662565b61066182826112cd565b5b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461069f9061199e565b80601f01602080910402602001604051908101604052809291908181526020018280546106cb9061199e565b80156107185780601f106106ed57610100808354040283529160200191610718565b820191906000526020600020905b8154815290600101906020018083116106fb57829003601f168201915b5050505050905090565b60008061072d61098d565b9050600061073b828661081f565b905083811015610780576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107779061182e565b60405180910390fd5b61078d8286868403610995565b60019250505092915050565b6107a1611189565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008061080761098d565b9050610814818585610bec565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6108ae611189565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561091e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109159061170e565b60405180910390fd5b61092781611207565b50565b610932611189565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fc9061180e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c9061172e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b53919061186e565b60405180910390a3505050565b6000610b6c848461081f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610be65781811015610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf9061174e565b60405180910390fd5b610be58484848403610995565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c53906117ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc3906116ce565b60405180910390fd5b610cd78383836112ed565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d549061176e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4b919061186e565b60405180910390a3610e5e8484846112f2565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb9061184e565b60405180910390fd5b610ee0600083836112ed565b8060026000828254610ef291906118c0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fa3919061186e565b60405180910390a3610fb7600083836112f2565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906117ce565b60405180910390fd5b611037826000836112ed565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b4906116ee565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611170919061186e565b60405180910390a3611184836000846112f2565b505050565b61119161098d565b73ffffffffffffffffffffffffffffffffffffffff166111af610666565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc906117ae565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6112df826112d961098d565b83610b60565b6112e98282610fbb565b5050565b505050565b505050565b60008135905061130681611daa565b92915050565b60008135905061131b81611dc1565b92915050565b60006020828403121561133357600080fd5b6000611341848285016112f7565b91505092915050565b6000806040838503121561135d57600080fd5b600061136b858286016112f7565b925050602061137c858286016112f7565b9150509250929050565b60008060006060848603121561139b57600080fd5b60006113a9868287016112f7565b93505060206113ba868287016112f7565b92505060406113cb8682870161130c565b9150509250925092565b600080604083850312156113e857600080fd5b60006113f6858286016112f7565b92505060206114078582860161130c565b9150509250929050565b60006020828403121561142357600080fd5b60006114318482850161130c565b91505092915050565b61144381611916565b82525050565b61145281611928565b82525050565b6000611463826118a4565b61146d81856118af565b935061147d81856020860161196b565b61148681611a2e565b840191505092915050565b600061149e6023836118af565b91506114a982611a3f565b604082019050919050565b60006114c16022836118af565b91506114cc82611a8e565b604082019050919050565b60006114e46026836118af565b91506114ef82611add565b604082019050919050565b60006115076022836118af565b915061151282611b2c565b604082019050919050565b600061152a601d836118af565b915061153582611b7b565b602082019050919050565b600061154d6026836118af565b915061155882611ba4565b604082019050919050565b60006115706019836118af565b915061157b82611bf3565b602082019050919050565b60006115936020836118af565b915061159e82611c1c565b602082019050919050565b60006115b66021836118af565b91506115c182611c45565b604082019050919050565b60006115d96025836118af565b91506115e482611c94565b604082019050919050565b60006115fc6024836118af565b915061160782611ce3565b604082019050919050565b600061161f6025836118af565b915061162a82611d32565b604082019050919050565b6000611642601f836118af565b915061164d82611d81565b602082019050919050565b61166181611954565b82525050565b6116708161195e565b82525050565b600060208201905061168b600083018461143a565b92915050565b60006020820190506116a66000830184611449565b92915050565b600060208201905081810360008301526116c68184611458565b905092915050565b600060208201905081810360008301526116e781611491565b9050919050565b60006020820190508181036000830152611707816114b4565b9050919050565b60006020820190508181036000830152611727816114d7565b9050919050565b60006020820190508181036000830152611747816114fa565b9050919050565b600060208201905081810360008301526117678161151d565b9050919050565b6000602082019050818103600083015261178781611540565b9050919050565b600060208201905081810360008301526117a781611563565b9050919050565b600060208201905081810360008301526117c781611586565b9050919050565b600060208201905081810360008301526117e7816115a9565b9050919050565b60006020820190508181036000830152611807816115cc565b9050919050565b60006020820190508181036000830152611827816115ef565b9050919050565b6000602082019050818103600083015261184781611612565b9050919050565b6000602082019050818103600083015261186781611635565b9050919050565b60006020820190506118836000830184611658565b92915050565b600060208201905061189e6000830184611667565b92915050565b600081519050919050565b600082825260208201905092915050565b60006118cb82611954565b91506118d683611954565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561190b5761190a6119d0565b5b828201905092915050565b600061192182611934565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561198957808201518184015260208101905061196e565b83811115611998576000848401525b50505050565b600060028204905060018216806119b657607f821691505b602082108114156119ca576119c96119ff565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c7920636f6e74726f6c6c6572732063616e206d696e7400000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b611db381611916565b8114611dbe57600080fd5b50565b611dca81611954565b8114611dd557600080fd5b5056fea2646970667358221220d5351f2f01905167edbf620f64815c2cdcc7becf26a43bfee53337b20840178f64736f6c63430008040033
Deployed ByteCode Sourcemap
21800:758:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6683:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9034:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7803:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9815:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7645:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10519:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21952:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18454:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7974:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20918:103;;;:::i;:::-;;22107:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20270:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6902:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11260:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22335:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8307:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8563:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21176:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22446:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6683:100;6737:13;6770:5;6763:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6683:100;:::o;9034:201::-;9117:4;9134:13;9150:12;:10;:12::i;:::-;9134:28;;9173:32;9182:5;9189:7;9198:6;9173:8;:32::i;:::-;9223:4;9216:11;;;9034:201;;;;:::o;7803:108::-;7864:7;7891:12;;7884:19;;7803:108;:::o;9815:295::-;9946:4;9963:15;9981:12;:10;:12::i;:::-;9963:30;;10004:38;10020:4;10026:7;10035:6;10004:15;:38::i;:::-;10053:27;10063:4;10069:2;10073:6;10053:9;:27::i;:::-;10098:4;10091:11;;;9815:295;;;;;:::o;7645:93::-;7703:5;7728:2;7721:9;;7645:93;:::o;10519:238::-;10607:4;10624:13;10640:12;:10;:12::i;:::-;10624:28;;10663:64;10672:5;10679:7;10716:10;10688:25;10698:5;10705:7;10688:9;:25::i;:::-;:38;;;;:::i;:::-;10663:8;:64::i;:::-;10745:4;10738:11;;;10519:238;;;;:::o;21952:149::-;22018:11;:23;22030:10;22018:23;;;;;;;;;;;;;;;;;;;;;;;;;22010:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22078:17;22084:2;22088:6;22078:5;:17::i;:::-;21952:149;;:::o;18454:91::-;18510:27;18516:12;:10;:12::i;:::-;18530:6;18510:5;:27::i;:::-;18454:91;:::o;7974:127::-;8048:7;8075:9;:18;8085:7;8075:18;;;;;;;;;;;;;;;;8068:25;;7974:127;;;:::o;20918:103::-;20156:13;:11;:13::i;:::-;20983:30:::1;21010:1;20983:18;:30::i;:::-;20918:103::o:0;22107:222::-;22187:11;:23;22199:10;22187:23;;;;;;;;;;;;;;;;;;;;;;;;;22183:141;;;22225:22;22231:7;22240:6;22225:5;:22::i;:::-;22183:141;;;22283:31;22298:7;22307:6;22283:14;:31::i;:::-;22183:141;22107:222;;:::o;20270:87::-;20316:7;20343:6;;;;;;;;;;;20336:13;;20270:87;:::o;6902:104::-;6958:13;6991:7;6984:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6902:104;:::o;11260:436::-;11353:4;11370:13;11386:12;:10;:12::i;:::-;11370:28;;11409:24;11436:25;11446:5;11453:7;11436:9;:25::i;:::-;11409:52;;11500:15;11480:16;:35;;11472:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11593:60;11602:5;11609:7;11637:15;11618:16;:34;11593:8;:60::i;:::-;11684:4;11677:11;;;;11260:436;;;;:::o;22335:105::-;20156:13;:11;:13::i;:::-;22430:4:::1;22404:11;:23;22416:10;22404:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;22335:105:::0;:::o;8307:193::-;8386:4;8403:13;8419:12;:10;:12::i;:::-;8403:28;;8442;8452:5;8459:2;8463:6;8442:9;:28::i;:::-;8488:4;8481:11;;;8307:193;;;;:::o;8563:151::-;8652:7;8679:11;:18;8691:5;8679:18;;;;;;;;;;;;;;;:27;8698:7;8679:27;;;;;;;;;;;;;;;;8672:34;;8563:151;;;;:::o;21176:201::-;20156:13;:11;:13::i;:::-;21285:1:::1;21265:22;;:8;:22;;;;21257:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21341:28;21360:8;21341:18;:28::i;:::-;21176:201:::0;:::o;22446:109::-;20156:13;:11;:13::i;:::-;22544:5:::1;22518:11;:23;22530:10;22518:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;22446:109:::0;:::o;4325:98::-;4378:7;4405:10;4398:17;;4325:98;:::o;15287:380::-;15440:1;15423:19;;:5;:19;;;;15415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15521:1;15502:21;;:7;:21;;;;15494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15605:6;15575:11;:18;15587:5;15575:18;;;;;;;;;;;;;;;:27;15594:7;15575:27;;;;;;;;;;;;;;;:36;;;;15643:7;15627:32;;15636:5;15627:32;;;15652:6;15627:32;;;;;;:::i;:::-;;;;;;;;15287:380;;;:::o;15958:453::-;16093:24;16120:25;16130:5;16137:7;16120:9;:25::i;:::-;16093:52;;16180:17;16160:16;:37;16156:248;;16242:6;16222:16;:26;;16214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16326:51;16335:5;16342:7;16370:6;16351:16;:25;16326:8;:51::i;:::-;16156:248;15958:453;;;;:::o;12166:840::-;12313:1;12297:18;;:4;:18;;;;12289:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12390:1;12376:16;;:2;:16;;;;12368:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12445:38;12466:4;12472:2;12476:6;12445:20;:38::i;:::-;12496:19;12518:9;:15;12528:4;12518:15;;;;;;;;;;;;;;;;12496:37;;12567:6;12552:11;:21;;12544:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12684:6;12670:11;:20;12652:9;:15;12662:4;12652:15;;;;;;;;;;;;;;;:38;;;;12887:6;12870:9;:13;12880:2;12870:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12937:2;12922:26;;12931:4;12922:26;;;12941:6;12922:26;;;;;;:::i;:::-;;;;;;;;12961:37;12981:4;12987:2;12991:6;12961:19;:37::i;:::-;12166:840;;;;:::o;13293:548::-;13396:1;13377:21;;:7;:21;;;;13369:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13447:49;13476:1;13480:7;13489:6;13447:20;:49::i;:::-;13525:6;13509:12;;:22;;;;;;;:::i;:::-;;;;;;;;13702:6;13680:9;:18;13690:7;13680:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;13756:7;13735:37;;13752:1;13735:37;;;13765:6;13735:37;;;;;;:::i;:::-;;;;;;;;13785:48;13813:1;13817:7;13826:6;13785:19;:48::i;:::-;13293:548;;:::o;14174:675::-;14277:1;14258:21;;:7;:21;;;;14250:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14330:49;14351:7;14368:1;14372:6;14330:20;:49::i;:::-;14392:22;14417:9;:18;14427:7;14417:18;;;;;;;;;;;;;;;;14392:43;;14472:6;14454:14;:24;;14446:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14591:6;14574:14;:23;14553:9;:18;14563:7;14553:18;;;;;;;;;;;;;;;:44;;;;14708:6;14692:12;;:22;;;;;;;;;;;14769:1;14743:37;;14752:7;14743:37;;;14773:6;14743:37;;;;;;:::i;:::-;;;;;;;;14793:48;14813:7;14830:1;14834:6;14793:19;:48::i;:::-;14174:675;;;:::o;20435:132::-;20510:12;:10;:12::i;:::-;20499:23;;:7;:5;:7::i;:::-;:23;;;20491:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20435:132::o;21537:191::-;21611:16;21630:6;;;;;;;;;;;21611:25;;21656:8;21647:6;;:17;;;;;;;;;;;;;;;;;;21711:8;21680:40;;21701:8;21680:40;;;;;;;;;;;;21537:191;;:::o;18864:164::-;18941:46;18957:7;18966:12;:10;:12::i;:::-;18980:6;18941:15;:46::i;:::-;18998:22;19004:7;19013:6;18998:5;:22::i;:::-;18864:164;;:::o;17011:125::-;;;;:::o;17740:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:262::-;356:6;405:2;393:9;384:7;380:23;376:32;373:2;;;421:1;418;411:12;373:2;464:1;489:53;534:7;525:6;514:9;510:22;489:53;:::i;:::-;479:63;;435:117;363:196;;;;:::o;565:407::-;633:6;641;690:2;678:9;669:7;665:23;661:32;658:2;;;706:1;703;696:12;658:2;749:1;774:53;819:7;810:6;799:9;795:22;774:53;:::i;:::-;764:63;;720:117;876:2;902:53;947:7;938:6;927:9;923:22;902:53;:::i;:::-;892:63;;847:118;648:324;;;;;:::o;978:552::-;1055:6;1063;1071;1120:2;1108:9;1099:7;1095:23;1091:32;1088:2;;;1136:1;1133;1126:12;1088:2;1179:1;1204:53;1249:7;1240:6;1229:9;1225:22;1204:53;:::i;:::-;1194:63;;1150:117;1306:2;1332:53;1377:7;1368:6;1357:9;1353:22;1332:53;:::i;:::-;1322:63;;1277:118;1434:2;1460:53;1505:7;1496:6;1485:9;1481:22;1460:53;:::i;:::-;1450:63;;1405:118;1078:452;;;;;:::o;1536:407::-;1604:6;1612;1661:2;1649:9;1640:7;1636:23;1632:32;1629:2;;;1677:1;1674;1667:12;1629:2;1720:1;1745:53;1790:7;1781:6;1770:9;1766:22;1745:53;:::i;:::-;1735:63;;1691:117;1847:2;1873:53;1918:7;1909:6;1898:9;1894:22;1873:53;:::i;:::-;1863:63;;1818:118;1619:324;;;;;:::o;1949:262::-;2008:6;2057:2;2045:9;2036:7;2032:23;2028:32;2025:2;;;2073:1;2070;2063:12;2025:2;2116:1;2141:53;2186:7;2177:6;2166:9;2162:22;2141:53;:::i;:::-;2131:63;;2087:117;2015:196;;;;:::o;2217:118::-;2304:24;2322:5;2304:24;:::i;:::-;2299:3;2292:37;2282:53;;:::o;2341:109::-;2422:21;2437:5;2422:21;:::i;:::-;2417:3;2410:34;2400:50;;:::o;2456:364::-;2544:3;2572:39;2605:5;2572:39;:::i;:::-;2627:71;2691:6;2686:3;2627:71;:::i;:::-;2620:78;;2707:52;2752:6;2747:3;2740:4;2733:5;2729:16;2707:52;:::i;:::-;2784:29;2806:6;2784:29;:::i;:::-;2779:3;2775:39;2768:46;;2548:272;;;;;:::o;2826:366::-;2968:3;2989:67;3053:2;3048:3;2989:67;:::i;:::-;2982:74;;3065:93;3154:3;3065:93;:::i;:::-;3183:2;3178:3;3174:12;3167:19;;2972:220;;;:::o;3198:366::-;3340:3;3361:67;3425:2;3420:3;3361:67;:::i;:::-;3354:74;;3437:93;3526:3;3437:93;:::i;:::-;3555:2;3550:3;3546:12;3539:19;;3344:220;;;:::o;3570:366::-;3712:3;3733:67;3797:2;3792:3;3733:67;:::i;:::-;3726:74;;3809:93;3898:3;3809:93;:::i;:::-;3927:2;3922:3;3918:12;3911:19;;3716:220;;;:::o;3942:366::-;4084:3;4105:67;4169:2;4164:3;4105:67;:::i;:::-;4098:74;;4181:93;4270:3;4181:93;:::i;:::-;4299:2;4294:3;4290:12;4283:19;;4088:220;;;:::o;4314:366::-;4456:3;4477:67;4541:2;4536:3;4477:67;:::i;:::-;4470:74;;4553:93;4642:3;4553:93;:::i;:::-;4671:2;4666:3;4662:12;4655:19;;4460:220;;;:::o;4686:366::-;4828:3;4849:67;4913:2;4908:3;4849:67;:::i;:::-;4842:74;;4925:93;5014:3;4925:93;:::i;:::-;5043:2;5038:3;5034:12;5027:19;;4832:220;;;:::o;5058:366::-;5200:3;5221:67;5285:2;5280:3;5221:67;:::i;:::-;5214:74;;5297:93;5386:3;5297:93;:::i;:::-;5415:2;5410:3;5406:12;5399:19;;5204:220;;;:::o;5430:366::-;5572:3;5593:67;5657:2;5652:3;5593:67;:::i;:::-;5586:74;;5669:93;5758:3;5669:93;:::i;:::-;5787:2;5782:3;5778:12;5771:19;;5576:220;;;:::o;5802:366::-;5944:3;5965:67;6029:2;6024:3;5965:67;:::i;:::-;5958:74;;6041:93;6130:3;6041:93;:::i;:::-;6159:2;6154:3;6150:12;6143:19;;5948:220;;;:::o;6174:366::-;6316:3;6337:67;6401:2;6396:3;6337:67;:::i;:::-;6330:74;;6413:93;6502:3;6413:93;:::i;:::-;6531:2;6526:3;6522:12;6515:19;;6320:220;;;:::o;6546:366::-;6688:3;6709:67;6773:2;6768:3;6709:67;:::i;:::-;6702:74;;6785:93;6874:3;6785:93;:::i;:::-;6903:2;6898:3;6894:12;6887:19;;6692:220;;;:::o;6918:366::-;7060:3;7081:67;7145:2;7140:3;7081:67;:::i;:::-;7074:74;;7157:93;7246:3;7157:93;:::i;:::-;7275:2;7270:3;7266:12;7259:19;;7064:220;;;:::o;7290:366::-;7432:3;7453:67;7517:2;7512:3;7453:67;:::i;:::-;7446:74;;7529:93;7618:3;7529:93;:::i;:::-;7647:2;7642:3;7638:12;7631:19;;7436:220;;;:::o;7662:118::-;7749:24;7767:5;7749:24;:::i;:::-;7744:3;7737:37;7727:53;;:::o;7786:112::-;7869:22;7885:5;7869:22;:::i;:::-;7864:3;7857:35;7847:51;;:::o;7904:222::-;7997:4;8035:2;8024:9;8020:18;8012:26;;8048:71;8116:1;8105:9;8101:17;8092:6;8048:71;:::i;:::-;8002:124;;;;:::o;8132:210::-;8219:4;8257:2;8246:9;8242:18;8234:26;;8270:65;8332:1;8321:9;8317:17;8308:6;8270:65;:::i;:::-;8224:118;;;;:::o;8348:313::-;8461:4;8499:2;8488:9;8484:18;8476:26;;8548:9;8542:4;8538:20;8534:1;8523:9;8519:17;8512:47;8576:78;8649:4;8640:6;8576:78;:::i;:::-;8568:86;;8466:195;;;;:::o;8667:419::-;8833:4;8871:2;8860:9;8856:18;8848:26;;8920:9;8914:4;8910:20;8906:1;8895:9;8891:17;8884:47;8948:131;9074:4;8948:131;:::i;:::-;8940:139;;8838:248;;;:::o;9092:419::-;9258:4;9296:2;9285:9;9281:18;9273:26;;9345:9;9339:4;9335:20;9331:1;9320:9;9316:17;9309:47;9373:131;9499:4;9373:131;:::i;:::-;9365:139;;9263:248;;;:::o;9517:419::-;9683:4;9721:2;9710:9;9706:18;9698:26;;9770:9;9764:4;9760:20;9756:1;9745:9;9741:17;9734:47;9798:131;9924:4;9798:131;:::i;:::-;9790:139;;9688:248;;;:::o;9942:419::-;10108:4;10146:2;10135:9;10131:18;10123:26;;10195:9;10189:4;10185:20;10181:1;10170:9;10166:17;10159:47;10223:131;10349:4;10223:131;:::i;:::-;10215:139;;10113:248;;;:::o;10367:419::-;10533:4;10571:2;10560:9;10556:18;10548:26;;10620:9;10614:4;10610:20;10606:1;10595:9;10591:17;10584:47;10648:131;10774:4;10648:131;:::i;:::-;10640:139;;10538:248;;;:::o;10792:419::-;10958:4;10996:2;10985:9;10981:18;10973:26;;11045:9;11039:4;11035:20;11031:1;11020:9;11016:17;11009:47;11073:131;11199:4;11073:131;:::i;:::-;11065:139;;10963:248;;;:::o;11217:419::-;11383:4;11421:2;11410:9;11406:18;11398:26;;11470:9;11464:4;11460:20;11456:1;11445:9;11441:17;11434:47;11498:131;11624:4;11498:131;:::i;:::-;11490:139;;11388:248;;;:::o;11642:419::-;11808:4;11846:2;11835:9;11831:18;11823:26;;11895:9;11889:4;11885:20;11881:1;11870:9;11866:17;11859:47;11923:131;12049:4;11923:131;:::i;:::-;11915:139;;11813:248;;;:::o;12067:419::-;12233:4;12271:2;12260:9;12256:18;12248:26;;12320:9;12314:4;12310:20;12306:1;12295:9;12291:17;12284:47;12348:131;12474:4;12348:131;:::i;:::-;12340:139;;12238:248;;;:::o;12492:419::-;12658:4;12696:2;12685:9;12681:18;12673:26;;12745:9;12739:4;12735:20;12731:1;12720:9;12716:17;12709:47;12773:131;12899:4;12773:131;:::i;:::-;12765:139;;12663:248;;;:::o;12917:419::-;13083:4;13121:2;13110:9;13106:18;13098:26;;13170:9;13164:4;13160:20;13156:1;13145:9;13141:17;13134:47;13198:131;13324:4;13198:131;:::i;:::-;13190:139;;13088:248;;;:::o;13342:419::-;13508:4;13546:2;13535:9;13531:18;13523:26;;13595:9;13589:4;13585:20;13581:1;13570:9;13566:17;13559:47;13623:131;13749:4;13623:131;:::i;:::-;13615:139;;13513:248;;;:::o;13767:419::-;13933:4;13971:2;13960:9;13956:18;13948:26;;14020:9;14014:4;14010:20;14006:1;13995:9;13991:17;13984:47;14048:131;14174:4;14048:131;:::i;:::-;14040:139;;13938:248;;;:::o;14192:222::-;14285:4;14323:2;14312:9;14308:18;14300:26;;14336:71;14404:1;14393:9;14389:17;14380:6;14336:71;:::i;:::-;14290:124;;;;:::o;14420:214::-;14509:4;14547:2;14536:9;14532:18;14524:26;;14560:67;14624:1;14613:9;14609:17;14600:6;14560:67;:::i;:::-;14514:120;;;;:::o;14640:99::-;14692:6;14726:5;14720:12;14710:22;;14699:40;;;:::o;14745:169::-;14829:11;14863:6;14858:3;14851:19;14903:4;14898:3;14894:14;14879:29;;14841:73;;;;:::o;14920:305::-;14960:3;14979:20;14997:1;14979:20;:::i;:::-;14974:25;;15013:20;15031:1;15013:20;:::i;:::-;15008:25;;15167:1;15099:66;15095:74;15092:1;15089:81;15086:2;;;15173:18;;:::i;:::-;15086:2;15217:1;15214;15210:9;15203:16;;14964:261;;;;:::o;15231:96::-;15268:7;15297:24;15315:5;15297:24;:::i;:::-;15286:35;;15276:51;;;:::o;15333:90::-;15367:7;15410:5;15403:13;15396:21;15385:32;;15375:48;;;:::o;15429:126::-;15466:7;15506:42;15499:5;15495:54;15484:65;;15474:81;;;:::o;15561:77::-;15598:7;15627:5;15616:16;;15606:32;;;:::o;15644:86::-;15679:7;15719:4;15712:5;15708:16;15697:27;;15687:43;;;:::o;15736:307::-;15804:1;15814:113;15828:6;15825:1;15822:13;15814:113;;;15913:1;15908:3;15904:11;15898:18;15894:1;15889:3;15885:11;15878:39;15850:2;15847:1;15843:10;15838:15;;15814:113;;;15945:6;15942:1;15939:13;15936:2;;;16025:1;16016:6;16011:3;16007:16;16000:27;15936:2;15785:258;;;;:::o;16049:320::-;16093:6;16130:1;16124:4;16120:12;16110:22;;16177:1;16171:4;16167:12;16198:18;16188:2;;16254:4;16246:6;16242:17;16232:27;;16188:2;16316;16308:6;16305:14;16285:18;16282:38;16279:2;;;16335:18;;:::i;:::-;16279:2;16100:269;;;;:::o;16375:180::-;16423:77;16420:1;16413:88;16520:4;16517:1;16510:15;16544:4;16541:1;16534:15;16561:180;16609:77;16606:1;16599:88;16706:4;16703:1;16696:15;16730:4;16727:1;16720:15;16747:102;16788:6;16839:2;16835:7;16830:2;16823:5;16819:14;16815:28;16805:38;;16795:54;;;:::o;16855:222::-;16995:34;16991:1;16983:6;16979:14;16972:58;17064:5;17059:2;17051:6;17047:15;17040:30;16961:116;:::o;17083:221::-;17223:34;17219:1;17211:6;17207:14;17200:58;17292:4;17287:2;17279:6;17275:15;17268:29;17189:115;:::o;17310:225::-;17450:34;17446:1;17438:6;17434:14;17427:58;17519:8;17514:2;17506:6;17502:15;17495:33;17416:119;:::o;17541:221::-;17681:34;17677:1;17669:6;17665:14;17658:58;17750:4;17745:2;17737:6;17733:15;17726:29;17647:115;:::o;17768:179::-;17908:31;17904:1;17896:6;17892:14;17885:55;17874:73;:::o;17953:225::-;18093:34;18089:1;18081:6;18077:14;18070:58;18162:8;18157:2;18149:6;18145:15;18138:33;18059:119;:::o;18184:175::-;18324:27;18320:1;18312:6;18308:14;18301:51;18290:69;:::o;18365:182::-;18505:34;18501:1;18493:6;18489:14;18482:58;18471:76;:::o;18553:220::-;18693:34;18689:1;18681:6;18677:14;18670:58;18762:3;18757:2;18749:6;18745:15;18738:28;18659:114;:::o;18779:224::-;18919:34;18915:1;18907:6;18903:14;18896:58;18988:7;18983:2;18975:6;18971:15;18964:32;18885:118;:::o;19009:223::-;19149:34;19145:1;19137:6;19133:14;19126:58;19218:6;19213:2;19205:6;19201:15;19194:31;19115:117;:::o;19238:224::-;19378:34;19374:1;19366:6;19362:14;19355:58;19447:7;19442:2;19434:6;19430:15;19423:32;19344:118;:::o;19468:181::-;19608:33;19604:1;19596:6;19592:14;19585:57;19574:75;:::o;19655:122::-;19728:24;19746:5;19728:24;:::i;:::-;19721:5;19718:35;19708:2;;19767:1;19764;19757:12;19708:2;19698:79;:::o;19783:122::-;19856:24;19874:5;19856:24;:::i;:::-;19849:5;19846:35;19836:2;;19895:1;19892;19885:12;19836:2;19826:79;:::o
Swarm Source
ipfs://d5351f2f01905167edbf620f64815c2cdcc7becf26a43bfee53337b20840178f