Polygon Sponsored slots available. Book your slot here!
ERC-20
Overview
Max Total Supply
2,118,545.84904 tPOKT
Holders
1,119
Total Transfers
-
Market
Price
$0.00 @ 0.000000 MATIC
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
tPokt
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.7; /* import "./YAMTokenInterface.sol"; */ import "./tStorage.sol"; import "./SafeERC20.sol"; contract ThunderPOKT is TokenStorage { using SafeMath for uint256; constructor() { rebaser = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor gov = msg.sender; } /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /** * @notice Event emitted when tokens are rebased */ event Rebase(uint256 epoch, uint256 prevYamsScalingFactor, uint256 newYamsScalingFactor); /** * @notice Event emitted when pendingGov is changed */ event NewPendingGov(address oldPendingGov, address newPendingGov); /** * @notice Event emitted when gov is changed */ event NewGov(address oldGov, address newGov); /** * @notice Sets the rebaser contract */ event NewRebaser(address oldRebaser, address newRebaser); /** * @notice Sets the migrator contract */ event NewMigrator(address oldMigrator, address newMigrator); /** * @notice Sets the incentivizer contract */ event NewIncentivizer(address oldIncentivizer, address newIncentivizer); /* - ERC20 Events - */ /** * @notice EIP20 Transfer event */ event Transfer(address indexed from, address indexed to, uint amount); /** * @notice EIP20 Approval event */ event Approval(address indexed owner, address indexed spender, uint amount); /* - Extra Events - */ /** * @notice Tokens minted event */ event Mint(address to, uint256 amount); /** * @notice Tokens burned event */ event Burn(address from, uint256 amount, address pokt_address); // Modifiers modifier onlyGov() { require(msg.sender == gov); _; } modifier onlyRebaser() { require(msg.sender == rebaser); _; } modifier onlyMinter() { require( msg.sender == rebaser || msg.sender == gov || msg.sender == incentivizer || msg.sender == migrator, "not minter" ); _; } modifier notFrozen() { require(frozen==false, "frozen"); _; } modifier validRecipient(address to) { require(to != address(0x0)); require(to != address(this)); _; } function initialize( string memory name_, string memory symbol_, uint8 decimals_ ) onlyGov public { require(yamsScalingFactor == BASE, "already initialized"); name = name_; symbol = symbol_; decimals = decimals_; } /** * @notice Computes the current max scaling factor */ function maxScalingFactor() external view returns (uint256) { return _maxScalingFactor(); } function _maxScalingFactor() internal view returns (uint256) { // scaling factor can only go up to 2**256-1 = initSupply * yamsScalingFactor // this is used to check if yamsScalingFactor will be too high to compute balances when rebasing. return type(uint).max / initSupply; } function freeze(bool status) external onlyGov returns (bool) { frozen = status; return true; } /** * @notice Mints new tokens, increasing totalSupply, initSupply, and a users balance. * @dev Limited to onlyMinter modifier */ function mint(address to, uint256 amount) external onlyMinter returns (bool) { _mint(to, amount); return true; } function _mint(address to, uint256 amount) internal { // increase totalSupply totalSupply = totalSupply.add(amount); // get underlying value uint256 yamValue = _fragmentToYam(amount); // increase initSupply initSupply = initSupply.add(yamValue); // make sure the mint didnt push maxScalingFactor too low require(yamsScalingFactor <= _maxScalingFactor(), "max scaling factor too low"); // add balance _yamBalances[to] = _yamBalances[to].add(yamValue); // add delegates to the minter emit Mint(to, amount); emit Transfer(address(0), to, amount); } /* - ERC20 functionality - */ /** * @dev Transfer tokens to a specified address. * @param to The address to transfer to. * @param value The amount to be transferred. * @return True on success, false otherwise. */ function transfer(address to, uint256 value) external validRecipient(to) notFrozen returns (bool) { // underlying balance is stored in yams, so divide by current scaling factor // note, this means as scaling factor grows, dust will be untransferrable. // minimum transfer value == yamsScalingFactor / 1e24; // get amount in underlying uint256 yamValue = _fragmentToYam(value); // sub from balance of sender _yamBalances[msg.sender] = _yamBalances[msg.sender].sub(yamValue); // add to balance of receiver _yamBalances[to] = _yamBalances[to].add(yamValue); emit Transfer(msg.sender, to, value); return true; } function burn(uint256 value, address pokt_address) external notFrozen returns (bool) { _burn(value,pokt_address); return true; } function _burn(uint256 value, address pokt_address) internal { // underlying balance is stored in yams, so divide by current scaling factor // note, this means as scaling factor grows, dust will be untransferrable. // minimum transfer value == yamsScalingFactor / 1e24; // get amount in underlying totalSupply = totalSupply.sub(value); uint256 yamValue = _fragmentToYam(value); initSupply = initSupply.sub(yamValue); // sub from balance of sender require(yamsScalingFactor <= _maxScalingFactor(), "max scaling factor too low"); _yamBalances[msg.sender] = _yamBalances[msg.sender].sub(yamValue); // add to balance of receiver emit Burn(msg.sender, value, pokt_address); emit Transfer(msg.sender, address(0), value); } /** * @dev Transfer tokens from one address to another. * @param from The address you want to send tokens from. * @param to The address you want to transfer to. * @param value The amount of tokens to be transferred. */ function transferFrom(address from, address to, uint256 value) external validRecipient(to) notFrozen returns (bool) { // decrease allowance _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender].sub(value); // get value in yams uint256 yamValue = _fragmentToYam(value); // sub from from _yamBalances[from] = _yamBalances[from].sub(yamValue); _yamBalances[to] = _yamBalances[to].add(yamValue); emit Transfer(from, to, value); return true; } /** * @dev Transfer tokens from one address to another. * @param from The address you want to send tokens from. * @param to The address you want to transfer to. * @param value The amount of tokens to be transferred. */ function govTransferFrom(address from, address to, uint256 value) external validRecipient(to) onlyGov returns (bool) { // get value in yams uint256 yamValue = _fragmentToYam(value); // sub from from _yamBalances[from] = _yamBalances[from].sub(yamValue); _yamBalances[to] = _yamBalances[to].add(yamValue); emit Transfer(from, to, value); return true; } /** * @param who The address to query. * @return The balance of the specified address. */ function balanceOf(address who) external view returns (uint256) { return _yamToFragment(_yamBalances[who]); } /** @notice Currently returns the internal storage amount * @param who The address to query. * @return The underlying balance of the specified address. */ function balanceOfUnderlying(address who) external view returns (uint256) { return _yamBalances[who]; } /** * @dev Function to check the amount of tokens that an owner has allowed to a spender. * @param owner_ The address which owns the funds. * @param spender The address which will spend the funds. * @return The number of tokens still available for the spender. */ function allowance(address owner_, address spender) external view returns (uint256) { return _allowedFragments[owner_][spender]; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of * msg.sender. This method is included for ERC20 compatibility. * increaseAllowance and decreaseAllowance should be used instead. * Changing an allowance with this method brings the risk that someone may transfer both * the old and the new allowance - if they are both greater than zero - if a transfer * transaction is mined before the later approve() call is mined. * * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) external returns (bool) { _allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Increase the amount of tokens that an owner has allowed to a spender. * This method should be used instead of approve() to avoid the double approval vulnerability * described above. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) external notFrozen returns (bool) { _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][spender].add(addedValue); emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner has allowed to a spender. * * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) external notFrozen returns (bool) { uint256 oldValue = _allowedFragments[msg.sender][spender]; if (subtractedValue >= oldValue) { _allowedFragments[msg.sender][spender] = 0; } else { _allowedFragments[msg.sender][spender] = oldValue.sub(subtractedValue); } emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]); return true; } // --- Approve by signature --- function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) notFrozen external { require(block.timestamp <= deadline, "YAM/permit-expired"); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, keccak256( abi.encode( PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline ) ) ) ); require(owner != address(0), "YAM/invalid-address-0"); require(owner == ecrecover(digest, v, r, s), "YAM/invalid-permit"); _allowedFragments[owner][spender] = value; emit Approval(owner, spender, value); } /* - Governance Functions - */ /** @notice sets the rebaser * @param rebaser_ The address of the rebaser contract to use for authentication. */ function _setRebaser(address rebaser_) external onlyGov { address oldRebaser = rebaser; rebaser = rebaser_; emit NewRebaser(oldRebaser, rebaser_); } /** @notice sets the migrator * @param migrator_ The address of the migrator contract to use for authentication. */ function _setMigrator(address migrator_) external onlyGov { address oldMigrator = migrator_; migrator = migrator_; emit NewMigrator(oldMigrator, migrator_); } /** @notice sets the incentivizer * @param incentivizer_ The address of the rebaser contract to use for authentication. */ function _setIncentivizer(address incentivizer_) external onlyGov { address oldIncentivizer = incentivizer; incentivizer = incentivizer_; emit NewIncentivizer(oldIncentivizer, incentivizer_); } /** @notice sets the pendingGov * @param pendingGov_ The address of the rebaser contract to use for authentication. */ function _setPendingGov(address pendingGov_) external onlyGov { address oldPendingGov = pendingGov; pendingGov = pendingGov_; emit NewPendingGov(oldPendingGov, pendingGov_); } /** @notice lets msg.sender accept governance * */ function _acceptGov() external { require(msg.sender == pendingGov, "!pending"); address oldGov = gov; gov = pendingGov; pendingGov = address(0); emit NewGov(oldGov, gov); } /* - Extras - */ /** * @notice Initiates a new rebase operation, provided the minimum time period has elapsed. * * @dev The supply adjustment equals (totalSupply * DeviationFromTargetRate) / rebaseLag * Where DeviationFromTargetRate is (MarketOracleRate - targetRate) / targetRate * and targetRate is CpiOracleRate / baseCpi */ function rebase( uint256 epoch, uint256 indexDelta, bool positive ) external onlyRebaser returns (uint256) { // no change if (indexDelta == 0) { emit Rebase(epoch, yamsScalingFactor, yamsScalingFactor); return totalSupply; } // for events uint256 prevYamsScalingFactor = yamsScalingFactor; if (!positive) { // negative rebase, decrease scaling factor yamsScalingFactor = yamsScalingFactor.mul(BASE.sub(indexDelta)).div(BASE); } else { // positive reabse, increase scaling factor uint256 newScalingFactor = yamsScalingFactor.mul(BASE.add(indexDelta)).div(BASE); if (newScalingFactor < _maxScalingFactor()) { yamsScalingFactor = newScalingFactor; } else { yamsScalingFactor = _maxScalingFactor(); } } // update total supply, correctly totalSupply = _yamToFragment(initSupply); emit Rebase(epoch, prevYamsScalingFactor, yamsScalingFactor); return totalSupply; } function setRebase( uint256 epoch, uint256 value ) external onlyRebaser returns (uint256) { // no change if (value == yamsScalingFactor) { emit Rebase(epoch, yamsScalingFactor, yamsScalingFactor); return totalSupply; } // for events uint256 prevYamsScalingFactor = yamsScalingFactor; // positive reabse, increase scaling factor uint256 newScalingFactor = value; if (newScalingFactor < _maxScalingFactor()) { yamsScalingFactor = value; } else { yamsScalingFactor = _maxScalingFactor(); } // update total supply, correctly totalSupply = _yamToFragment(initSupply); emit Rebase(epoch, prevYamsScalingFactor, yamsScalingFactor); return totalSupply; } function yamToFragment(uint256 yam) external view returns (uint256) { return _yamToFragment(yam); } function fragmentToYam(uint256 value) external view returns (uint256) { return _fragmentToYam(value); } function _yamToFragment(uint256 yam) internal view returns (uint256) { return yam.mul(yamsScalingFactor).div(internalDecimals); } function _fragmentToYam(uint256 value) internal view returns (uint256) { return value.mul(internalDecimals).div(yamsScalingFactor); } // Rescue tokens function rescueTokens( address token, address to, uint256 amount ) external onlyGov returns (bool) { // transfer to SafeERC20.safeTransfer(IERC20(token), to, amount); return true; } } contract tPokt is ThunderPOKT { /** * @notice Initialize the new money market * @param name_ ERC-20 name of this token * @param symbol_ ERC-20 symbol of this token * @param decimals_ ERC-20 decimal precision of this token */ function initialize( string memory name_, string memory symbol_, uint8 decimals_, address initial_owner, uint256 initTotalSupply_ ) onlyGov public { super.initialize(name_, symbol_, decimals_); yamsScalingFactor = BASE; initSupply = _fragmentToYam(initTotalSupply_); totalSupply = initTotalSupply_; _yamBalances[initial_owner] = initSupply; DOMAIN_SEPARATOR = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name)), 3, address(this) ) ); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.7; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 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://diligence.consensys.net/posts/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.5.11/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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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 functionCall(target, data, "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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value:weiValue}(data); if (success) { return returndata; } else { // 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.7; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.7; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.7; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.7; import "./SafeMath.sol"; // Storage for a YAM token contract TokenStorage { using SafeMath for uint256; mapping (address => uint) public nonces; /** * @dev Guard variable for re-entrancy checks. Not currently used */ bool internal _notEntered; /** * @notice EIP-20 token name for this token */ string public name; /** * @notice EIP-20 token symbol for this token */ string public symbol; /** * @notice EIP-20 token decimals for this token */ uint8 public decimals; /** * @notice Governor for this contract */ address public gov; /** * @notice Pending governance for this contract */ address public pendingGov; /** * @notice Approved rebaser for this contract */ address public rebaser; /** * @notice Approved migrator for this contract */ address public migrator; /** * @notice Incentivizer address of YAM protocol */ address public incentivizer; /** * @notice Total supply of YAMs */ uint256 public totalSupply; /** * @notice Internal decimals used to handle scaling factor */ uint256 public constant internalDecimals = 10**24; /** * @notice Used for percentage maths */ uint256 public constant BASE = 10**18; /** * @notice Scaling factor that adjusts everyone's balances */ uint256 public yamsScalingFactor = BASE; mapping (address => uint256) internal _yamBalances; mapping (address => mapping (address => uint256)) internal _allowedFragments; uint256 public initSupply; bool public frozen; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; bytes32 public DOMAIN_SEPARATOR; bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"pokt_address","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGov","type":"address"},{"indexed":false,"internalType":"address","name":"newGov","type":"address"}],"name":"NewGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldIncentivizer","type":"address"},{"indexed":false,"internalType":"address","name":"newIncentivizer","type":"address"}],"name":"NewIncentivizer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldMigrator","type":"address"},{"indexed":false,"internalType":"address","name":"newMigrator","type":"address"}],"name":"NewMigrator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingGov","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingGov","type":"address"}],"name":"NewPendingGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRebaser","type":"address"},{"indexed":false,"internalType":"address","name":"newRebaser","type":"address"}],"name":"NewRebaser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prevYamsScalingFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newYamsScalingFactor","type":"uint256"}],"name":"Rebase","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_acceptGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"incentivizer_","type":"address"}],"name":"_setIncentivizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"migrator_","type":"address"}],"name":"_setMigrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingGov_","type":"address"}],"name":"_setPendingGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rebaser_","type":"address"}],"name":"_setRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"pokt_address","type":"address"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"fragmentToYam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"freeze","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"frozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"govTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"incentivizer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address","name":"initial_owner","type":"address"},{"internalType":"uint256","name":"initTotalSupply_","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"internalDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"indexDelta","type":"uint256"},{"internalType":"bool","name":"positive","type":"bool"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"yam","type":"uint256"}],"name":"yamToFragment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yamsScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052670de0b6b3a7640000600a5534801561001c57600080fd5b5033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614a05806100ae6000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c80636fc6407c11610151578063aacffefb116100c3578063dd62ed3e11610087578063dd62ed3e146107c9578063dee27b23146107f9578063ec342ad014610829578063f18d9b6314610847578063fa8f345514610877578063fcd3533c1461089357610274565b8063aacffefb146106ff578063b5bf15e51461072f578063b6fa85761461075f578063cea9d26f1461077d578063d505accf146107ad57610274565b80637ecebe00116101155780637ecebe001461061757806395d89b411461064757806397d63f931461066557806398dca21014610683578063a457c2d71461069f578063a9059cbb146106cf57610274565b80636fc6407c1461055f57806370a082311461057d57806373f03dff146105ad5780637af548c1146105c95780637cd07e47146105f957610274565b806325240810116101ea5780633af9e669116101ae5780633af9e6691461049f57806340c10f19146104cf57806347dfe70d146104ff5780634bda2e201461051b57806364dd48f5146105255780636c9452211461054357610274565b806325240810146103f757806330adf81f14610415578063313ce567146104335780633644e51514610451578063395093511461046f57610274565b806311fd8a831161023c57806311fd8a831461033357806312d43a51146103515780631624f6c61461036f57806318160ddd1461038b57806320606b70146103a957806323b872dd146103c757610274565b8063054f7d9c1461027957806306fdde0314610297578063095ea7b3146102b557806309c86403146102e557806311d3e6c414610315575b600080fd5b6102816108c3565b60405161028e9190613fc4565b60405180910390f35b61029f6108d6565b6040516102ac91906140e5565b60405180910390f35b6102cf60048036038101906102ca91906138c2565b610964565b6040516102dc9190613fc4565b60405180910390f35b6102ff60048036038101906102fa9190613a9a565b610a56565b60405161030c9190614287565b60405180910390f35b61031d610a68565b60405161032a9190614287565b60405180910390f35b61033b610a77565b6040516103489190613f20565b60405180910390f35b610359610a9d565b6040516103669190613f20565b60405180910390f35b6103896004803603810190610384919061395c565b610ac3565b005b610393610bb7565b6040516103a09190614287565b60405180910390f35b6103b1610bbd565b6040516103be9190613fdf565b60405180910390f35b6103e160048036038101906103dc91906137cd565b610be1565b6040516103ee9190613fc4565b60405180910390f35b6103ff610f65565b60405161040c9190613f20565b60405180910390f35b61041d610f8b565b60405161042a9190613fdf565b60405180910390f35b61043b610fb2565b60405161044891906142d9565b60405180910390f35b610459610fc5565b6040516104669190613fdf565b60405180910390f35b610489600480360381019061048491906138c2565b610fcb565b6040516104969190613fc4565b60405180910390f35b6104b960048036038101906104b49190613760565b61121c565b6040516104c69190614287565b60405180910390f35b6104e960048036038101906104e491906138c2565b611265565b6040516104f69190613fc4565b60405180910390f35b61051960048036038101906105149190613760565b611413565b005b6105236114f0565b005b61052d6116aa565b60405161053a9190614287565b60405180910390f35b61055d600480360381019061055891906139e7565b6116b8565b005b6105676117f9565b6040516105749190613f20565b60405180910390f35b61059760048036038101906105929190613760565b61181f565b6040516105a49190614287565b60405180910390f35b6105c760048036038101906105c29190613760565b611870565b005b6105e360048036038101906105de9190613b47565b61196f565b6040516105f09190614287565b60405180910390f35b610601611b52565b60405161060e9190613f20565b60405180910390f35b610631600480360381019061062c9190613760565b611b78565b60405161063e9190614287565b60405180910390f35b61064f611b90565b60405161065c91906140e5565b60405180910390f35b61066d611c1e565b60405161067a9190614287565b60405180910390f35b61069d60048036038101906106989190613760565b611c24565b005b6106b960048036038101906106b491906138c2565b611d23565b6040516106c69190613fc4565b60405180910390f35b6106e960048036038101906106e491906138c2565b612009565b6040516106f69190613fc4565b60405180910390f35b61071960048036038101906107149190613b07565b61227d565b6040516107269190614287565b60405180910390f35b61074960048036038101906107449190613902565b6123be565b6040516107569190613fc4565b60405180910390f35b61076761243d565b6040516107749190614287565b60405180910390f35b610797600480360381019061079291906137cd565b612443565b6040516107a49190613fc4565b60405180910390f35b6107c760048036038101906107c29190613820565b6124b5565b005b6107e360048036038101906107de919061378d565b61283e565b6040516107f09190614287565b60405180910390f35b610813600480360381019061080e91906137cd565b6128c5565b6040516108209190613fc4565b60405180910390f35b610831612b3e565b60405161083e9190614287565b60405180910390f35b610861600480360381019061085c9190613a9a565b612b4a565b60405161086e9190614287565b60405180910390f35b610891600480360381019061088c9190613760565b612b5c565b005b6108ad60048036038101906108a89190613ac7565b612c5b565b6040516108ba9190613fc4565b60405180910390f35b600e60009054906101000a900460ff1681565b600280546108e390614564565b80601f016020809104026020016040519081016040528092919081815260200182805461090f90614564565b801561095c5780601f106109315761010080835404028352916020019161095c565b820191906000526020600020905b81548152906001019060200180831161093f57829003601f168201915b505050505081565b600081600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a449190614287565b60405180910390a36001905092915050565b6000610a6182612cc6565b9050919050565b6000610a72612d00565b905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b1d57600080fd5b670de0b6b3a7640000600a5414610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090614167565b60405180910390fd5b8260029080519060200190610b7f9291906135cf565b508160039080519060200190610b969291906135cf565b5080600460006101000a81548160ff021916908360ff160217905550505050565b60095481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c1e57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c5757600080fd5b60001515600e60009054906101000a900460ff16151514610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca490614227565b60405180910390fd5b610d3c83600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610dc784612cc6565b9050610e1b81600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610eb081600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7f90919063ffffffff16565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610f509190614287565b60405180910390a36001925050509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b600460009054906101000a900460ff1681565b600f5481565b6000801515600e60009054906101000a900460ff16151514611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990614227565b60405180910390fd5b6110b182600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7f90919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161120a9190614287565b60405180910390a36001905092915050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113105750600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113685750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113c05750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f6906141e7565b60405180910390fd5b6114098383612ddd565b6001905092915050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461146d57600080fd5b600081905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99b2b7456799067566d467831e63363500739eac62c12ccb8cf9745078f06d2a81836040516114e4929190613f3b565b60405180910390a15050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906141c7565b60405180910390fd5b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d552381600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161169f929190613f3b565b60405180910390a150565b69d3c21bcecceda100000081565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461171257600080fd5b61171d858585610ac3565b670de0b6b3a7640000600a8190555061173581612cc6565b600d8190555080600981905550600d54600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86660026040516117b89190613ed2565b60405180910390206003306040516020016117d6949392919061405b565b60405160208183030381529060405280519060200120600f819055505050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611869600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa5565b9050919050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118ca57600080fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e8183604051611963929190613f3b565b60405180910390a15050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119cb57600080fd5b6000831415611a1d577fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c084600a54600a54604051611a0b939291906142a2565b60405180910390a16009549050611b4b565b6000600a54905082611a7d57611a72670de0b6b3a7640000611a64611a5387670de0b6b3a7640000612d3590919063ffffffff16565b600a54612fdf90919063ffffffff16565b61305a90919063ffffffff16565b600a81905550611af6565b6000611ac8670de0b6b3a7640000611aba611aa988670de0b6b3a7640000612d7f90919063ffffffff16565b600a54612fdf90919063ffffffff16565b61305a90919063ffffffff16565b9050611ad2612d00565b811015611ae55780600a81905550611af4565b611aed612d00565b600a819055505b505b611b01600d54612fa5565b6009819055507fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c08582600a54604051611b3c939291906142a2565b60405180910390a16009549150505b9392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006020528060005260406000206000915090505481565b60038054611b9d90614564565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc990614564565b8015611c165780601f10611beb57610100808354040283529160200191611c16565b820191906000526020600020905b815481529060010190602001808311611bf957829003601f168201915b505050505081565b600d5481565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c7e57600080fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2ee668ca7d17a9122dc00c0bfd73b684f2f7d681f17733cc02b294f69f1b38968183604051611d17929190613f3b565b60405180910390a15050565b6000801515600e60009054906101000a900460ff16151514611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190614227565b60405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310611e89576000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f1d565b611e9c8382612d3590919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051611ff69190614287565b60405180910390a3600191505092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561204657600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561207f57600080fd5b60001515600e60009054906101000a900460ff161515146120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90614227565b60405180910390fd5b60006120e084612cc6565b905061213481600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121c981600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7f90919063ffffffff16565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516122699190614287565b60405180910390a360019250505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122d957600080fd5b600a5482141561232c577fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c083600a54600a5460405161231a939291906142a2565b60405180910390a160095490506123b8565b6000600a5490506000839050612340612d00565b8110156123535783600a81905550612362565b61235b612d00565b600a819055505b61236d600d54612fa5565b6009819055507fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c08583600a546040516123a8939291906142a2565b60405180910390a1600954925050505b92915050565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461241a57600080fd5b81600e60006101000a81548160ff02191690831515021790555060019050919050565b600a5481565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461249f57600080fd5b6124aa8484846130a4565b600190509392505050565b60001515600e60009054906101000a900460ff1615151461250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290614227565b60405180910390fd5b8342111561254e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254590614187565b60405180910390fd5b6000600f547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b8989896000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906125c9906145c7565b919050558a6040516020016125e396959493929190613ffa565b6040516020818303038152906040528051906020012060405160200161260a929190613ee9565b604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415612692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268990614107565b60405180910390fd5b600181858585604051600081526020016040526040516126b594939291906140a0565b6020604051602081039080840390855afa1580156126d7573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614147565b60405180910390fd5b85600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258860405161282c9190614287565b60405180910390a35050505050505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561290257600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561293b57600080fd5b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461299557600080fd5b60006129a084612cc6565b90506129f481600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a8981600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7f90919063ffffffff16565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612b299190614287565b60405180910390a36001925050509392505050565b670de0b6b3a764000081565b6000612b5582612fa5565b9050919050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bb657600080fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f51f448520e2183de499e224808a409ee01a1f380edb2e8497572320c150305458183604051612c4f929190613f3b565b60405180910390a15050565b6000801515600e60009054906101000a900460ff16151514612cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca990614227565b60405180910390fd5b612cbc838361312a565b6001905092915050565b6000612cf9600a54612ceb69d3c21bcecceda100000085612fdf90919063ffffffff16565b61305a90919063ffffffff16565b9050919050565b6000600d547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612d3091906143f2565b905090565b6000612d7783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132f4565b905092915050565b6000808284612d8e919061439c565b905083811015612dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dca90614127565b60405180910390fd5b8091505092915050565b612df281600954612d7f90919063ffffffff16565b6009819055506000612e0382612cc6565b9050612e1a81600d54612d7f90919063ffffffff16565b600d81905550612e28612d00565b600a541115612e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6390614267565b60405180910390fd5b612ebe81600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7f90919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858383604051612f32929190613f64565b60405180910390a18273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f989190614287565b60405180910390a3505050565b6000612fd869d3c21bcecceda1000000612fca600a5485612fdf90919063ffffffff16565b61305a90919063ffffffff16565b9050919050565b600080831415612ff25760009050613054565b600082846130009190614423565b905082848261300f91906143f2565b1461304f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613046906141a7565b60405180910390fd5b809150505b92915050565b600061309c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613358565b905092915050565b6131258363a9059cbb60e01b84846040516024016130c3929190613f64565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506133bb565b505050565b61313f82600954612d3590919063ffffffff16565b600981905550600061315083612cc6565b905061316781600d54612d3590919063ffffffff16565b600d81905550613175612d00565b600a5411156131b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b090614267565b60405180910390fd5b61320b81600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c433848460405161328193929190613f8d565b60405180910390a1600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516132e79190614287565b60405180910390a3505050565b600083831115829061333c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333391906140e5565b60405180910390fd5b506000838561334b919061447d565b9050809150509392505050565b6000808311829061339f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339691906140e5565b60405180910390fd5b50600083856133ae91906143f2565b9050809150509392505050565b600061341d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166134829092919063ffffffff16565b905060008151111561347d578080602001905181019061343d919061392f565b61347c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347390614247565b60405180910390fd5b5b505050565b6060613491848460008561349a565b90509392505050565b60606134a5856135bc565b6134e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134db90614207565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161350d9190613ebb565b60006040518083038185875af1925050503d806000811461354a576040519150601f19603f3d011682016040523d82523d6000602084013e61354f565b606091505b509150915081156135645780925050506135b4565b6000815111156135775780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ab91906140e5565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b8280546135db90614564565b90600052602060002090601f0160209004810192826135fd5760008555613644565b82601f1061361657805160ff1916838001178555613644565b82800160010185558215613644579182015b82811115613643578251825591602001919060010190613628565b5b5090506136519190613655565b5090565b5b8082111561366e576000816000905550600101613656565b5090565b600061368561368084614319565b6142f4565b9050828152602081018484840111156136a1576136a06146db565b5b6136ac848285614522565b509392505050565b6000813590506136c38161495c565b92915050565b6000813590506136d881614973565b92915050565b6000815190506136ed81614973565b92915050565b6000813590506137028161498a565b92915050565b600082601f83011261371d5761371c6146d6565b5b813561372d848260208601613672565b91505092915050565b600081359050613745816149a1565b92915050565b60008135905061375a816149b8565b92915050565b600060208284031215613776576137756146e5565b5b6000613784848285016136b4565b91505092915050565b600080604083850312156137a4576137a36146e5565b5b60006137b2858286016136b4565b92505060206137c3858286016136b4565b9150509250929050565b6000806000606084860312156137e6576137e56146e5565b5b60006137f4868287016136b4565b9350506020613805868287016136b4565b925050604061381686828701613736565b9150509250925092565b600080600080600080600060e0888a03121561383f5761383e6146e5565b5b600061384d8a828b016136b4565b975050602061385e8a828b016136b4565b965050604061386f8a828b01613736565b95505060606138808a828b01613736565b94505060806138918a828b0161374b565b93505060a06138a28a828b016136f3565b92505060c06138b38a828b016136f3565b91505092959891949750929550565b600080604083850312156138d9576138d86146e5565b5b60006138e7858286016136b4565b92505060206138f885828601613736565b9150509250929050565b600060208284031215613918576139176146e5565b5b6000613926848285016136c9565b91505092915050565b600060208284031215613945576139446146e5565b5b6000613953848285016136de565b91505092915050565b600080600060608486031215613975576139746146e5565b5b600084013567ffffffffffffffff811115613993576139926146e0565b5b61399f86828701613708565b935050602084013567ffffffffffffffff8111156139c0576139bf6146e0565b5b6139cc86828701613708565b92505060406139dd8682870161374b565b9150509250925092565b600080600080600060a08688031215613a0357613a026146e5565b5b600086013567ffffffffffffffff811115613a2157613a206146e0565b5b613a2d88828901613708565b955050602086013567ffffffffffffffff811115613a4e57613a4d6146e0565b5b613a5a88828901613708565b9450506040613a6b8882890161374b565b9350506060613a7c888289016136b4565b9250506080613a8d88828901613736565b9150509295509295909350565b600060208284031215613ab057613aaf6146e5565b5b6000613abe84828501613736565b91505092915050565b60008060408385031215613ade57613add6146e5565b5b6000613aec85828601613736565b9250506020613afd858286016136b4565b9150509250929050565b60008060408385031215613b1e57613b1d6146e5565b5b6000613b2c85828601613736565b9250506020613b3d85828601613736565b9150509250929050565b600080600060608486031215613b6057613b5f6146e5565b5b6000613b6e86828701613736565b9350506020613b7f86828701613736565b9250506040613b90868287016136c9565b9150509250925092565b613ba3816144b1565b82525050565b613bb2816144c3565b82525050565b613bc1816144cf565b82525050565b613bd8613bd3826144cf565b614610565b82525050565b6000613be98261435f565b613bf38185614375565b9350613c03818560208601614531565b80840191505092915050565b60008154613c1c81614564565b613c268186614375565b94506001821660008114613c415760018114613c5257613c85565b60ff19831686528186019350613c85565b613c5b8561434a565b60005b83811015613c7d57815481890152600182019150602081019050613c5e565b838801955050505b50505092915050565b613c9781614510565b82525050565b6000613ca88261436a565b613cb28185614380565b9350613cc2818560208601614531565b613ccb816146ea565b840191505092915050565b6000613ce3601583614380565b9150613cee826146fb565b602082019050919050565b6000613d06600283614391565b9150613d1182614724565b600282019050919050565b6000613d29601b83614380565b9150613d348261474d565b602082019050919050565b6000613d4c601283614380565b9150613d5782614776565b602082019050919050565b6000613d6f601383614380565b9150613d7a8261479f565b602082019050919050565b6000613d92601283614380565b9150613d9d826147c8565b602082019050919050565b6000613db5602183614380565b9150613dc0826147f1565b604082019050919050565b6000613dd8600883614380565b9150613de382614840565b602082019050919050565b6000613dfb600a83614380565b9150613e0682614869565b602082019050919050565b6000613e1e601d83614380565b9150613e2982614892565b602082019050919050565b6000613e41600683614380565b9150613e4c826148bb565b602082019050919050565b6000613e64602a83614380565b9150613e6f826148e4565b604082019050919050565b6000613e87601a83614380565b9150613e9282614933565b602082019050919050565b613ea6816144f9565b82525050565b613eb581614503565b82525050565b6000613ec78284613bde565b915081905092915050565b6000613ede8284613c0f565b915081905092915050565b6000613ef482613cf9565b9150613f008285613bc7565b602082019150613f108284613bc7565b6020820191508190509392505050565b6000602082019050613f356000830184613b9a565b92915050565b6000604082019050613f506000830185613b9a565b613f5d6020830184613b9a565b9392505050565b6000604082019050613f796000830185613b9a565b613f866020830184613e9d565b9392505050565b6000606082019050613fa26000830186613b9a565b613faf6020830185613e9d565b613fbc6040830184613b9a565b949350505050565b6000602082019050613fd96000830184613ba9565b92915050565b6000602082019050613ff46000830184613bb8565b92915050565b600060c08201905061400f6000830189613bb8565b61401c6020830188613b9a565b6140296040830187613b9a565b6140366060830186613e9d565b6140436080830185613e9d565b61405060a0830184613e9d565b979650505050505050565b60006080820190506140706000830187613bb8565b61407d6020830186613bb8565b61408a6040830185613c8e565b6140976060830184613b9a565b95945050505050565b60006080820190506140b56000830187613bb8565b6140c26020830186613eac565b6140cf6040830185613bb8565b6140dc6060830184613bb8565b95945050505050565b600060208201905081810360008301526140ff8184613c9d565b905092915050565b6000602082019050818103600083015261412081613cd6565b9050919050565b6000602082019050818103600083015261414081613d1c565b9050919050565b6000602082019050818103600083015261416081613d3f565b9050919050565b6000602082019050818103600083015261418081613d62565b9050919050565b600060208201905081810360008301526141a081613d85565b9050919050565b600060208201905081810360008301526141c081613da8565b9050919050565b600060208201905081810360008301526141e081613dcb565b9050919050565b6000602082019050818103600083015261420081613dee565b9050919050565b6000602082019050818103600083015261422081613e11565b9050919050565b6000602082019050818103600083015261424081613e34565b9050919050565b6000602082019050818103600083015261426081613e57565b9050919050565b6000602082019050818103600083015261428081613e7a565b9050919050565b600060208201905061429c6000830184613e9d565b92915050565b60006060820190506142b76000830186613e9d565b6142c46020830185613e9d565b6142d16040830184613e9d565b949350505050565b60006020820190506142ee6000830184613eac565b92915050565b60006142fe61430f565b905061430a8282614596565b919050565b6000604051905090565b600067ffffffffffffffff821115614334576143336146a7565b5b61433d826146ea565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006143a7826144f9565b91506143b2836144f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143e7576143e661461a565b5b828201905092915050565b60006143fd826144f9565b9150614408836144f9565b92508261441857614417614649565b5b828204905092915050565b600061442e826144f9565b9150614439836144f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144725761447161461a565b5b828202905092915050565b6000614488826144f9565b9150614493836144f9565b9250828210156144a6576144a561461a565b5b828203905092915050565b60006144bc826144d9565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061451b82614503565b9050919050565b82818337600083830152505050565b60005b8381101561454f578082015181840152602081019050614534565b8381111561455e576000848401525b50505050565b6000600282049050600182168061457c57607f821691505b602082108114156145905761458f614678565b5b50919050565b61459f826146ea565b810181811067ffffffffffffffff821117156145be576145bd6146a7565b5b80604052505050565b60006145d2826144f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146055761460461461a565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f59414d2f696e76616c69642d616464726573732d300000000000000000000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f59414d2f696e76616c69642d7065726d69740000000000000000000000000000600082015250565b7f616c726561647920696e697469616c697a656400000000000000000000000000600082015250565b7f59414d2f7065726d69742d657870697265640000000000000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f2170656e64696e67000000000000000000000000000000000000000000000000600082015250565b7f6e6f74206d696e74657200000000000000000000000000000000000000000000600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f66726f7a656e0000000000000000000000000000000000000000000000000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f6d6178207363616c696e6720666163746f7220746f6f206c6f77000000000000600082015250565b614965816144b1565b811461497057600080fd5b50565b61497c816144c3565b811461498757600080fd5b50565b614993816144cf565b811461499e57600080fd5b50565b6149aa816144f9565b81146149b557600080fd5b50565b6149c181614503565b81146149cc57600080fd5b5056fea2646970667358221220599c6c4c7933aa65cb3ecb8f644536794cd850dc5bca49808de12d6f5cdc6aa164736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102745760003560e01c80636fc6407c11610151578063aacffefb116100c3578063dd62ed3e11610087578063dd62ed3e146107c9578063dee27b23146107f9578063ec342ad014610829578063f18d9b6314610847578063fa8f345514610877578063fcd3533c1461089357610274565b8063aacffefb146106ff578063b5bf15e51461072f578063b6fa85761461075f578063cea9d26f1461077d578063d505accf146107ad57610274565b80637ecebe00116101155780637ecebe001461061757806395d89b411461064757806397d63f931461066557806398dca21014610683578063a457c2d71461069f578063a9059cbb146106cf57610274565b80636fc6407c1461055f57806370a082311461057d57806373f03dff146105ad5780637af548c1146105c95780637cd07e47146105f957610274565b806325240810116101ea5780633af9e669116101ae5780633af9e6691461049f57806340c10f19146104cf57806347dfe70d146104ff5780634bda2e201461051b57806364dd48f5146105255780636c9452211461054357610274565b806325240810146103f757806330adf81f14610415578063313ce567146104335780633644e51514610451578063395093511461046f57610274565b806311fd8a831161023c57806311fd8a831461033357806312d43a51146103515780631624f6c61461036f57806318160ddd1461038b57806320606b70146103a957806323b872dd146103c757610274565b8063054f7d9c1461027957806306fdde0314610297578063095ea7b3146102b557806309c86403146102e557806311d3e6c414610315575b600080fd5b6102816108c3565b60405161028e9190613fc4565b60405180910390f35b61029f6108d6565b6040516102ac91906140e5565b60405180910390f35b6102cf60048036038101906102ca91906138c2565b610964565b6040516102dc9190613fc4565b60405180910390f35b6102ff60048036038101906102fa9190613a9a565b610a56565b60405161030c9190614287565b60405180910390f35b61031d610a68565b60405161032a9190614287565b60405180910390f35b61033b610a77565b6040516103489190613f20565b60405180910390f35b610359610a9d565b6040516103669190613f20565b60405180910390f35b6103896004803603810190610384919061395c565b610ac3565b005b610393610bb7565b6040516103a09190614287565b60405180910390f35b6103b1610bbd565b6040516103be9190613fdf565b60405180910390f35b6103e160048036038101906103dc91906137cd565b610be1565b6040516103ee9190613fc4565b60405180910390f35b6103ff610f65565b60405161040c9190613f20565b60405180910390f35b61041d610f8b565b60405161042a9190613fdf565b60405180910390f35b61043b610fb2565b60405161044891906142d9565b60405180910390f35b610459610fc5565b6040516104669190613fdf565b60405180910390f35b610489600480360381019061048491906138c2565b610fcb565b6040516104969190613fc4565b60405180910390f35b6104b960048036038101906104b49190613760565b61121c565b6040516104c69190614287565b60405180910390f35b6104e960048036038101906104e491906138c2565b611265565b6040516104f69190613fc4565b60405180910390f35b61051960048036038101906105149190613760565b611413565b005b6105236114f0565b005b61052d6116aa565b60405161053a9190614287565b60405180910390f35b61055d600480360381019061055891906139e7565b6116b8565b005b6105676117f9565b6040516105749190613f20565b60405180910390f35b61059760048036038101906105929190613760565b61181f565b6040516105a49190614287565b60405180910390f35b6105c760048036038101906105c29190613760565b611870565b005b6105e360048036038101906105de9190613b47565b61196f565b6040516105f09190614287565b60405180910390f35b610601611b52565b60405161060e9190613f20565b60405180910390f35b610631600480360381019061062c9190613760565b611b78565b60405161063e9190614287565b60405180910390f35b61064f611b90565b60405161065c91906140e5565b60405180910390f35b61066d611c1e565b60405161067a9190614287565b60405180910390f35b61069d60048036038101906106989190613760565b611c24565b005b6106b960048036038101906106b491906138c2565b611d23565b6040516106c69190613fc4565b60405180910390f35b6106e960048036038101906106e491906138c2565b612009565b6040516106f69190613fc4565b60405180910390f35b61071960048036038101906107149190613b07565b61227d565b6040516107269190614287565b60405180910390f35b61074960048036038101906107449190613902565b6123be565b6040516107569190613fc4565b60405180910390f35b61076761243d565b6040516107749190614287565b60405180910390f35b610797600480360381019061079291906137cd565b612443565b6040516107a49190613fc4565b60405180910390f35b6107c760048036038101906107c29190613820565b6124b5565b005b6107e360048036038101906107de919061378d565b61283e565b6040516107f09190614287565b60405180910390f35b610813600480360381019061080e91906137cd565b6128c5565b6040516108209190613fc4565b60405180910390f35b610831612b3e565b60405161083e9190614287565b60405180910390f35b610861600480360381019061085c9190613a9a565b612b4a565b60405161086e9190614287565b60405180910390f35b610891600480360381019061088c9190613760565b612b5c565b005b6108ad60048036038101906108a89190613ac7565b612c5b565b6040516108ba9190613fc4565b60405180910390f35b600e60009054906101000a900460ff1681565b600280546108e390614564565b80601f016020809104026020016040519081016040528092919081815260200182805461090f90614564565b801561095c5780601f106109315761010080835404028352916020019161095c565b820191906000526020600020905b81548152906001019060200180831161093f57829003601f168201915b505050505081565b600081600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a449190614287565b60405180910390a36001905092915050565b6000610a6182612cc6565b9050919050565b6000610a72612d00565b905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b1d57600080fd5b670de0b6b3a7640000600a5414610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090614167565b60405180910390fd5b8260029080519060200190610b7f9291906135cf565b508160039080519060200190610b969291906135cf565b5080600460006101000a81548160ff021916908360ff160217905550505050565b60095481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c1e57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c5757600080fd5b60001515600e60009054906101000a900460ff16151514610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca490614227565b60405180910390fd5b610d3c83600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610dc784612cc6565b9050610e1b81600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610eb081600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7f90919063ffffffff16565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610f509190614287565b60405180910390a36001925050509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b600460009054906101000a900460ff1681565b600f5481565b6000801515600e60009054906101000a900460ff16151514611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990614227565b60405180910390fd5b6110b182600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7f90919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161120a9190614287565b60405180910390a36001905092915050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113105750600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113685750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113c05750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f6906141e7565b60405180910390fd5b6114098383612ddd565b6001905092915050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461146d57600080fd5b600081905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99b2b7456799067566d467831e63363500739eac62c12ccb8cf9745078f06d2a81836040516114e4929190613f3b565b60405180910390a15050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906141c7565b60405180910390fd5b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d552381600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161169f929190613f3b565b60405180910390a150565b69d3c21bcecceda100000081565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461171257600080fd5b61171d858585610ac3565b670de0b6b3a7640000600a8190555061173581612cc6565b600d8190555080600981905550600d54600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86660026040516117b89190613ed2565b60405180910390206003306040516020016117d6949392919061405b565b60405160208183030381529060405280519060200120600f819055505050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611869600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa5565b9050919050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118ca57600080fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e8183604051611963929190613f3b565b60405180910390a15050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119cb57600080fd5b6000831415611a1d577fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c084600a54600a54604051611a0b939291906142a2565b60405180910390a16009549050611b4b565b6000600a54905082611a7d57611a72670de0b6b3a7640000611a64611a5387670de0b6b3a7640000612d3590919063ffffffff16565b600a54612fdf90919063ffffffff16565b61305a90919063ffffffff16565b600a81905550611af6565b6000611ac8670de0b6b3a7640000611aba611aa988670de0b6b3a7640000612d7f90919063ffffffff16565b600a54612fdf90919063ffffffff16565b61305a90919063ffffffff16565b9050611ad2612d00565b811015611ae55780600a81905550611af4565b611aed612d00565b600a819055505b505b611b01600d54612fa5565b6009819055507fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c08582600a54604051611b3c939291906142a2565b60405180910390a16009549150505b9392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006020528060005260406000206000915090505481565b60038054611b9d90614564565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc990614564565b8015611c165780601f10611beb57610100808354040283529160200191611c16565b820191906000526020600020905b815481529060010190602001808311611bf957829003601f168201915b505050505081565b600d5481565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c7e57600080fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2ee668ca7d17a9122dc00c0bfd73b684f2f7d681f17733cc02b294f69f1b38968183604051611d17929190613f3b565b60405180910390a15050565b6000801515600e60009054906101000a900460ff16151514611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190614227565b60405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310611e89576000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f1d565b611e9c8382612d3590919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051611ff69190614287565b60405180910390a3600191505092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561204657600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561207f57600080fd5b60001515600e60009054906101000a900460ff161515146120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90614227565b60405180910390fd5b60006120e084612cc6565b905061213481600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121c981600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7f90919063ffffffff16565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516122699190614287565b60405180910390a360019250505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122d957600080fd5b600a5482141561232c577fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c083600a54600a5460405161231a939291906142a2565b60405180910390a160095490506123b8565b6000600a5490506000839050612340612d00565b8110156123535783600a81905550612362565b61235b612d00565b600a819055505b61236d600d54612fa5565b6009819055507fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c08583600a546040516123a8939291906142a2565b60405180910390a1600954925050505b92915050565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461241a57600080fd5b81600e60006101000a81548160ff02191690831515021790555060019050919050565b600a5481565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461249f57600080fd5b6124aa8484846130a4565b600190509392505050565b60001515600e60009054906101000a900460ff1615151461250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290614227565b60405180910390fd5b8342111561254e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254590614187565b60405180910390fd5b6000600f547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b8989896000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906125c9906145c7565b919050558a6040516020016125e396959493929190613ffa565b6040516020818303038152906040528051906020012060405160200161260a929190613ee9565b604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415612692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268990614107565b60405180910390fd5b600181858585604051600081526020016040526040516126b594939291906140a0565b6020604051602081039080840390855afa1580156126d7573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614147565b60405180910390fd5b85600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258860405161282c9190614287565b60405180910390a35050505050505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561290257600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561293b57600080fd5b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461299557600080fd5b60006129a084612cc6565b90506129f481600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a8981600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7f90919063ffffffff16565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612b299190614287565b60405180910390a36001925050509392505050565b670de0b6b3a764000081565b6000612b5582612fa5565b9050919050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bb657600080fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f51f448520e2183de499e224808a409ee01a1f380edb2e8497572320c150305458183604051612c4f929190613f3b565b60405180910390a15050565b6000801515600e60009054906101000a900460ff16151514612cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca990614227565b60405180910390fd5b612cbc838361312a565b6001905092915050565b6000612cf9600a54612ceb69d3c21bcecceda100000085612fdf90919063ffffffff16565b61305a90919063ffffffff16565b9050919050565b6000600d547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612d3091906143f2565b905090565b6000612d7783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132f4565b905092915050565b6000808284612d8e919061439c565b905083811015612dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dca90614127565b60405180910390fd5b8091505092915050565b612df281600954612d7f90919063ffffffff16565b6009819055506000612e0382612cc6565b9050612e1a81600d54612d7f90919063ffffffff16565b600d81905550612e28612d00565b600a541115612e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6390614267565b60405180910390fd5b612ebe81600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7f90919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858383604051612f32929190613f64565b60405180910390a18273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f989190614287565b60405180910390a3505050565b6000612fd869d3c21bcecceda1000000612fca600a5485612fdf90919063ffffffff16565b61305a90919063ffffffff16565b9050919050565b600080831415612ff25760009050613054565b600082846130009190614423565b905082848261300f91906143f2565b1461304f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613046906141a7565b60405180910390fd5b809150505b92915050565b600061309c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613358565b905092915050565b6131258363a9059cbb60e01b84846040516024016130c3929190613f64565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506133bb565b505050565b61313f82600954612d3590919063ffffffff16565b600981905550600061315083612cc6565b905061316781600d54612d3590919063ffffffff16565b600d81905550613175612d00565b600a5411156131b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b090614267565b60405180910390fd5b61320b81600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c433848460405161328193929190613f8d565b60405180910390a1600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516132e79190614287565b60405180910390a3505050565b600083831115829061333c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333391906140e5565b60405180910390fd5b506000838561334b919061447d565b9050809150509392505050565b6000808311829061339f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339691906140e5565b60405180910390fd5b50600083856133ae91906143f2565b9050809150509392505050565b600061341d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166134829092919063ffffffff16565b905060008151111561347d578080602001905181019061343d919061392f565b61347c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347390614247565b60405180910390fd5b5b505050565b6060613491848460008561349a565b90509392505050565b60606134a5856135bc565b6134e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134db90614207565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161350d9190613ebb565b60006040518083038185875af1925050503d806000811461354a576040519150601f19603f3d011682016040523d82523d6000602084013e61354f565b606091505b509150915081156135645780925050506135b4565b6000815111156135775780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ab91906140e5565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b8280546135db90614564565b90600052602060002090601f0160209004810192826135fd5760008555613644565b82601f1061361657805160ff1916838001178555613644565b82800160010185558215613644579182015b82811115613643578251825591602001919060010190613628565b5b5090506136519190613655565b5090565b5b8082111561366e576000816000905550600101613656565b5090565b600061368561368084614319565b6142f4565b9050828152602081018484840111156136a1576136a06146db565b5b6136ac848285614522565b509392505050565b6000813590506136c38161495c565b92915050565b6000813590506136d881614973565b92915050565b6000815190506136ed81614973565b92915050565b6000813590506137028161498a565b92915050565b600082601f83011261371d5761371c6146d6565b5b813561372d848260208601613672565b91505092915050565b600081359050613745816149a1565b92915050565b60008135905061375a816149b8565b92915050565b600060208284031215613776576137756146e5565b5b6000613784848285016136b4565b91505092915050565b600080604083850312156137a4576137a36146e5565b5b60006137b2858286016136b4565b92505060206137c3858286016136b4565b9150509250929050565b6000806000606084860312156137e6576137e56146e5565b5b60006137f4868287016136b4565b9350506020613805868287016136b4565b925050604061381686828701613736565b9150509250925092565b600080600080600080600060e0888a03121561383f5761383e6146e5565b5b600061384d8a828b016136b4565b975050602061385e8a828b016136b4565b965050604061386f8a828b01613736565b95505060606138808a828b01613736565b94505060806138918a828b0161374b565b93505060a06138a28a828b016136f3565b92505060c06138b38a828b016136f3565b91505092959891949750929550565b600080604083850312156138d9576138d86146e5565b5b60006138e7858286016136b4565b92505060206138f885828601613736565b9150509250929050565b600060208284031215613918576139176146e5565b5b6000613926848285016136c9565b91505092915050565b600060208284031215613945576139446146e5565b5b6000613953848285016136de565b91505092915050565b600080600060608486031215613975576139746146e5565b5b600084013567ffffffffffffffff811115613993576139926146e0565b5b61399f86828701613708565b935050602084013567ffffffffffffffff8111156139c0576139bf6146e0565b5b6139cc86828701613708565b92505060406139dd8682870161374b565b9150509250925092565b600080600080600060a08688031215613a0357613a026146e5565b5b600086013567ffffffffffffffff811115613a2157613a206146e0565b5b613a2d88828901613708565b955050602086013567ffffffffffffffff811115613a4e57613a4d6146e0565b5b613a5a88828901613708565b9450506040613a6b8882890161374b565b9350506060613a7c888289016136b4565b9250506080613a8d88828901613736565b9150509295509295909350565b600060208284031215613ab057613aaf6146e5565b5b6000613abe84828501613736565b91505092915050565b60008060408385031215613ade57613add6146e5565b5b6000613aec85828601613736565b9250506020613afd858286016136b4565b9150509250929050565b60008060408385031215613b1e57613b1d6146e5565b5b6000613b2c85828601613736565b9250506020613b3d85828601613736565b9150509250929050565b600080600060608486031215613b6057613b5f6146e5565b5b6000613b6e86828701613736565b9350506020613b7f86828701613736565b9250506040613b90868287016136c9565b9150509250925092565b613ba3816144b1565b82525050565b613bb2816144c3565b82525050565b613bc1816144cf565b82525050565b613bd8613bd3826144cf565b614610565b82525050565b6000613be98261435f565b613bf38185614375565b9350613c03818560208601614531565b80840191505092915050565b60008154613c1c81614564565b613c268186614375565b94506001821660008114613c415760018114613c5257613c85565b60ff19831686528186019350613c85565b613c5b8561434a565b60005b83811015613c7d57815481890152600182019150602081019050613c5e565b838801955050505b50505092915050565b613c9781614510565b82525050565b6000613ca88261436a565b613cb28185614380565b9350613cc2818560208601614531565b613ccb816146ea565b840191505092915050565b6000613ce3601583614380565b9150613cee826146fb565b602082019050919050565b6000613d06600283614391565b9150613d1182614724565b600282019050919050565b6000613d29601b83614380565b9150613d348261474d565b602082019050919050565b6000613d4c601283614380565b9150613d5782614776565b602082019050919050565b6000613d6f601383614380565b9150613d7a8261479f565b602082019050919050565b6000613d92601283614380565b9150613d9d826147c8565b602082019050919050565b6000613db5602183614380565b9150613dc0826147f1565b604082019050919050565b6000613dd8600883614380565b9150613de382614840565b602082019050919050565b6000613dfb600a83614380565b9150613e0682614869565b602082019050919050565b6000613e1e601d83614380565b9150613e2982614892565b602082019050919050565b6000613e41600683614380565b9150613e4c826148bb565b602082019050919050565b6000613e64602a83614380565b9150613e6f826148e4565b604082019050919050565b6000613e87601a83614380565b9150613e9282614933565b602082019050919050565b613ea6816144f9565b82525050565b613eb581614503565b82525050565b6000613ec78284613bde565b915081905092915050565b6000613ede8284613c0f565b915081905092915050565b6000613ef482613cf9565b9150613f008285613bc7565b602082019150613f108284613bc7565b6020820191508190509392505050565b6000602082019050613f356000830184613b9a565b92915050565b6000604082019050613f506000830185613b9a565b613f5d6020830184613b9a565b9392505050565b6000604082019050613f796000830185613b9a565b613f866020830184613e9d565b9392505050565b6000606082019050613fa26000830186613b9a565b613faf6020830185613e9d565b613fbc6040830184613b9a565b949350505050565b6000602082019050613fd96000830184613ba9565b92915050565b6000602082019050613ff46000830184613bb8565b92915050565b600060c08201905061400f6000830189613bb8565b61401c6020830188613b9a565b6140296040830187613b9a565b6140366060830186613e9d565b6140436080830185613e9d565b61405060a0830184613e9d565b979650505050505050565b60006080820190506140706000830187613bb8565b61407d6020830186613bb8565b61408a6040830185613c8e565b6140976060830184613b9a565b95945050505050565b60006080820190506140b56000830187613bb8565b6140c26020830186613eac565b6140cf6040830185613bb8565b6140dc6060830184613bb8565b95945050505050565b600060208201905081810360008301526140ff8184613c9d565b905092915050565b6000602082019050818103600083015261412081613cd6565b9050919050565b6000602082019050818103600083015261414081613d1c565b9050919050565b6000602082019050818103600083015261416081613d3f565b9050919050565b6000602082019050818103600083015261418081613d62565b9050919050565b600060208201905081810360008301526141a081613d85565b9050919050565b600060208201905081810360008301526141c081613da8565b9050919050565b600060208201905081810360008301526141e081613dcb565b9050919050565b6000602082019050818103600083015261420081613dee565b9050919050565b6000602082019050818103600083015261422081613e11565b9050919050565b6000602082019050818103600083015261424081613e34565b9050919050565b6000602082019050818103600083015261426081613e57565b9050919050565b6000602082019050818103600083015261428081613e7a565b9050919050565b600060208201905061429c6000830184613e9d565b92915050565b60006060820190506142b76000830186613e9d565b6142c46020830185613e9d565b6142d16040830184613e9d565b949350505050565b60006020820190506142ee6000830184613eac565b92915050565b60006142fe61430f565b905061430a8282614596565b919050565b6000604051905090565b600067ffffffffffffffff821115614334576143336146a7565b5b61433d826146ea565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006143a7826144f9565b91506143b2836144f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143e7576143e661461a565b5b828201905092915050565b60006143fd826144f9565b9150614408836144f9565b92508261441857614417614649565b5b828204905092915050565b600061442e826144f9565b9150614439836144f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144725761447161461a565b5b828202905092915050565b6000614488826144f9565b9150614493836144f9565b9250828210156144a6576144a561461a565b5b828203905092915050565b60006144bc826144d9565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061451b82614503565b9050919050565b82818337600083830152505050565b60005b8381101561454f578082015181840152602081019050614534565b8381111561455e576000848401525b50505050565b6000600282049050600182168061457c57607f821691505b602082108114156145905761458f614678565b5b50919050565b61459f826146ea565b810181811067ffffffffffffffff821117156145be576145bd6146a7565b5b80604052505050565b60006145d2826144f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146055761460461461a565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f59414d2f696e76616c69642d616464726573732d300000000000000000000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f59414d2f696e76616c69642d7065726d69740000000000000000000000000000600082015250565b7f616c726561647920696e697469616c697a656400000000000000000000000000600082015250565b7f59414d2f7065726d69742d657870697265640000000000000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f2170656e64696e67000000000000000000000000000000000000000000000000600082015250565b7f6e6f74206d696e74657200000000000000000000000000000000000000000000600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f66726f7a656e0000000000000000000000000000000000000000000000000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f6d6178207363616c696e6720666163746f7220746f6f206c6f77000000000000600082015250565b614965816144b1565b811461497057600080fd5b50565b61497c816144c3565b811461498757600080fd5b50565b614993816144cf565b811461499e57600080fd5b50565b6149aa816144f9565b81146149b557600080fd5b50565b6149c181614503565b81146149cc57600080fd5b5056fea2646970667358221220599c6c4c7933aa65cb3ecb8f644536794cd850dc5bca49808de12d6f5cdc6aa164736f6c63430008070033
Deployed Bytecode Sourcemap
17852:921:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1710:18:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;401;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9934:228:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17059:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3133:131;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;864:22:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;673:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2759:298:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1144:26:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1991:122;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6998:574:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;766:25:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1840:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;587:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1954:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10526:355:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8701:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3918:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13259:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14282:228;;;:::i;:::-;;1256:49:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18110:661:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1058:27:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8383:141:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13988:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14887:1155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;960:23:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;172:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;492:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1678:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13608:241:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11135:520;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5003:740;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16048:860;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3608:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1492:39:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17583:265:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11698:1060;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9135:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7821:450;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1369:37:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16914:139:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12927:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5749:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1710:18:5;;;;;;;;;;;;;:::o;401:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9934:228:4:-;10017:4;10078:5;10037:17;:29;10055:10;10037:29;;;;;;;;;;;;;;;:38;10067:7;10037:38;;;;;;;;;;;;;;;:46;;;;10119:7;10098:36;;10107:10;10098:36;;;10128:5;10098:36;;;;;;:::i;:::-;;;;;;;;10151:4;10144:11;;9934:228;;;;:::o;17059:143::-;17144:7;17174:21;17189:5;17174:14;:21::i;:::-;17167:28;;17059:143;;;:::o;3133:131::-;3208:7;3238:19;:17;:19::i;:::-;3231:26;;3133:131;:::o;864:22:5:-;;;;;;;;;;;;;:::o;673:18::-;;;;;;;;;;;;;:::o;2759:298:4:-;2175:3;;;;;;;;;;;2161:17;;:10;:17;;;2153:26;;;;;;1400:6:5::1;2923:17:4;;:25;2915:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;2989:5;2982:4;:12;;;;;;;;;;;;:::i;:::-;;3013:7;3004:6;:16;;;;;;;;;;;;:::i;:::-;;3041:9;3030:8;;:20;;;;;;;;;;;;;;;;;;2759:298:::0;;;:::o;1144:26:5:-;;;;:::o;1991:122::-;2033:80;1991:122;:::o;6998:574:4:-;7140:4;7101:2;2692:3;2678:18;;:2;:18;;;;2670:27;;;;;;2729:4;2715:19;;:2;:19;;;;2707:28;;;;;;2584:5:::1;2576:13;;:6;;;;;;;;;;;:13;;;2568:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;7228:46:::2;7268:5;7228:17;:23;7246:4;7228:23;;;;;;;;;;;;;;;:35;7252:10;7228:35;;;;;;;;;;;;;;;;:39;;:46;;;;:::i;:::-;7190:17;:23;7208:4;7190:23;;;;;;;;;;;;;;;:35;7214:10;7190:35;;;;;;;;;;;;;;;:84;;;;7315:16;7334:21;7349:5;7334:14;:21::i;:::-;7315:40;;7412:32;7435:8;7412:12;:18;7425:4;7412:18;;;;;;;;;;;;;;;;:22;;:32;;;;:::i;:::-;7391:12;:18;7404:4;7391:18;;;;;;;;;;;;;;;:53;;;;7473:30;7494:8;7473:12;:16;7486:2;7473:16;;;;;;;;;;;;;;;;:20;;:30;;;;:::i;:::-;7454:12;:16;7467:2;7454:16;;;;;;;;;;;;;;;:49;;;;7533:2;7518:25;;7527:4;7518:25;;;7537:5;7518:25;;;;;;:::i;:::-;;;;;;;;7561:4;7554:11;;;6998:574:::0;;;;;;:::o;766:25:5:-;;;;;;;;;;;;;:::o;1840:108::-;1882:66;1840:108;;;:::o;587:21::-;;;;;;;;;;;;;:::o;1954:31::-;;;;:::o;10526:355:4:-;10642:4;2584:5;2576:13;;:6;;;;;;;;;;;:13;;;2568:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;10715:54:::1;10758:10;10715:17;:29;10733:10;10715:29;;;;;;;;;;;;;;;:38;10745:7;10715:38;;;;;;;;;;;;;;;;:42;;:54;;;;:::i;:::-;10662:17;:29;10680:10;10662:29;;;;;;;;;;;;;;;:38;10692:7;10662:38;;;;;;;;;;;;;;;:107;;;;10805:7;10784:69;;10793:10;10784:69;;;10814:17;:29;10832:10;10814:29;;;;;;;;;;;;;;;:38;10844:7;10814:38;;;;;;;;;;;;;;;;10784:69;;;;;;:::i;:::-;;;;;;;;10870:4;10863:11;;10526:355:::0;;;;:::o;8701:135::-;8784:7;8812:12;:17;8825:3;8812:17;;;;;;;;;;;;;;;;8805:24;;8701:135;;;:::o;3918:160::-;4013:4;2357:7;;;;;;;;;;;2343:21;;:10;:21;;;:54;;;;2394:3;;;;;;;;;;;2380:17;;:10;:17;;;2343:54;:96;;;;2427:12;;;;;;;;;;;2413:26;;:10;:26;;;2343:96;:134;;;;2469:8;;;;;;;;;;;2455:22;;:10;:22;;;2343:134;2322:191;;;;;;;;;;;;:::i;:::-;;;;;;;;;4033:17:::1;4039:2;4043:6;4033:5;:17::i;:::-;4067:4;4060:11;;3918:160:::0;;;;:::o;13259:206::-;2175:3;;;;;;;;;;;2161:17;;:10;:17;;;2153:26;;;;;;13347:19:::1;13369:9;13347:31;;13399:9;13388:8;;:20;;;;;;;;;;;;;;;;;;13423:35;13435:11;13448:9;13423:35;;;;;;;:::i;:::-;;;;;;;;13337:128;13259:206:::0;:::o;14282:228::-;14357:10;;;;;;;;;;;14343:24;;:10;:24;;;14335:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;14390:14;14407:3;;;;;;;;;;;14390:20;;14426:10;;;;;;;;;;;14420:3;;:16;;;;;;;;;;;;;;;;;;14467:1;14446:10;;:23;;;;;;;;;;;;;;;;;;14484:19;14491:6;14499:3;;;;;;;;;;;14484:19;;;;;;;:::i;:::-;;;;;;;;14325:185;14282:228::o;1256:49:5:-;1299:6;1256:49;:::o;18110:661:4:-;2175:3;;;;;;;;;;;2161:17;;:10;:17;;;2153:26;;;;;;18331:43:::1;18348:5;18355:7;18364:9;18331:16;:43::i;:::-;1400:6:5;18385:17:4;:24;;;;18432:32;18447:16;18432:14;:32::i;:::-;18419:10;:45;;;;18488:16;18474:11;:30;;;;18544:10;;18514:12;:27;18527:13;18514:27;;;;;;;;;;;;;;;:40;;;;2033:80:5;18684:4:4;18668:22;;;;;;:::i;:::-;;;;;;;;18708:1;18735:4;18607:147;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18584:180;;;;;;18565:16;:199;;;;18110:661:::0;;;;;:::o;1058:27:5:-;;;;;;;;;;;;;:::o;8383:141:4:-;8456:7;8484:33;8499:12;:17;8512:3;8499:17;;;;;;;;;;;;;;;;8484:14;:33::i;:::-;8477:40;;8383:141;;;:::o;13988:223::-;2175:3;;;;;;;;;;;2161:17;;:10;:17;;;2153:26;;;;;;14080:21:::1;14104:10;;;;;;;;;;;14080:34;;14137:11;14124:10;;:24;;;;;;;;;;;;;;;;;;14163:41;14177:13;14192:11;14163:41;;;;;;;:::i;:::-;;;;;;;;14070:141;13988:223:::0;:::o;14887:1155::-;15037:7;2258;;;;;;;;;;;2244:21;;:10;:21;;;2236:30;;;;;;15099:1:::1;15085:10;:15;15081:130;;;15119:51;15126:5;15133:17;;15152;;15119:51;;;;;;;;:::i;:::-;;;;;;;;15189:11;;15182:18;;;;15081:130;15243:29;15275:17;;15243:49;;15309:8;15304:540;;15409:53;1400:6:5;15409:43:4;15431:20;15440:10;1400:6:5;15431:8:4;;:20;;;;:::i;:::-;15409:17;;:21;;:43;;;;:::i;:::-;:47;;:53;;;;:::i;:::-;15389:17;:73;;;;15304:540;;;15549:24;15576:53;1400:6:5;15576:43:4;15598:20;15607:10;1400:6:5;15598:8:4;;:20;;;;:::i;:::-;15576:17;;:21;;:43;;;;:::i;:::-;:47;;:53;;;;:::i;:::-;15549:80;;15666:19;:17;:19::i;:::-;15647:16;:38;15643:191;;;15725:16;15705:17;:36;;;;15643:191;;;15800:19;:17;:19::i;:::-;15780:17;:39;;;;15643:191;15479:365;15304:540;15910:26;15925:10;;15910:14;:26::i;:::-;15896:11;:40;;;;15952:55;15959:5;15966:21;15989:17;;15952:55;;;;;;;;:::i;:::-;;;;;;;;16024:11;;16017:18;;;2276:1;14887:1155:::0;;;;;:::o;960:23:5:-;;;;;;;;;;;;;:::o;172:39::-;;;;;;;;;;;;;;;;;:::o;492:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1678:25::-;;;;:::o;13608:241:4:-;2175:3;;;;;;;;;;;2161:17;;:10;:17;;;2153:26;;;;;;13704:23:::1;13730:12;;;;;;;;;;;13704:38;;13767:13;13752:12;;:28;;;;;;;;;;;;;;;;;;13795:47;13811:15;13828:13;13795:47;;;;;;;:::i;:::-;;;;;;;;13694:155;13608:241:::0;:::o;11135:520::-;11256:4;2584:5;2576:13;;:6;;;;;;;;;;;:13;;;2568:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;11276:16:::1;11295:17;:29;11313:10;11295:29;;;;;;;;;;;;;;;:38;11325:7;11295:38;;;;;;;;;;;;;;;;11276:57;;11366:8;11347:15;:27;11343:201;;11431:1;11390:17;:29;11408:10;11390:29;;;;;;;;;;;;;;;:38;11420:7;11390:38;;;;;;;;;;;;;;;:42;;;;11343:201;;;11504:29;11517:15;11504:8;:12;;:29;;;;:::i;:::-;11463:17;:29;11481:10;11463:29;;;;;;;;;;;;;;;:38;11493:7;11463:38;;;;;;;;;;;;;;;:70;;;;11343:201;11579:7;11558:69;;11567:10;11558:69;;;11588:17;:29;11606:10;11588:29;;;;;;;;;;;;;;;:38;11618:7;11588:38;;;;;;;;;;;;;;;;11558:69;;;;;;:::i;:::-;;;;;;;;11644:4;11637:11;;;11135:520:::0;;;;:::o;5003:740::-;5127:4;5088:2;2692:3;2678:18;;:2;:18;;;;2670:27;;;;;;2729:4;2715:19;;:2;:19;;;;2707:28;;;;;;2584:5:::1;2576:13;;:6;;;;;;;;;;;:13;;;2568:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;5416:16:::2;5435:21;5450:5;5435:14;:21::i;:::-;5416:40;;5532:38;5561:8;5532:12;:24;5545:10;5532:24;;;;;;;;;;;;;;;;:28;;:38;;;;:::i;:::-;5505:12;:24;5518:10;5505:24;;;;;;;;;;;;;;;:65;;;;5638:30;5659:8;5638:12;:16;5651:2;5638:16;;;;;;;;;;;;;;;;:20;;:30;;;;:::i;:::-;5619:12;:16;5632:2;5619:16;;;;;;;;;;;;;;;:49;;;;5704:2;5683:31;;5692:10;5683:31;;;5708:5;5683:31;;;;;;:::i;:::-;;;;;;;;5732:4;5725:11;;;5003:740:::0;;;;;:::o;16048:860::-;16173:7;2258;;;;;;;;;;;2244:21;;:10;:21;;;2236:30;;;;;;16230:17:::1;;16221:5;:26;16217:141;;;16266:51;16273:5;16280:17;;16299;;16266:51;;;;;;;;:::i;:::-;;;;;;;;16336:11;;16329:18;;;;16217:141;16390:29;16422:17;;16390:49;;16504:24;16531:5;16504:32;;16569:19;:17;:19::i;:::-;16550:16;:38;16546:164;;;16624:5;16604:17;:25;;;;16546:164;;;16680:19;:17;:19::i;:::-;16660:17;:39;;;;16546:164;16776:26;16791:10;;16776:14;:26::i;:::-;16762:11;:40;;;;16818:55;16825:5;16832:21;16855:17;;16818:55;;;;;;;;:::i;:::-;;;;;;;;16890:11;;16883:18;;;;2276:1;16048:860:::0;;;;:::o;3608:158::-;3687:4;2175:3;;;;;;;;;;;2161:17;;:10;:17;;;2153:26;;;;;;3724:6:::1;3715;;:15;;;;;;;;;;;;;;;;;;3751:4;3744:11;;3608:158:::0;;;:::o;1492:39:5:-;;;;:::o;17583:265:4:-;17728:4;2175:3;;;;;;;;;;;2161:17;;:10;:17;;;2153:26;;;;;;17771:49:::1;17801:5;17809:2;17813:6;17771:22;:49::i;:::-;17837:4;17830:11;;17583:265:::0;;;;;:::o;11698:1060::-;2584:5;2576:13;;:6;;;;;;;;;;;:13;;;2568:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;11948:8:::1;11929:15;:27;;11921:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;11990:14;12116:16;;1882:66:5;12229:15:4;;12274:5;12309:7;12346:5;12381:6;:13:::0;12388:5:::1;12381:13;;;;;;;;;;;;;;;;:15;;;;;;;;;:::i;:::-;;;;;12426:8;12189:271;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12154:328;;;;;;12046:454;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12019:495;;;;;;11990:524;;12550:1;12533:19;;:5;:19;;;;12525:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;12605:26;12615:6;12623:1;12626;12629;12605:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12596:35;;:5;:35;;;12588:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12700:5;12664:17;:24;12682:5;12664:24;;;;;;;;;;;;;;;:33;12689:7;12664:33;;;;;;;;;;;;;;;:41;;;;12736:7;12720:31;;12729:5;12720:31;;;12745:5;12720:31;;;;;;:::i;:::-;;;;;;;;11911:847;11698:1060:::0;;;;;;;:::o;9135:170::-;9234:7;9264:17;:25;9282:6;9264:25;;;;;;;;;;;;;;;:34;9290:7;9264:34;;;;;;;;;;;;;;;;9257:41;;9135:170;;;;:::o;7821:450::-;7964:4;7927:2;2692:3;2678:18;;:2;:18;;;;2670:27;;;;;;2729:4;2715:19;;:2;:19;;;;2707:28;;;;;;2175:3:::1;;;;;;;;;;;2161:17;;:10;:17;;;2153:26;;;::::0;::::1;;8014:16:::2;8033:21;8048:5;8033:14;:21::i;:::-;8014:40;;8111:32;8134:8;8111:12;:18;8124:4;8111:18;;;;;;;;;;;;;;;;:22;;:32;;;;:::i;:::-;8090:12;:18;8103:4;8090:18;;;;;;;;;;;;;;;:53;;;;8172:30;8193:8;8172:12;:16;8185:2;8172:16;;;;;;;;;;;;;;;;:20;;:30;;;;:::i;:::-;8153:12;:16;8166:2;8153:16;;;;;;;;;;;;;;;:49;;;;8232:2;8217:25;;8226:4;8217:25;;;8236:5;8217:25;;;;;;:::i;:::-;;;;;;;;8260:4;8253:11;;;7821:450:::0;;;;;;:::o;1369:37:5:-;1400:6;1369:37;:::o;16914:139:4:-;16997:7;17027:19;17042:3;17027:14;:19::i;:::-;17020:26;;16914:139;;;:::o;12927:196::-;2175:3;;;;;;;;;;;2161:17;;:10;:17;;;2153:26;;;;;;13013:18:::1;13034:7;;;;;;;;;;;13013:28;;13061:8;13051:7;;:18;;;;;;;;;;;;;;;;;;13084:32;13095:10;13107:8;13084:32;;;;;;;:::i;:::-;;;;;;;;13003:120;12927:196:::0;:::o;5749:176::-;5852:4;2584:5;2576:13;;:6;;;;;;;;;;;:13;;;2568:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;5872:25:::1;5878:5;5884:12;5872:5;:25::i;:::-;5914:4;5907:11;;5749:176:::0;;;;:::o;17383:173::-;17469:7;17499:50;17531:17;;17499:27;1299:6:5;17499:5:4;:9;;:27;;;;:::i;:::-;:31;;:50;;;;:::i;:::-;17492:57;;17383:173;;;:::o;3270:332::-;3346:7;3585:10;;3568:14;:27;;;;:::i;:::-;3561:34;;3270:332;:::o;1320:134:3:-;1378:7;1404:43;1408:1;1411;1404:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1397:50;;1320:134;;;;:::o;873:176::-;931:7;950:9;966:1;962;:5;;;;:::i;:::-;950:17;;990:1;985;:6;;977:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1041:1;1034:8;;;873:176;;;;:::o;4084:671:4:-;4204:23;4220:6;4204:11;;:15;;:23;;;;:::i;:::-;4190:11;:37;;;;4270:16;4289:22;4304:6;4289:14;:22::i;:::-;4270:41;;4366:24;4381:8;4366:10;;:14;;:24;;;;:::i;:::-;4353:10;:37;;;;4496:19;:17;:19::i;:::-;4475:17;;:40;;4467:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4599:30;4620:8;4599:12;:16;4612:2;4599:16;;;;;;;;;;;;;;;;:20;;:30;;;;:::i;:::-;4580:12;:16;4593:2;4580:16;;;;;;;;;;;;;;;:49;;;;4684:16;4689:2;4693:6;4684:16;;;;;;;:::i;:::-;;;;;;;;4736:2;4715:32;;4732:1;4715:32;;;4740:6;4715:32;;;;;;:::i;:::-;;;;;;;;4148:607;4084:671;;:::o;17208:169::-;17292:7;17322:48;1299:6:5;17322:26:4;17330:17;;17322:3;:7;;:26;;;;:::i;:::-;:30;;:48;;;;:::i;:::-;17315:55;;17208:169;;;:::o;2179:459:3:-;2237:7;2483:1;2478;:6;2474:45;;;2507:1;2500:8;;;;2474:45;2529:9;2545:1;2541;:5;;;;:::i;:::-;2529:17;;2573:1;2568;2564;:5;;;;:::i;:::-;:10;2556:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2630:1;2623:8;;;2179:459;;;;;:::o;3100:130::-;3158:7;3184:39;3188:1;3191;3184:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3177:46;;3100:130;;;;:::o;676:175:2:-;758:86;778:5;808:23;;;833:2;837:5;785:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;758:19;:86::i;:::-;676:175;;;:::o;5931:819:4:-;6287:22;6303:5;6287:11;;:15;;:22;;;;:::i;:::-;6273:11;:36;;;;6318:16;6337:21;6352:5;6337:14;:21::i;:::-;6318:40;;6380:24;6395:8;6380:10;;:14;;:24;;;;:::i;:::-;6367:10;:37;;;;6479:19;:17;:19::i;:::-;6458:17;;:40;;6450:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6565:38;6594:8;6565:12;:24;6578:10;6565:24;;;;;;;;;;;;;;;;:28;;:38;;;;:::i;:::-;6538:12;:24;6551:10;6538:24;;;;;;;;;;;;;;;:65;;;;6653:37;6658:10;6670:5;6677:12;6653:37;;;;;;;;:::i;:::-;;;;;;;;6732:1;6703:39;;6712:10;6703:39;;;6736:5;6703:39;;;;;;:::i;:::-;;;;;;;;6004:746;5931:819;;:::o;1745:187:3:-;1831:7;1863:1;1858;:6;;1866:12;1850:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1889:9;1905:1;1901;:5;;;;:::i;:::-;1889:17;;1924:1;1917:8;;;1745:187;;;;;:::o;3712:272::-;3798:7;3829:1;3825;:5;3832:12;3817:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3855:9;3871:1;3867;:5;;;;:::i;:::-;3855:17;;3976:1;3969:8;;;3712:272;;;;;:::o;2939:751:2:-;3358:23;3384:69;3412:4;3384:69;;;;;;;;;;;;;;;;;3392:5;3384:27;;;;:69;;;;;:::i;:::-;3358:95;;3487:1;3467:10;:17;:21;3463:221;;;3607:10;3596:30;;;;;;;;;;;;:::i;:::-;3588:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3463:221;3009:681;2939:751;;:::o;3570:194:0:-;3673:12;3704:53;3727:6;3735:4;3741:1;3744:12;3704:22;:53::i;:::-;3697:60;;3570:194;;;;;:::o;4917:955::-;5047:12;5079:18;5090:6;5079:10;:18::i;:::-;5071:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5202:12;5216:23;5243:6;:11;;5261:8;5271:4;5243:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5201:75;;;;5290:7;5286:580;;;5320:10;5313:17;;;;;;5286:580;5451:1;5431:10;:17;:21;5427:429;;;5689:10;5683:17;5749:15;5736:10;5732:2;5728:19;5721:44;5427:429;5828:12;5821:20;;;;;;;;;;;:::i;:::-;;;;;;;;4917:955;;;;;;;:::o;717:413::-;777:4;980:12;1089:7;1077:20;1069:28;;1122:1;1115:4;:8;1108:15;;;717:413;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:412:6:-;85:5;110:66;126:49;168:6;126:49;:::i;:::-;110:66;:::i;:::-;101:75;;199:6;192:5;185:21;237:4;230:5;226:16;275:3;266:6;261:3;257:16;254:25;251:112;;;282:79;;:::i;:::-;251:112;372:41;406:6;401:3;396;372:41;:::i;:::-;91:328;7:412;;;;;:::o;425:139::-;471:5;509:6;496:20;487:29;;525:33;552:5;525:33;:::i;:::-;425:139;;;;:::o;570:133::-;613:5;651:6;638:20;629:29;;667:30;691:5;667:30;:::i;:::-;570:133;;;;:::o;709:137::-;763:5;794:6;788:13;779:22;;810:30;834:5;810:30;:::i;:::-;709:137;;;;:::o;852:139::-;898:5;936:6;923:20;914:29;;952:33;979:5;952:33;:::i;:::-;852:139;;;;:::o;1011:340::-;1067:5;1116:3;1109:4;1101:6;1097:17;1093:27;1083:122;;1124:79;;:::i;:::-;1083:122;1241:6;1228:20;1266:79;1341:3;1333:6;1326:4;1318:6;1314:17;1266:79;:::i;:::-;1257:88;;1073:278;1011:340;;;;:::o;1357:139::-;1403:5;1441:6;1428:20;1419:29;;1457:33;1484:5;1457:33;:::i;:::-;1357:139;;;;:::o;1502:135::-;1546:5;1584:6;1571:20;1562:29;;1600:31;1625:5;1600:31;:::i;:::-;1502:135;;;;:::o;1643:329::-;1702:6;1751:2;1739:9;1730:7;1726:23;1722:32;1719:119;;;1757:79;;:::i;:::-;1719:119;1877:1;1902:53;1947:7;1938:6;1927:9;1923:22;1902:53;:::i;:::-;1892:63;;1848:117;1643:329;;;;:::o;1978:474::-;2046:6;2054;2103:2;2091:9;2082:7;2078:23;2074:32;2071:119;;;2109:79;;:::i;:::-;2071:119;2229:1;2254:53;2299:7;2290:6;2279:9;2275:22;2254:53;:::i;:::-;2244:63;;2200:117;2356:2;2382:53;2427:7;2418:6;2407:9;2403:22;2382:53;:::i;:::-;2372:63;;2327:118;1978:474;;;;;:::o;2458:619::-;2535:6;2543;2551;2600:2;2588:9;2579:7;2575:23;2571:32;2568:119;;;2606:79;;:::i;:::-;2568:119;2726:1;2751:53;2796:7;2787:6;2776:9;2772:22;2751:53;:::i;:::-;2741:63;;2697:117;2853:2;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2824:118;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2458:619;;;;;:::o;3083:1199::-;3194:6;3202;3210;3218;3226;3234;3242;3291:3;3279:9;3270:7;3266:23;3262:33;3259:120;;;3298:79;;:::i;:::-;3259:120;3418:1;3443:53;3488:7;3479:6;3468:9;3464:22;3443:53;:::i;:::-;3433:63;;3389:117;3545:2;3571:53;3616:7;3607:6;3596:9;3592:22;3571:53;:::i;:::-;3561:63;;3516:118;3673:2;3699:53;3744:7;3735:6;3724:9;3720:22;3699:53;:::i;:::-;3689:63;;3644:118;3801:2;3827:53;3872:7;3863:6;3852:9;3848:22;3827:53;:::i;:::-;3817:63;;3772:118;3929:3;3956:51;3999:7;3990:6;3979:9;3975:22;3956:51;:::i;:::-;3946:61;;3900:117;4056:3;4083:53;4128:7;4119:6;4108:9;4104:22;4083:53;:::i;:::-;4073:63;;4027:119;4185:3;4212:53;4257:7;4248:6;4237:9;4233:22;4212:53;:::i;:::-;4202:63;;4156:119;3083:1199;;;;;;;;;;:::o;4288:474::-;4356:6;4364;4413:2;4401:9;4392:7;4388:23;4384:32;4381:119;;;4419:79;;:::i;:::-;4381:119;4539:1;4564:53;4609:7;4600:6;4589:9;4585:22;4564:53;:::i;:::-;4554:63;;4510:117;4666:2;4692:53;4737:7;4728:6;4717:9;4713:22;4692:53;:::i;:::-;4682:63;;4637:118;4288:474;;;;;:::o;4768:323::-;4824:6;4873:2;4861:9;4852:7;4848:23;4844:32;4841:119;;;4879:79;;:::i;:::-;4841:119;4999:1;5024:50;5066:7;5057:6;5046:9;5042:22;5024:50;:::i;:::-;5014:60;;4970:114;4768:323;;;;:::o;5097:345::-;5164:6;5213:2;5201:9;5192:7;5188:23;5184:32;5181:119;;;5219:79;;:::i;:::-;5181:119;5339:1;5364:61;5417:7;5408:6;5397:9;5393:22;5364:61;:::i;:::-;5354:71;;5310:125;5097:345;;;;:::o;5448:975::-;5543:6;5551;5559;5608:2;5596:9;5587:7;5583:23;5579:32;5576:119;;;5614:79;;:::i;:::-;5576:119;5762:1;5751:9;5747:17;5734:31;5792:18;5784:6;5781:30;5778:117;;;5814:79;;:::i;:::-;5778:117;5919:63;5974:7;5965:6;5954:9;5950:22;5919:63;:::i;:::-;5909:73;;5705:287;6059:2;6048:9;6044:18;6031:32;6090:18;6082:6;6079:30;6076:117;;;6112:79;;:::i;:::-;6076:117;6217:63;6272:7;6263:6;6252:9;6248:22;6217:63;:::i;:::-;6207:73;;6002:288;6329:2;6355:51;6398:7;6389:6;6378:9;6374:22;6355:51;:::i;:::-;6345:61;;6300:116;5448:975;;;;;:::o;6429:1267::-;6542:6;6550;6558;6566;6574;6623:3;6611:9;6602:7;6598:23;6594:33;6591:120;;;6630:79;;:::i;:::-;6591:120;6778:1;6767:9;6763:17;6750:31;6808:18;6800:6;6797:30;6794:117;;;6830:79;;:::i;:::-;6794:117;6935:63;6990:7;6981:6;6970:9;6966:22;6935:63;:::i;:::-;6925:73;;6721:287;7075:2;7064:9;7060:18;7047:32;7106:18;7098:6;7095:30;7092:117;;;7128:79;;:::i;:::-;7092:117;7233:63;7288:7;7279:6;7268:9;7264:22;7233:63;:::i;:::-;7223:73;;7018:288;7345:2;7371:51;7414:7;7405:6;7394:9;7390:22;7371:51;:::i;:::-;7361:61;;7316:116;7471:2;7497:53;7542:7;7533:6;7522:9;7518:22;7497:53;:::i;:::-;7487:63;;7442:118;7599:3;7626:53;7671:7;7662:6;7651:9;7647:22;7626:53;:::i;:::-;7616:63;;7570:119;6429:1267;;;;;;;;:::o;7702:329::-;7761:6;7810:2;7798:9;7789:7;7785:23;7781:32;7778:119;;;7816:79;;:::i;:::-;7778:119;7936:1;7961:53;8006:7;7997:6;7986:9;7982:22;7961:53;:::i;:::-;7951:63;;7907:117;7702:329;;;;:::o;8037:474::-;8105:6;8113;8162:2;8150:9;8141:7;8137:23;8133:32;8130:119;;;8168:79;;:::i;:::-;8130:119;8288:1;8313:53;8358:7;8349:6;8338:9;8334:22;8313:53;:::i;:::-;8303:63;;8259:117;8415:2;8441:53;8486:7;8477:6;8466:9;8462:22;8441:53;:::i;:::-;8431:63;;8386:118;8037:474;;;;;:::o;8517:::-;8585:6;8593;8642:2;8630:9;8621:7;8617:23;8613:32;8610:119;;;8648:79;;:::i;:::-;8610:119;8768:1;8793:53;8838:7;8829:6;8818:9;8814:22;8793:53;:::i;:::-;8783:63;;8739:117;8895:2;8921:53;8966:7;8957:6;8946:9;8942:22;8921:53;:::i;:::-;8911:63;;8866:118;8517:474;;;;;:::o;8997:613::-;9071:6;9079;9087;9136:2;9124:9;9115:7;9111:23;9107:32;9104:119;;;9142:79;;:::i;:::-;9104:119;9262:1;9287:53;9332:7;9323:6;9312:9;9308:22;9287:53;:::i;:::-;9277:63;;9233:117;9389:2;9415:53;9460:7;9451:6;9440:9;9436:22;9415:53;:::i;:::-;9405:63;;9360:118;9517:2;9543:50;9585:7;9576:6;9565:9;9561:22;9543:50;:::i;:::-;9533:60;;9488:115;8997:613;;;;;:::o;9616:118::-;9703:24;9721:5;9703:24;:::i;:::-;9698:3;9691:37;9616:118;;:::o;9740:109::-;9821:21;9836:5;9821:21;:::i;:::-;9816:3;9809:34;9740:109;;:::o;9855:118::-;9942:24;9960:5;9942:24;:::i;:::-;9937:3;9930:37;9855:118;;:::o;9979:157::-;10084:45;10104:24;10122:5;10104:24;:::i;:::-;10084:45;:::i;:::-;10079:3;10072:58;9979:157;;:::o;10142:373::-;10246:3;10274:38;10306:5;10274:38;:::i;:::-;10328:88;10409:6;10404:3;10328:88;:::i;:::-;10321:95;;10425:52;10470:6;10465:3;10458:4;10451:5;10447:16;10425:52;:::i;:::-;10502:6;10497:3;10493:16;10486:23;;10250:265;10142:373;;;;:::o;10543:849::-;10648:3;10685:5;10679:12;10714:36;10740:9;10714:36;:::i;:::-;10766:88;10847:6;10842:3;10766:88;:::i;:::-;10759:95;;10885:1;10874:9;10870:17;10901:1;10896:137;;;;11047:1;11042:344;;;;10863:523;;10896:137;10980:4;10976:9;10965;10961:25;10956:3;10949:38;11016:6;11011:3;11007:16;11000:23;;10896:137;;11042:344;11109:41;11144:5;11109:41;:::i;:::-;11172:1;11186:154;11200:6;11197:1;11194:13;11186:154;;;11274:7;11268:14;11264:1;11259:3;11255:11;11248:35;11324:1;11315:7;11311:15;11300:26;;11222:4;11219:1;11215:12;11210:17;;11186:154;;;11369:6;11364:3;11360:16;11353:23;;11049:337;;10863:523;;10652:740;;10543:849;;;;:::o;11398:143::-;11491:43;11528:5;11491:43;:::i;:::-;11486:3;11479:56;11398:143;;:::o;11547:364::-;11635:3;11663:39;11696:5;11663:39;:::i;:::-;11718:71;11782:6;11777:3;11718:71;:::i;:::-;11711:78;;11798:52;11843:6;11838:3;11831:4;11824:5;11820:16;11798:52;:::i;:::-;11875:29;11897:6;11875:29;:::i;:::-;11870:3;11866:39;11859:46;;11639:272;11547:364;;;;:::o;11917:366::-;12059:3;12080:67;12144:2;12139:3;12080:67;:::i;:::-;12073:74;;12156:93;12245:3;12156:93;:::i;:::-;12274:2;12269:3;12265:12;12258:19;;11917:366;;;:::o;12289:400::-;12449:3;12470:84;12552:1;12547:3;12470:84;:::i;:::-;12463:91;;12563:93;12652:3;12563:93;:::i;:::-;12681:1;12676:3;12672:11;12665:18;;12289:400;;;:::o;12695:366::-;12837:3;12858:67;12922:2;12917:3;12858:67;:::i;:::-;12851:74;;12934:93;13023:3;12934:93;:::i;:::-;13052:2;13047:3;13043:12;13036:19;;12695:366;;;:::o;13067:::-;13209:3;13230:67;13294:2;13289:3;13230:67;:::i;:::-;13223:74;;13306:93;13395:3;13306:93;:::i;:::-;13424:2;13419:3;13415:12;13408:19;;13067:366;;;:::o;13439:::-;13581:3;13602:67;13666:2;13661:3;13602:67;:::i;:::-;13595:74;;13678:93;13767:3;13678:93;:::i;:::-;13796:2;13791:3;13787:12;13780:19;;13439:366;;;:::o;13811:::-;13953:3;13974:67;14038:2;14033:3;13974:67;:::i;:::-;13967:74;;14050:93;14139:3;14050:93;:::i;:::-;14168:2;14163:3;14159:12;14152:19;;13811:366;;;:::o;14183:::-;14325:3;14346:67;14410:2;14405:3;14346:67;:::i;:::-;14339:74;;14422:93;14511:3;14422:93;:::i;:::-;14540:2;14535:3;14531:12;14524:19;;14183:366;;;:::o;14555:365::-;14697:3;14718:66;14782:1;14777:3;14718:66;:::i;:::-;14711:73;;14793:93;14882:3;14793:93;:::i;:::-;14911:2;14906:3;14902:12;14895:19;;14555:365;;;:::o;14926:366::-;15068:3;15089:67;15153:2;15148:3;15089:67;:::i;:::-;15082:74;;15165:93;15254:3;15165:93;:::i;:::-;15283:2;15278:3;15274:12;15267:19;;14926:366;;;:::o;15298:::-;15440:3;15461:67;15525:2;15520:3;15461:67;:::i;:::-;15454:74;;15537:93;15626:3;15537:93;:::i;:::-;15655:2;15650:3;15646:12;15639:19;;15298:366;;;:::o;15670:365::-;15812:3;15833:66;15897:1;15892:3;15833:66;:::i;:::-;15826:73;;15908:93;15997:3;15908:93;:::i;:::-;16026:2;16021:3;16017:12;16010:19;;15670:365;;;:::o;16041:366::-;16183:3;16204:67;16268:2;16263:3;16204:67;:::i;:::-;16197:74;;16280:93;16369:3;16280:93;:::i;:::-;16398:2;16393:3;16389:12;16382:19;;16041:366;;;:::o;16413:::-;16555:3;16576:67;16640:2;16635:3;16576:67;:::i;:::-;16569:74;;16652:93;16741:3;16652:93;:::i;:::-;16770:2;16765:3;16761:12;16754:19;;16413:366;;;:::o;16785:118::-;16872:24;16890:5;16872:24;:::i;:::-;16867:3;16860:37;16785:118;;:::o;16909:112::-;16992:22;17008:5;16992:22;:::i;:::-;16987:3;16980:35;16909:112;;:::o;17027:271::-;17157:3;17179:93;17268:3;17259:6;17179:93;:::i;:::-;17172:100;;17289:3;17282:10;;17027:271;;;;:::o;17304:273::-;17435:3;17457:94;17547:3;17538:6;17457:94;:::i;:::-;17450:101;;17568:3;17561:10;;17304:273;;;;:::o;17583:663::-;17824:3;17846:148;17990:3;17846:148;:::i;:::-;17839:155;;18004:75;18075:3;18066:6;18004:75;:::i;:::-;18104:2;18099:3;18095:12;18088:19;;18117:75;18188:3;18179:6;18117:75;:::i;:::-;18217:2;18212:3;18208:12;18201:19;;18237:3;18230:10;;17583:663;;;;;:::o;18252:222::-;18345:4;18383:2;18372:9;18368:18;18360:26;;18396:71;18464:1;18453:9;18449:17;18440:6;18396:71;:::i;:::-;18252:222;;;;:::o;18480:332::-;18601:4;18639:2;18628:9;18624:18;18616:26;;18652:71;18720:1;18709:9;18705:17;18696:6;18652:71;:::i;:::-;18733:72;18801:2;18790:9;18786:18;18777:6;18733:72;:::i;:::-;18480:332;;;;;:::o;18818:::-;18939:4;18977:2;18966:9;18962:18;18954:26;;18990:71;19058:1;19047:9;19043:17;19034:6;18990:71;:::i;:::-;19071:72;19139:2;19128:9;19124:18;19115:6;19071:72;:::i;:::-;18818:332;;;;;:::o;19156:442::-;19305:4;19343:2;19332:9;19328:18;19320:26;;19356:71;19424:1;19413:9;19409:17;19400:6;19356:71;:::i;:::-;19437:72;19505:2;19494:9;19490:18;19481:6;19437:72;:::i;:::-;19519;19587:2;19576:9;19572:18;19563:6;19519:72;:::i;:::-;19156:442;;;;;;:::o;19604:210::-;19691:4;19729:2;19718:9;19714:18;19706:26;;19742:65;19804:1;19793:9;19789:17;19780:6;19742:65;:::i;:::-;19604:210;;;;:::o;19820:222::-;19913:4;19951:2;19940:9;19936:18;19928:26;;19964:71;20032:1;20021:9;20017:17;20008:6;19964:71;:::i;:::-;19820:222;;;;:::o;20048:775::-;20281:4;20319:3;20308:9;20304:19;20296:27;;20333:71;20401:1;20390:9;20386:17;20377:6;20333:71;:::i;:::-;20414:72;20482:2;20471:9;20467:18;20458:6;20414:72;:::i;:::-;20496;20564:2;20553:9;20549:18;20540:6;20496:72;:::i;:::-;20578;20646:2;20635:9;20631:18;20622:6;20578:72;:::i;:::-;20660:73;20728:3;20717:9;20713:19;20704:6;20660:73;:::i;:::-;20743;20811:3;20800:9;20796:19;20787:6;20743:73;:::i;:::-;20048:775;;;;;;;;;:::o;20829:565::-;21012:4;21050:3;21039:9;21035:19;21027:27;;21064:71;21132:1;21121:9;21117:17;21108:6;21064:71;:::i;:::-;21145:72;21213:2;21202:9;21198:18;21189:6;21145:72;:::i;:::-;21227:78;21301:2;21290:9;21286:18;21277:6;21227:78;:::i;:::-;21315:72;21383:2;21372:9;21368:18;21359:6;21315:72;:::i;:::-;20829:565;;;;;;;:::o;21400:545::-;21573:4;21611:3;21600:9;21596:19;21588:27;;21625:71;21693:1;21682:9;21678:17;21669:6;21625:71;:::i;:::-;21706:68;21770:2;21759:9;21755:18;21746:6;21706:68;:::i;:::-;21784:72;21852:2;21841:9;21837:18;21828:6;21784:72;:::i;:::-;21866;21934:2;21923:9;21919:18;21910:6;21866:72;:::i;:::-;21400:545;;;;;;;:::o;21951:313::-;22064:4;22102:2;22091:9;22087:18;22079:26;;22151:9;22145:4;22141:20;22137:1;22126:9;22122:17;22115:47;22179:78;22252:4;22243:6;22179:78;:::i;:::-;22171:86;;21951:313;;;;:::o;22270:419::-;22436:4;22474:2;22463:9;22459:18;22451:26;;22523:9;22517:4;22513:20;22509:1;22498:9;22494:17;22487:47;22551:131;22677:4;22551:131;:::i;:::-;22543:139;;22270:419;;;:::o;22695:::-;22861:4;22899:2;22888:9;22884:18;22876:26;;22948:9;22942:4;22938:20;22934:1;22923:9;22919:17;22912:47;22976:131;23102:4;22976:131;:::i;:::-;22968:139;;22695:419;;;:::o;23120:::-;23286:4;23324:2;23313:9;23309:18;23301:26;;23373:9;23367:4;23363:20;23359:1;23348:9;23344:17;23337:47;23401:131;23527:4;23401:131;:::i;:::-;23393:139;;23120:419;;;:::o;23545:::-;23711:4;23749:2;23738:9;23734:18;23726:26;;23798:9;23792:4;23788:20;23784:1;23773:9;23769:17;23762:47;23826:131;23952:4;23826:131;:::i;:::-;23818:139;;23545:419;;;:::o;23970:::-;24136:4;24174:2;24163:9;24159:18;24151:26;;24223:9;24217:4;24213:20;24209:1;24198:9;24194:17;24187:47;24251:131;24377:4;24251:131;:::i;:::-;24243:139;;23970:419;;;:::o;24395:::-;24561:4;24599:2;24588:9;24584:18;24576:26;;24648:9;24642:4;24638:20;24634:1;24623:9;24619:17;24612:47;24676:131;24802:4;24676:131;:::i;:::-;24668:139;;24395:419;;;:::o;24820:::-;24986:4;25024:2;25013:9;25009:18;25001:26;;25073:9;25067:4;25063:20;25059:1;25048:9;25044:17;25037:47;25101:131;25227:4;25101:131;:::i;:::-;25093:139;;24820:419;;;:::o;25245:::-;25411:4;25449:2;25438:9;25434:18;25426:26;;25498:9;25492:4;25488:20;25484:1;25473:9;25469:17;25462:47;25526:131;25652:4;25526:131;:::i;:::-;25518:139;;25245:419;;;:::o;25670:::-;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:::-;26261:4;26299:2;26288:9;26284:18;26276:26;;26348:9;26342:4;26338:20;26334:1;26323:9;26319:17;26312:47;26376:131;26502:4;26376:131;:::i;:::-;26368:139;;26095:419;;;:::o;26520:::-;26686:4;26724:2;26713:9;26709:18;26701:26;;26773:9;26767:4;26763:20;26759:1;26748:9;26744:17;26737:47;26801:131;26927:4;26801:131;:::i;:::-;26793:139;;26520:419;;;:::o;26945:::-;27111:4;27149:2;27138:9;27134:18;27126:26;;27198:9;27192:4;27188:20;27184:1;27173:9;27169:17;27162:47;27226:131;27352:4;27226:131;:::i;:::-;27218:139;;26945:419;;;:::o;27370:222::-;27463:4;27501:2;27490:9;27486:18;27478:26;;27514:71;27582:1;27571:9;27567:17;27558:6;27514:71;:::i;:::-;27370:222;;;;:::o;27598:442::-;27747:4;27785:2;27774:9;27770:18;27762:26;;27798:71;27866:1;27855:9;27851:17;27842:6;27798:71;:::i;:::-;27879:72;27947:2;27936:9;27932:18;27923:6;27879:72;:::i;:::-;27961;28029:2;28018:9;28014:18;28005:6;27961:72;:::i;:::-;27598:442;;;;;;:::o;28046:214::-;28135:4;28173:2;28162:9;28158:18;28150:26;;28186:67;28250:1;28239:9;28235:17;28226:6;28186:67;:::i;:::-;28046:214;;;;:::o;28266:129::-;28300:6;28327:20;;:::i;:::-;28317:30;;28356:33;28384:4;28376:6;28356:33;:::i;:::-;28266:129;;;:::o;28401:75::-;28434:6;28467:2;28461:9;28451:19;;28401:75;:::o;28482:308::-;28544:4;28634:18;28626:6;28623:30;28620:56;;;28656:18;;:::i;:::-;28620:56;28694:29;28716:6;28694:29;:::i;:::-;28686:37;;28778:4;28772;28768:15;28760:23;;28482:308;;;:::o;28796:144::-;28848:4;28871:3;28863:11;;28894:3;28891:1;28884:14;28928:4;28925:1;28915:18;28907:26;;28796:144;;;:::o;28946:98::-;28997:6;29031:5;29025:12;29015:22;;28946:98;;;:::o;29050:99::-;29102:6;29136:5;29130:12;29120:22;;29050:99;;;:::o;29155:147::-;29256:11;29293:3;29278:18;;29155:147;;;;:::o;29308:169::-;29392:11;29426:6;29421:3;29414:19;29466:4;29461:3;29457:14;29442:29;;29308:169;;;;:::o;29483:148::-;29585:11;29622:3;29607:18;;29483:148;;;;:::o;29637:305::-;29677:3;29696:20;29714:1;29696:20;:::i;:::-;29691:25;;29730:20;29748:1;29730:20;:::i;:::-;29725:25;;29884:1;29816:66;29812:74;29809:1;29806:81;29803:107;;;29890:18;;:::i;:::-;29803:107;29934:1;29931;29927:9;29920:16;;29637:305;;;;:::o;29948:185::-;29988:1;30005:20;30023:1;30005:20;:::i;:::-;30000:25;;30039:20;30057:1;30039:20;:::i;:::-;30034:25;;30078:1;30068:35;;30083:18;;:::i;:::-;30068:35;30125:1;30122;30118:9;30113:14;;29948:185;;;;:::o;30139:348::-;30179:7;30202:20;30220:1;30202:20;:::i;:::-;30197:25;;30236:20;30254:1;30236:20;:::i;:::-;30231:25;;30424:1;30356:66;30352:74;30349:1;30346:81;30341:1;30334:9;30327:17;30323:105;30320:131;;;30431:18;;:::i;:::-;30320:131;30479:1;30476;30472:9;30461:20;;30139:348;;;;:::o;30493:191::-;30533:4;30553:20;30571:1;30553:20;:::i;:::-;30548:25;;30587:20;30605:1;30587:20;:::i;:::-;30582:25;;30626:1;30623;30620:8;30617:34;;;30631:18;;:::i;:::-;30617:34;30676:1;30673;30669:9;30661:17;;30493:191;;;;:::o;30690:96::-;30727:7;30756:24;30774:5;30756:24;:::i;:::-;30745:35;;30690:96;;;:::o;30792:90::-;30826:7;30869:5;30862:13;30855:21;30844:32;;30792:90;;;:::o;30888:77::-;30925:7;30954:5;30943:16;;30888:77;;;:::o;30971:126::-;31008:7;31048:42;31041:5;31037:54;31026:65;;30971:126;;;:::o;31103:77::-;31140:7;31169:5;31158:16;;31103:77;;;:::o;31186:86::-;31221:7;31261:4;31254:5;31250:16;31239:27;;31186:86;;;:::o;31278:117::-;31334:9;31367:22;31383:5;31367:22;:::i;:::-;31354:35;;31278:117;;;:::o;31401:154::-;31485:6;31480:3;31475;31462:30;31547:1;31538:6;31533:3;31529:16;31522:27;31401:154;;;:::o;31561:307::-;31629:1;31639:113;31653:6;31650:1;31647:13;31639:113;;;31738:1;31733:3;31729:11;31723:18;31719:1;31714:3;31710:11;31703:39;31675:2;31672:1;31668:10;31663:15;;31639:113;;;31770:6;31767:1;31764:13;31761:101;;;31850:1;31841:6;31836:3;31832:16;31825:27;31761:101;31610:258;31561:307;;;:::o;31874:320::-;31918:6;31955:1;31949:4;31945:12;31935:22;;32002:1;31996:4;31992:12;32023:18;32013:81;;32079:4;32071:6;32067:17;32057:27;;32013:81;32141:2;32133:6;32130:14;32110:18;32107:38;32104:84;;;32160:18;;:::i;:::-;32104:84;31925:269;31874:320;;;:::o;32200:281::-;32283:27;32305:4;32283:27;:::i;:::-;32275:6;32271:40;32413:6;32401:10;32398:22;32377:18;32365:10;32362:34;32359:62;32356:88;;;32424:18;;:::i;:::-;32356:88;32464:10;32460:2;32453:22;32243:238;32200:281;;:::o;32487:233::-;32526:3;32549:24;32567:5;32549:24;:::i;:::-;32540:33;;32595:66;32588:5;32585:77;32582:103;;;32665:18;;:::i;:::-;32582:103;32712:1;32705:5;32701:13;32694:20;;32487:233;;;:::o;32726:79::-;32765:7;32794:5;32783:16;;32726:79;;;:::o;32811:180::-;32859:77;32856:1;32849:88;32956:4;32953:1;32946:15;32980:4;32977:1;32970:15;32997:180;33045:77;33042:1;33035:88;33142:4;33139:1;33132:15;33166:4;33163:1;33156:15;33183:180;33231:77;33228:1;33221:88;33328:4;33325:1;33318:15;33352:4;33349:1;33342:15;33369:180;33417:77;33414:1;33407:88;33514:4;33511:1;33504:15;33538:4;33535:1;33528:15;33555:117;33664:1;33661;33654:12;33678:117;33787:1;33784;33777:12;33801:117;33910:1;33907;33900:12;33924:117;34033:1;34030;34023:12;34047:102;34088:6;34139:2;34135:7;34130:2;34123:5;34119:14;34115:28;34105:38;;34047:102;;;:::o;34155:171::-;34295:23;34291:1;34283:6;34279:14;34272:47;34155:171;:::o;34332:214::-;34472:66;34468:1;34460:6;34456:14;34449:90;34332:214;:::o;34552:177::-;34692:29;34688:1;34680:6;34676:14;34669:53;34552:177;:::o;34735:168::-;34875:20;34871:1;34863:6;34859:14;34852:44;34735:168;:::o;34909:169::-;35049:21;35045:1;35037:6;35033:14;35026:45;34909:169;:::o;35084:168::-;35224:20;35220:1;35212:6;35208:14;35201:44;35084:168;:::o;35258:220::-;35398:34;35394:1;35386:6;35382:14;35375:58;35467:3;35462:2;35454:6;35450:15;35443:28;35258:220;:::o;35484:158::-;35624:10;35620:1;35612:6;35608:14;35601:34;35484:158;:::o;35648:160::-;35788:12;35784:1;35776:6;35772:14;35765:36;35648:160;:::o;35814:179::-;35954:31;35950:1;35942:6;35938:14;35931:55;35814:179;:::o;35999:156::-;36139:8;36135:1;36127:6;36123:14;36116:32;35999:156;:::o;36161:229::-;36301:34;36297:1;36289:6;36285:14;36278:58;36370:12;36365:2;36357:6;36353:15;36346:37;36161:229;:::o;36396:176::-;36536:28;36532:1;36524:6;36520:14;36513:52;36396:176;:::o;36578:122::-;36651:24;36669:5;36651:24;:::i;:::-;36644:5;36641:35;36631:63;;36690:1;36687;36680:12;36631:63;36578:122;:::o;36706:116::-;36776:21;36791:5;36776:21;:::i;:::-;36769:5;36766:32;36756:60;;36812:1;36809;36802:12;36756:60;36706:116;:::o;36828:122::-;36901:24;36919:5;36901:24;:::i;:::-;36894:5;36891:35;36881:63;;36940:1;36937;36930:12;36881:63;36828:122;:::o;36956:::-;37029:24;37047:5;37029:24;:::i;:::-;37022:5;37019:35;37009:63;;37068:1;37065;37058:12;37009:63;36956:122;:::o;37084:118::-;37155:22;37171:5;37155:22;:::i;:::-;37148:5;37145:33;37135:61;;37192:1;37189;37182:12;37135:61;37084:118;:::o
Swarm Source
ipfs://599c6c4c7933aa65cb3ecb8f644536794cd850dc5bca49808de12d6f5cdc6aa1
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.