Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
623,515,920.816746578452477545 PMPY
Holders
2,113 (0.00%)
Market
Price
$0.00 @ 0.000001 ETH (+5.36%)
Onchain Market Cap
$2,448,416.08
Circulating Supply Market Cap
$2,209,668.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.01619135117263241 PMPYValue
$0.00 ( ~0 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | Uniswap V2 (Ethereum) | 0X1123D17FCF93ED2B41440317503346A0FDFE3ED7-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 | $0.004 0.0000013 Eth | $11,944.62 3,046,306.521 0X1123D17FCF93ED2B41440317503346A0FDFE3ED7 | 89.1537% |
2 | MEXC | PMPY-USDT | $0.0035 0.0000011 Eth | $1,279.23 362,273.010 PMPY | 10.6023% |
3 | ProBit Global | PMPY-USDT | $0.0032 0.0000010 Eth | $14.41 4,475.492 PMPY | 0.1310% |
4 | XT.COM | PMPY-USDT | $0.0032 0.0000010 Eth | $12.70 3,858.500 PMPY | 0.1129% |
Contract Name:
PrometheumProdigy
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-20 */ // SPDX-License-Identifier: MIT /** * ----------------------------------------------------------------------------- * Prometheum Prodigy * ----------------------------------------------------------------------------- * * Welcome to the official smart contract of Prometheum Prodigy Token! * * This contract manages the transactions, balances, and functionalities * of the Prometheum Prodigy Token within the Ethereum Blockchain. * * For more information, please visit our official website. * */ 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\IERC20.sol // OpenZeppelin Contracts (last updated v4.9.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\utils\Address.sol pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin\contracts\access\Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts\reflect.sol pragma solidity ^0.8.18; contract PrometheumProdigy is Context, IERC20, Ownable { using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; // excluded from reflections mapping (address => bool) public _isExcluded; mapping (address => bool) public _isExcludedFromFees; mapping (address => bool) public _isExcludedFromMax; address[] public _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tReflectTotal; uint256 public reflectRate = 2; uint256 public feeRate = 5; uint256 public maxTransfer; bool public maxTransferEnabled = false; bool public isPaused; bool public feesEnabled; address public dev; string private constant _name = 'Prometheum Prodigy'; string private constant _symbol = 'PMPY'; uint8 private constant _decimals = 18; constructor (address _toMint, address _dev) public Ownable() { _rOwned[_toMint] = _rTotal; dev = _dev; excludeAccount(_toMint); excludeAccount(_dev); excludeAccount(address(0)); excludeFromMax(_toMint); excludeFromMax(_dev); excludeFromFees(_toMint); excludeFromFees(_dev); excludeFromFees(address(this)); excludeFromFees(address(0)); emit Transfer(address(0), _toMint, _tTotal); } /** * @dev Returns the name of the token. */ function name() public pure returns (string memory) { return _name; } /** * @dev Returns the symbol of the token. */ function symbol() public pure returns (string memory) { return _symbol; } /** * @dev Returns the decimals of the token. */ function decimals() public pure returns (uint8) { return _decimals; } /** * @dev returns total supply in the tSpace */ function totalSupply() public view override returns (uint256) { return _tTotal - balanceOf(address(0)); } /** * @dev Returns rTotal. * @dev rTotal began as a large multiple of tTotal, it decreases every time reflections are collected */ function rTotal() public view returns (uint256) { return _rTotal; } /** * @dev returns balance in the tSpace (the "regular" balance). * @dev is calculated fro rOwned if account is not excluded */ function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } /** * @dev returns balance in the rSpace. * @dev This value is always converted to tOwned for practical use */ function rOwned(address account) public view returns (uint256) { return _rOwned[account]; } /** * @dev Transfers `amount` tokens from the caller's account to `recipient`. * @param recipient The address to receive the tokens. * @param amount The amount of tokens to send. * @return A boolean value indicating whether the operation succeeded. */ function transfer(address recipient, uint256 amount) public override checkPause returns (bool) { require(balanceOf(_msgSender()) >= amount, "ERC20: Insufficient Funds"); _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * @param sender The address to send tokens from. * @param recipient The address to receive the tokens. * @param amount The amount of tokens to send. * @return A boolean value indicating whether the operation succeeded. */ function transferFrom(address sender, address recipient, uint256 amount) public override checkPause returns (bool) { require(balanceOf(sender) >= amount, "ERC20: Insufficient Funds"); _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue); return true; } /** * @dev displays if an account is excluded from receiving reflections */ function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } /** * @dev returns total amount of tokens reflected */ function totalReflections() public view returns (uint256) { return _tReflectTotal; } /** * @dev Performs a reflection of `tAmount` tokens. * @dev The caller must hold at least `tAmount` tokens. * @dev these tokens are redistributed to all included holders * @param tAmount Amount of tokens to reflect. */ function reflect(uint256 tAmount) public checkPause { address sender = _msgSender(); require(balanceOf(sender) >= tAmount, "ERC20: Insufficient Funds"); require(tAmount > 0, "value must be greater than 0"); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount, false); _rOwned[sender] = _rOwned[sender] - rAmount; _rTotal = _rTotal - rAmount; _tReflectTotal = _tReflectTotal + tAmount; } /** * @dev converts a tAmount into its rAmount equivalent * @dev includes option to deduct fees * @param tAmount the amount of tokens in the t space * @param deductTransferFee a flag indicating if taxes should be deducted from final amount */ function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount, false); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount, true); return rTransferAmount; } } /** * @dev calculates t space token amount from an r space value * @param rAmount the r-space value of tokens */ function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount / currentRate; } function _approve(address owner, address spender, uint256 amount) private { 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); } function burn(uint256 amount) external { require(balanceOf(msg.sender) >= amount, "Can't burn"); _burn(msg.sender, amount); } function _burn(address sender, uint256 amount) internal { if (_isExcluded[sender]) { _transferBothExcluded(sender, address(0), amount, false); } else { _transferToExcluded(sender, address(0), amount, false); } } /** * @dev Internal transfer functions. Selects the correct transfer based on exclusion of participants * @param sender The address to send tokens from. * @param recipient The address to receive the tokens. * @param amount The amount of tokens to send. */ function _transfer(address sender, address recipient, uint256 amount) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(amount >= 100, "Transfer amount must be greater than 100"); if (recipient == address(0)) { //BURN TIME! _burn(sender, amount); return; } bool addFees = true; if (!feesEnabled) { addFees = false; } else if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) { addFees = false; } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount, addFees); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount, addFees); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount, addFees); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount, addFees); } else { _transferStandard(sender, recipient, amount, addFees); } } /** * @dev Internal function that transfers tokens according to exclusion rules. * @dev Is called when neither sendor nor receiver are excluded * @param sender The address to send tokens from. * @param recipient The address to receive the tokens. * @param tAmount The amount of tokens to send. */ function _transferStandard(address sender, address recipient, uint256 tAmount, bool _fees) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 rReflect, uint256 tReflect) = _getValues(tAmount, _fees); // balance limit if (maxTransferEnabled && !_isExcludedFromMax[recipient]) { require(tAmount <= maxTransfer, "balance exceeds limit"); } _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; if (_fees) { _reflectFee(rReflect, tReflect); _addToDev(rFee, tFee, sender); } emit Transfer(sender, recipient, tTransferAmount); } /** * @dev Internal function that transfers when only the receiver is excluded from reflections. * @param sender The address to send tokens from. * @param recipient The address to receive the tokens. * @param tAmount The amount of tokens to send. */ function _transferToExcluded(address sender, address recipient, uint256 tAmount, bool _fees) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 rReflect, uint256 tReflect) = _getValues(tAmount, _fees); // balance limit if (maxTransferEnabled && !_isExcludedFromMax[recipient]) { require(tAmount <= maxTransfer, "balance exceeds limit"); } _rOwned[sender] = _rOwned[sender] - rAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; // Add to totalExcluded; if (_fees) { _reflectFee(rReflect, tReflect); _addToDev(rFee, tFee, sender); } emit Transfer(sender, recipient, tTransferAmount); } /** * @dev Internal function that transfers when only the sender is excluded from reflections. * @param sender The address to send tokens from. * @param recipient The address to receive the tokens. * @param tAmount The amount of tokens to send. */ function _transferFromExcluded(address sender, address recipient, uint256 tAmount, bool _fees) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 rReflect, uint256 tReflect) = _getValues(tAmount, _fees); // balance limit if (maxTransferEnabled && !_isExcludedFromMax[recipient]) { require(tAmount <= maxTransfer, "balance exceeds limit"); } _tOwned[sender] = _tOwned[sender] - tAmount; _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; // remove from totalExcluded; if (_fees) { _reflectFee(rReflect, tReflect); _addToDev(rFee, tFee, sender); } emit Transfer(sender, recipient, tTransferAmount); } /** * @dev Internal function that transfers when both sender and receiver are excluded from reflections. * @notice taxes are omitted in this scenario only * @param sender The address to send tokens from. * @param recipient The address to receive the tokens. * @param tAmount The amount of tokens to send. */ function _transferBothExcluded(address sender, address recipient, uint256 tAmount, bool _fees) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 rReflect, uint256 tReflect) = _getValues(tAmount, _fees); // balance limit if (maxTransferEnabled && !_isExcludedFromMax[recipient]) { require(tAmount <= maxTransfer, "balance exceeds limit"); } _tOwned[sender] = _tOwned[sender] - tAmount; _rOwned[sender] = _rOwned[sender] - rAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; if (_fees) { // remove from totalExcluded; _reflectFee(rReflect, tReflect); _addToDev(rFee, tFee, sender); } // if fees are not applied, amount = transferAmount, therefore tExcluded and rExcluded does not chage emit Transfer(sender, recipient, tTransferAmount); } /** * @dev Adds the fee to the dev account. * @param rFee The fee amount in r space. * @param tFee The fee amount in t space. */ function _addToDev(uint256 rFee, uint256 tFee, address sender) internal { address _dev = dev; if (_isExcluded[_dev]) { _tOwned[_dev] = _tOwned[_dev] + tFee; } _rOwned[_dev] = _rOwned[_dev] + rFee; emit Transfer(sender, _dev, tFee); } /** * @dev subtracts rReflect from rTotal to distribute reflections to all holders via deflationary mechanism */ function _reflectFee(uint256 rReflect, uint256 tReflect) private { _rTotal = _rTotal - rReflect; _tReflectTotal = _tReflectTotal + tReflect; } /** * @dev Calculates and returns values related to transactions and reflections. * @param tAmount The amount of tokens. * @return The calculated values. */ function _getValues(uint256 tAmount, bool _fees) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tReflect) = _getTValues(tAmount, _fees); uint256 currentRate = _getRate(); // (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rReflect) = _getRValues(tAmount, tFee, currentRate, tReflect); uint256[4] memory tItems = [tAmount, tFee, tReflect, currentRate]; uint256[4] memory rValues = _getRValues( tItems, _fees); // rAmount , rTransferAmount, rFee, , tTransfer, tFee, rReflect return (rValues[0], rValues[3], rValues[1], tTransferAmount, tFee, rValues[2], tReflect); } /** * @dev returns devFee amount, reflect amount, and final transfer amount, all in the tSpace. Calculated from tAmount */ function _getTValues(uint256 tAmount, bool _fees) private view returns (uint256, uint256, uint256) { uint256 tFee = 0; uint256 tReflect = 0; uint256 tTransferAmount = tAmount; if (_fees) { tFee = tAmount * feeRate / 100; tReflect = tAmount * reflectRate / 100; tTransferAmount = tTransferAmount - tFee - tReflect; } return (tTransferAmount, tFee, tReflect); } /** * @dev returns values in the rSpace calculated from tSpace inputs */ // items[0] = tAmount, items[1] = tFee, items[2] = tReflect items[3] = currentRate function _getRValues(uint256[4] memory items, bool _fees) private pure returns (uint256[4] memory results) { // rAmount results[0] = items[0] * items[3]; if (!_fees) { // rFee results[1] = 0; // rReflect results[2] = 0; // rTransferAmount results[3] = results[0]; } else { // rFee results[1] = items[1] * items[3]; // rReflect results[2] = items[2] * items[3]; // rTransferAmount results[3] = results[0] - results[1] - results[2]; } } /** * @dev Calculates the current reflection rate based on the total supply and reflection supply. * @return The current reflection rate. */ function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / tSupply; } /** * @dev Calculates the current reflection supply and token supply, considering excluded addresses. * @return The current reflection supply and token supply. */ function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply - _rOwned[_excluded[i]]; tSupply = tSupply - _tOwned[_excluded[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } // Owner Functions /** * @dev flips the feesEnabled flag. If false, all fees are omitted from transfers */ function flipFees() external onlyOwner { feesEnabled = !feesEnabled; } /** * @dev changes address of "dev" account that collects fee * @param newDev address of fee collection account */ function changeDev(address newDev) external onlyOwner { require(newDev != address(0), "invalid"); dev = newDev; } /** * @dev enables and sets a maximum holder balance * @param _max the maximum amount an account can hold. */ function enableMaxTransfer(uint256 _max) external onlyOwner { maxTransfer = _max; maxTransferEnabled = true; require(maxTransfer >= _tTotal / 1000, "Invalid"); } /** * @dev Disables the maximum balance restriction */ function disableMaxTransfer() external onlyOwner { maxTransferEnabled = false; } /** * @dev updates the distribution of taxes. * @notice both params must add to 100. only whole percentages supported * @param newFee updates the dev fee percentage. * @param newReflect updates the reflection percentage */ function changeTaxes(uint256 newFee, uint256 newReflect) external onlyOwner { require(newFee > 0 && newReflect > 0 && newFee + newReflect <= 10, "Invalid"); feeRate = newFee; reflectRate = newReflect; } /** * @dev Excludes an account from fee and reflection calculations, used for special addresses like owners and liquidity pools. * @param account Address to be excluded. */ function excludeAccount(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } /** * @dev Includes an account back into fee and reflection calculations. * @param account Address to be included. */ function includeAccount(address account) external onlyOwner() { require(account != address(0), "cannot include burn address"); require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFees(address user) public onlyOwner { _isExcludedFromFees[user] = true; } function excludeFromMax(address user) public onlyOwner { _isExcludedFromMax[user] = true; } function includeToFees(address user) public onlyOwner { _isExcludedFromFees[user] = false; } function includeToMax(address user) public onlyOwner { _isExcludedFromMax[user] = false; } /** * @dev Pauses movement of tokens if isPaused is true */ function flipPause() external onlyOwner() { isPaused = !isPaused; } // modifiers modifier checkPause() { require(!isPaused, "Cannot move tokens at this time"); _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_toMint","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"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":"uint256","name":"","type":"uint256"}],"name":"_excluded","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDev","type":"address"}],"name":"changeDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"},{"internalType":"uint256","name":"newReflect","type":"uint256"}],"name":"changeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableMaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"enableMaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"excludeFromMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"includeToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"includeToMax","outputs":[],"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":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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
60806040526b033b2e3c9fd0803ce800000060085560085460001962000026919062000a6f565b60001962000035919062000ad6565b6009556002600b556005600c556000600e60006101000a81548160ff0219169083151502179055503480156200006a57600080fd5b506040516200572938038062005729833981810160405281019062000090919062000b7b565b620000b0620000a46200024460201b60201c565b6200024c60201b60201c565b600954600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600e60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000148826200031060201b60201c565b62000159816200031060201b60201c565b6200016b60006200031060201b60201c565b6200017c826200054b60201b60201c565b6200018d816200054b60201b60201c565b6200019e82620005b660201b60201c565b620001af81620005b660201b60201c565b620001c030620005b660201b60201c565b620001d26000620005b660201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000234919062000bd3565b60405180910390a3505062000e31565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003206200062160201b60201c565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615620003b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a79062000c51565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156200048d5762000449600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620006b260201b60201c565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6200055b6200062160201b60201c565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b620005c66200062160201b60201c565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b620006316200024460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006576200072660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006a79062000cc3565b60405180910390fd5b565b6000600954821115620006fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f39062000d5b565b60405180910390fd5b60006200070e6200074f60201b60201c565b905080836200071e919062000d7d565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000620007646200077d60201b60201c565b91509150808262000776919062000d7d565b9250505090565b600080600060095490506000600854905060005b600780549050811015620009fc57826001600060078481548110620007bb57620007ba62000db5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180620008ad575081600260006007848154811062000845576200084462000db5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15620008c6576009546008549450945050505062000a32565b6001600060078381548110620008e157620008e062000db5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548362000954919062000ad6565b9250600260006007838154811062000971576200097062000db5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482620009e4919062000ad6565b91508080620009f39062000de4565b91505062000791565b5060085460095462000a0f919062000d7d565b82101562000a295760095460085493509350505062000a32565b81819350935050505b9091565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a7c8262000a36565b915062000a898362000a36565b92508262000a9c5762000a9b62000a40565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ae38262000a36565b915062000af08362000a36565b925082820390508181111562000b0b5762000b0a62000aa7565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b438262000b16565b9050919050565b62000b558162000b36565b811462000b6157600080fd5b50565b60008151905062000b758162000b4a565b92915050565b6000806040838503121562000b955762000b9462000b11565b5b600062000ba58582860162000b64565b925050602062000bb88582860162000b64565b9150509250929050565b62000bcd8162000a36565b82525050565b600060208201905062000bea600083018462000bc2565b92915050565b600082825260208201905092915050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600062000c39601b8362000bf0565b915062000c468262000c01565b602082019050919050565b6000602082019050818103600083015262000c6c8162000c2a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000cab60208362000bf0565b915062000cb88262000c73565b602082019050919050565b6000602082019050818103600083015262000cde8162000c9c565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600062000d43602a8362000bf0565b915062000d508262000ce5565b604082019050919050565b6000602082019050818103600083015262000d768162000d34565b9050919050565b600062000d8a8262000a36565b915062000d978362000a36565b92508262000daa5762000da962000a40565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600062000df18262000a36565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000e265762000e2562000aa7565b5b600182019050919050565b6148e88062000e416000396000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c80638da5cb5b1161015c578063c5495c00116100ce578063f2cc0c1811610087578063f2cc0c18146107da578063f2fde38b146107f6578063f4b8c14d14610812578063f76a7e4b1461082e578063f84354f114610838578063fe2314d6146108545761027f565b8063c5495c00146106e0578063cba0e99614610710578063dd62ed3e14610740578063e0bf7fd114610770578063e57f14e1146107a0578063ed233ee9146107bc5761027f565b8063a457c2d711610120578063a457c2d714610608578063a64e4f8a14610638578063a9059cbb14610656578063b187bd2614610686578063bb4d023b146106a4578063be30877f146106c25761027f565b80638da5cb5b14610574578063905c3b981461059257806391cca3db146105ae57806395d89b41146105cc578063978bbdb9146105ea5761027f565b8063385df649116101f5578063622a69c6116101b9578063622a69c6146104b457806370a08231146104d2578063715018a61461050257806372ba4df51461050c57806388a06f8b1461052857806388a8c95c146105585761027f565b8063385df649146103fe578063395093511461040857806342966c68146104385780634549b039146104545780634d09deb3146104845761027f565b80631050a8ef116102475780631050a8ef1461033c57806318160ddd1461034657806323b872dd146103645780632b37c029146103945780632d838119146103b0578063313ce567146103e05761027f565b8063018763ed14610284578063053ab182146102a257806306fdde03146102be578063095ea7b3146102dc5780630b285b1f1461030c575b600080fd5b61028c610870565b6040516102999190613a65565b60405180910390f35b6102bc60048036038101906102b79190613ab1565b61087a565b005b6102c6610ac1565b6040516102d39190613b6e565b60405180910390f35b6102f660048036038101906102f19190613bee565b610afe565b6040516103039190613c49565b60405180910390f35b61032660048036038101906103219190613c64565b610b1c565b6040516103339190613c49565b60405180910390f35b610344610b3c565b005b61034e610b61565b60405161035b9190613a65565b60405180910390f35b61037e60048036038101906103799190613c91565b610b7f565b60405161038b9190613c49565b60405180910390f35b6103ae60048036038101906103a99190613ab1565b610cd2565b005b6103ca60048036038101906103c59190613ab1565b610d53565b6040516103d79190613a65565b60405180910390f35b6103e8610dba565b6040516103f59190613d00565b60405180910390f35b610406610dc3565b005b610422600480360381019061041d9190613bee565b610df7565b60405161042f9190613c49565b60405180910390f35b610452600480360381019061044d9190613ab1565b610ea3565b005b61046e60048036038101906104699190613d47565b610efb565b60405161047b9190613a65565b60405180910390f35b61049e60048036038101906104999190613ab1565b610f85565b6040516104ab9190613d96565b60405180910390f35b6104bc610fc4565b6040516104c99190613a65565b60405180910390f35b6104ec60048036038101906104e79190613c64565b610fce565b6040516104f99190613a65565b60405180910390f35b61050a6110b9565b005b61052660048036038101906105219190613c64565b6110cd565b005b610542600480360381019061053d9190613c64565b611130565b60405161054f9190613a65565b60405180910390f35b610572600480360381019061056d9190613c64565b611179565b005b61057c611234565b6040516105899190613d96565b60405180910390f35b6105ac60048036038101906105a79190613c64565b61125d565b005b6105b66112c0565b6040516105c39190613d96565b60405180910390f35b6105d46112e6565b6040516105e19190613b6e565b60405180910390f35b6105f2611323565b6040516105ff9190613a65565b60405180910390f35b610622600480360381019061061d9190613bee565b611329565b60405161062f9190613c49565b60405180910390f35b6106406113d5565b60405161064d9190613c49565b60405180910390f35b610670600480360381019061066b9190613bee565b6113e8565b60405161067d9190613c49565b60405180910390f35b61068e6114a8565b60405161069b9190613c49565b60405180910390f35b6106ac6114bb565b6040516106b99190613c49565b60405180910390f35b6106ca6114ce565b6040516106d79190613a65565b60405180910390f35b6106fa60048036038101906106f59190613c64565b6114d4565b6040516107079190613c49565b60405180910390f35b61072a60048036038101906107259190613c64565b6114f4565b6040516107379190613c49565b60405180910390f35b61075a60048036038101906107559190613db1565b61154a565b6040516107679190613a65565b60405180910390f35b61078a60048036038101906107859190613c64565b6115d1565b6040516107979190613c49565b60405180910390f35b6107ba60048036038101906107b59190613c64565b6115f1565b005b6107c4611654565b6040516107d19190613a65565b60405180910390f35b6107f460048036038101906107ef9190613c64565b61165a565b005b610810600480360381019061080b9190613c64565b611881565b005b61082c60048036038101906108279190613c64565b611904565b005b610836611967565b005b610852600480360381019061084d9190613c64565b61199b565b005b61086e60048036038101906108699190613df1565b611ccb565b005b6000600a54905090565b600e60019054906101000a900460ff16156108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c190613e7d565b60405180910390fd5b60006108d4611d4c565b9050816108e082610fce565b1015610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890613ee9565b60405180910390fd5b60008211610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b90613f55565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e890613fe7565b60405180910390fd5b60006109fe836000611d54565b505050505050905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a519190614036565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600954610aa29190614036565b60098190555082600a54610ab6919061406a565b600a81905550505050565b60606040518060400160405280601281526020017f50726f6d65746865756d2050726f646967790000000000000000000000000000815250905090565b6000610b12610b0b611d4c565b8484611e39565b6001905092915050565b60046020528060005260406000206000915054906101000a900460ff1681565b610b44612002565b6000600e60006101000a81548160ff021916908315150217905550565b6000610b6d6000610fce565b600854610b7a9190614036565b905090565b6000600e60019054906101000a900460ff1615610bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc890613e7d565b60405180910390fd5b81610bdb85610fce565b1015610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1390613ee9565b60405180910390fd5b610c27848484612080565b610cc784610c33611d4c565b84600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c7d611d4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc29190614036565b611e39565b600190509392505050565b610cda612002565b80600d819055506001600e60006101000a81548160ff0219169083151502179055506103e8600854610d0c91906140cd565b600d541015610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d479061414a565b60405180910390fd5b50565b6000600954821115610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906141dc565b60405180910390fd5b6000610da4612540565b90508083610db291906140cd565b915050919050565b60006012905090565b610dcb612002565b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b6000610e99610e04611d4c565b848460036000610e12611d4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e94919061406a565b611e39565b6001905092915050565b80610ead33610fce565b1015610eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee590614248565b60405180910390fd5b610ef83382612564565b50565b6000600854831115610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f39906142b4565b60405180910390fd5b81610f65576000610f54846000611d54565b505050505050905080915050610f7f565b6000610f72846001611d54565b5050505050915050809150505b92915050565b60078181548110610f9557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561106957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110b4565b6110b1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d53565b90505b919050565b6110c1612002565b6110cb60006125dc565b565b6110d5612002565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611181612002565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790614320565b60405180910390fd5b80600e60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611265612002565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f504d505900000000000000000000000000000000000000000000000000000000815250905090565b600c5481565b60006113cb611336611d4c565b848460036000611344611d4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113c69190614036565b611e39565b6001905092915050565b600e60029054906101000a900460ff1681565b6000600e60019054906101000a900460ff161561143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190613e7d565b60405180910390fd5b8161144b611446611d4c565b610fce565b101561148c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148390613ee9565b60405180910390fd5b61149e611497611d4c565b8484612080565b6001905092915050565b600e60019054906101000a900460ff1681565b600e60009054906101000a900460ff1681565b600b5481565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60056020528060005260406000206000915054906101000a900460ff1681565b6115f9612002565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d5481565b611662612002565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e69061438c565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156117c35761177f600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d53565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611889612002565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef9061441e565b60405180910390fd5b611901816125dc565b50565b61190c612002565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61196f612002565b600e60029054906101000a900460ff1615600e60026101000a81548160ff021916908315150217905550565b6119a3612002565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a099061448a565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a959061438c565b60405180910390fd5b60005b600780549050811015611cc7578173ffffffffffffffffffffffffffffffffffffffff1660078281548110611ad957611ad86144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611cb45760076001600780549050611b339190614036565b81548110611b4457611b436144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110611b8357611b826144aa565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480611c7a57611c796144d9565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611cc7565b8080611cbf90614508565b915050611aa1565b5050565b611cd3612002565b600082118015611ce35750600081115b8015611cfb5750600a8183611cf8919061406a565b11155b611d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d319061414a565b60405180910390fd5b81600c8190555080600b819055505050565b600033905090565b600080600080600080600080600080611d6d8c8c6126a0565b9250925092506000611d7d612540565b9050600060405180608001604052808f81526020018581526020018481526020018381525090506000611db0828f61271b565b905080600060048110611dc657611dc56144aa565b5b602002015181600360048110611ddf57611dde6144aa565b5b602002015182600160048110611df857611df76144aa565b5b6020020151888885600260048110611e1357611e126144aa565b5b6020020151899c509c509c509c509c509c509c5050505050505092959891949750929550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f906145c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90614654565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff59190613a65565b60405180910390a3505050565b61200a611d4c565b73ffffffffffffffffffffffffffffffffffffffff16612028611234565b73ffffffffffffffffffffffffffffffffffffffff161461207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906146c0565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e690614752565b60405180910390fd5b6064811015612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212a906147e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612176576121718382612564565b61253b565b600060019050600e60029054906101000a900460ff166121995760009050612245565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061223a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561224457600090505b5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122e85750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122fe576122f98484848461292f565b612539565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123a15750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123b7576123b284848484612c3b565b612538565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561245b5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124715761246c84848484612f47565b612537565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125135750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561252957612524848484846131c5565b612536565b61253584848484612f47565b5b5b5b5b505b505050565b600080600061254d61355f565b91509150808261255d91906140cd565b9250505090565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125c9576125c48260008360006131c5565b6125d8565b6125d7826000836000612c3b565b5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600080600090506000808790508615612708576064600c54896126c69190614804565b6126d091906140cd565b92506064600b54896126e29190614804565b6126ec91906140cd565b91508183826126fb9190614036565b6127059190614036565b90505b8083839550955095505050509250925092565b612723613a2a565b82600360048110612737576127366144aa565b5b6020020151836000600481106127505761274f6144aa565b5b602002015161275f9190614804565b81600060048110612773576127726144aa565b5b602002018181525050816127fa57600081600160048110612797576127966144aa565b5b6020020181815250506000816002600481106127b6576127b56144aa565b5b602002018181525050806000600481106127d3576127d26144aa565b5b6020020151816003600481106127ec576127eb6144aa565b5b602002018181525050612929565b8260036004811061280e5761280d6144aa565b5b602002015183600160048110612827576128266144aa565b5b60200201516128369190614804565b8160016004811061284a576128496144aa565b5b60200201818152505082600360048110612867576128666144aa565b5b6020020151836002600481106128805761287f6144aa565b5b602002015161288f9190614804565b816002600481106128a3576128a26144aa565b5b602002018181525050806002600481106128c0576128bf6144aa565b5b6020020151816001600481106128d9576128d86144aa565b5b6020020151826000600481106128f2576128f16144aa565b5b60200201516129019190614036565b61290b9190614036565b8160036004811061291f5761291e6144aa565b5b6020020181815250505b92915050565b60008060008060008060006129448989611d54565b9650965096509650965096509650600e60009054906101000a900460ff1680156129b85750600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a0357600d54891115612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f990614892565b60405180910390fd5b5b88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4e9190614036565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612adc9190614036565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b6a919061406a565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508715612bc957612bbd82826137fd565b612bc885848d613829565b5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612c269190613a65565b60405180910390a35050505050505050505050565b6000806000806000806000612c508989611d54565b9650965096509650965096509650600e60009054906101000a900460ff168015612cc45750600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d0f57600d54891115612d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0590614892565b60405180910390fd5b5b86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d5a9190614036565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de8919061406a565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e76919061406a565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508715612ed557612ec982826137fd565b612ed485848d613829565b5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612f329190613a65565b60405180910390a35050505050505050505050565b6000806000806000806000612f5c8989611d54565b9650965096509650965096509650600e60009054906101000a900460ff168015612fd05750600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301b57600d5489111561301a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301190614892565b60405180910390fd5b5b86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130669190614036565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f4919061406a565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555087156131535761314782826137fd565b61315285848d613829565b5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516131b09190613a65565b60405180910390a35050505050505050505050565b60008060008060008060006131da8989611d54565b9650965096509650965096509650600e60009054906101000a900460ff16801561324e5750600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561329957600d54891115613298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328f90614892565b60405180910390fd5b5b88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e49190614036565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133729190614036565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613400919061406a565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e919061406a565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555087156134ed576134e182826137fd565b6134ec85848d613829565b5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161354a9190613a65565b60405180910390a35050505050505050505050565b600080600060095490506000600854905060005b6007805490508110156137c757826001600060078481548110613599576135986144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613687575081600260006007848154811061361f5761361e6144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561369e57600954600854945094505050506137f9565b60016000600783815481106136b6576136b56144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137279190614036565b92506002600060078381548110613741576137406144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826137b29190614036565b915080806137bf90614508565b915050613573565b506008546009546137d891906140cd565b8210156137f0576009546008549350935050506137f9565b81819350935050505b9091565b8160095461380b9190614036565b60098190555080600a5461381f919061406a565b600a819055505050565b6000600e60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156139315782600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138ed919061406a565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b83600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397c919061406a565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a1c9190613a65565b60405180910390a350505050565b6040518060800160405280600490602082028036833780820191505090505090565b6000819050919050565b613a5f81613a4c565b82525050565b6000602082019050613a7a6000830184613a56565b92915050565b600080fd5b613a8e81613a4c565b8114613a9957600080fd5b50565b600081359050613aab81613a85565b92915050565b600060208284031215613ac757613ac6613a80565b5b6000613ad584828501613a9c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b18578082015181840152602081019050613afd565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b4082613ade565b613b4a8185613ae9565b9350613b5a818560208601613afa565b613b6381613b24565b840191505092915050565b60006020820190508181036000830152613b888184613b35565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bbb82613b90565b9050919050565b613bcb81613bb0565b8114613bd657600080fd5b50565b600081359050613be881613bc2565b92915050565b60008060408385031215613c0557613c04613a80565b5b6000613c1385828601613bd9565b9250506020613c2485828601613a9c565b9150509250929050565b60008115159050919050565b613c4381613c2e565b82525050565b6000602082019050613c5e6000830184613c3a565b92915050565b600060208284031215613c7a57613c79613a80565b5b6000613c8884828501613bd9565b91505092915050565b600080600060608486031215613caa57613ca9613a80565b5b6000613cb886828701613bd9565b9350506020613cc986828701613bd9565b9250506040613cda86828701613a9c565b9150509250925092565b600060ff82169050919050565b613cfa81613ce4565b82525050565b6000602082019050613d156000830184613cf1565b92915050565b613d2481613c2e565b8114613d2f57600080fd5b50565b600081359050613d4181613d1b565b92915050565b60008060408385031215613d5e57613d5d613a80565b5b6000613d6c85828601613a9c565b9250506020613d7d85828601613d32565b9150509250929050565b613d9081613bb0565b82525050565b6000602082019050613dab6000830184613d87565b92915050565b60008060408385031215613dc857613dc7613a80565b5b6000613dd685828601613bd9565b9250506020613de785828601613bd9565b9150509250929050565b60008060408385031215613e0857613e07613a80565b5b6000613e1685828601613a9c565b9250506020613e2785828601613a9c565b9150509250929050565b7f43616e6e6f74206d6f766520746f6b656e7320617420746869732074696d6500600082015250565b6000613e67601f83613ae9565b9150613e7282613e31565b602082019050919050565b60006020820190508181036000830152613e9681613e5a565b9050919050565b7f45524332303a20496e73756666696369656e742046756e647300000000000000600082015250565b6000613ed3601983613ae9565b9150613ede82613e9d565b602082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f76616c7565206d7573742062652067726561746572207468616e203000000000600082015250565b6000613f3f601c83613ae9565b9150613f4a82613f09565b602082019050919050565b60006020820190508181036000830152613f6e81613f32565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613fd1602c83613ae9565b9150613fdc82613f75565b604082019050919050565b6000602082019050818103600083015261400081613fc4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061404182613a4c565b915061404c83613a4c565b925082820390508181111561406457614063614007565b5b92915050565b600061407582613a4c565b915061408083613a4c565b925082820190508082111561409857614097614007565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140d882613a4c565b91506140e383613a4c565b9250826140f3576140f261409e565b5b828204905092915050565b7f496e76616c696400000000000000000000000000000000000000000000000000600082015250565b6000614134600783613ae9565b915061413f826140fe565b602082019050919050565b6000602082019050818103600083015261416381614127565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006141c6602a83613ae9565b91506141d18261416a565b604082019050919050565b600060208201905081810360008301526141f5816141b9565b9050919050565b7f43616e2774206275726e00000000000000000000000000000000000000000000600082015250565b6000614232600a83613ae9565b915061423d826141fc565b602082019050919050565b6000602082019050818103600083015261426181614225565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061429e601f83613ae9565b91506142a982614268565b602082019050919050565b600060208201905081810360008301526142cd81614291565b9050919050565b7f696e76616c696400000000000000000000000000000000000000000000000000600082015250565b600061430a600783613ae9565b9150614315826142d4565b602082019050919050565b60006020820190508181036000830152614339816142fd565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614376601b83613ae9565b915061438182614340565b602082019050919050565b600060208201905081810360008301526143a581614369565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614408602683613ae9565b9150614413826143ac565b604082019050919050565b60006020820190508181036000830152614437816143fb565b9050919050565b7f63616e6e6f7420696e636c756465206275726e20616464726573730000000000600082015250565b6000614474601b83613ae9565b915061447f8261443e565b602082019050919050565b600060208201905081810360008301526144a381614467565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061451382613a4c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361454557614544614007565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145ac602483613ae9565b91506145b782614550565b604082019050919050565b600060208201905081810360008301526145db8161459f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061463e602283613ae9565b9150614649826145e2565b604082019050919050565b6000602082019050818103600083015261466d81614631565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146aa602083613ae9565b91506146b582614674565b602082019050919050565b600060208201905081810360008301526146d98161469d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061473c602583613ae9565b9150614747826146e0565b604082019050919050565b6000602082019050818103600083015261476b8161472f565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e20313030000000000000000000000000000000000000000000000000602082015250565b60006147ce602883613ae9565b91506147d982614772565b604082019050919050565b600060208201905081810360008301526147fd816147c1565b9050919050565b600061480f82613a4c565b915061481a83613a4c565b925082820261482881613a4c565b9150828204841483151761483f5761483e614007565b5b5092915050565b7f62616c616e63652065786365656473206c696d69740000000000000000000000600082015250565b600061487c601583613ae9565b915061488782614846565b602082019050919050565b600060208201905081810360008301526148ab8161486f565b905091905056fea2646970667358221220223372691919b133283b2f6f95bdaed990f8271c4e921621ba4be784abd8834864736f6c6343000812003300000000000000000000000075e75ec01ca2d6af404659f33a60fbc3322d7e620000000000000000000000005fd18a7195a81f7ad7273657aa098e1d70a99f36
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061027f5760003560e01c80638da5cb5b1161015c578063c5495c00116100ce578063f2cc0c1811610087578063f2cc0c18146107da578063f2fde38b146107f6578063f4b8c14d14610812578063f76a7e4b1461082e578063f84354f114610838578063fe2314d6146108545761027f565b8063c5495c00146106e0578063cba0e99614610710578063dd62ed3e14610740578063e0bf7fd114610770578063e57f14e1146107a0578063ed233ee9146107bc5761027f565b8063a457c2d711610120578063a457c2d714610608578063a64e4f8a14610638578063a9059cbb14610656578063b187bd2614610686578063bb4d023b146106a4578063be30877f146106c25761027f565b80638da5cb5b14610574578063905c3b981461059257806391cca3db146105ae57806395d89b41146105cc578063978bbdb9146105ea5761027f565b8063385df649116101f5578063622a69c6116101b9578063622a69c6146104b457806370a08231146104d2578063715018a61461050257806372ba4df51461050c57806388a06f8b1461052857806388a8c95c146105585761027f565b8063385df649146103fe578063395093511461040857806342966c68146104385780634549b039146104545780634d09deb3146104845761027f565b80631050a8ef116102475780631050a8ef1461033c57806318160ddd1461034657806323b872dd146103645780632b37c029146103945780632d838119146103b0578063313ce567146103e05761027f565b8063018763ed14610284578063053ab182146102a257806306fdde03146102be578063095ea7b3146102dc5780630b285b1f1461030c575b600080fd5b61028c610870565b6040516102999190613a65565b60405180910390f35b6102bc60048036038101906102b79190613ab1565b61087a565b005b6102c6610ac1565b6040516102d39190613b6e565b60405180910390f35b6102f660048036038101906102f19190613bee565b610afe565b6040516103039190613c49565b60405180910390f35b61032660048036038101906103219190613c64565b610b1c565b6040516103339190613c49565b60405180910390f35b610344610b3c565b005b61034e610b61565b60405161035b9190613a65565b60405180910390f35b61037e60048036038101906103799190613c91565b610b7f565b60405161038b9190613c49565b60405180910390f35b6103ae60048036038101906103a99190613ab1565b610cd2565b005b6103ca60048036038101906103c59190613ab1565b610d53565b6040516103d79190613a65565b60405180910390f35b6103e8610dba565b6040516103f59190613d00565b60405180910390f35b610406610dc3565b005b610422600480360381019061041d9190613bee565b610df7565b60405161042f9190613c49565b60405180910390f35b610452600480360381019061044d9190613ab1565b610ea3565b005b61046e60048036038101906104699190613d47565b610efb565b60405161047b9190613a65565b60405180910390f35b61049e60048036038101906104999190613ab1565b610f85565b6040516104ab9190613d96565b60405180910390f35b6104bc610fc4565b6040516104c99190613a65565b60405180910390f35b6104ec60048036038101906104e79190613c64565b610fce565b6040516104f99190613a65565b60405180910390f35b61050a6110b9565b005b61052660048036038101906105219190613c64565b6110cd565b005b610542600480360381019061053d9190613c64565b611130565b60405161054f9190613a65565b60405180910390f35b610572600480360381019061056d9190613c64565b611179565b005b61057c611234565b6040516105899190613d96565b60405180910390f35b6105ac60048036038101906105a79190613c64565b61125d565b005b6105b66112c0565b6040516105c39190613d96565b60405180910390f35b6105d46112e6565b6040516105e19190613b6e565b60405180910390f35b6105f2611323565b6040516105ff9190613a65565b60405180910390f35b610622600480360381019061061d9190613bee565b611329565b60405161062f9190613c49565b60405180910390f35b6106406113d5565b60405161064d9190613c49565b60405180910390f35b610670600480360381019061066b9190613bee565b6113e8565b60405161067d9190613c49565b60405180910390f35b61068e6114a8565b60405161069b9190613c49565b60405180910390f35b6106ac6114bb565b6040516106b99190613c49565b60405180910390f35b6106ca6114ce565b6040516106d79190613a65565b60405180910390f35b6106fa60048036038101906106f59190613c64565b6114d4565b6040516107079190613c49565b60405180910390f35b61072a60048036038101906107259190613c64565b6114f4565b6040516107379190613c49565b60405180910390f35b61075a60048036038101906107559190613db1565b61154a565b6040516107679190613a65565b60405180910390f35b61078a60048036038101906107859190613c64565b6115d1565b6040516107979190613c49565b60405180910390f35b6107ba60048036038101906107b59190613c64565b6115f1565b005b6107c4611654565b6040516107d19190613a65565b60405180910390f35b6107f460048036038101906107ef9190613c64565b61165a565b005b610810600480360381019061080b9190613c64565b611881565b005b61082c60048036038101906108279190613c64565b611904565b005b610836611967565b005b610852600480360381019061084d9190613c64565b61199b565b005b61086e60048036038101906108699190613df1565b611ccb565b005b6000600a54905090565b600e60019054906101000a900460ff16156108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c190613e7d565b60405180910390fd5b60006108d4611d4c565b9050816108e082610fce565b1015610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890613ee9565b60405180910390fd5b60008211610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b90613f55565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e890613fe7565b60405180910390fd5b60006109fe836000611d54565b505050505050905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a519190614036565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600954610aa29190614036565b60098190555082600a54610ab6919061406a565b600a81905550505050565b60606040518060400160405280601281526020017f50726f6d65746865756d2050726f646967790000000000000000000000000000815250905090565b6000610b12610b0b611d4c565b8484611e39565b6001905092915050565b60046020528060005260406000206000915054906101000a900460ff1681565b610b44612002565b6000600e60006101000a81548160ff021916908315150217905550565b6000610b6d6000610fce565b600854610b7a9190614036565b905090565b6000600e60019054906101000a900460ff1615610bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc890613e7d565b60405180910390fd5b81610bdb85610fce565b1015610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1390613ee9565b60405180910390fd5b610c27848484612080565b610cc784610c33611d4c565b84600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c7d611d4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc29190614036565b611e39565b600190509392505050565b610cda612002565b80600d819055506001600e60006101000a81548160ff0219169083151502179055506103e8600854610d0c91906140cd565b600d541015610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d479061414a565b60405180910390fd5b50565b6000600954821115610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906141dc565b60405180910390fd5b6000610da4612540565b90508083610db291906140cd565b915050919050565b60006012905090565b610dcb612002565b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b6000610e99610e04611d4c565b848460036000610e12611d4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e94919061406a565b611e39565b6001905092915050565b80610ead33610fce565b1015610eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee590614248565b60405180910390fd5b610ef83382612564565b50565b6000600854831115610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f39906142b4565b60405180910390fd5b81610f65576000610f54846000611d54565b505050505050905080915050610f7f565b6000610f72846001611d54565b5050505050915050809150505b92915050565b60078181548110610f9557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561106957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110b4565b6110b1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d53565b90505b919050565b6110c1612002565b6110cb60006125dc565b565b6110d5612002565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611181612002565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790614320565b60405180910390fd5b80600e60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611265612002565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f504d505900000000000000000000000000000000000000000000000000000000815250905090565b600c5481565b60006113cb611336611d4c565b848460036000611344611d4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113c69190614036565b611e39565b6001905092915050565b600e60029054906101000a900460ff1681565b6000600e60019054906101000a900460ff161561143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190613e7d565b60405180910390fd5b8161144b611446611d4c565b610fce565b101561148c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148390613ee9565b60405180910390fd5b61149e611497611d4c565b8484612080565b6001905092915050565b600e60019054906101000a900460ff1681565b600e60009054906101000a900460ff1681565b600b5481565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60056020528060005260406000206000915054906101000a900460ff1681565b6115f9612002565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d5481565b611662612002565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e69061438c565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156117c35761177f600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d53565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611889612002565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef9061441e565b60405180910390fd5b611901816125dc565b50565b61190c612002565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61196f612002565b600e60029054906101000a900460ff1615600e60026101000a81548160ff021916908315150217905550565b6119a3612002565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a099061448a565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a959061438c565b60405180910390fd5b60005b600780549050811015611cc7578173ffffffffffffffffffffffffffffffffffffffff1660078281548110611ad957611ad86144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611cb45760076001600780549050611b339190614036565b81548110611b4457611b436144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110611b8357611b826144aa565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480611c7a57611c796144d9565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611cc7565b8080611cbf90614508565b915050611aa1565b5050565b611cd3612002565b600082118015611ce35750600081115b8015611cfb5750600a8183611cf8919061406a565b11155b611d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d319061414a565b60405180910390fd5b81600c8190555080600b819055505050565b600033905090565b600080600080600080600080600080611d6d8c8c6126a0565b9250925092506000611d7d612540565b9050600060405180608001604052808f81526020018581526020018481526020018381525090506000611db0828f61271b565b905080600060048110611dc657611dc56144aa565b5b602002015181600360048110611ddf57611dde6144aa565b5b602002015182600160048110611df857611df76144aa565b5b6020020151888885600260048110611e1357611e126144aa565b5b6020020151899c509c509c509c509c509c509c5050505050505092959891949750929550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f906145c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90614654565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff59190613a65565b60405180910390a3505050565b61200a611d4c565b73ffffffffffffffffffffffffffffffffffffffff16612028611234565b73ffffffffffffffffffffffffffffffffffffffff161461207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906146c0565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e690614752565b60405180910390fd5b6064811015612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212a906147e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612176576121718382612564565b61253b565b600060019050600e60029054906101000a900460ff166121995760009050612245565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061223a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561224457600090505b5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122e85750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122fe576122f98484848461292f565b612539565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123a15750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123b7576123b284848484612c3b565b612538565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561245b5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124715761246c84848484612f47565b612537565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125135750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561252957612524848484846131c5565b612536565b61253584848484612f47565b5b5b5b5b505b505050565b600080600061254d61355f565b91509150808261255d91906140cd565b9250505090565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125c9576125c48260008360006131c5565b6125d8565b6125d7826000836000612c3b565b5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600080600090506000808790508615612708576064600c54896126c69190614804565b6126d091906140cd565b92506064600b54896126e29190614804565b6126ec91906140cd565b91508183826126fb9190614036565b6127059190614036565b90505b8083839550955095505050509250925092565b612723613a2a565b82600360048110612737576127366144aa565b5b6020020151836000600481106127505761274f6144aa565b5b602002015161275f9190614804565b81600060048110612773576127726144aa565b5b602002018181525050816127fa57600081600160048110612797576127966144aa565b5b6020020181815250506000816002600481106127b6576127b56144aa565b5b602002018181525050806000600481106127d3576127d26144aa565b5b6020020151816003600481106127ec576127eb6144aa565b5b602002018181525050612929565b8260036004811061280e5761280d6144aa565b5b602002015183600160048110612827576128266144aa565b5b60200201516128369190614804565b8160016004811061284a576128496144aa565b5b60200201818152505082600360048110612867576128666144aa565b5b6020020151836002600481106128805761287f6144aa565b5b602002015161288f9190614804565b816002600481106128a3576128a26144aa565b5b602002018181525050806002600481106128c0576128bf6144aa565b5b6020020151816001600481106128d9576128d86144aa565b5b6020020151826000600481106128f2576128f16144aa565b5b60200201516129019190614036565b61290b9190614036565b8160036004811061291f5761291e6144aa565b5b6020020181815250505b92915050565b60008060008060008060006129448989611d54565b9650965096509650965096509650600e60009054906101000a900460ff1680156129b85750600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a0357600d54891115612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f990614892565b60405180910390fd5b5b88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4e9190614036565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612adc9190614036565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b6a919061406a565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508715612bc957612bbd82826137fd565b612bc885848d613829565b5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612c269190613a65565b60405180910390a35050505050505050505050565b6000806000806000806000612c508989611d54565b9650965096509650965096509650600e60009054906101000a900460ff168015612cc45750600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d0f57600d54891115612d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0590614892565b60405180910390fd5b5b86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d5a9190614036565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de8919061406a565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e76919061406a565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508715612ed557612ec982826137fd565b612ed485848d613829565b5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612f329190613a65565b60405180910390a35050505050505050505050565b6000806000806000806000612f5c8989611d54565b9650965096509650965096509650600e60009054906101000a900460ff168015612fd05750600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301b57600d5489111561301a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301190614892565b60405180910390fd5b5b86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130669190614036565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f4919061406a565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555087156131535761314782826137fd565b61315285848d613829565b5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516131b09190613a65565b60405180910390a35050505050505050505050565b60008060008060008060006131da8989611d54565b9650965096509650965096509650600e60009054906101000a900460ff16801561324e5750600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561329957600d54891115613298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328f90614892565b60405180910390fd5b5b88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e49190614036565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133729190614036565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613400919061406a565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e919061406a565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555087156134ed576134e182826137fd565b6134ec85848d613829565b5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161354a9190613a65565b60405180910390a35050505050505050505050565b600080600060095490506000600854905060005b6007805490508110156137c757826001600060078481548110613599576135986144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613687575081600260006007848154811061361f5761361e6144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561369e57600954600854945094505050506137f9565b60016000600783815481106136b6576136b56144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137279190614036565b92506002600060078381548110613741576137406144aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826137b29190614036565b915080806137bf90614508565b915050613573565b506008546009546137d891906140cd565b8210156137f0576009546008549350935050506137f9565b81819350935050505b9091565b8160095461380b9190614036565b60098190555080600a5461381f919061406a565b600a819055505050565b6000600e60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156139315782600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138ed919061406a565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b83600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397c919061406a565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a1c9190613a65565b60405180910390a350505050565b6040518060800160405280600490602082028036833780820191505090505090565b6000819050919050565b613a5f81613a4c565b82525050565b6000602082019050613a7a6000830184613a56565b92915050565b600080fd5b613a8e81613a4c565b8114613a9957600080fd5b50565b600081359050613aab81613a85565b92915050565b600060208284031215613ac757613ac6613a80565b5b6000613ad584828501613a9c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b18578082015181840152602081019050613afd565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b4082613ade565b613b4a8185613ae9565b9350613b5a818560208601613afa565b613b6381613b24565b840191505092915050565b60006020820190508181036000830152613b888184613b35565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bbb82613b90565b9050919050565b613bcb81613bb0565b8114613bd657600080fd5b50565b600081359050613be881613bc2565b92915050565b60008060408385031215613c0557613c04613a80565b5b6000613c1385828601613bd9565b9250506020613c2485828601613a9c565b9150509250929050565b60008115159050919050565b613c4381613c2e565b82525050565b6000602082019050613c5e6000830184613c3a565b92915050565b600060208284031215613c7a57613c79613a80565b5b6000613c8884828501613bd9565b91505092915050565b600080600060608486031215613caa57613ca9613a80565b5b6000613cb886828701613bd9565b9350506020613cc986828701613bd9565b9250506040613cda86828701613a9c565b9150509250925092565b600060ff82169050919050565b613cfa81613ce4565b82525050565b6000602082019050613d156000830184613cf1565b92915050565b613d2481613c2e565b8114613d2f57600080fd5b50565b600081359050613d4181613d1b565b92915050565b60008060408385031215613d5e57613d5d613a80565b5b6000613d6c85828601613a9c565b9250506020613d7d85828601613d32565b9150509250929050565b613d9081613bb0565b82525050565b6000602082019050613dab6000830184613d87565b92915050565b60008060408385031215613dc857613dc7613a80565b5b6000613dd685828601613bd9565b9250506020613de785828601613bd9565b9150509250929050565b60008060408385031215613e0857613e07613a80565b5b6000613e1685828601613a9c565b9250506020613e2785828601613a9c565b9150509250929050565b7f43616e6e6f74206d6f766520746f6b656e7320617420746869732074696d6500600082015250565b6000613e67601f83613ae9565b9150613e7282613e31565b602082019050919050565b60006020820190508181036000830152613e9681613e5a565b9050919050565b7f45524332303a20496e73756666696369656e742046756e647300000000000000600082015250565b6000613ed3601983613ae9565b9150613ede82613e9d565b602082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f76616c7565206d7573742062652067726561746572207468616e203000000000600082015250565b6000613f3f601c83613ae9565b9150613f4a82613f09565b602082019050919050565b60006020820190508181036000830152613f6e81613f32565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613fd1602c83613ae9565b9150613fdc82613f75565b604082019050919050565b6000602082019050818103600083015261400081613fc4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061404182613a4c565b915061404c83613a4c565b925082820390508181111561406457614063614007565b5b92915050565b600061407582613a4c565b915061408083613a4c565b925082820190508082111561409857614097614007565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140d882613a4c565b91506140e383613a4c565b9250826140f3576140f261409e565b5b828204905092915050565b7f496e76616c696400000000000000000000000000000000000000000000000000600082015250565b6000614134600783613ae9565b915061413f826140fe565b602082019050919050565b6000602082019050818103600083015261416381614127565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006141c6602a83613ae9565b91506141d18261416a565b604082019050919050565b600060208201905081810360008301526141f5816141b9565b9050919050565b7f43616e2774206275726e00000000000000000000000000000000000000000000600082015250565b6000614232600a83613ae9565b915061423d826141fc565b602082019050919050565b6000602082019050818103600083015261426181614225565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061429e601f83613ae9565b91506142a982614268565b602082019050919050565b600060208201905081810360008301526142cd81614291565b9050919050565b7f696e76616c696400000000000000000000000000000000000000000000000000600082015250565b600061430a600783613ae9565b9150614315826142d4565b602082019050919050565b60006020820190508181036000830152614339816142fd565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614376601b83613ae9565b915061438182614340565b602082019050919050565b600060208201905081810360008301526143a581614369565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614408602683613ae9565b9150614413826143ac565b604082019050919050565b60006020820190508181036000830152614437816143fb565b9050919050565b7f63616e6e6f7420696e636c756465206275726e20616464726573730000000000600082015250565b6000614474601b83613ae9565b915061447f8261443e565b602082019050919050565b600060208201905081810360008301526144a381614467565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061451382613a4c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361454557614544614007565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145ac602483613ae9565b91506145b782614550565b604082019050919050565b600060208201905081810360008301526145db8161459f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061463e602283613ae9565b9150614649826145e2565b604082019050919050565b6000602082019050818103600083015261466d81614631565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146aa602083613ae9565b91506146b582614674565b602082019050919050565b600060208201905081810360008301526146d98161469d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061473c602583613ae9565b9150614747826146e0565b604082019050919050565b6000602082019050818103600083015261476b8161472f565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e20313030000000000000000000000000000000000000000000000000602082015250565b60006147ce602883613ae9565b91506147d982614772565b604082019050919050565b600060208201905081810360008301526147fd816147c1565b9050919050565b600061480f82613a4c565b915061481a83613a4c565b925082820261482881613a4c565b9150828204841483151761483f5761483e614007565b5b5092915050565b7f62616c616e63652065786365656473206c696d69740000000000000000000000600082015250565b600061487c601583613ae9565b915061488782614846565b602082019050919050565b600060208201905081810360008301526148ab8161486f565b905091905056fea2646970667358221220223372691919b133283b2f6f95bdaed990f8271c4e921621ba4be784abd8834864736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000075e75ec01ca2d6af404659f33a60fbc3322d7e620000000000000000000000005fd18a7195a81f7ad7273657aa098e1d70a99f36
-----Decoded View---------------
Arg [0] : _toMint (address): 0x75E75Ec01cA2D6Af404659f33a60fbc3322D7E62
Arg [1] : _dev (address): 0x5Fd18A7195a81F7AD7273657aA098e1D70A99f36
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000075e75ec01ca2d6af404659f33a60fbc3322d7e62
Arg [1] : 0000000000000000000000005fd18a7195a81f7ad7273657aa098e1d70a99f36
Deployed Bytecode Sourcemap
16433:22285:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21817:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22173:537;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18099:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20232:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16743:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36132:94;;;:::i;:::-;;18566:119;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20721:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35856:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23583:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18411:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38502:81;;;:::i;:::-;;21082:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24186:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22991:451;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16913:26;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18844:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19081:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15550:103;;;:::i;:::-;;38199:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19418:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35582:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14909:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38313:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17358:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18252:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17184:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21305:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17326:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19813:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17299:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17252:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17147:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16853:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21629:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20081:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16794:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37971:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17219:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36931:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15808:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38086:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35355:84;;;:::i;:::-;;37413:550;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36493:234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21817:98;21866:7;21893:14;;21886:21;;21817:98;:::o;22173:537::-;38651:8;;;;;;;;;;;38650:9;38642:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;22236:14:::1;22253:12;:10;:12::i;:::-;22236:29;;22307:7;22286:17;22296:6;22286:9;:17::i;:::-;:28;;22278:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22373:1;22363:7;:11;22355:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;22427:11;:19;22439:6;22427:19;;;;;;;;;;;;;;;;;;;;;;;;;22426:20;22418:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22507:15;22532:26;22543:7;22552:5;22532:10;:26::i;:::-;22506:52;;;;;;;;22605:7;22587;:15;22595:6;22587:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;22569:7;:15;22577:6;22569:15;;;;;;;;;;;;;;;:43;;;;22643:7;22633;;:17;;;;:::i;:::-;22623:7;:27;;;;22695:7;22678:14;;:24;;;;:::i;:::-;22661:14;:41;;;;22225:485;;22173:537:::0;:::o;18099:83::-;18136:13;18169:5;;;;;;;;;;;;;;;;;18162:12;;18099:83;:::o;20232:161::-;20307:4;20324:39;20333:12;:10;:12::i;:::-;20347:7;20356:6;20324:8;:39::i;:::-;20381:4;20374:11;;20232:161;;;;:::o;16743:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;36132:94::-;14795:13;:11;:13::i;:::-;36213:5:::1;36192:18;;:26;;;;;;;;;;;;;;;;;;36132:94::o:0;18566:119::-;18619:7;18656:21;18674:1;18656:9;:21::i;:::-;18646:7;;:31;;;;:::i;:::-;18639:38;;18566:119;:::o;20721:353::-;20830:4;38651:8;;;;;;;;;;;38650:9;38642:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;20876:6:::1;20855:17;20865:6;20855:9;:17::i;:::-;:27;;20847:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20923:36;20933:6;20941:9;20952:6;20923:9;:36::i;:::-;20970:74;20979:6;20987:12;:10;:12::i;:::-;21037:6;21001:11;:19;21013:6;21001:19;;;;;;;;;;;;;;;:33;21021:12;:10;:12::i;:::-;21001:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;20970:8;:74::i;:::-;21062:4;21055:11;;20721:353:::0;;;;;:::o;35856:195::-;14795:13;:11;:13::i;:::-;35941:4:::1;35927:11;:18;;;;35977:4;35956:18;;:25;;;;;;;;;;;;;;;;;;36027:4;36017:7;;:14;;;;:::i;:::-;36002:11;;:29;;35994:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;35856:195:::0;:::o;23583:250::-;23649:7;23688;;23677;:18;;23669:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23753:19;23776:10;:8;:10::i;:::-;23753:33;;23814:11;23804:7;:21;;;;:::i;:::-;23797:28;;;23583:250;;;:::o;18411:83::-;18452:5;17526:2;18470:16;;18411:83;:::o;38502:81::-;14795:13;:11;:13::i;:::-;38567:8:::1;;;;;;;;;;;38566:9;38555:8;;:20;;;;;;;;;;;;;;;;;;38502:81::o:0;21082:215::-;21170:4;21187:80;21196:12;:10;:12::i;:::-;21210:7;21256:10;21219:11;:25;21231:12;:10;:12::i;:::-;21219:25;;;;;;;;;;;;;;;:34;21245:7;21219:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;21187:8;:80::i;:::-;21285:4;21278:11;;21082:215;;;;:::o;24186:148::-;24269:6;24244:21;24254:10;24244:9;:21::i;:::-;:31;;24236:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24301:25;24307:10;24319:6;24301:5;:25::i;:::-;24186:148;:::o;22991:451::-;23081:7;23120;;23109;:18;;23101:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23179:17;23174:261;;23214:15;23239:26;23250:7;23259:5;23239:10;:26::i;:::-;23213:52;;;;;;;;23287:7;23280:14;;;;;23174:261;23329:23;23361:25;23372:7;23381:4;23361:10;:25::i;:::-;23327:59;;;;;;;;23408:15;23401:22;;;22991:451;;;;;:::o;16913:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18844:81::-;18883:7;18910;;18903:14;;18844:81;:::o;19081:198::-;19147:7;19171:11;:20;19183:7;19171:20;;;;;;;;;;;;;;;;;;;;;;;;;19167:49;;;19200:7;:16;19208:7;19200:16;;;;;;;;;;;;;;;;19193:23;;;;19167:49;19234:37;19254:7;:16;19262:7;19254:16;;;;;;;;;;;;;;;;19234:19;:37::i;:::-;19227:44;;19081:198;;;;:::o;15550:103::-;14795:13;:11;:13::i;:::-;15615:30:::1;15642:1;15615:18;:30::i;:::-;15550:103::o:0;38199:106::-;14795:13;:11;:13::i;:::-;38292:5:::1;38264:19;:25;38284:4;38264:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;38199:106:::0;:::o;19418:105::-;19472:7;19499;:16;19507:7;19499:16;;;;;;;;;;;;;;;;19492:23;;19418:105;;;:::o;35582:136::-;14795:13;:11;:13::i;:::-;35673:1:::1;35655:20;;:6;:20;;::::0;35647:40:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35704:6;35698:3;;:12;;;;;;;;;;;;;;;;;;35582:136:::0;:::o;14909:87::-;14955:7;14982:6;;;;;;;;;;;14975:13;;14909:87;:::o;38313:104::-;14795:13;:11;:13::i;:::-;38404:5:::1;38377:18;:24;38396:4;38377:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38313:104:::0;:::o;17358:18::-;;;;;;;;;;;;;:::o;18252:87::-;18291:13;18324:7;;;;;;;;;;;;;;;;;18317:14;;18252:87;:::o;17184:26::-;;;;:::o;21305:225::-;21398:4;21415:85;21424:12;:10;:12::i;:::-;21438:7;21484:15;21447:11;:25;21459:12;:10;:12::i;:::-;21447:25;;;;;;;;;;;;;;;:34;21473:7;21447:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;21415:8;:85::i;:::-;21518:4;21511:11;;21305:225;;;;:::o;17326:23::-;;;;;;;;;;;;;:::o;19813:260::-;19902:4;38651:8;;;;;;;;;;;38650:9;38642:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;19954:6:::1;19927:23;19937:12;:10;:12::i;:::-;19927:9;:23::i;:::-;:33;;19919:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20001:42;20011:12;:10;:12::i;:::-;20025:9;20036:6;20001:9;:42::i;:::-;20061:4;20054:11;;19813:260:::0;;;;:::o;17299:20::-;;;;;;;;;;;;;:::o;17252:38::-;;;;;;;;;;;;;:::o;17147:30::-;;;;:::o;16853:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;21629:110::-;21687:4;21711:11;:20;21723:7;21711:20;;;;;;;;;;;;;;;;;;;;;;;;;21704:27;;21629:110;;;:::o;20081:143::-;20162:7;20189:11;:18;20201:5;20189:18;;;;;;;;;;;;;;;:27;20208:7;20189:27;;;;;;;;;;;;;;;;20182:34;;20081:143;;;;:::o;16794:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;37971:107::-;14795:13;:11;:13::i;:::-;38066:4:::1;38038:19;:25;38058:4;38038:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37971:107:::0;:::o;17219:26::-;;;;:::o;36931:332::-;14795:13;:11;:13::i;:::-;37011:11:::1;:20;37023:7;37011:20;;;;;;;;;;;;;;;;;;;;;;;;;37010:21;37002:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37096:1;37077:7;:16;37085:7;37077:16;;;;;;;;;;;;;;;;:20;37074:108;;;37133:37;37153:7;:16;37161:7;37153:16;;;;;;;;;;;;;;;;37133:19;:37::i;:::-;37114:7;:16;37122:7;37114:16;;;;;;;;;;;;;;;:56;;;;37074:108;37217:4;37194:11;:20;37206:7;37194:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;37232:9;37247:7;37232:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36931:332:::0;:::o;15808:201::-;14795:13;:11;:13::i;:::-;15917:1:::1;15897:22;;:8;:22;;::::0;15889:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15973:28;15992:8;15973:18;:28::i;:::-;15808:201:::0;:::o;38086:105::-;14795:13;:11;:13::i;:::-;38179:4:::1;38152:18;:24;38171:4;38152:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;38086:105:::0;:::o;35355:84::-;14795:13;:11;:13::i;:::-;35420:11:::1;;;;;;;;;;;35419:12;35405:11;;:26;;;;;;;;;;;;;;;;;;35355:84::o:0;37413:550::-;14795:13;:11;:13::i;:::-;37513:1:::1;37494:21;;:7;:21;;::::0;37486:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37566:11;:20;37578:7;37566:20;;;;;;;;;;;;;;;;;;;;;;;;;37558:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37634:9;37629:327;37653:9;:16;;;;37649:1;:20;37629:327;;;37711:7;37695:23;;:9;37705:1;37695:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;37691:254:::1;;37754:9;37783:1;37764:9;:16;;;;:20;;;;:::i;:::-;37754:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37739:9;37749:1;37739:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37823:1;37804:7;:16;37812:7;37804:16;;;;;;;;;;;;;;;:20;;;;37866:5;37843:11;:20;37855:7;37843:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;37890:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;37924:5;;37691:254;37671:3;;;;;:::i;:::-;;;;37629:327;;;;37413:550:::0;:::o;36493:234::-;14795:13;:11;:13::i;:::-;36597:1:::1;36588:6;:10;:28;;;;;36615:1;36602:10;:14;36588:28;:57;;;;;36643:2;36629:10;36620:6;:19;;;;:::i;:::-;:25;;36588:57;36580:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;36678:6;36668:7;:16;;;;36709:10;36695:11;:24;;;;36493:234:::0;;:::o;1127:98::-;1180:7;1207:10;1200:17;;1127:98;:::o;31929:752::-;32000:7;32009;32018;32027;32036;32045;32054;32075:23;32100:12;32114:16;32134:27;32146:7;32155:5;32134:11;:27::i;:::-;32074:87;;;;;;32172:19;32195:10;:8;:10::i;:::-;32172:33;;32356:24;:65;;;;;;;;32384:7;32356:65;;;;32393:4;32356:65;;;;32399:8;32356:65;;;;32409:11;32356:65;;;;;32432:25;32460:27;32473:6;32481:5;32460:11;:27::i;:::-;32432:55;;32593:7;32601:1;32593:10;;;;;;;:::i;:::-;;;;;;32605:7;32613:1;32605:10;;;;;;;:::i;:::-;;;;;;32617:7;32625:1;32617:10;;;;;;;:::i;:::-;;;;;;32629:15;32646:4;32652:7;32660:1;32652:10;;;;;;;:::i;:::-;;;;;;32664:8;32585:88;;;;;;;;;;;;;;;;;;;;31929:752;;;;;;;;;;:::o;23841:337::-;23951:1;23934:19;;:5;:19;;;23926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24032:1;24013:21;;:7;:21;;;24005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24116:6;24086:11;:18;24098:5;24086:18;;;;;;;;;;;;;;;:27;24105:7;24086:27;;;;;;;;;;;;;;;:36;;;;24154:7;24138:32;;24147:5;24138:32;;;24163:6;24138:32;;;;;;:::i;:::-;;;;;;;;23841:337;;;:::o;15074:132::-;15149:12;:10;:12::i;:::-;15138:23;;:7;:5;:7::i;:::-;:23;;;15130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15074:132::o;24905:1253::-;25020:1;25002:20;;:6;:20;;;24994:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25093:3;25083:6;:13;;25075:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25179:1;25158:23;;:9;:23;;;25154:124;;25224:21;25230:6;25238;25224:5;:21::i;:::-;25260:7;;25154:124;25290:12;25305:4;25290:19;;25327:11;;;;;;;;;;;25322:175;;25365:5;25355:15;;25322:175;;;25392:19;:27;25412:6;25392:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;25423:19;:30;25443:9;25423:30;;;;;;;;;;;;;;;;;;;;;;;;;25392:61;25388:109;;;25480:5;25470:15;;25388:109;25322:175;25513:11;:19;25525:6;25513:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;25537:11;:22;25549:9;25537:22;;;;;;;;;;;;;;;;;;;;;;;;;25536:23;25513:46;25509:642;;;25576:57;25598:6;25606:9;25617:6;25625:7;25576:21;:57::i;:::-;25509:642;;;25656:11;:19;25668:6;25656:19;;;;;;;;;;;;;;;;;;;;;;;;;25655:20;:46;;;;;25679:11;:22;25691:9;25679:22;;;;;;;;;;;;;;;;;;;;;;;;;25655:46;25651:500;;;25718:55;25738:6;25746:9;25757:6;25765:7;25718:19;:55::i;:::-;25651:500;;;25796:11;:19;25808:6;25796:19;;;;;;;;;;;;;;;;;;;;;;;;;25795:20;:47;;;;;25820:11;:22;25832:9;25820:22;;;;;;;;;;;;;;;;;;;;;;;;;25819:23;25795:47;25791:360;;;25859:53;25877:6;25885:9;25896:6;25904:7;25859:17;:53::i;:::-;25791:360;;;25934:11;:19;25946:6;25934:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25957:11;:22;25969:9;25957:22;;;;;;;;;;;;;;;;;;;;;;;;;25934:45;25930:221;;;25996:57;26018:6;26026:9;26037:6;26045:7;25996:21;:57::i;:::-;25930:221;;;26086:53;26104:6;26112:9;26123:6;26131:7;26086:17;:53::i;:::-;25930:221;25791:360;25651:500;25509:642;24983:1175;24905:1253;;;;:::o;34301:160::-;34342:7;34363:15;34380;34399:19;:17;:19::i;:::-;34362:56;;;;34446:7;34436;:17;;;;:::i;:::-;34429:24;;;;34301:160;:::o;24342:269::-;24413:11;:19;24425:6;24413:19;;;;;;;;;;;;;;;;;;;;;;;;;24409:195;;;24449:56;24471:6;24487:1;24491:6;24499:5;24449:21;:56::i;:::-;24409:195;;;24538:54;24558:6;24574:1;24578:6;24586:5;24538:19;:54::i;:::-;24409:195;24342:269;;:::o;16169:191::-;16243:16;16262:6;;;;;;;;;;;16243:25;;16288:8;16279:6;;:17;;;;;;;;;;;;;;;;;;16343:8;16312:40;;16333:8;16312:40;;;;;;;;;;;;16232:128;16169:191;:::o;32827:460::-;32899:7;32908;32917;32937:12;32952:1;32937:16;;32964;32995:23;33021:7;32995:33;;33043:5;33039:188;;;33093:3;33083:7;;33073;:17;;;;:::i;:::-;:23;;;;:::i;:::-;33066:30;;33146:3;33132:11;;33122:7;:21;;;;:::i;:::-;:27;;;;:::i;:::-;33111:38;;33207:8;33200:4;33182:15;:22;;;;:::i;:::-;:33;;;;:::i;:::-;33164:51;;33039:188;33247:15;33264:4;33270:8;33239:40;;;;;;;;;32827:460;;;;;:::o;33471:658::-;33551:25;;:::i;:::-;33633:5;33639:1;33633:8;;;;;;;:::i;:::-;;;;;;33622:5;33628:1;33622:8;;;;;;;:::i;:::-;;;;;;:19;;;;:::i;:::-;33609:7;33617:1;33609:10;;;;;;;:::i;:::-;;;;;:32;;;;;33659:5;33654:464;;33719:1;33706:7;33714:1;33706:10;;;;;;;:::i;:::-;;;;;:14;;;;;33775:1;33762:7;33770:1;33762:10;;;;;;;:::i;:::-;;;;;:14;;;;;33838:7;33846:1;33838:10;;;;;;;:::i;:::-;;;;;;33825:7;33833:1;33825:10;;;;;;;:::i;:::-;;;;;:23;;;;;33654:464;;;33926:5;33932:1;33926:8;;;;;;;:::i;:::-;;;;;;33915:5;33921:1;33915:8;;;;;;;:::i;:::-;;;;;;:19;;;;:::i;:::-;33902:7;33910:1;33902:10;;;;;;;:::i;:::-;;;;;:32;;;;;34000:5;34006:1;34000:8;;;;;;;:::i;:::-;;;;;;33989:5;33995:1;33989:8;;;;;;;:::i;:::-;;;;;;:19;;;;:::i;:::-;33976:7;33984:1;33976:10;;;;;;;:::i;:::-;;;;;:32;;;;;34096:7;34104:1;34096:10;;;;;;;:::i;:::-;;;;;;34083:7;34091:1;34083:10;;;;;;;:::i;:::-;;;;;;34070:7;34078:1;34070:10;;;;;;;:::i;:::-;;;;;;:23;;;;:::i;:::-;:36;;;;:::i;:::-;34057:7;34065:1;34057:10;;;;;;;:::i;:::-;;;;;:49;;;;;33654:464;33471:658;;;;:::o;28714:865::-;28829:15;28846:23;28871:12;28885:23;28910:12;28924:16;28942;28962:26;28973:7;28982:5;28962:10;:26::i;:::-;28828:160;;;;;;;;;;;;;;29029:18;;;;;;;;;;;:52;;;;;29052:18;:29;29071:9;29052:29;;;;;;;;;;;;;;;;;;;;;;;;;29051:30;29029:52;29025:141;;;29117:11;;29106:7;:22;;29098:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29025:141;29214:7;29196;:15;29204:6;29196:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;29178:7;:15;29186:6;29178:15;;;;;;;;;;;;;;;:43;;;;29268:7;29250;:15;29258:6;29250:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;29232:7;:15;29240:6;29232:15;;;;;;;;;;;;;;;:43;;;;29328:15;29307:7;:18;29315:9;29307:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;29286:7;:18;29294:9;29286:18;;;;;;;;;;;;;;;:57;;;;29397:5;29393:115;;;29419:31;29431:8;29441;29419:11;:31::i;:::-;29465:29;29475:4;29481;29487:6;29465:9;:29::i;:::-;29393:115;29542:9;29525:44;;29534:6;29525:44;;;29553:15;29525:44;;;;;;:::i;:::-;;;;;;;;28817:762;;;;;;;28714:865;;;;:::o;27556:872::-;27669:15;27686:23;27711:12;27725:23;27750:12;27764:16;27782;27802:26;27813:7;27822:5;27802:10;:26::i;:::-;27668:160;;;;;;;;;;;;;;27869:18;;;;;;;;;;;:52;;;;;27892:18;:29;27911:9;27892:29;;;;;;;;;;;;;;;;;;;;;;;;;27891:30;27869:52;27865:141;;;27957:11;;27946:7;:22;;27938:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27865:141;28054:7;28036;:15;28044:6;28036:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;28018:7;:15;28026:6;28018:15;;;;;;;;;;;;;;;:43;;;;28114:15;28093:7;:18;28101:9;28093:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;28072:7;:18;28080:9;28072:18;;;;;;;;;;;;;;;:57;;;;28182:15;28161:7;:18;28169:9;28161:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;28140:7;:18;28148:9;28140:18;;;;;;;;;;;;;;;:57;;;;28246:5;28242:115;;;28268:31;28280:8;28290;28268:11;:31::i;:::-;28314:29;28324:4;28330;28336:6;28314:9;:29::i;:::-;28242:115;28391:9;28374:44;;28383:6;28374:44;;;28402:15;28374:44;;;;;;:::i;:::-;;;;;;;;27657:771;;;;;;;27556:872;;;;:::o;26498:770::-;26609:15;26626:23;26651:12;26665:23;26690:12;26704:16;26722;26742:26;26753:7;26762:5;26742:10;:26::i;:::-;26608:160;;;;;;;;;;;;;;26809:18;;;;;;;;;;;:52;;;;;26832:18;:29;26851:9;26832:29;;;;;;;;;;;;;;;;;;;;;;;;;26831:30;26809:52;26805:141;;;26897:11;;26886:7;:22;;26878:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26805:141;26994:7;26976;:15;26984:6;26976:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;26958:7;:15;26966:6;26958:15;;;;;;;;;;;;;;;:43;;;;27054:15;27033:7;:18;27041:9;27033:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;27012:7;:18;27020:9;27012:18;;;;;;;;;;;;;;;:57;;;;27084:5;27080:115;;;27106:31;27118:8;27128;27106:11;:31::i;:::-;27152:29;27162:4;27168;27174:6;27152:9;:29::i;:::-;27080:115;27227:9;27210:44;;27219:6;27210:44;;;27238:15;27210:44;;;;;;:::i;:::-;;;;;;;;26597:671;;;;;;;26498:770;;;;:::o;29930:1048::-;30047:15;30064:23;30089:12;30103:23;30128:12;30142:16;30160;30180:26;30191:7;30200:5;30180:10;:26::i;:::-;30046:160;;;;;;;;;;;;;;30247:18;;;;;;;;;;;:52;;;;;30270:18;:29;30289:9;30270:29;;;;;;;;;;;;;;;;;;;;;;;;;30269:30;30247:52;30243:141;;;30335:11;;30324:7;:22;;30316:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30243:141;30430:7;30412;:15;30420:6;30412:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;30394:7;:15;30402:6;30394:15;;;;;;;;;;;;;;;:43;;;;30484:7;30466;:15;30474:6;30466:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;30448:7;:15;30456:6;30448:15;;;;;;;;;;;;;;;:43;;;;30544:15;30523:7;:18;30531:9;30523:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;30502:7;:18;30510:9;30502:18;;;;;;;;;;;;;;;:57;;;;30612:15;30591:7;:18;30599:9;30591:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;30570:7;:18;30578:9;30570:18;;;;;;;;;;;;;;;:57;;;;30642:5;30638:160;;;30707:31;30719:8;30729;30707:11;:31::i;:::-;30753:29;30763:4;30769;30775:6;30753:9;:29::i;:::-;30638:160;30941:9;30924:44;;30933:6;30924:44;;;30952:15;30924:44;;;;;;:::i;:::-;;;;;;;;30033:945;;;;;;;29930:1048;;;;:::o;34655:563::-;34705:7;34714;34734:15;34752:7;;34734:25;;34770:15;34788:7;;34770:25;;34811:9;34806:300;34830:9;:16;;;;34826:1;:20;34806:300;;;34896:7;34872;:21;34880:9;34890:1;34880:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34872:21;;;;;;;;;;;;;;;;:31;:66;;;;34931:7;34907;:21;34915:9;34925:1;34915:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34907:21;;;;;;;;;;;;;;;;:31;34872:66;34868:114;;;34965:7;;34974;;34957:25;;;;;;;;;34868:114;35017:7;:21;35025:9;35035:1;35025:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35017:21;;;;;;;;;;;;;;;;35007:7;:31;;;;:::i;:::-;34997:41;;35073:7;:21;35081:9;35091:1;35081:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35073:21;;;;;;;;;;;;;;;;35063:7;:31;;;;:::i;:::-;35053:41;;34848:3;;;;;:::i;:::-;;;;34806:300;;;;35140:7;;35130;;:17;;;;:::i;:::-;35120:7;:27;35116:58;;;35157:7;;35166;;35149:25;;;;;;;;35116:58;35193:7;35202;35185:25;;;;;;34655:563;;;:::o;31574:165::-;31670:8;31660:7;;:18;;;;:::i;:::-;31650:7;:28;;;;31723:8;31706:14;;:25;;;;:::i;:::-;31689:14;:42;;;;31574:165;;:::o;31140:298::-;31223:12;31238:3;;;;;;;;;;;31223:18;;31256:11;:17;31268:4;31256:17;;;;;;;;;;;;;;;;;;;;;;;;;31252:86;;;31322:4;31306:7;:13;31314:4;31306:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;31290:7;:13;31298:4;31290:13;;;;;;;;;;;;;;;:36;;;;31252:86;31380:4;31364:7;:13;31372:4;31364:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;31348:7;:13;31356:4;31348:13;;;;;;;;;;;;;;;:36;;;;31417:4;31400:28;;31409:6;31400:28;;;31423:4;31400:28;;;;;;:::i;:::-;;;;;;;;31212:226;31140:298;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:99::-;1429:6;1463:5;1457:12;1447:22;;1377:99;;;:::o;1482:169::-;1566:11;1600:6;1595:3;1588:19;1640:4;1635:3;1631:14;1616:29;;1482:169;;;;:::o;1657:246::-;1738:1;1748:113;1762:6;1759:1;1756:13;1748:113;;;1847:1;1842:3;1838:11;1832:18;1828:1;1823:3;1819:11;1812:39;1784:2;1781:1;1777:10;1772:15;;1748:113;;;1895:1;1886:6;1881:3;1877:16;1870:27;1719:184;1657:246;;;:::o;1909:102::-;1950:6;2001:2;1997:7;1992:2;1985:5;1981:14;1977:28;1967:38;;1909:102;;;:::o;2017:377::-;2105:3;2133:39;2166:5;2133:39;:::i;:::-;2188:71;2252:6;2247:3;2188:71;:::i;:::-;2181:78;;2268:65;2326:6;2321:3;2314:4;2307:5;2303:16;2268:65;:::i;:::-;2358:29;2380:6;2358:29;:::i;:::-;2353:3;2349:39;2342:46;;2109:285;2017:377;;;;:::o;2400:313::-;2513:4;2551:2;2540:9;2536:18;2528:26;;2600:9;2594:4;2590:20;2586:1;2575:9;2571:17;2564:47;2628:78;2701:4;2692:6;2628:78;:::i;:::-;2620:86;;2400:313;;;;:::o;2719:126::-;2756:7;2796:42;2789:5;2785:54;2774:65;;2719:126;;;:::o;2851:96::-;2888:7;2917:24;2935:5;2917:24;:::i;:::-;2906:35;;2851:96;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:329::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:619::-;4545:6;4553;4561;4610:2;4598:9;4589:7;4585:23;4581:32;4578:119;;;4616:79;;:::i;:::-;4578:119;4736:1;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4707:117;4863:2;4889:53;4934:7;4925:6;4914:9;4910:22;4889:53;:::i;:::-;4879:63;;4834:118;4991:2;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4962:118;4468:619;;;;;:::o;5093:86::-;5128:7;5168:4;5161:5;5157:16;5146:27;;5093:86;;;:::o;5185:112::-;5268:22;5284:5;5268:22;:::i;:::-;5263:3;5256:35;5185:112;;:::o;5303:214::-;5392:4;5430:2;5419:9;5415:18;5407:26;;5443:67;5507:1;5496:9;5492:17;5483:6;5443:67;:::i;:::-;5303:214;;;;:::o;5523:116::-;5593:21;5608:5;5593:21;:::i;:::-;5586:5;5583:32;5573:60;;5629:1;5626;5619:12;5573:60;5523:116;:::o;5645:133::-;5688:5;5726:6;5713:20;5704:29;;5742:30;5766:5;5742:30;:::i;:::-;5645:133;;;;:::o;5784:468::-;5849:6;5857;5906:2;5894:9;5885:7;5881:23;5877:32;5874:119;;;5912:79;;:::i;:::-;5874:119;6032:1;6057:53;6102:7;6093:6;6082:9;6078:22;6057:53;:::i;:::-;6047:63;;6003:117;6159:2;6185:50;6227:7;6218:6;6207:9;6203:22;6185:50;:::i;:::-;6175:60;;6130:115;5784:468;;;;;:::o;6258:118::-;6345:24;6363:5;6345:24;:::i;:::-;6340:3;6333:37;6258:118;;:::o;6382:222::-;6475:4;6513:2;6502:9;6498:18;6490:26;;6526:71;6594:1;6583:9;6579:17;6570:6;6526:71;:::i;:::-;6382:222;;;;:::o;6610:474::-;6678:6;6686;6735:2;6723:9;6714:7;6710:23;6706:32;6703:119;;;6741:79;;:::i;:::-;6703:119;6861:1;6886:53;6931:7;6922:6;6911:9;6907:22;6886:53;:::i;:::-;6876:63;;6832:117;6988:2;7014:53;7059:7;7050:6;7039:9;7035:22;7014:53;:::i;:::-;7004:63;;6959:118;6610:474;;;;;:::o;7090:::-;7158:6;7166;7215:2;7203:9;7194:7;7190:23;7186:32;7183:119;;;7221:79;;:::i;:::-;7183:119;7341:1;7366:53;7411:7;7402:6;7391:9;7387:22;7366:53;:::i;:::-;7356:63;;7312:117;7468:2;7494:53;7539:7;7530:6;7519:9;7515:22;7494:53;:::i;:::-;7484:63;;7439:118;7090:474;;;;;:::o;7570:181::-;7710:33;7706:1;7698:6;7694:14;7687:57;7570:181;:::o;7757:366::-;7899:3;7920:67;7984:2;7979:3;7920:67;:::i;:::-;7913:74;;7996:93;8085:3;7996:93;:::i;:::-;8114:2;8109:3;8105:12;8098:19;;7757:366;;;:::o;8129:419::-;8295:4;8333:2;8322:9;8318:18;8310:26;;8382:9;8376:4;8372:20;8368:1;8357:9;8353:17;8346:47;8410:131;8536:4;8410:131;:::i;:::-;8402:139;;8129:419;;;:::o;8554:175::-;8694:27;8690:1;8682:6;8678:14;8671:51;8554:175;:::o;8735:366::-;8877:3;8898:67;8962:2;8957:3;8898:67;:::i;:::-;8891:74;;8974:93;9063:3;8974:93;:::i;:::-;9092:2;9087:3;9083:12;9076:19;;8735:366;;;:::o;9107:419::-;9273:4;9311:2;9300:9;9296:18;9288:26;;9360:9;9354:4;9350:20;9346:1;9335:9;9331:17;9324:47;9388:131;9514:4;9388:131;:::i;:::-;9380:139;;9107:419;;;:::o;9532:178::-;9672:30;9668:1;9660:6;9656:14;9649:54;9532:178;:::o;9716:366::-;9858:3;9879:67;9943:2;9938:3;9879:67;:::i;:::-;9872:74;;9955:93;10044:3;9955:93;:::i;:::-;10073:2;10068:3;10064:12;10057:19;;9716:366;;;:::o;10088:419::-;10254:4;10292:2;10281:9;10277:18;10269:26;;10341:9;10335:4;10331:20;10327:1;10316:9;10312:17;10305:47;10369:131;10495:4;10369:131;:::i;:::-;10361:139;;10088:419;;;:::o;10513:231::-;10653:34;10649:1;10641:6;10637:14;10630:58;10722:14;10717:2;10709:6;10705:15;10698:39;10513:231;:::o;10750:366::-;10892:3;10913:67;10977:2;10972:3;10913:67;:::i;:::-;10906:74;;10989:93;11078:3;10989:93;:::i;:::-;11107:2;11102:3;11098:12;11091:19;;10750:366;;;:::o;11122:419::-;11288:4;11326:2;11315:9;11311:18;11303:26;;11375:9;11369:4;11365:20;11361:1;11350:9;11346:17;11339:47;11403:131;11529:4;11403:131;:::i;:::-;11395:139;;11122:419;;;:::o;11547:180::-;11595:77;11592:1;11585:88;11692:4;11689:1;11682:15;11716:4;11713:1;11706:15;11733:194;11773:4;11793:20;11811:1;11793:20;:::i;:::-;11788:25;;11827:20;11845:1;11827:20;:::i;:::-;11822:25;;11871:1;11868;11864:9;11856:17;;11895:1;11889:4;11886:11;11883:37;;;11900:18;;:::i;:::-;11883:37;11733:194;;;;:::o;11933:191::-;11973:3;11992:20;12010:1;11992:20;:::i;:::-;11987:25;;12026:20;12044:1;12026:20;:::i;:::-;12021:25;;12069:1;12066;12062:9;12055:16;;12090:3;12087:1;12084:10;12081:36;;;12097:18;;:::i;:::-;12081:36;11933:191;;;;:::o;12130:180::-;12178:77;12175:1;12168:88;12275:4;12272:1;12265:15;12299:4;12296:1;12289:15;12316:185;12356:1;12373:20;12391:1;12373:20;:::i;:::-;12368:25;;12407:20;12425:1;12407:20;:::i;:::-;12402:25;;12446:1;12436:35;;12451:18;;:::i;:::-;12436:35;12493:1;12490;12486:9;12481:14;;12316:185;;;;:::o;12507:157::-;12647:9;12643:1;12635:6;12631:14;12624:33;12507:157;:::o;12670:365::-;12812:3;12833:66;12897:1;12892:3;12833:66;:::i;:::-;12826:73;;12908:93;12997:3;12908:93;:::i;:::-;13026:2;13021:3;13017:12;13010:19;;12670:365;;;:::o;13041:419::-;13207:4;13245:2;13234:9;13230:18;13222:26;;13294:9;13288:4;13284:20;13280:1;13269:9;13265:17;13258:47;13322:131;13448:4;13322:131;:::i;:::-;13314:139;;13041:419;;;:::o;13466:229::-;13606:34;13602:1;13594:6;13590:14;13583:58;13675:12;13670:2;13662:6;13658:15;13651:37;13466:229;:::o;13701:366::-;13843:3;13864:67;13928:2;13923:3;13864:67;:::i;:::-;13857:74;;13940:93;14029:3;13940:93;:::i;:::-;14058:2;14053:3;14049:12;14042:19;;13701:366;;;:::o;14073:419::-;14239:4;14277:2;14266:9;14262:18;14254:26;;14326:9;14320:4;14316:20;14312:1;14301:9;14297:17;14290:47;14354:131;14480:4;14354:131;:::i;:::-;14346:139;;14073:419;;;:::o;14498:160::-;14638:12;14634:1;14626:6;14622:14;14615:36;14498:160;:::o;14664:366::-;14806:3;14827:67;14891:2;14886:3;14827:67;:::i;:::-;14820:74;;14903:93;14992:3;14903:93;:::i;:::-;15021:2;15016:3;15012:12;15005:19;;14664:366;;;:::o;15036:419::-;15202:4;15240:2;15229:9;15225:18;15217:26;;15289:9;15283:4;15279:20;15275:1;15264:9;15260:17;15253:47;15317:131;15443:4;15317:131;:::i;:::-;15309:139;;15036:419;;;:::o;15461:181::-;15601:33;15597:1;15589:6;15585:14;15578:57;15461:181;:::o;15648:366::-;15790:3;15811:67;15875:2;15870:3;15811:67;:::i;:::-;15804:74;;15887:93;15976:3;15887:93;:::i;:::-;16005:2;16000:3;15996:12;15989:19;;15648:366;;;:::o;16020:419::-;16186:4;16224:2;16213:9;16209:18;16201:26;;16273:9;16267:4;16263:20;16259:1;16248:9;16244:17;16237:47;16301:131;16427:4;16301:131;:::i;:::-;16293:139;;16020:419;;;:::o;16445:157::-;16585:9;16581:1;16573:6;16569:14;16562:33;16445:157;:::o;16608:365::-;16750:3;16771:66;16835:1;16830:3;16771:66;:::i;:::-;16764:73;;16846:93;16935:3;16846:93;:::i;:::-;16964:2;16959:3;16955:12;16948:19;;16608:365;;;:::o;16979:419::-;17145:4;17183:2;17172:9;17168:18;17160:26;;17232:9;17226:4;17222:20;17218:1;17207:9;17203:17;17196:47;17260:131;17386:4;17260:131;:::i;:::-;17252:139;;16979:419;;;:::o;17404:177::-;17544:29;17540:1;17532:6;17528:14;17521:53;17404:177;:::o;17587:366::-;17729:3;17750:67;17814:2;17809:3;17750:67;:::i;:::-;17743:74;;17826:93;17915:3;17826:93;:::i;:::-;17944:2;17939:3;17935:12;17928:19;;17587:366;;;:::o;17959:419::-;18125:4;18163:2;18152:9;18148:18;18140:26;;18212:9;18206:4;18202:20;18198:1;18187:9;18183:17;18176:47;18240:131;18366:4;18240:131;:::i;:::-;18232:139;;17959:419;;;:::o;18384:225::-;18524:34;18520:1;18512:6;18508:14;18501:58;18593:8;18588:2;18580:6;18576:15;18569:33;18384:225;:::o;18615:366::-;18757:3;18778:67;18842:2;18837:3;18778:67;:::i;:::-;18771:74;;18854:93;18943:3;18854:93;:::i;:::-;18972:2;18967:3;18963:12;18956:19;;18615:366;;;:::o;18987:419::-;19153:4;19191:2;19180:9;19176:18;19168:26;;19240:9;19234:4;19230:20;19226:1;19215:9;19211:17;19204:47;19268:131;19394:4;19268:131;:::i;:::-;19260:139;;18987:419;;;:::o;19412:177::-;19552:29;19548:1;19540:6;19536:14;19529:53;19412:177;:::o;19595:366::-;19737:3;19758:67;19822:2;19817:3;19758:67;:::i;:::-;19751:74;;19834:93;19923:3;19834:93;:::i;:::-;19952:2;19947:3;19943:12;19936:19;;19595:366;;;:::o;19967:419::-;20133:4;20171:2;20160:9;20156:18;20148:26;;20220:9;20214:4;20210:20;20206:1;20195:9;20191:17;20184:47;20248:131;20374:4;20248:131;:::i;:::-;20240:139;;19967:419;;;:::o;20392:180::-;20440:77;20437:1;20430:88;20537:4;20534:1;20527:15;20561:4;20558:1;20551:15;20578:180;20626:77;20623:1;20616:88;20723:4;20720:1;20713:15;20747:4;20744:1;20737:15;20764:233;20803:3;20826:24;20844:5;20826:24;:::i;:::-;20817:33;;20872:66;20865:5;20862:77;20859:103;;20942:18;;:::i;:::-;20859:103;20989:1;20982:5;20978:13;20971:20;;20764:233;;;:::o;21003:223::-;21143:34;21139:1;21131:6;21127:14;21120:58;21212:6;21207:2;21199:6;21195:15;21188:31;21003:223;:::o;21232:366::-;21374:3;21395:67;21459:2;21454:3;21395:67;:::i;:::-;21388:74;;21471:93;21560:3;21471:93;:::i;:::-;21589:2;21584:3;21580:12;21573:19;;21232:366;;;:::o;21604:419::-;21770:4;21808:2;21797:9;21793:18;21785:26;;21857:9;21851:4;21847:20;21843:1;21832:9;21828:17;21821:47;21885:131;22011:4;21885:131;:::i;:::-;21877:139;;21604:419;;;:::o;22029:221::-;22169:34;22165:1;22157:6;22153:14;22146:58;22238:4;22233:2;22225:6;22221:15;22214:29;22029:221;:::o;22256:366::-;22398:3;22419:67;22483:2;22478:3;22419:67;:::i;:::-;22412:74;;22495:93;22584:3;22495:93;:::i;:::-;22613:2;22608:3;22604:12;22597:19;;22256:366;;;:::o;22628:419::-;22794:4;22832:2;22821:9;22817:18;22809:26;;22881:9;22875:4;22871:20;22867:1;22856:9;22852:17;22845:47;22909:131;23035:4;22909:131;:::i;:::-;22901:139;;22628:419;;;:::o;23053:182::-;23193:34;23189:1;23181:6;23177:14;23170:58;23053:182;:::o;23241:366::-;23383:3;23404:67;23468:2;23463:3;23404:67;:::i;:::-;23397:74;;23480:93;23569:3;23480:93;:::i;:::-;23598:2;23593:3;23589:12;23582:19;;23241:366;;;:::o;23613:419::-;23779:4;23817:2;23806:9;23802:18;23794:26;;23866:9;23860:4;23856:20;23852:1;23841:9;23837:17;23830:47;23894:131;24020:4;23894:131;:::i;:::-;23886:139;;23613:419;;;:::o;24038:224::-;24178:34;24174:1;24166:6;24162:14;24155:58;24247:7;24242:2;24234:6;24230:15;24223:32;24038:224;:::o;24268:366::-;24410:3;24431:67;24495:2;24490:3;24431:67;:::i;:::-;24424:74;;24507:93;24596:3;24507:93;:::i;:::-;24625:2;24620:3;24616:12;24609:19;;24268:366;;;:::o;24640:419::-;24806:4;24844:2;24833:9;24829:18;24821:26;;24893:9;24887:4;24883:20;24879:1;24868:9;24864:17;24857:47;24921:131;25047:4;24921:131;:::i;:::-;24913:139;;24640:419;;;:::o;25065:227::-;25205:34;25201:1;25193:6;25189:14;25182:58;25274:10;25269:2;25261:6;25257:15;25250:35;25065:227;:::o;25298:366::-;25440:3;25461:67;25525:2;25520:3;25461:67;:::i;:::-;25454:74;;25537:93;25626:3;25537:93;:::i;:::-;25655:2;25650:3;25646:12;25639:19;;25298:366;;;:::o;25670:419::-;25836:4;25874:2;25863:9;25859:18;25851:26;;25923:9;25917:4;25913:20;25909:1;25898:9;25894:17;25887:47;25951:131;26077:4;25951:131;:::i;:::-;25943:139;;25670:419;;;:::o;26095:410::-;26135:7;26158:20;26176:1;26158:20;:::i;:::-;26153:25;;26192:20;26210:1;26192:20;:::i;:::-;26187:25;;26247:1;26244;26240:9;26269:30;26287:11;26269:30;:::i;:::-;26258:41;;26448:1;26439:7;26435:15;26432:1;26429:22;26409:1;26402:9;26382:83;26359:139;;26478:18;;:::i;:::-;26359:139;26143:362;26095:410;;;;:::o;26511:171::-;26651:23;26647:1;26639:6;26635:14;26628:47;26511:171;:::o;26688:366::-;26830:3;26851:67;26915:2;26910:3;26851:67;:::i;:::-;26844:74;;26927:93;27016:3;26927:93;:::i;:::-;27045:2;27040:3;27036:12;27029:19;;26688:366;;;:::o;27060:419::-;27226:4;27264:2;27253:9;27249:18;27241:26;;27313:9;27307:4;27303:20;27299:1;27288:9;27284:17;27277:47;27341:131;27467:4;27341:131;:::i;:::-;27333:139;;27060:419;;;:::o
Swarm Source
ipfs://223372691919b133283b2f6f95bdaed990f8271c4e921621ba4be784abd88348
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.