Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer Ownersh... | 24585739 | 3 days ago | IN | 0 ETH | 0.00006466 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60806040 | 24585098 | 3 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PYRXSale
Compiler Version
v0.8.27+commit.40a35a09
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2026-03-04
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.27;
// Sources flattened with hardhat v2.12.6 https://hardhat.org
// File @openzeppelin/contracts/utils/Context.sol@v4.8.1
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File @openzeppelin/contracts/access/Ownable.sol@v4.8.1
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v4.8.1
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(
address owner,
address spender
) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
library Address {
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
function functionCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
0,
"Address: low-level call failed"
);
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
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"
);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return
verifyCallResultFromTarget(
target,
success,
returndata,
errorMessage
);
}
function functionStaticCall(
address target,
bytes memory data
) internal view returns (bytes memory) {
return
functionStaticCall(
target,
data,
"Address: low-level static call failed"
);
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return
verifyCallResultFromTarget(
target,
success,
returndata,
errorMessage
);
}
function functionDelegateCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return
functionDelegateCall(
target,
data,
"Address: low-level delegate call failed"
);
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return
verifyCallResultFromTarget(
target,
success,
returndata,
errorMessage
);
}
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(
bytes memory returndata,
string memory errorMessage
) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
interface IERC20Permit {
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
function nonces(address owner) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
library SafeERC20 {
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)
);
}
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'
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) + value;
_callOptionalReturn(
token,
abi.encodeWithSelector(
token.approve.selector,
spender,
newAllowance
)
);
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(
oldAllowance >= value,
"SafeERC20: decreased allowance below zero"
);
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(
token,
abi.encodeWithSelector(
token.approve.selector,
spender,
newAllowance
)
);
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(
nonceAfter == nonceBefore + 1,
"SafeERC20: permit did not succeed"
);
}
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
require(
abi.decode(returndata, (bool)),
"SafeERC20: ERC20 operation did not succeed"
);
}
}
}
// File @openzeppelin/contracts/utils/math/SafeMath.sol@v4.8.1
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @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 a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* 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) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
contract ChainlinkPriceOracle {
AggregatorV3Interface internal priceFeed;
constructor() {
// ETH / USD
priceFeed = AggregatorV3Interface(
0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
);
}
function getLatestPrice() public view returns (int) {
(, int price, , , ) = priceFeed.latestRoundData();
// for BNB / USD price is scaled up by 10 ** 8
return price / 1e8;
}
}
interface AggregatorV3Interface {
function latestRoundData()
external
view
returns (
uint80 roundId,
int answer,
uint startedAt,
uint updatedAt,
uint80 answeredInRound
);
}
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == _ENTERED;
}
}
contract PYRXSale is Ownable, ReentrancyGuard {
using SafeERC20 for IERC20;
using SafeMath for uint256;
ChainlinkPriceOracle public priceOracle;
// PYRX Token address
IERC20 public immutable token =
IERC20(0xE58278e99f0c21c0216396aD8ce1E9Da36EDEFCC);
//USDT token address
IERC20 public immutable usdt =
IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7);
// USDC token address
IERC20 public immutable usdc =
IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
// How many token units a buyer gets per ETH & USDT
uint256 public tokenPriceUSD = 5;
uint256 public ethDivider = 1000;
uint256 private usdtRate = 200;
bool public sellingEnabled = false;
bool public buyingEnabled = true;
uint256 public maxSellPerWallet;
mapping(address => bool) public isBlacklisted;
uint256 public sellSessionId;
mapping(uint256 => mapping(address => uint256)) public soldAmountPerSession;
constructor() {
priceOracle = new ChainlinkPriceOracle();
}
receive() external payable {}
// BUY TOKENS WITH ETH
function buyTokens() public payable nonReentrant {
require(buyingEnabled, "Buying is disabled");
require(!isBlacklisted[msg.sender], "Address is blacklisted");
require(msg.value >= 0.001 ether, "cant buy less with than 0.001 ETH");
uint256 weiAmount = msg.value;
//uint256 tokens = weiAmount * ethRate;
// Get the ETH price from the ChainlinkPriceOracle
int256 ethPrice = priceOracle.getLatestPrice();
require(ethPrice > 0, "Invalid ETH price");
uint256 tokens = weiAmount.mul(uint256(ethPrice)).mul(ethDivider).div(
tokenPriceUSD
);
require(
token.balanceOf(address(this)) >= tokens,
"Not enough tokens in contract"
);
// (bool callSuccess, ) = payable(address(this)).call{value: msg.value}("");
// require(callSuccess, "Call failed");
token.safeTransfer(msg.sender, tokens);
}
//BUY TOKENS WITH USDT
function buyTokensWithUSDT(uint256 amount) public nonReentrant {
require(buyingEnabled, "Buying is disabled");
require(!isBlacklisted[msg.sender], "Address is blacklisted");
require(amount >= 1 * 10 ** 6, "cant buy less with than 1 USDT");
uint256 weiAmount = amount * 10 ** 12;
uint256 tokens = weiAmount.mul(usdtRate);
require(
token.balanceOf(address(this)) >= tokens,
"Not enough tokens in contract"
);
usdt.safeTransferFrom(msg.sender, address(this), amount);
token.safeTransfer(msg.sender, tokens);
}
//BUY TOKENS WITH USDC
function buyTokensWithUSDC(uint256 amount) public nonReentrant {
require(buyingEnabled, "Buying is disabled");
require(!isBlacklisted[msg.sender], "Address is blacklisted");
require(amount >= 1 * 10 ** 6, "cant buy less with than 1 USDC");
uint256 weiAmount = amount * 10 ** 12;
uint256 tokens = weiAmount.mul(usdtRate);
require(
token.balanceOf(address(this)) >= tokens,
"Not enough tokens in contract"
);
usdc.safeTransferFrom(msg.sender, address(this), amount);
token.safeTransfer(msg.sender, tokens);
}
function sellTokensForEth(uint256 tokenAmount) public nonReentrant {
require(sellingEnabled, "Selling is disabled");
require(!isBlacklisted[msg.sender], "Address is blacklisted");
require(tokenAmount >= 1e18, "Minimum 1 token");
uint256 alreadySold = soldAmountPerSession[sellSessionId][msg.sender];
require(
alreadySold + tokenAmount <= maxSellPerWallet,
"Sell limit exceeded"
);
int256 ethPrice = priceOracle.getLatestPrice();
require(ethPrice > 0, "Invalid ETH price");
uint256 ethAmount = tokenAmount.mul(tokenPriceUSD).div(ethDivider).div(
uint256(ethPrice)
);
require(address(this).balance >= ethAmount, "Not enough ETH");
soldAmountPerSession[sellSessionId][msg.sender] += tokenAmount;
token.safeTransferFrom(msg.sender, address(this), tokenAmount);
(bool success, ) = payable(msg.sender).call{value: ethAmount}("");
require(success, "ETH transfer failed");
}
function sellTokensForUSDT(uint256 tokenAmount) public nonReentrant {
require(sellingEnabled, "Selling is disabled");
require(!isBlacklisted[msg.sender], "Address is blacklisted");
require(tokenAmount >= 1e18, "Minimum 1 token");
uint256 alreadySold = soldAmountPerSession[sellSessionId][msg.sender];
require(
alreadySold + tokenAmount <= maxSellPerWallet,
"Sell limit exceeded"
);
uint256 usdtValue = tokenAmount.div(1e12).mul(tokenPriceUSD).div(
ethDivider
);
require(usdt.balanceOf(address(this)) >= usdtValue, "Not enough USDT");
soldAmountPerSession[sellSessionId][msg.sender] += tokenAmount;
token.safeTransferFrom(msg.sender, address(this), tokenAmount);
usdt.safeTransfer(msg.sender, usdtValue);
}
function sellTokensForUSDC(uint256 tokenAmount) public nonReentrant {
require(sellingEnabled, "Selling is disabled");
require(!isBlacklisted[msg.sender], "Address is blacklisted");
require(tokenAmount >= 1e18, "Minimum 1 token");
uint256 alreadySold = soldAmountPerSession[sellSessionId][msg.sender];
require(
alreadySold + tokenAmount <= maxSellPerWallet,
"Sell limit exceeded"
);
uint256 usdcValue = tokenAmount.div(1e12).mul(tokenPriceUSD).div(
ethDivider
);
require(usdc.balanceOf(address(this)) >= usdcValue, "Not enough USDC");
soldAmountPerSession[sellSessionId][msg.sender] += tokenAmount;
token.safeTransferFrom(msg.sender, address(this), tokenAmount);
usdc.safeTransfer(msg.sender, usdcValue);
}
//DEPOSIT TOKENS AND ETH
function depositPYRX(uint amount) external onlyOwner {
require(amount > 0, "Deposit value must be greater than 0");
token.safeTransferFrom(msg.sender, address(this), amount);
}
function depositUSDT(uint amount) external onlyOwner {
require(amount > 0, "Deposit value must be greater than 0");
usdt.safeTransferFrom(msg.sender, address(this), amount);
}
function depositUSDC(uint amount) external onlyOwner {
require(amount > 0, "Deposit value must be greater than 0");
usdc.safeTransferFrom(msg.sender, address(this), amount);
}
function depositETH() external payable onlyOwner {
require(msg.value > 0, "Must send ETH to deposit");
}
//WITHDRAW TOKENS AND ETH
function withdrawPYRX(uint amount) external onlyOwner {
require(
token.balanceOf(address(this)) >= amount,
"There are not enough tokens in contract"
);
token.safeTransfer(msg.sender, amount);
}
function withdrawUSDT(uint amount) external onlyOwner {
require(
usdt.balanceOf(address(this)) >= amount,
"There are not enough usdt in contract"
);
usdt.safeTransfer(msg.sender, amount);
}
function withdrawETH(uint amount) external onlyOwner nonReentrant {
require(
address(this).balance >= amount,
"There is not enough ETH in contract"
);
(bool callSuccess, ) = payable(msg.sender).call{value: amount}("");
require(callSuccess, "Call failed");
}
function withdrawUSDC(uint amount) external onlyOwner {
require(
usdc.balanceOf(address(this)) >= amount,
"There are not enough USDC in contract"
);
usdc.safeTransfer(msg.sender, amount);
}
//TO UPDATE RATES
function changeRate(
uint256 _usdtRate,
uint256 _ethToUsd,
uint256 divider
) public onlyOwner {
require(_usdtRate > 0, "Rate cannot be 0");
require(_ethToUsd > 0, "Rate cannot be 0");
tokenPriceUSD = _ethToUsd;
usdtRate = _usdtRate;
ethDivider = divider;
}
function enableSelling(uint256 _maxAmount) external onlyOwner {
require(!sellingEnabled, "Selling already enabled");
require(_maxAmount > 0, "Invalid amount");
sellSessionId += 1;
maxSellPerWallet = _maxAmount;
sellingEnabled = true;
}
function enableBuying() external onlyOwner {
require(!buyingEnabled, "Buying already enabled");
buyingEnabled = true;
}
function setMaxSellPerWallet(uint256 _amount) external onlyOwner {
require(sellingEnabled, "Selling is not enabled");
require(_amount > 0, "Invalid amount");
maxSellPerWallet = _amount;
}
function disableSelling() external onlyOwner {
require(sellingEnabled, "Selling already disabled");
sellingEnabled = false;
}
function disableBuying() external onlyOwner {
require(buyingEnabled, "Buying already disabled");
buyingEnabled = false;
}
function blacklist(address user) external onlyOwner {
isBlacklisted[user] = true;
}
function whitelist(address user) external onlyOwner {
isBlacklisted[user] = false;
}
function remainingSellLimit(address user) external view returns (uint256) {
if (!sellingEnabled) return 0;
uint256 sold = soldAmountPerSession[sellSessionId][user];
if (sold >= maxSellPerWallet) return 0;
return maxSellPerWallet - sold;
}
// ALL GETTER FUNCTIONS TO RETRIEVE DATA
function checkbalance() external view returns (uint256) {
return token.balanceOf(address(this));
}
function getETHPriceInUSD() public view returns (int256) {
return priceOracle.getLatestPrice();
}
function getDivider() public view returns (uint256) {
return ethDivider;
}
function getTokenUsdPrice() public view returns (uint256) {
return tokenPriceUSD;
}
function getUsdtRate() public view returns (uint256) {
return usdtRate;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyTokensWithUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyTokensWithUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdtRate","type":"uint256"},{"internalType":"uint256","name":"_ethToUsd","type":"uint256"},{"internalType":"uint256","name":"divider","type":"uint256"}],"name":"changeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositPYRX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBuying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSelling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBuying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAmount","type":"uint256"}],"name":"enableSelling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHPriceInUSD","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenUsdPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUsdtRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceOracle","outputs":[{"internalType":"contract ChainlinkPriceOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"remainingSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellSessionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sellTokensForEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sellTokensForUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sellTokensForUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxSellPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"soldAmountPerSession","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPriceUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawPYRX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e060405273e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525073dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff1681525073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1660c09073ffffffffffffffffffffffffffffffffffffffff1681525060056003556103e860045560c86005555f60065f6101000a81548160ff0219169083151502179055506001600660016101000a81548160ff021916908315150217905550348015610128575f5ffd5b5061014561013a6101b660201b60201c565b6101bd60201b60201c565b600180819055506040516101589061027e565b604051809103905ff080158015610171573d5f5f3e3d5ffd5b5060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061028b565b5f33905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6103a580614b9e83390190565b60805160a05160c05161483a6103645f395f8181610b2e01528181610f9601528181611d9601528181611f25015281816122fc015281816123da015261282201525f8181610ed801528181610fc3015281816110a1015281816113520152818161247301528181612b300152612cbf01525f8181610a4f01528181610b7a01528181610d1901528181610df701528181610f4c015281816112730152818161139e0152818161191d01528181611ed9015281816121b90152818161229701528181612560015281816128de0152612c73015261483a5ff3fe60806040526004361061025e575f3560e01c80639b19251a11610143578063ea4f3636116100b5578063f688bcfb11610079578063f688bcfb146107f1578063f771cb6514610819578063f9f92be414610843578063fc0c546a1461086b578063fe575a8714610895578063ff900c61146108d157610265565b8063ea4f363614610745578063eaa9600b1461076d578063f14210a614610797578063f2fde38b146107bf578063f6326fb3146107e757610265565b8063c36abc7e11610107578063c36abc7e14610671578063cadca6d014610699578063d0febe4c146106c1578063d9462709146106cb578063db81f99b146106f5578063e7c80f171461071d57610265565b80639b19251a146105b7578063aceecbc8146105df578063b237bfc0146105f5578063b3e7a3841461061f578063b62e3c5a1461064757610265565b80633ea521ef116101dc5780635ef8086f116101a05780635ef8086f146104e5578063639efa861461050d578063715018a6146105375780638da5cb5b1461054d5780638ed2fe911461057757806390cbf822146105a157610265565b80633ea521ef14610403578063407fcc311461042b5780635103b7c91461045557806351229d3b146104915780635be436d9146104bb57610265565b8063247f993b11610223578063247f993b146103475780632630c12f1461035d5780632f48ab7d1461038757806332bb0696146103b15780633e413bee146103d957610265565b8062fe8edc146102695780630664f58e146102915780631dc52bd5146102cd5780631e083cd3146102f75780632141cacd1461031f57610265565b3661026557005b5f5ffd5b348015610274575f5ffd5b5061028f600480360381019061028a91906132a8565b6108f9565b005b34801561029c575f5ffd5b506102b760048036038101906102b2919061332d565b610bcb565b6040516102c49190613367565b60405180910390f35b3480156102d8575f5ffd5b506102e1610c62565b6040516102ee9190613367565b60405180910390f35b348015610302575f5ffd5b5061031d60048036038101906103189190613380565b610c68565b005b34801561032a575f5ffd5b50610345600480360381019061034091906132a8565b610d0e565b005b348015610352575f5ffd5b5061035b610e3e565b005b348015610368575f5ffd5b50610371610eb1565b60405161037e919061342b565b60405180910390f35b348015610392575f5ffd5b5061039b610ed6565b6040516103a89190613464565b60405180910390f35b3480156103bc575f5ffd5b506103d760048036038101906103d291906132a8565b610efa565b005b3480156103e4575f5ffd5b506103ed610f94565b6040516103fa9190613464565b60405180910390f35b34801561040e575f5ffd5b50610429600480360381019061042491906132a8565b610fb8565b005b348015610436575f5ffd5b5061043f6110e8565b60405161044c9190613367565b60405180910390f35b348015610460575f5ffd5b5061047b6004803603810190610476919061347d565b6110ee565b6040516104889190613367565b60405180910390f35b34801561049c575f5ffd5b506104a561110e565b6040516104b29190613367565b60405180910390f35b3480156104c6575f5ffd5b506104cf611114565b6040516104dc9190613367565b60405180910390f35b3480156104f0575f5ffd5b5061050b600480360381019061050691906132a8565b61111d565b005b348015610518575f5ffd5b506105216113ef565b60405161052e9190613367565b60405180910390f35b348015610542575f5ffd5b5061054b6113f8565b005b348015610558575f5ffd5b5061056161140b565b60405161056e91906134ca565b60405180910390f35b348015610582575f5ffd5b5061058b611432565b60405161059891906134fd565b60405180910390f35b3480156105ac575f5ffd5b506105b5611445565b005b3480156105c2575f5ffd5b506105dd60048036038101906105d8919061332d565b6114ba565b005b3480156105ea575f5ffd5b506105f3611519565b005b348015610600575f5ffd5b5061060961158a565b6040516106169190613367565b60405180910390f35b34801561062a575f5ffd5b50610645600480360381019061064091906132a8565b611590565b005b348015610652575f5ffd5b5061065b611a19565b604051610668919061352e565b60405180910390f35b34801561067c575f5ffd5b50610697600480360381019061069291906132a8565b611aad565b005b3480156106a4575f5ffd5b506106bf60048036038101906106ba91906132a8565b611b83565b005b6106c9611f76565b005b3480156106d6575f5ffd5b506106df6122e8565b6040516106ec9190613367565b60405180910390f35b348015610700575f5ffd5b5061071b600480360381019061071691906132a8565b6122f1565b005b348015610728575f5ffd5b50610743600480360381019061073e91906132a8565b612421565b005b348015610750575f5ffd5b5061076b600480360381019061076691906132a8565b6124bb565b005b348015610778575f5ffd5b5061078161255d565b60405161078e9190613367565b60405180910390f35b3480156107a2575f5ffd5b506107bd60048036038101906107b891906132a8565b6125fb565b005b3480156107ca575f5ffd5b506107e560048036038101906107e0919061332d565b612702565b005b6107ef612784565b005b3480156107fc575f5ffd5b50610817600480360381019061081291906132a8565b6127d0565b005b348015610824575f5ffd5b5061082d61286a565b60405161083a91906134fd565b60405180910390f35b34801561084e575f5ffd5b506108696004803603810190610864919061332d565b61287c565b005b348015610876575f5ffd5b5061087f6128dc565b60405161088c9190613464565b60405180910390f35b3480156108a0575f5ffd5b506108bb60048036038101906108b6919061332d565b612900565b6040516108c891906134fd565b60405180910390f35b3480156108dc575f5ffd5b506108f760048036038101906108f291906132a8565b61291d565b005b610901612d10565b600660019054906101000a900460ff16610950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610947906135a1565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156109da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d190613609565b60405180910390fd5b620f4240811015610a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1790613671565b60405180910390fd5b5f64e8d4a5100082610a3291906136bc565b90505f610a4a60055483612d5f90919063ffffffff16565b9050807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610aa691906134ca565b602060405180830381865afa158015610ac1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae59190613711565b1015610b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1d90613786565b60405180910390fd5b610b733330857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b610bbe33827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b5050610bc8612e83565b50565b5f60065f9054906101000a900460ff16610be7575f9050610c5d565b5f600a5f60095481526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506007548110610c4b575f915050610c5d565b80600754610c5991906137a4565b9150505b919050565b60095481565b610c70612e8c565b5f8311610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990613821565b60405180910390fd5b5f8211610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb90613821565b60405180910390fd5b816003819055508260058190555080600481905550505050565b610d16612e8c565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d7091906134ca565b602060405180830381865afa158015610d8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daf9190613711565b1015610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de7906138af565b60405180910390fd5b610e3b33827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b50565b610e46612e8c565b600660019054906101000a900460ff16610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c90613917565b60405180910390fd5b5f600660016101000a81548160ff021916908315150217905550565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610f02612e8c565b5f8111610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b906139a5565b60405180910390fd5b610f913330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b610fc0612e8c565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161101a91906134ca565b602060405180830381865afa158015611035573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110599190613711565b101561109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190613a33565b60405180910390fd5b6110e533827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b50565b60035481565b600a602052815f5260405f20602052805f5260405f205f91509150505481565b60045481565b5f600354905090565b611125612d10565b600660019054906101000a900460ff16611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116b906135a1565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590613609565b60405180910390fd5b620f4240811015611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90613a9b565b60405180910390fd5b5f64e8d4a510008261125691906136bc565b90505f61126e60055483612d5f90919063ffffffff16565b9050807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112ca91906134ca565b602060405180830381865afa1580156112e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113099190613711565b101561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190613786565b60405180910390fd5b6113973330857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b6113e233827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b50506113ec612e83565b50565b5f600454905090565b611400612e8c565b6114095f612f0a565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660019054906101000a900460ff1681565b61144d612e8c565b600660019054906101000a900460ff161561149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490613b03565b60405180910390fd5b6001600660016101000a81548160ff021916908315150217905550565b6114c2612e8c565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611521612e8c565b60065f9054906101000a900460ff1661156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690613b6b565b60405180910390fd5b5f60065f6101000a81548160ff021916908315150217905550565b60075481565b611598612d10565b60065f9054906101000a900460ff166115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613bd3565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790613609565b60405180910390fd5b670de0b6b3a76400008110156116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290613c3b565b60405180910390fd5b5f600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050600754828261171c9190613c59565b111561175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490613cd6565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ec9190613d1e565b90505f8113611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790613d93565b60405180910390fd5b5f61186c8261185e60045461185060035489612d5f90919063ffffffff16565b612fcb90919063ffffffff16565b612fcb90919063ffffffff16565b9050804710156118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890613dfb565b60405180910390fd5b83600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461190e9190613c59565b925050819055506119623330867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b5f3373ffffffffffffffffffffffffffffffffffffffff168260405161198790613e46565b5f6040518083038185875af1925050503d805f81146119c1576040519150601f19603f3d011682016040523d82523d5f602084013e6119c6565b606091505b5050905080611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190613ea4565b60405180910390fd5b50505050611a16612e83565b50565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aa89190613d1e565b905090565b611ab5612e8c565b60065f9054906101000a900460ff1615611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613f0c565b60405180910390fd5b5f8111611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90613f74565b60405180910390fd5b600160095f828254611b589190613c59565b9250508190555080600781905550600160065f6101000a81548160ff02191690831515021790555050565b611b8b612d10565b60065f9054906101000a900460ff16611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090613bd3565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90613609565b60405180910390fd5b670de0b6b3a7640000811015611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca590613c3b565b60405180910390fd5b5f600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506007548282611d0f9190613c59565b1115611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790613cd6565b60405180910390fd5b5f611d91600454611d83600354611d7564e8d4a5100088612fcb90919063ffffffff16565b612d5f90919063ffffffff16565b612fcb90919063ffffffff16565b9050807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ded91906134ca565b602060405180830381865afa158015611e08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e2c9190613711565b1015611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6490613fdc565b60405180910390fd5b82600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611eca9190613c59565b92505081905550611f1e3330857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b611f6933827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b5050611f73612e83565b50565b611f7e612d10565b600660019054906101000a900460ff16611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc4906135a1565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613609565b60405180910390fd5b66038d7ea4c680003410156120a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120989061406a565b60405180910390fd5b5f3490505f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612110573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121349190613d1e565b90505f8113612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90613d93565b60405180910390fd5b5f6121b46003546121a66004546121988688612d5f90919063ffffffff16565b612d5f90919063ffffffff16565b612fcb90919063ffffffff16565b9050807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161221091906134ca565b602060405180830381865afa15801561222b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061224f9190613711565b1015612290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228790613786565b60405180910390fd5b6122db33827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b5050506122e6612e83565b565b5f600554905090565b6122f9612e8c565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161235391906134ca565b602060405180830381865afa15801561236e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123929190613711565b10156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca906140f8565b60405180910390fd5b61241e33827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b50565b612429612e8c565b5f811161246b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612462906139a5565b60405180910390fd5b6124b83330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b50565b6124c3612e8c565b60065f9054906101000a900460ff16612511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250890614160565b60405180910390fd5b5f8111612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90613f74565b60405180910390fd5b8060078190555050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125b791906134ca565b602060405180830381865afa1580156125d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f69190613711565b905090565b612603612e8c565b61260b612d10565b8047101561264e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612645906141ee565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff168260405161267390613e46565b5f6040518083038185875af1925050503d805f81146126ad576040519150601f19603f3d011682016040523d82523d5f602084013e6126b2565b606091505b50509050806126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed90614256565b60405180910390fd5b506126ff612e83565b50565b61270a612e8c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f906142e4565b60405180910390fd5b61278181612f0a565b50565b61278c612e8c565b5f34116127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c59061434c565b60405180910390fd5b565b6127d8612e8c565b5f811161281a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612811906139a5565b60405180910390fd5b6128673330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b50565b60065f9054906101000a900460ff1681565b612884612e8c565b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6008602052805f5260405f205f915054906101000a900460ff1681565b612925612d10565b60065f9054906101000a900460ff16612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296a90613bd3565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490613609565b60405180910390fd5b670de0b6b3a7640000811015612a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3f90613c3b565b60405180910390fd5b5f600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506007548282612aa99190613c59565b1115612aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae190613cd6565b60405180910390fd5b5f612b2b600454612b1d600354612b0f64e8d4a5100088612fcb90919063ffffffff16565b612d5f90919063ffffffff16565b612fcb90919063ffffffff16565b9050807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b8791906134ca565b602060405180830381865afa158015612ba2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bc69190613711565b1015612c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfe906143b4565b60405180910390fd5b82600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612c649190613c59565b92505081905550612cb83330857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b612d0333827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b5050612d0d612e83565b50565b600260015403612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c9061441c565b60405180910390fd5b6002600181905550565b5f8183612d6c91906136bc565b905092915050565b612df7846323b872dd60e01b858585604051602401612d959392919061443a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612fe0565b50505050565b612e7e8363a9059cbb60e01b8484604051602401612e1c92919061446f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612fe0565b505050565b60018081905550565b612e946130a5565b73ffffffffffffffffffffffffffffffffffffffff16612eb261140b565b73ffffffffffffffffffffffffffffffffffffffff1614612f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eff906144e0565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8183612fd8919061452b565b905092915050565b5f613041826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130ac9092919063ffffffff16565b90505f815111156130a057808060200190518101906130609190614585565b61309f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309690614620565b60405180910390fd5b5b505050565b5f33905090565b60606130ba84845f856130c3565b90509392505050565b606082471015613108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ff906146ae565b60405180910390fd5b5f5f8673ffffffffffffffffffffffffffffffffffffffff1685876040516131309190614714565b5f6040518083038185875af1925050503d805f811461316a576040519150601f19603f3d011682016040523d82523d5f602084013e61316f565b606091505b50915091506131808783838761318c565b92505050949350505050565b606083156131ed575f8351036131e5576131a585613200565b6131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db90614774565b60405180910390fd5b5b8290506131f8565b6131f78383613222565b5b949350505050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f825111156132345781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326891906147e4565b60405180910390fd5b5f5ffd5b5f819050919050565b61328781613275565b8114613291575f5ffd5b50565b5f813590506132a28161327e565b92915050565b5f602082840312156132bd576132bc613271565b5b5f6132ca84828501613294565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132fc826132d3565b9050919050565b61330c816132f2565b8114613316575f5ffd5b50565b5f8135905061332781613303565b92915050565b5f6020828403121561334257613341613271565b5b5f61334f84828501613319565b91505092915050565b61336181613275565b82525050565b5f60208201905061337a5f830184613358565b92915050565b5f5f5f6060848603121561339757613396613271565b5b5f6133a486828701613294565b93505060206133b586828701613294565b92505060406133c686828701613294565b9150509250925092565b5f819050919050565b5f6133f36133ee6133e9846132d3565b6133d0565b6132d3565b9050919050565b5f613404826133d9565b9050919050565b5f613415826133fa565b9050919050565b6134258161340b565b82525050565b5f60208201905061343e5f83018461341c565b92915050565b5f61344e826133fa565b9050919050565b61345e81613444565b82525050565b5f6020820190506134775f830184613455565b92915050565b5f5f6040838503121561349357613492613271565b5b5f6134a085828601613294565b92505060206134b185828601613319565b9150509250929050565b6134c4816132f2565b82525050565b5f6020820190506134dd5f8301846134bb565b92915050565b5f8115159050919050565b6134f7816134e3565b82525050565b5f6020820190506135105f8301846134ee565b92915050565b5f819050919050565b61352881613516565b82525050565b5f6020820190506135415f83018461351f565b92915050565b5f82825260208201905092915050565b7f427579696e672069732064697361626c656400000000000000000000000000005f82015250565b5f61358b601283613547565b915061359682613557565b602082019050919050565b5f6020820190508181035f8301526135b88161357f565b9050919050565b7f4164647265737320697320626c61636b6c6973746564000000000000000000005f82015250565b5f6135f3601683613547565b91506135fe826135bf565b602082019050919050565b5f6020820190508181035f830152613620816135e7565b9050919050565b7f63616e7420627579206c6573732077697468207468616e2031205553444300005f82015250565b5f61365b601e83613547565b915061366682613627565b602082019050919050565b5f6020820190508181035f8301526136888161364f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6136c682613275565b91506136d183613275565b92508282026136df81613275565b915082820484148315176136f6576136f561368f565b5b5092915050565b5f8151905061370b8161327e565b92915050565b5f6020828403121561372657613725613271565b5b5f613733848285016136fd565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e20636f6e74726163740000005f82015250565b5f613770601d83613547565b915061377b8261373c565b602082019050919050565b5f6020820190508181035f83015261379d81613764565b9050919050565b5f6137ae82613275565b91506137b983613275565b92508282039050818111156137d1576137d061368f565b5b92915050565b7f526174652063616e6e6f742062652030000000000000000000000000000000005f82015250565b5f61380b601083613547565b9150613816826137d7565b602082019050919050565b5f6020820190508181035f830152613838816137ff565b9050919050565b7f546865726520617265206e6f7420656e6f75676820746f6b656e7320696e20635f8201527f6f6e747261637400000000000000000000000000000000000000000000000000602082015250565b5f613899602783613547565b91506138a48261383f565b604082019050919050565b5f6020820190508181035f8301526138c68161388d565b9050919050565b7f427579696e6720616c72656164792064697361626c65640000000000000000005f82015250565b5f613901601783613547565b915061390c826138cd565b602082019050919050565b5f6020820190508181035f83015261392e816138f5565b9050919050565b7f4465706f7369742076616c7565206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f61398f602483613547565b915061399a82613935565b604082019050919050565b5f6020820190508181035f8301526139bc81613983565b9050919050565b7f546865726520617265206e6f7420656e6f756768207573647420696e20636f6e5f8201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b5f613a1d602583613547565b9150613a28826139c3565b604082019050919050565b5f6020820190508181035f830152613a4a81613a11565b9050919050565b7f63616e7420627579206c6573732077697468207468616e2031205553445400005f82015250565b5f613a85601e83613547565b9150613a9082613a51565b602082019050919050565b5f6020820190508181035f830152613ab281613a79565b9050919050565b7f427579696e6720616c726561647920656e61626c6564000000000000000000005f82015250565b5f613aed601683613547565b9150613af882613ab9565b602082019050919050565b5f6020820190508181035f830152613b1a81613ae1565b9050919050565b7f53656c6c696e6720616c72656164792064697361626c656400000000000000005f82015250565b5f613b55601883613547565b9150613b6082613b21565b602082019050919050565b5f6020820190508181035f830152613b8281613b49565b9050919050565b7f53656c6c696e672069732064697361626c6564000000000000000000000000005f82015250565b5f613bbd601383613547565b9150613bc882613b89565b602082019050919050565b5f6020820190508181035f830152613bea81613bb1565b9050919050565b7f4d696e696d756d203120746f6b656e00000000000000000000000000000000005f82015250565b5f613c25600f83613547565b9150613c3082613bf1565b602082019050919050565b5f6020820190508181035f830152613c5281613c19565b9050919050565b5f613c6382613275565b9150613c6e83613275565b9250828201905080821115613c8657613c8561368f565b5b92915050565b7f53656c6c206c696d6974206578636565646564000000000000000000000000005f82015250565b5f613cc0601383613547565b9150613ccb82613c8c565b602082019050919050565b5f6020820190508181035f830152613ced81613cb4565b9050919050565b613cfd81613516565b8114613d07575f5ffd5b50565b5f81519050613d1881613cf4565b92915050565b5f60208284031215613d3357613d32613271565b5b5f613d4084828501613d0a565b91505092915050565b7f496e76616c6964204554482070726963650000000000000000000000000000005f82015250565b5f613d7d601183613547565b9150613d8882613d49565b602082019050919050565b5f6020820190508181035f830152613daa81613d71565b9050919050565b7f4e6f7420656e6f756768204554480000000000000000000000000000000000005f82015250565b5f613de5600e83613547565b9150613df082613db1565b602082019050919050565b5f6020820190508181035f830152613e1281613dd9565b9050919050565b5f81905092915050565b50565b5f613e315f83613e19565b9150613e3c82613e23565b5f82019050919050565b5f613e5082613e26565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f613e8e601383613547565b9150613e9982613e5a565b602082019050919050565b5f6020820190508181035f830152613ebb81613e82565b9050919050565b7f53656c6c696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f613ef6601783613547565b9150613f0182613ec2565b602082019050919050565b5f6020820190508181035f830152613f2381613eea565b9050919050565b7f496e76616c696420616d6f756e740000000000000000000000000000000000005f82015250565b5f613f5e600e83613547565b9150613f6982613f2a565b602082019050919050565b5f6020820190508181035f830152613f8b81613f52565b9050919050565b7f4e6f7420656e6f756768205553444300000000000000000000000000000000005f82015250565b5f613fc6600f83613547565b9150613fd182613f92565b602082019050919050565b5f6020820190508181035f830152613ff381613fba565b9050919050565b7f63616e7420627579206c6573732077697468207468616e20302e3030312045545f8201527f4800000000000000000000000000000000000000000000000000000000000000602082015250565b5f614054602183613547565b915061405f82613ffa565b604082019050919050565b5f6020820190508181035f83015261408181614048565b9050919050565b7f546865726520617265206e6f7420656e6f756768205553444320696e20636f6e5f8201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b5f6140e2602583613547565b91506140ed82614088565b604082019050919050565b5f6020820190508181035f83015261410f816140d6565b9050919050565b7f53656c6c696e67206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f61414a601683613547565b915061415582614116565b602082019050919050565b5f6020820190508181035f8301526141778161413e565b9050919050565b7f5468657265206973206e6f7420656e6f7567682045544820696e20636f6e74725f8201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b5f6141d8602383613547565b91506141e38261417e565b604082019050919050565b5f6020820190508181035f830152614205816141cc565b9050919050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f614240600b83613547565b915061424b8261420c565b602082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6142ce602683613547565b91506142d982614274565b604082019050919050565b5f6020820190508181035f8301526142fb816142c2565b9050919050565b7f4d7573742073656e642045544820746f206465706f73697400000000000000005f82015250565b5f614336601883613547565b915061434182614302565b602082019050919050565b5f6020820190508181035f8301526143638161432a565b9050919050565b7f4e6f7420656e6f756768205553445400000000000000000000000000000000005f82015250565b5f61439e600f83613547565b91506143a98261436a565b602082019050919050565b5f6020820190508181035f8301526143cb81614392565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614406601f83613547565b9150614411826143d2565b602082019050919050565b5f6020820190508181035f830152614433816143fa565b9050919050565b5f60608201905061444d5f8301866134bb565b61445a60208301856134bb565b6144676040830184613358565b949350505050565b5f6040820190506144825f8301856134bb565b61448f6020830184613358565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6144ca602083613547565b91506144d582614496565b602082019050919050565b5f6020820190508181035f8301526144f7816144be565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61453582613275565b915061454083613275565b9250826145505761454f6144fe565b5b828204905092915050565b614564816134e3565b811461456e575f5ffd5b50565b5f8151905061457f8161455b565b92915050565b5f6020828403121561459a57614599613271565b5b5f6145a784828501614571565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f61460a602a83613547565b9150614615826145b0565b604082019050919050565b5f6020820190508181035f830152614637816145fe565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f614698602683613547565b91506146a38261463e565b604082019050919050565b5f6020820190508181035f8301526146c58161468c565b9050919050565b5f81519050919050565b8281835e5f83830152505050565b5f6146ee826146cc565b6146f88185613e19565b93506147088185602086016146d6565b80840191505092915050565b5f61471f82846146e4565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f61475e601d83613547565b91506147698261472a565b602082019050919050565b5f6020820190508181035f83015261478b81614752565b9050919050565b5f81519050919050565b5f601f19601f8301169050919050565b5f6147b682614792565b6147c08185613547565b93506147d08185602086016146d6565b6147d98161479c565b840191505092915050565b5f6020820190508181035f8301526147fc81846147ac565b90509291505056fea26469706673582212207f8ed5794a2a22f71d5d9f0a2a215311247b5d627e8e990b851de5f64561514464736f6c634300081b00336080604052348015600e575f5ffd5b50735f4ec3df9cbd43714fe2740f5e3616155c5b84195f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103368061006f5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80638e15f4731461002d575b5f5ffd5b61003561004b565b604051610042919061010e565b60405180910390f35b5f5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156100b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100da91906101c7565b5050509150506305f5e100816100f09190610298565b91505090565b5f819050919050565b610108816100f6565b82525050565b5f6020820190506101215f8301846100ff565b92915050565b5f5ffd5b5f69ffffffffffffffffffff82169050919050565b6101498161012b565b8114610153575f5ffd5b50565b5f8151905061016481610140565b92915050565b610173816100f6565b811461017d575f5ffd5b50565b5f8151905061018e8161016a565b92915050565b5f819050919050565b6101a681610194565b81146101b0575f5ffd5b50565b5f815190506101c18161019d565b92915050565b5f5f5f5f5f60a086880312156101e0576101df610127565b5b5f6101ed88828901610156565b95505060206101fe88828901610180565b945050604061020f888289016101b3565b9350506060610220888289016101b3565b925050608061023188828901610156565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6102a2826100f6565b91506102ad836100f6565b9250826102bd576102bc61023e565b5b60015f0383147f8000000000000000000000000000000000000000000000000000000000000000831416156102f5576102f461026b565b5b82820590509291505056fea26469706673582212201cc98374352fbd4f4b59878e788f7538cb05bd440fc1273efabac24ead12798c64736f6c634300081b0033
Deployed Bytecode
0x60806040526004361061025e575f3560e01c80639b19251a11610143578063ea4f3636116100b5578063f688bcfb11610079578063f688bcfb146107f1578063f771cb6514610819578063f9f92be414610843578063fc0c546a1461086b578063fe575a8714610895578063ff900c61146108d157610265565b8063ea4f363614610745578063eaa9600b1461076d578063f14210a614610797578063f2fde38b146107bf578063f6326fb3146107e757610265565b8063c36abc7e11610107578063c36abc7e14610671578063cadca6d014610699578063d0febe4c146106c1578063d9462709146106cb578063db81f99b146106f5578063e7c80f171461071d57610265565b80639b19251a146105b7578063aceecbc8146105df578063b237bfc0146105f5578063b3e7a3841461061f578063b62e3c5a1461064757610265565b80633ea521ef116101dc5780635ef8086f116101a05780635ef8086f146104e5578063639efa861461050d578063715018a6146105375780638da5cb5b1461054d5780638ed2fe911461057757806390cbf822146105a157610265565b80633ea521ef14610403578063407fcc311461042b5780635103b7c91461045557806351229d3b146104915780635be436d9146104bb57610265565b8063247f993b11610223578063247f993b146103475780632630c12f1461035d5780632f48ab7d1461038757806332bb0696146103b15780633e413bee146103d957610265565b8062fe8edc146102695780630664f58e146102915780631dc52bd5146102cd5780631e083cd3146102f75780632141cacd1461031f57610265565b3661026557005b5f5ffd5b348015610274575f5ffd5b5061028f600480360381019061028a91906132a8565b6108f9565b005b34801561029c575f5ffd5b506102b760048036038101906102b2919061332d565b610bcb565b6040516102c49190613367565b60405180910390f35b3480156102d8575f5ffd5b506102e1610c62565b6040516102ee9190613367565b60405180910390f35b348015610302575f5ffd5b5061031d60048036038101906103189190613380565b610c68565b005b34801561032a575f5ffd5b50610345600480360381019061034091906132a8565b610d0e565b005b348015610352575f5ffd5b5061035b610e3e565b005b348015610368575f5ffd5b50610371610eb1565b60405161037e919061342b565b60405180910390f35b348015610392575f5ffd5b5061039b610ed6565b6040516103a89190613464565b60405180910390f35b3480156103bc575f5ffd5b506103d760048036038101906103d291906132a8565b610efa565b005b3480156103e4575f5ffd5b506103ed610f94565b6040516103fa9190613464565b60405180910390f35b34801561040e575f5ffd5b50610429600480360381019061042491906132a8565b610fb8565b005b348015610436575f5ffd5b5061043f6110e8565b60405161044c9190613367565b60405180910390f35b348015610460575f5ffd5b5061047b6004803603810190610476919061347d565b6110ee565b6040516104889190613367565b60405180910390f35b34801561049c575f5ffd5b506104a561110e565b6040516104b29190613367565b60405180910390f35b3480156104c6575f5ffd5b506104cf611114565b6040516104dc9190613367565b60405180910390f35b3480156104f0575f5ffd5b5061050b600480360381019061050691906132a8565b61111d565b005b348015610518575f5ffd5b506105216113ef565b60405161052e9190613367565b60405180910390f35b348015610542575f5ffd5b5061054b6113f8565b005b348015610558575f5ffd5b5061056161140b565b60405161056e91906134ca565b60405180910390f35b348015610582575f5ffd5b5061058b611432565b60405161059891906134fd565b60405180910390f35b3480156105ac575f5ffd5b506105b5611445565b005b3480156105c2575f5ffd5b506105dd60048036038101906105d8919061332d565b6114ba565b005b3480156105ea575f5ffd5b506105f3611519565b005b348015610600575f5ffd5b5061060961158a565b6040516106169190613367565b60405180910390f35b34801561062a575f5ffd5b50610645600480360381019061064091906132a8565b611590565b005b348015610652575f5ffd5b5061065b611a19565b604051610668919061352e565b60405180910390f35b34801561067c575f5ffd5b50610697600480360381019061069291906132a8565b611aad565b005b3480156106a4575f5ffd5b506106bf60048036038101906106ba91906132a8565b611b83565b005b6106c9611f76565b005b3480156106d6575f5ffd5b506106df6122e8565b6040516106ec9190613367565b60405180910390f35b348015610700575f5ffd5b5061071b600480360381019061071691906132a8565b6122f1565b005b348015610728575f5ffd5b50610743600480360381019061073e91906132a8565b612421565b005b348015610750575f5ffd5b5061076b600480360381019061076691906132a8565b6124bb565b005b348015610778575f5ffd5b5061078161255d565b60405161078e9190613367565b60405180910390f35b3480156107a2575f5ffd5b506107bd60048036038101906107b891906132a8565b6125fb565b005b3480156107ca575f5ffd5b506107e560048036038101906107e0919061332d565b612702565b005b6107ef612784565b005b3480156107fc575f5ffd5b50610817600480360381019061081291906132a8565b6127d0565b005b348015610824575f5ffd5b5061082d61286a565b60405161083a91906134fd565b60405180910390f35b34801561084e575f5ffd5b506108696004803603810190610864919061332d565b61287c565b005b348015610876575f5ffd5b5061087f6128dc565b60405161088c9190613464565b60405180910390f35b3480156108a0575f5ffd5b506108bb60048036038101906108b6919061332d565b612900565b6040516108c891906134fd565b60405180910390f35b3480156108dc575f5ffd5b506108f760048036038101906108f291906132a8565b61291d565b005b610901612d10565b600660019054906101000a900460ff16610950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610947906135a1565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156109da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d190613609565b60405180910390fd5b620f4240811015610a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1790613671565b60405180910390fd5b5f64e8d4a5100082610a3291906136bc565b90505f610a4a60055483612d5f90919063ffffffff16565b9050807f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610aa691906134ca565b602060405180830381865afa158015610ac1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae59190613711565b1015610b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1d90613786565b60405180910390fd5b610b733330857f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b610bbe33827f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b5050610bc8612e83565b50565b5f60065f9054906101000a900460ff16610be7575f9050610c5d565b5f600a5f60095481526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506007548110610c4b575f915050610c5d565b80600754610c5991906137a4565b9150505b919050565b60095481565b610c70612e8c565b5f8311610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990613821565b60405180910390fd5b5f8211610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb90613821565b60405180910390fd5b816003819055508260058190555080600481905550505050565b610d16612e8c565b807f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d7091906134ca565b602060405180830381865afa158015610d8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daf9190613711565b1015610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de7906138af565b60405180910390fd5b610e3b33827f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b50565b610e46612e8c565b600660019054906101000a900460ff16610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c90613917565b60405180910390fd5b5f600660016101000a81548160ff021916908315150217905550565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b610f02612e8c565b5f8111610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b906139a5565b60405180910390fd5b610f913330837f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b50565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b610fc0612e8c565b807f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161101a91906134ca565b602060405180830381865afa158015611035573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110599190613711565b101561109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190613a33565b60405180910390fd5b6110e533827f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b50565b60035481565b600a602052815f5260405f20602052805f5260405f205f91509150505481565b60045481565b5f600354905090565b611125612d10565b600660019054906101000a900460ff16611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116b906135a1565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590613609565b60405180910390fd5b620f4240811015611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90613a9b565b60405180910390fd5b5f64e8d4a510008261125691906136bc565b90505f61126e60055483612d5f90919063ffffffff16565b9050807f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112ca91906134ca565b602060405180830381865afa1580156112e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113099190613711565b101561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190613786565b60405180910390fd5b6113973330857f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b6113e233827f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b50506113ec612e83565b50565b5f600454905090565b611400612e8c565b6114095f612f0a565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660019054906101000a900460ff1681565b61144d612e8c565b600660019054906101000a900460ff161561149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490613b03565b60405180910390fd5b6001600660016101000a81548160ff021916908315150217905550565b6114c2612e8c565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611521612e8c565b60065f9054906101000a900460ff1661156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690613b6b565b60405180910390fd5b5f60065f6101000a81548160ff021916908315150217905550565b60075481565b611598612d10565b60065f9054906101000a900460ff166115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613bd3565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790613609565b60405180910390fd5b670de0b6b3a76400008110156116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290613c3b565b60405180910390fd5b5f600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050600754828261171c9190613c59565b111561175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490613cd6565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ec9190613d1e565b90505f8113611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790613d93565b60405180910390fd5b5f61186c8261185e60045461185060035489612d5f90919063ffffffff16565b612fcb90919063ffffffff16565b612fcb90919063ffffffff16565b9050804710156118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890613dfb565b60405180910390fd5b83600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461190e9190613c59565b925050819055506119623330867f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b5f3373ffffffffffffffffffffffffffffffffffffffff168260405161198790613e46565b5f6040518083038185875af1925050503d805f81146119c1576040519150601f19603f3d011682016040523d82523d5f602084013e6119c6565b606091505b5050905080611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190613ea4565b60405180910390fd5b50505050611a16612e83565b50565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aa89190613d1e565b905090565b611ab5612e8c565b60065f9054906101000a900460ff1615611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613f0c565b60405180910390fd5b5f8111611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90613f74565b60405180910390fd5b600160095f828254611b589190613c59565b9250508190555080600781905550600160065f6101000a81548160ff02191690831515021790555050565b611b8b612d10565b60065f9054906101000a900460ff16611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090613bd3565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90613609565b60405180910390fd5b670de0b6b3a7640000811015611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca590613c3b565b60405180910390fd5b5f600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506007548282611d0f9190613c59565b1115611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790613cd6565b60405180910390fd5b5f611d91600454611d83600354611d7564e8d4a5100088612fcb90919063ffffffff16565b612d5f90919063ffffffff16565b612fcb90919063ffffffff16565b9050807f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ded91906134ca565b602060405180830381865afa158015611e08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e2c9190613711565b1015611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6490613fdc565b60405180910390fd5b82600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611eca9190613c59565b92505081905550611f1e3330857f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b611f6933827f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b5050611f73612e83565b50565b611f7e612d10565b600660019054906101000a900460ff16611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc4906135a1565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613609565b60405180910390fd5b66038d7ea4c680003410156120a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120989061406a565b60405180910390fd5b5f3490505f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612110573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121349190613d1e565b90505f8113612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90613d93565b60405180910390fd5b5f6121b46003546121a66004546121988688612d5f90919063ffffffff16565b612d5f90919063ffffffff16565b612fcb90919063ffffffff16565b9050807f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161221091906134ca565b602060405180830381865afa15801561222b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061224f9190613711565b1015612290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228790613786565b60405180910390fd5b6122db33827f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b5050506122e6612e83565b565b5f600554905090565b6122f9612e8c565b807f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161235391906134ca565b602060405180830381865afa15801561236e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123929190613711565b10156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca906140f8565b60405180910390fd5b61241e33827f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b50565b612429612e8c565b5f811161246b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612462906139a5565b60405180910390fd5b6124b83330837f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b50565b6124c3612e8c565b60065f9054906101000a900460ff16612511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250890614160565b60405180910390fd5b5f8111612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90613f74565b60405180910390fd5b8060078190555050565b5f7f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125b791906134ca565b602060405180830381865afa1580156125d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f69190613711565b905090565b612603612e8c565b61260b612d10565b8047101561264e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612645906141ee565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff168260405161267390613e46565b5f6040518083038185875af1925050503d805f81146126ad576040519150601f19603f3d011682016040523d82523d5f602084013e6126b2565b606091505b50509050806126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed90614256565b60405180910390fd5b506126ff612e83565b50565b61270a612e8c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f906142e4565b60405180910390fd5b61278181612f0a565b50565b61278c612e8c565b5f34116127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c59061434c565b60405180910390fd5b565b6127d8612e8c565b5f811161281a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612811906139a5565b60405180910390fd5b6128673330837f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b50565b60065f9054906101000a900460ff1681565b612884612e8c565b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b7f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc81565b6008602052805f5260405f205f915054906101000a900460ff1681565b612925612d10565b60065f9054906101000a900460ff16612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296a90613bd3565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490613609565b60405180910390fd5b670de0b6b3a7640000811015612a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3f90613c3b565b60405180910390fd5b5f600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506007548282612aa99190613c59565b1115612aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae190613cd6565b60405180910390fd5b5f612b2b600454612b1d600354612b0f64e8d4a5100088612fcb90919063ffffffff16565b612d5f90919063ffffffff16565b612fcb90919063ffffffff16565b9050807f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b8791906134ca565b602060405180830381865afa158015612ba2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bc69190613711565b1015612c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfe906143b4565b60405180910390fd5b82600a5f60095481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612c649190613c59565b92505081905550612cb83330857f000000000000000000000000e58278e99f0c21c0216396ad8ce1e9da36edefcc73ffffffffffffffffffffffffffffffffffffffff16612d74909392919063ffffffff16565b612d0333827f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff16612dfd9092919063ffffffff16565b5050612d0d612e83565b50565b600260015403612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c9061441c565b60405180910390fd5b6002600181905550565b5f8183612d6c91906136bc565b905092915050565b612df7846323b872dd60e01b858585604051602401612d959392919061443a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612fe0565b50505050565b612e7e8363a9059cbb60e01b8484604051602401612e1c92919061446f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612fe0565b505050565b60018081905550565b612e946130a5565b73ffffffffffffffffffffffffffffffffffffffff16612eb261140b565b73ffffffffffffffffffffffffffffffffffffffff1614612f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eff906144e0565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8183612fd8919061452b565b905092915050565b5f613041826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130ac9092919063ffffffff16565b90505f815111156130a057808060200190518101906130609190614585565b61309f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309690614620565b60405180910390fd5b5b505050565b5f33905090565b60606130ba84845f856130c3565b90509392505050565b606082471015613108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ff906146ae565b60405180910390fd5b5f5f8673ffffffffffffffffffffffffffffffffffffffff1685876040516131309190614714565b5f6040518083038185875af1925050503d805f811461316a576040519150601f19603f3d011682016040523d82523d5f602084013e61316f565b606091505b50915091506131808783838761318c565b92505050949350505050565b606083156131ed575f8351036131e5576131a585613200565b6131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db90614774565b60405180910390fd5b5b8290506131f8565b6131f78383613222565b5b949350505050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f825111156132345781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326891906147e4565b60405180910390fd5b5f5ffd5b5f819050919050565b61328781613275565b8114613291575f5ffd5b50565b5f813590506132a28161327e565b92915050565b5f602082840312156132bd576132bc613271565b5b5f6132ca84828501613294565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132fc826132d3565b9050919050565b61330c816132f2565b8114613316575f5ffd5b50565b5f8135905061332781613303565b92915050565b5f6020828403121561334257613341613271565b5b5f61334f84828501613319565b91505092915050565b61336181613275565b82525050565b5f60208201905061337a5f830184613358565b92915050565b5f5f5f6060848603121561339757613396613271565b5b5f6133a486828701613294565b93505060206133b586828701613294565b92505060406133c686828701613294565b9150509250925092565b5f819050919050565b5f6133f36133ee6133e9846132d3565b6133d0565b6132d3565b9050919050565b5f613404826133d9565b9050919050565b5f613415826133fa565b9050919050565b6134258161340b565b82525050565b5f60208201905061343e5f83018461341c565b92915050565b5f61344e826133fa565b9050919050565b61345e81613444565b82525050565b5f6020820190506134775f830184613455565b92915050565b5f5f6040838503121561349357613492613271565b5b5f6134a085828601613294565b92505060206134b185828601613319565b9150509250929050565b6134c4816132f2565b82525050565b5f6020820190506134dd5f8301846134bb565b92915050565b5f8115159050919050565b6134f7816134e3565b82525050565b5f6020820190506135105f8301846134ee565b92915050565b5f819050919050565b61352881613516565b82525050565b5f6020820190506135415f83018461351f565b92915050565b5f82825260208201905092915050565b7f427579696e672069732064697361626c656400000000000000000000000000005f82015250565b5f61358b601283613547565b915061359682613557565b602082019050919050565b5f6020820190508181035f8301526135b88161357f565b9050919050565b7f4164647265737320697320626c61636b6c6973746564000000000000000000005f82015250565b5f6135f3601683613547565b91506135fe826135bf565b602082019050919050565b5f6020820190508181035f830152613620816135e7565b9050919050565b7f63616e7420627579206c6573732077697468207468616e2031205553444300005f82015250565b5f61365b601e83613547565b915061366682613627565b602082019050919050565b5f6020820190508181035f8301526136888161364f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6136c682613275565b91506136d183613275565b92508282026136df81613275565b915082820484148315176136f6576136f561368f565b5b5092915050565b5f8151905061370b8161327e565b92915050565b5f6020828403121561372657613725613271565b5b5f613733848285016136fd565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e20636f6e74726163740000005f82015250565b5f613770601d83613547565b915061377b8261373c565b602082019050919050565b5f6020820190508181035f83015261379d81613764565b9050919050565b5f6137ae82613275565b91506137b983613275565b92508282039050818111156137d1576137d061368f565b5b92915050565b7f526174652063616e6e6f742062652030000000000000000000000000000000005f82015250565b5f61380b601083613547565b9150613816826137d7565b602082019050919050565b5f6020820190508181035f830152613838816137ff565b9050919050565b7f546865726520617265206e6f7420656e6f75676820746f6b656e7320696e20635f8201527f6f6e747261637400000000000000000000000000000000000000000000000000602082015250565b5f613899602783613547565b91506138a48261383f565b604082019050919050565b5f6020820190508181035f8301526138c68161388d565b9050919050565b7f427579696e6720616c72656164792064697361626c65640000000000000000005f82015250565b5f613901601783613547565b915061390c826138cd565b602082019050919050565b5f6020820190508181035f83015261392e816138f5565b9050919050565b7f4465706f7369742076616c7565206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f61398f602483613547565b915061399a82613935565b604082019050919050565b5f6020820190508181035f8301526139bc81613983565b9050919050565b7f546865726520617265206e6f7420656e6f756768207573647420696e20636f6e5f8201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b5f613a1d602583613547565b9150613a28826139c3565b604082019050919050565b5f6020820190508181035f830152613a4a81613a11565b9050919050565b7f63616e7420627579206c6573732077697468207468616e2031205553445400005f82015250565b5f613a85601e83613547565b9150613a9082613a51565b602082019050919050565b5f6020820190508181035f830152613ab281613a79565b9050919050565b7f427579696e6720616c726561647920656e61626c6564000000000000000000005f82015250565b5f613aed601683613547565b9150613af882613ab9565b602082019050919050565b5f6020820190508181035f830152613b1a81613ae1565b9050919050565b7f53656c6c696e6720616c72656164792064697361626c656400000000000000005f82015250565b5f613b55601883613547565b9150613b6082613b21565b602082019050919050565b5f6020820190508181035f830152613b8281613b49565b9050919050565b7f53656c6c696e672069732064697361626c6564000000000000000000000000005f82015250565b5f613bbd601383613547565b9150613bc882613b89565b602082019050919050565b5f6020820190508181035f830152613bea81613bb1565b9050919050565b7f4d696e696d756d203120746f6b656e00000000000000000000000000000000005f82015250565b5f613c25600f83613547565b9150613c3082613bf1565b602082019050919050565b5f6020820190508181035f830152613c5281613c19565b9050919050565b5f613c6382613275565b9150613c6e83613275565b9250828201905080821115613c8657613c8561368f565b5b92915050565b7f53656c6c206c696d6974206578636565646564000000000000000000000000005f82015250565b5f613cc0601383613547565b9150613ccb82613c8c565b602082019050919050565b5f6020820190508181035f830152613ced81613cb4565b9050919050565b613cfd81613516565b8114613d07575f5ffd5b50565b5f81519050613d1881613cf4565b92915050565b5f60208284031215613d3357613d32613271565b5b5f613d4084828501613d0a565b91505092915050565b7f496e76616c6964204554482070726963650000000000000000000000000000005f82015250565b5f613d7d601183613547565b9150613d8882613d49565b602082019050919050565b5f6020820190508181035f830152613daa81613d71565b9050919050565b7f4e6f7420656e6f756768204554480000000000000000000000000000000000005f82015250565b5f613de5600e83613547565b9150613df082613db1565b602082019050919050565b5f6020820190508181035f830152613e1281613dd9565b9050919050565b5f81905092915050565b50565b5f613e315f83613e19565b9150613e3c82613e23565b5f82019050919050565b5f613e5082613e26565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f613e8e601383613547565b9150613e9982613e5a565b602082019050919050565b5f6020820190508181035f830152613ebb81613e82565b9050919050565b7f53656c6c696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f613ef6601783613547565b9150613f0182613ec2565b602082019050919050565b5f6020820190508181035f830152613f2381613eea565b9050919050565b7f496e76616c696420616d6f756e740000000000000000000000000000000000005f82015250565b5f613f5e600e83613547565b9150613f6982613f2a565b602082019050919050565b5f6020820190508181035f830152613f8b81613f52565b9050919050565b7f4e6f7420656e6f756768205553444300000000000000000000000000000000005f82015250565b5f613fc6600f83613547565b9150613fd182613f92565b602082019050919050565b5f6020820190508181035f830152613ff381613fba565b9050919050565b7f63616e7420627579206c6573732077697468207468616e20302e3030312045545f8201527f4800000000000000000000000000000000000000000000000000000000000000602082015250565b5f614054602183613547565b915061405f82613ffa565b604082019050919050565b5f6020820190508181035f83015261408181614048565b9050919050565b7f546865726520617265206e6f7420656e6f756768205553444320696e20636f6e5f8201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b5f6140e2602583613547565b91506140ed82614088565b604082019050919050565b5f6020820190508181035f83015261410f816140d6565b9050919050565b7f53656c6c696e67206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f61414a601683613547565b915061415582614116565b602082019050919050565b5f6020820190508181035f8301526141778161413e565b9050919050565b7f5468657265206973206e6f7420656e6f7567682045544820696e20636f6e74725f8201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b5f6141d8602383613547565b91506141e38261417e565b604082019050919050565b5f6020820190508181035f830152614205816141cc565b9050919050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f614240600b83613547565b915061424b8261420c565b602082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6142ce602683613547565b91506142d982614274565b604082019050919050565b5f6020820190508181035f8301526142fb816142c2565b9050919050565b7f4d7573742073656e642045544820746f206465706f73697400000000000000005f82015250565b5f614336601883613547565b915061434182614302565b602082019050919050565b5f6020820190508181035f8301526143638161432a565b9050919050565b7f4e6f7420656e6f756768205553445400000000000000000000000000000000005f82015250565b5f61439e600f83613547565b91506143a98261436a565b602082019050919050565b5f6020820190508181035f8301526143cb81614392565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614406601f83613547565b9150614411826143d2565b602082019050919050565b5f6020820190508181035f830152614433816143fa565b9050919050565b5f60608201905061444d5f8301866134bb565b61445a60208301856134bb565b6144676040830184613358565b949350505050565b5f6040820190506144825f8301856134bb565b61448f6020830184613358565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6144ca602083613547565b91506144d582614496565b602082019050919050565b5f6020820190508181035f8301526144f7816144be565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61453582613275565b915061454083613275565b9250826145505761454f6144fe565b5b828204905092915050565b614564816134e3565b811461456e575f5ffd5b50565b5f8151905061457f8161455b565b92915050565b5f6020828403121561459a57614599613271565b5b5f6145a784828501614571565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f61460a602a83613547565b9150614615826145b0565b604082019050919050565b5f6020820190508181035f830152614637816145fe565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f614698602683613547565b91506146a38261463e565b604082019050919050565b5f6020820190508181035f8301526146c58161468c565b9050919050565b5f81519050919050565b8281835e5f83830152505050565b5f6146ee826146cc565b6146f88185613e19565b93506147088185602086016146d6565b80840191505092915050565b5f61471f82846146e4565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f61475e601d83613547565b91506147698261472a565b602082019050919050565b5f6020820190508181035f83015261478b81614752565b9050919050565b5f81519050919050565b5f601f19601f8301169050919050565b5f6147b682614792565b6147c08185613547565b93506147d08185602086016146d6565b6147d98161479c565b840191505092915050565b5f6020820190508181035f8301526147fc81846147ac565b90509291505056fea26469706673582212207f8ed5794a2a22f71d5d9f0a2a215311247b5d627e8e990b851de5f64561514464736f6c634300081b0033
Deployed Bytecode Sourcemap
26223:10598:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29046:624;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35954:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27118:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34423:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33299:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35591:144;;;;;;;;;;;;;:::i;:::-;;26344:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26545:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32523:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26671:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33558:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26827:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27153:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26866:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36626:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28386:624;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36530:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2880:103;;;;;;;;;;;;;:::i;:::-;;2232:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26985:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35060:142;;;;;;;;;;;;;:::i;:::-;;35848:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35437:148;;;;;;;;;;;;;:::i;:::-;;27026:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29678:1057;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36411:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34769:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31618:867;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27383:967;;;:::i;:::-;;36731:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34145:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32730:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35210:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36291:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33813:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3138:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33142:118;;;:::i;:::-;;32936:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26944:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35743:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26419:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27066:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30743:867;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29046:624;25330:21;:19;:21::i;:::-;29128:13:::1;;;;;;;;;;;29120:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;29184:13;:25;29198:10;29184:25;;;;;;;;;;;;;;;;;;;;;;;;;29183:26;29175:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29265:11;29255:6;:21;;29247:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29322:17;29351:8;29342:6;:17;;;;:::i;:::-;29322:37;;29370:14;29387:23;29401:8;;29387:9;:13;;:23;;;;:::i;:::-;29370:40;;29479:6;29445:5;:15;;;29469:4;29445:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;29423:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;29555:56;29577:10;29597:4;29604:6;29555:4;:21;;;;:56;;;;;;:::i;:::-;29624:38;29643:10;29655:6;29624:5;:18;;;;:38;;;;;:::i;:::-;29109:561;;25374:20:::0;:18;:20::i;:::-;29046:624;:::o;35954:283::-;36019:7;36044:14;;;;;;;;;;;36039:29;;36067:1;36060:8;;;;36039:29;36081:12;36096:20;:35;36117:13;;36096:35;;;;;;;;;;;:41;36132:4;36096:41;;;;;;;;;;;;;;;;36081:56;;36160:16;;36152:4;:24;36148:38;;36185:1;36178:8;;;;;36148:38;36225:4;36206:16;;:23;;;;:::i;:::-;36199:30;;;35954:283;;;;:::o;27118:28::-;;;;:::o;34423:338::-;2118:13;:11;:13::i;:::-;34580:1:::1;34568:9;:13;34560:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;34633:1;34621:9;:13;34613:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;34682:9;34666:13;:25;;;;34713:9;34702:8;:20;;;;34746:7;34733:10;:20;;;;34423:338:::0;;;:::o;33299:251::-;2118:13;:11;:13::i;:::-;33420:6:::1;33386:5;:15;;;33410:4;33386:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;33364:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;33504:38;33523:10;33535:6;33504:5;:18;;;;:38;;;;;:::i;:::-;33299:251:::0;:::o;35591:144::-;2118:13;:11;:13::i;:::-;35654::::1;;;;;;;;;;;35646:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;35722:5;35706:13;;:21;;;;;;;;;;;;;;;;;;35591:144::o:0;26344:39::-;;;;;;;;;;;;;:::o;26545:90::-;;;:::o;32523:199::-;2118:13;:11;:13::i;:::-;32604:1:::1;32595:6;:10;32587:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;32657:57;32680:10;32700:4;32707:6;32657:5;:22;;;;:57;;;;;;:::i;:::-;32523:199:::0;:::o;26671:90::-;;;:::o;33558:247::-;2118:13;:11;:13::i;:::-;33678:6:::1;33645:4;:14;;;33668:4;33645:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;33623:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;33760:37;33778:10;33790:6;33760:4;:17;;;;:37;;;;;:::i;:::-;33558:247:::0;:::o;26827:32::-;;;;:::o;27153:75::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26866:32::-;;;;:::o;36626:97::-;36675:7;36702:13;;36695:20;;36626:97;:::o;28386:624::-;25330:21;:19;:21::i;:::-;28468:13:::1;;;;;;;;;;;28460:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;28524:13;:25;28538:10;28524:25;;;;;;;;;;;;;;;;;;;;;;;;;28523:26;28515:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28605:11;28595:6;:21;;28587:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28662:17;28691:8;28682:6;:17;;;;:::i;:::-;28662:37;;28710:14;28727:23;28741:8;;28727:9;:13;;:23;;;;:::i;:::-;28710:40;;28819:6;28785:5;:15;;;28809:4;28785:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;28763:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;28895:56;28917:10;28937:4;28944:6;28895:4;:21;;;;:56;;;;;;:::i;:::-;28964:38;28983:10;28995:6;28964:5;:18;;;;:38;;;;;:::i;:::-;28449:561;;25374:20:::0;:18;:20::i;:::-;28386:624;:::o;36530:88::-;36573:7;36600:10;;36593:17;;36530:88;:::o;2880:103::-;2118:13;:11;:13::i;:::-;2945:30:::1;2972:1;2945:18;:30::i;:::-;2880:103::o:0;2232:87::-;2278:7;2305:6;;;;;;;;;;;2298:13;;2232:87;:::o;26985:32::-;;;;;;;;;;;;;:::o;35060:142::-;2118:13;:11;:13::i;:::-;35123::::1;;;;;;;;;;;35122:14;35114:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;35190:4;35174:13;;:20;;;;;;;;;;;;;;;;;;35060:142::o:0;35848:98::-;2118:13;:11;:13::i;:::-;35933:5:::1;35911:13;:19;35925:4;35911:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;35848:98:::0;:::o;35437:148::-;2118:13;:11;:13::i;:::-;35501:14:::1;;;;;;;;;;;35493:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;35572:5;35555:14;;:22;;;;;;;;;;;;;;;;;;35437:148::o:0;27026:31::-;;;;:::o;29678:1057::-;25330:21;:19;:21::i;:::-;29764:14:::1;;;;;;;;;;;29756:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29822:13;:25;29836:10;29822:25;;;;;;;;;;;;;;;;;;;;;;;;;29821:26;29813:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29908:4;29893:11;:19;;29885:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;29945:19;29967:20;:35;29988:13;;29967:35;;;;;;;;;;;:47;30003:10;29967:47;;;;;;;;;;;;;;;;29945:69;;30076:16;;30061:11;30047;:25;;;;:::i;:::-;:45;;30025:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;30152:15;30170:11;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30152:46;;30228:1;30217:8;:12;30209:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;30264:17;30284:93;30357:8;30284:46;30319:10;;30284:30;30300:13;;30284:11;:15;;:30;;;;:::i;:::-;:34;;:46;;;;:::i;:::-;:50;;:93;;;;:::i;:::-;30264:113;;30423:9;30398:21;:34;;30390:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30515:11;30464:20;:35;30485:13;;30464:35;;;;;;;;;;;:47;30500:10;30464:47;;;;;;;;;;;;;;;;:62;;;;;;;:::i;:::-;;;;;;;;30539;30562:10;30582:4;30589:11;30539:5;:22;;;;:62;;;;;;:::i;:::-;30613:12;30639:10;30631:24;;30663:9;30631:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30612:65;;;30696:7;30688:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;29745:990;;;;25374:20:::0;:18;:20::i;:::-;29678:1057;:::o;36411:111::-;36460:6;36486:11;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36479:35;;36411:111;:::o;34769:285::-;2118:13;:11;:13::i;:::-;34851:14:::1;;;;;;;;;;;34850:15;34842:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34925:1;34912:10;:14;34904:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:1;34956:13;;:18;;;;;;;:::i;:::-;;;;;;;;35004:10;34985:16;:29;;;;35042:4;35025:14;;:21;;;;;;;;;;;;;;;;;;34769:285:::0;:::o;31618:867::-;25330:21;:19;:21::i;:::-;31705:14:::1;;;;;;;;;;;31697:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;31763:13;:25;31777:10;31763:25;;;;;;;;;;;;;;;;;;;;;;;;;31762:26;31754:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31849:4;31834:11;:19;;31826:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;31886:19;31908:20;:35;31929:13;;31908:35;;;;;;;;;;;:47;31944:10;31908:47;;;;;;;;;;;;;;;;31886:69;;32017:16;;32002:11;31988;:25;;;;:::i;:::-;:45;;31966:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;32093:17;32113:80;32172:10;;32113:40;32139:13;;32113:21;32129:4;32113:11;:15;;:21;;;;:::i;:::-;:25;;:40;;;;:::i;:::-;:44;;:80;;;;:::i;:::-;32093:100;;32247:9;32214:4;:14;;;32237:4;32214:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;32206:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32340:11;32289:20;:35;32310:13;;32289:35;;;;;;;;;;;:47;32325:10;32289:47;;;;;;;;;;;;;;;;:62;;;;;;;:::i;:::-;;;;;;;;32364;32387:10;32407:4;32414:11;32364:5;:22;;;;:62;;;;;;:::i;:::-;32437:40;32455:10;32467:9;32437:4;:17;;;;:40;;;;;:::i;:::-;31686:799;;25374:20:::0;:18;:20::i;:::-;31618:867;:::o;27383:967::-;25330:21;:19;:21::i;:::-;27451:13:::1;;;;;;;;;;;27443:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;27507:13;:25;27521:10;27507:25;;;;;;;;;;;;;;;;;;;;;;;;;27506:26;27498:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27591:11;27578:9;:24;;27570:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27651:17;27671:9;27651:29;;27802:15;27820:11;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27802:46;;27878:1;27867:8;:12;27859:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;27914:14;27931:91;27998:13;;27931:48;27968:10;;27931:32;27953:8;27931:9;:13;;:32;;;;:::i;:::-;:36;;:48;;;;:::i;:::-;:52;;:91;;;;:::i;:::-;27914:108;;28091:6;28057:5;:15;;;28081:4;28057:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;28035:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;28304:38;28323:10;28335:6;28304:5;:18;;;;:38;;;;;:::i;:::-;27432:918;;;25374:20:::0;:18;:20::i;:::-;27383:967::o;36731:87::-;36775:7;36802:8;;36795:15;;36731:87;:::o;34145:247::-;2118:13;:11;:13::i;:::-;34265:6:::1;34232:4;:14;;;34255:4;34232:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;34210:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;34347:37;34365:10;34377:6;34347:4;:17;;;;:37;;;;;:::i;:::-;34145:247:::0;:::o;32730:198::-;2118:13;:11;:13::i;:::-;32811:1:::1;32802:6;:10;32794:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;32864:56;32886:10;32906:4;32913:6;32864:4;:21;;;;:56;;;;;;:::i;:::-;32730:198:::0;:::o;35210:219::-;2118:13;:11;:13::i;:::-;35294:14:::1;;;;;;;;;;;35286:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;35364:1;35354:7;:11;35346:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35414:7;35395:16;:26;;;;35210:219:::0;:::o;36291:112::-;36338:7;36365:5;:15;;;36389:4;36365:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36358:37;;36291:112;:::o;33813:324::-;2118:13;:11;:13::i;:::-;25330:21:::1;:19;:21::i;:::-;33937:6:::2;33912:21;:31;;33890:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;34018:16;34048:10;34040:24;;34072:6;34040:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34017:66;;;34102:11;34094:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;33879:258;25374:20:::1;:18;:20::i;:::-;33813:324:::0;:::o;3138:238::-;2118:13;:11;:13::i;:::-;3261:1:::1;3241:22;;:8;:22;;::::0;3219:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3340:28;3359:8;3340:18;:28::i;:::-;3138:238:::0;:::o;33142:118::-;2118:13;:11;:13::i;:::-;33222:1:::1;33210:9;:13;33202:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;33142:118::o:0;32936:198::-;2118:13;:11;:13::i;:::-;33017:1:::1;33008:6;:10;33000:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;33070:56;33092:10;33112:4;33119:6;33070:4;:21;;;;:56;;;;;;:::i;:::-;32936:198:::0;:::o;26944:34::-;;;;;;;;;;;;;:::o;35743:97::-;2118:13;:11;:13::i;:::-;35828:4:::1;35806:13;:19;35820:4;35806:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;35743:97:::0;:::o;26419:91::-;;;:::o;27066:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;30743:867::-;25330:21;:19;:21::i;:::-;30830:14:::1;;;;;;;;;;;30822:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;30888:13;:25;30902:10;30888:25;;;;;;;;;;;;;;;;;;;;;;;;;30887:26;30879:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30974:4;30959:11;:19;;30951:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;31011:19;31033:20;:35;31054:13;;31033:35;;;;;;;;;;;:47;31069:10;31033:47;;;;;;;;;;;;;;;;31011:69;;31142:16;;31127:11;31113;:25;;;;:::i;:::-;:45;;31091:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;31218:17;31238:80;31297:10;;31238:40;31264:13;;31238:21;31254:4;31238:11;:15;;:21;;;;:::i;:::-;:25;;:40;;;;:::i;:::-;:44;;:80;;;;:::i;:::-;31218:100;;31372:9;31339:4;:14;;;31362:4;31339:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;31331:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31465:11;31414:20;:35;31435:13;;31414:35;;;;;;;;;;;:47;31450:10;31414:47;;;;;;;;;;;;;;;;:62;;;;;;;:::i;:::-;;;;;;;;31489;31512:10;31532:4;31539:11;31489:5;:22;;;;:62;;;;;;:::i;:::-;31562:40;31580:10;31592:9;31562:4;:17;;;;:40;;;;;:::i;:::-;30811:799;;25374:20:::0;:18;:20::i;:::-;30743:867;:::o;25410:293::-;24812:1;25544:7;;:19;25536:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24812:1;25677:7;:18;;;;25410:293::o;19758:98::-;19816:7;19847:1;19843;:5;;;;:::i;:::-;19836:12;;19758:98;;;;:::o;12635:285::-;12779:133;12813:5;12856:27;;;12885:4;12891:2;12895:5;12833:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12779:19;:133::i;:::-;12635:285;;;;:::o;12413:214::-;12496:123;12530:5;12573:23;;;12598:2;12602:5;12550:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12496:19;:123::i;:::-;12413:214;;;:::o;25711:213::-;24768:1;25894:7;:22;;;;25711:213::o;2397:132::-;2472:12;:10;:12::i;:::-;2461:23;;:7;:5;:7::i;:::-;:23;;;2453:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2397:132::o;3536:191::-;3610:16;3629:6;;;;;;;;;;;3610:25;;3655:8;3646:6;;:17;;;;;;;;;;;;;;;;;;3710:8;3679:40;;3700:8;3679:40;;;;;;;;;;;;3599:128;3536:191;:::o;20157:98::-;20215:7;20246:1;20242;:5;;;;:::i;:::-;20235:12;;20157:98;;;;:::o;15233:802::-;15657:23;15683:106;15725:4;15683:106;;;;;;;;;;;;;;;;;15691:5;15683:27;;;;:106;;;;;:::i;:::-;15657:132;;15824:1;15804:10;:17;:21;15800:228;;;15919:10;15908:30;;;;;;;;;;;;:::i;:::-;15882:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;15800:228;15303:732;15233:802;;:::o;783:98::-;836:7;863:10;856:17;;783:98;:::o;7721:229::-;7858:12;7890:52;7912:6;7920:4;7926:1;7929:12;7890:21;:52::i;:::-;7883:59;;7721:229;;;;;:::o;8322:612::-;8492:12;8564:5;8539:21;:30;;8517:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;8647:12;8661:23;8688:6;:11;;8707:5;8728:4;8688:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8646:97;;;;8774:152;8819:6;8844:7;8870:10;8899:12;8774:26;:152::i;:::-;8754:172;;;;8322:612;;;;;;:::o;10438:644::-;10623:12;10652:7;10648:427;;;10701:1;10680:10;:17;:22;10676:290;;10898:18;10909:6;10898:10;:18::i;:::-;10890:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10676:290;10987:10;10980:17;;;;10648:427;11030:33;11038:10;11050:12;11030:7;:33::i;:::-;10438:644;;;;;;;:::o;6672:326::-;6732:4;6989:1;6967:7;:19;;;:23;6960:30;;6672:326;;;:::o;11403:577::-;11609:1;11589:10;:17;:21;11585:388;;;11821:10;11815:17;11878:15;11865:10;11861:2;11857:19;11850:44;11585:388;11948:12;11941:20;;;;;;;;;;;:::i;:::-;;;;;;;;88:117:1;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:126::-;1062:7;1102:42;1095:5;1091:54;1080:65;;1025:126;;;:::o;1157:96::-;1194:7;1223:24;1241:5;1223:24;:::i;:::-;1212:35;;1157:96;;;:::o;1259:122::-;1332:24;1350:5;1332:24;:::i;:::-;1325:5;1322:35;1312:63;;1371:1;1368;1361:12;1312:63;1259:122;:::o;1387:139::-;1433:5;1471:6;1458:20;1449:29;;1487:33;1514:5;1487:33;:::i;:::-;1387:139;;;;:::o;1532:329::-;1591:6;1640:2;1628:9;1619:7;1615:23;1611:32;1608:119;;;1646:79;;:::i;:::-;1608:119;1766:1;1791:53;1836:7;1827:6;1816:9;1812:22;1791:53;:::i;:::-;1781:63;;1737:117;1532:329;;;;:::o;1867:118::-;1954:24;1972:5;1954:24;:::i;:::-;1949:3;1942:37;1867:118;;:::o;1991:222::-;2084:4;2122:2;2111:9;2107:18;2099:26;;2135:71;2203:1;2192:9;2188:17;2179:6;2135:71;:::i;:::-;1991:222;;;;:::o;2219:619::-;2296:6;2304;2312;2361:2;2349:9;2340:7;2336:23;2332:32;2329:119;;;2367:79;;:::i;:::-;2329:119;2487:1;2512:53;2557:7;2548:6;2537:9;2533:22;2512:53;:::i;:::-;2502:63;;2458:117;2614:2;2640:53;2685:7;2676:6;2665:9;2661:22;2640:53;:::i;:::-;2630:63;;2585:118;2742:2;2768:53;2813:7;2804:6;2793:9;2789:22;2768:53;:::i;:::-;2758:63;;2713:118;2219:619;;;;;:::o;2844:60::-;2872:3;2893:5;2886:12;;2844:60;;;:::o;2910:142::-;2960:9;2993:53;3011:34;3020:24;3038:5;3020:24;:::i;:::-;3011:34;:::i;:::-;2993:53;:::i;:::-;2980:66;;2910:142;;;:::o;3058:126::-;3108:9;3141:37;3172:5;3141:37;:::i;:::-;3128:50;;3058:126;;;:::o;3190:155::-;3269:9;3302:37;3333:5;3302:37;:::i;:::-;3289:50;;3190:155;;;:::o;3351:189::-;3467:66;3527:5;3467:66;:::i;:::-;3462:3;3455:79;3351:189;;:::o;3546:280::-;3668:4;3706:2;3695:9;3691:18;3683:26;;3719:100;3816:1;3805:9;3801:17;3792:6;3719:100;:::i;:::-;3546:280;;;;:::o;3832:140::-;3896:9;3929:37;3960:5;3929:37;:::i;:::-;3916:50;;3832:140;;;:::o;3978:159::-;4079:51;4124:5;4079:51;:::i;:::-;4074:3;4067:64;3978:159;;:::o;4143:250::-;4250:4;4288:2;4277:9;4273:18;4265:26;;4301:85;4383:1;4372:9;4368:17;4359:6;4301:85;:::i;:::-;4143:250;;;;:::o;4399:474::-;4467:6;4475;4524:2;4512:9;4503:7;4499:23;4495:32;4492:119;;;4530:79;;:::i;:::-;4492:119;4650:1;4675:53;4720:7;4711:6;4700:9;4696:22;4675:53;:::i;:::-;4665:63;;4621:117;4777:2;4803:53;4848:7;4839:6;4828:9;4824:22;4803:53;:::i;:::-;4793:63;;4748:118;4399:474;;;;;:::o;4879:118::-;4966:24;4984:5;4966:24;:::i;:::-;4961:3;4954:37;4879:118;;:::o;5003:222::-;5096:4;5134:2;5123:9;5119:18;5111:26;;5147:71;5215:1;5204:9;5200:17;5191:6;5147:71;:::i;:::-;5003:222;;;;:::o;5231:90::-;5265:7;5308:5;5301:13;5294:21;5283:32;;5231:90;;;:::o;5327:109::-;5408:21;5423:5;5408:21;:::i;:::-;5403:3;5396:34;5327:109;;:::o;5442:210::-;5529:4;5567:2;5556:9;5552:18;5544:26;;5580:65;5642:1;5631:9;5627:17;5618:6;5580:65;:::i;:::-;5442:210;;;;:::o;5658:76::-;5694:7;5723:5;5712:16;;5658:76;;;:::o;5740:115::-;5825:23;5842:5;5825:23;:::i;:::-;5820:3;5813:36;5740:115;;:::o;5861:218::-;5952:4;5990:2;5979:9;5975:18;5967:26;;6003:69;6069:1;6058:9;6054:17;6045:6;6003:69;:::i;:::-;5861:218;;;;:::o;6085:169::-;6169:11;6203:6;6198:3;6191:19;6243:4;6238:3;6234:14;6219:29;;6085:169;;;;:::o;6260:168::-;6400:20;6396:1;6388:6;6384:14;6377:44;6260:168;:::o;6434:366::-;6576:3;6597:67;6661:2;6656:3;6597:67;:::i;:::-;6590:74;;6673:93;6762:3;6673:93;:::i;:::-;6791:2;6786:3;6782:12;6775:19;;6434:366;;;:::o;6806:419::-;6972:4;7010:2;6999:9;6995:18;6987:26;;7059:9;7053:4;7049:20;7045:1;7034:9;7030:17;7023:47;7087:131;7213:4;7087:131;:::i;:::-;7079:139;;6806:419;;;:::o;7231:172::-;7371:24;7367:1;7359:6;7355:14;7348:48;7231:172;:::o;7409:366::-;7551:3;7572:67;7636:2;7631:3;7572:67;:::i;:::-;7565:74;;7648:93;7737:3;7648:93;:::i;:::-;7766:2;7761:3;7757:12;7750:19;;7409:366;;;:::o;7781:419::-;7947:4;7985:2;7974:9;7970:18;7962:26;;8034:9;8028:4;8024:20;8020:1;8009:9;8005:17;7998:47;8062:131;8188:4;8062:131;:::i;:::-;8054:139;;7781:419;;;:::o;8206:180::-;8346:32;8342:1;8334:6;8330:14;8323:56;8206:180;:::o;8392:366::-;8534:3;8555:67;8619:2;8614:3;8555:67;:::i;:::-;8548:74;;8631:93;8720:3;8631:93;:::i;:::-;8749:2;8744:3;8740:12;8733:19;;8392:366;;;:::o;8764:419::-;8930:4;8968:2;8957:9;8953:18;8945:26;;9017:9;9011:4;9007:20;9003:1;8992:9;8988:17;8981:47;9045:131;9171:4;9045:131;:::i;:::-;9037:139;;8764:419;;;:::o;9189:180::-;9237:77;9234:1;9227:88;9334:4;9331:1;9324:15;9358:4;9355:1;9348:15;9375:410;9415:7;9438:20;9456:1;9438:20;:::i;:::-;9433:25;;9472:20;9490:1;9472:20;:::i;:::-;9467:25;;9527:1;9524;9520:9;9549:30;9567:11;9549:30;:::i;:::-;9538:41;;9728:1;9719:7;9715:15;9712:1;9709:22;9689:1;9682:9;9662:83;9639:139;;9758:18;;:::i;:::-;9639:139;9423:362;9375:410;;;;:::o;9791:143::-;9848:5;9879:6;9873:13;9864:22;;9895:33;9922:5;9895:33;:::i;:::-;9791:143;;;;:::o;9940:351::-;10010:6;10059:2;10047:9;10038:7;10034:23;10030:32;10027:119;;;10065:79;;:::i;:::-;10027:119;10185:1;10210:64;10266:7;10257:6;10246:9;10242:22;10210:64;:::i;:::-;10200:74;;10156:128;9940:351;;;;:::o;10297:179::-;10437:31;10433:1;10425:6;10421:14;10414:55;10297:179;:::o;10482:366::-;10624:3;10645:67;10709:2;10704:3;10645:67;:::i;:::-;10638:74;;10721:93;10810:3;10721:93;:::i;:::-;10839:2;10834:3;10830:12;10823:19;;10482:366;;;:::o;10854:419::-;11020:4;11058:2;11047:9;11043:18;11035:26;;11107:9;11101:4;11097:20;11093:1;11082:9;11078:17;11071:47;11135:131;11261:4;11135:131;:::i;:::-;11127:139;;10854:419;;;:::o;11279:194::-;11319:4;11339:20;11357:1;11339:20;:::i;:::-;11334:25;;11373:20;11391:1;11373:20;:::i;:::-;11368:25;;11417:1;11414;11410:9;11402:17;;11441:1;11435:4;11432:11;11429:37;;;11446:18;;:::i;:::-;11429:37;11279:194;;;;:::o;11479:166::-;11619:18;11615:1;11607:6;11603:14;11596:42;11479:166;:::o;11651:366::-;11793:3;11814:67;11878:2;11873:3;11814:67;:::i;:::-;11807:74;;11890:93;11979:3;11890:93;:::i;:::-;12008:2;12003:3;11999:12;11992:19;;11651:366;;;:::o;12023:419::-;12189:4;12227:2;12216:9;12212:18;12204:26;;12276:9;12270:4;12266:20;12262:1;12251:9;12247:17;12240:47;12304:131;12430:4;12304:131;:::i;:::-;12296:139;;12023:419;;;:::o;12448:226::-;12588:34;12584:1;12576:6;12572:14;12565:58;12657:9;12652:2;12644:6;12640:15;12633:34;12448:226;:::o;12680:366::-;12822:3;12843:67;12907:2;12902:3;12843:67;:::i;:::-;12836:74;;12919:93;13008:3;12919:93;:::i;:::-;13037:2;13032:3;13028:12;13021:19;;12680:366;;;:::o;13052:419::-;13218:4;13256:2;13245:9;13241:18;13233:26;;13305:9;13299:4;13295:20;13291:1;13280:9;13276:17;13269:47;13333:131;13459:4;13333:131;:::i;:::-;13325:139;;13052:419;;;:::o;13477:173::-;13617:25;13613:1;13605:6;13601:14;13594:49;13477:173;:::o;13656:366::-;13798:3;13819:67;13883:2;13878:3;13819:67;:::i;:::-;13812:74;;13895:93;13984:3;13895:93;:::i;:::-;14013:2;14008:3;14004:12;13997:19;;13656:366;;;:::o;14028:419::-;14194:4;14232:2;14221:9;14217:18;14209:26;;14281:9;14275:4;14271:20;14267:1;14256:9;14252:17;14245:47;14309:131;14435:4;14309:131;:::i;:::-;14301:139;;14028:419;;;:::o;14453:223::-;14593:34;14589:1;14581:6;14577:14;14570:58;14662:6;14657:2;14649:6;14645:15;14638:31;14453:223;:::o;14682:366::-;14824:3;14845:67;14909:2;14904:3;14845:67;:::i;:::-;14838:74;;14921:93;15010:3;14921:93;:::i;:::-;15039:2;15034:3;15030:12;15023:19;;14682:366;;;:::o;15054:419::-;15220:4;15258:2;15247:9;15243:18;15235:26;;15307:9;15301:4;15297:20;15293:1;15282:9;15278:17;15271:47;15335:131;15461:4;15335:131;:::i;:::-;15327:139;;15054:419;;;:::o;15479:224::-;15619:34;15615:1;15607:6;15603:14;15596:58;15688:7;15683:2;15675:6;15671:15;15664:32;15479:224;:::o;15709:366::-;15851:3;15872:67;15936:2;15931:3;15872:67;:::i;:::-;15865:74;;15948:93;16037:3;15948:93;:::i;:::-;16066:2;16061:3;16057:12;16050:19;;15709:366;;;:::o;16081:419::-;16247:4;16285:2;16274:9;16270:18;16262:26;;16334:9;16328:4;16324:20;16320:1;16309:9;16305:17;16298:47;16362:131;16488:4;16362:131;:::i;:::-;16354:139;;16081:419;;;:::o;16506:180::-;16646:32;16642:1;16634:6;16630:14;16623:56;16506:180;:::o;16692:366::-;16834:3;16855:67;16919:2;16914:3;16855:67;:::i;:::-;16848:74;;16931:93;17020:3;16931:93;:::i;:::-;17049:2;17044:3;17040:12;17033:19;;16692:366;;;:::o;17064:419::-;17230:4;17268:2;17257:9;17253:18;17245:26;;17317:9;17311:4;17307:20;17303:1;17292:9;17288:17;17281:47;17345:131;17471:4;17345:131;:::i;:::-;17337:139;;17064:419;;;:::o;17489:172::-;17629:24;17625:1;17617:6;17613:14;17606:48;17489:172;:::o;17667:366::-;17809:3;17830:67;17894:2;17889:3;17830:67;:::i;:::-;17823:74;;17906:93;17995:3;17906:93;:::i;:::-;18024:2;18019:3;18015:12;18008:19;;17667:366;;;:::o;18039:419::-;18205:4;18243:2;18232:9;18228:18;18220:26;;18292:9;18286:4;18282:20;18278:1;18267:9;18263:17;18256:47;18320:131;18446:4;18320:131;:::i;:::-;18312:139;;18039:419;;;:::o;18464:174::-;18604:26;18600:1;18592:6;18588:14;18581:50;18464:174;:::o;18644:366::-;18786:3;18807:67;18871:2;18866:3;18807:67;:::i;:::-;18800:74;;18883:93;18972:3;18883:93;:::i;:::-;19001:2;18996:3;18992:12;18985:19;;18644:366;;;:::o;19016:419::-;19182:4;19220:2;19209:9;19205:18;19197:26;;19269:9;19263:4;19259:20;19255:1;19244:9;19240:17;19233:47;19297:131;19423:4;19297:131;:::i;:::-;19289:139;;19016:419;;;:::o;19441:169::-;19581:21;19577:1;19569:6;19565:14;19558:45;19441:169;:::o;19616:366::-;19758:3;19779:67;19843:2;19838:3;19779:67;:::i;:::-;19772:74;;19855:93;19944:3;19855:93;:::i;:::-;19973:2;19968:3;19964:12;19957:19;;19616:366;;;:::o;19988:419::-;20154:4;20192:2;20181:9;20177:18;20169:26;;20241:9;20235:4;20231:20;20227:1;20216:9;20212:17;20205:47;20269:131;20395:4;20269:131;:::i;:::-;20261:139;;19988:419;;;:::o;20413:165::-;20553:17;20549:1;20541:6;20537:14;20530:41;20413:165;:::o;20584:366::-;20726:3;20747:67;20811:2;20806:3;20747:67;:::i;:::-;20740:74;;20823:93;20912:3;20823:93;:::i;:::-;20941:2;20936:3;20932:12;20925:19;;20584:366;;;:::o;20956:419::-;21122:4;21160:2;21149:9;21145:18;21137:26;;21209:9;21203:4;21199:20;21195:1;21184:9;21180:17;21173:47;21237:131;21363:4;21237:131;:::i;:::-;21229:139;;20956:419;;;:::o;21381:191::-;21421:3;21440:20;21458:1;21440:20;:::i;:::-;21435:25;;21474:20;21492:1;21474:20;:::i;:::-;21469:25;;21517:1;21514;21510:9;21503:16;;21538:3;21535:1;21532:10;21529:36;;;21545:18;;:::i;:::-;21529:36;21381:191;;;;:::o;21578:169::-;21718:21;21714:1;21706:6;21702:14;21695:45;21578:169;:::o;21753:366::-;21895:3;21916:67;21980:2;21975:3;21916:67;:::i;:::-;21909:74;;21992:93;22081:3;21992:93;:::i;:::-;22110:2;22105:3;22101:12;22094:19;;21753:366;;;:::o;22125:419::-;22291:4;22329:2;22318:9;22314:18;22306:26;;22378:9;22372:4;22368:20;22364:1;22353:9;22349:17;22342:47;22406:131;22532:4;22406:131;:::i;:::-;22398:139;;22125:419;;;:::o;22550:120::-;22622:23;22639:5;22622:23;:::i;:::-;22615:5;22612:34;22602:62;;22660:1;22657;22650:12;22602:62;22550:120;:::o;22676:141::-;22732:5;22763:6;22757:13;22748:22;;22779:32;22805:5;22779:32;:::i;:::-;22676:141;;;;:::o;22823:349::-;22892:6;22941:2;22929:9;22920:7;22916:23;22912:32;22909:119;;;22947:79;;:::i;:::-;22909:119;23067:1;23092:63;23147:7;23138:6;23127:9;23123:22;23092:63;:::i;:::-;23082:73;;23038:127;22823:349;;;;:::o;23178:167::-;23318:19;23314:1;23306:6;23302:14;23295:43;23178:167;:::o;23351:366::-;23493:3;23514:67;23578:2;23573:3;23514:67;:::i;:::-;23507:74;;23590:93;23679:3;23590:93;:::i;:::-;23708:2;23703:3;23699:12;23692:19;;23351:366;;;:::o;23723:419::-;23889:4;23927:2;23916:9;23912:18;23904:26;;23976:9;23970:4;23966:20;23962:1;23951:9;23947:17;23940:47;24004:131;24130:4;24004:131;:::i;:::-;23996:139;;23723:419;;;:::o;24148:164::-;24288:16;24284:1;24276:6;24272:14;24265:40;24148:164;:::o;24318:366::-;24460:3;24481:67;24545:2;24540:3;24481:67;:::i;:::-;24474:74;;24557:93;24646:3;24557:93;:::i;:::-;24675:2;24670:3;24666:12;24659:19;;24318:366;;;:::o;24690:419::-;24856:4;24894:2;24883:9;24879:18;24871:26;;24943:9;24937:4;24933:20;24929:1;24918:9;24914:17;24907:47;24971:131;25097:4;24971:131;:::i;:::-;24963:139;;24690:419;;;:::o;25115:147::-;25216:11;25253:3;25238:18;;25115:147;;;;:::o;25268:114::-;;:::o;25388:398::-;25547:3;25568:83;25649:1;25644:3;25568:83;:::i;:::-;25561:90;;25660:93;25749:3;25660:93;:::i;:::-;25778:1;25773:3;25769:11;25762:18;;25388:398;;;:::o;25792:379::-;25976:3;25998:147;26141:3;25998:147;:::i;:::-;25991:154;;26162:3;26155:10;;25792:379;;;:::o;26177:169::-;26317:21;26313:1;26305:6;26301:14;26294:45;26177:169;:::o;26352:366::-;26494:3;26515:67;26579:2;26574:3;26515:67;:::i;:::-;26508:74;;26591:93;26680:3;26591:93;:::i;:::-;26709:2;26704:3;26700:12;26693:19;;26352:366;;;:::o;26724:419::-;26890:4;26928:2;26917:9;26913:18;26905:26;;26977:9;26971:4;26967:20;26963:1;26952:9;26948:17;26941:47;27005:131;27131:4;27005:131;:::i;:::-;26997:139;;26724:419;;;:::o;27149:173::-;27289:25;27285:1;27277:6;27273:14;27266:49;27149:173;:::o;27328:366::-;27470:3;27491:67;27555:2;27550:3;27491:67;:::i;:::-;27484:74;;27567:93;27656:3;27567:93;:::i;:::-;27685:2;27680:3;27676:12;27669:19;;27328:366;;;:::o;27700:419::-;27866:4;27904:2;27893:9;27889:18;27881:26;;27953:9;27947:4;27943:20;27939:1;27928:9;27924:17;27917:47;27981:131;28107:4;27981:131;:::i;:::-;27973:139;;27700:419;;;:::o;28125:164::-;28265:16;28261:1;28253:6;28249:14;28242:40;28125:164;:::o;28295:366::-;28437:3;28458:67;28522:2;28517:3;28458:67;:::i;:::-;28451:74;;28534:93;28623:3;28534:93;:::i;:::-;28652:2;28647:3;28643:12;28636:19;;28295:366;;;:::o;28667:419::-;28833:4;28871:2;28860:9;28856:18;28848:26;;28920:9;28914:4;28910:20;28906:1;28895:9;28891:17;28884:47;28948:131;29074:4;28948:131;:::i;:::-;28940:139;;28667:419;;;:::o;29092:165::-;29232:17;29228:1;29220:6;29216:14;29209:41;29092:165;:::o;29263:366::-;29405:3;29426:67;29490:2;29485:3;29426:67;:::i;:::-;29419:74;;29502:93;29591:3;29502:93;:::i;:::-;29620:2;29615:3;29611:12;29604:19;;29263:366;;;:::o;29635:419::-;29801:4;29839:2;29828:9;29824:18;29816:26;;29888:9;29882:4;29878:20;29874:1;29863:9;29859:17;29852:47;29916:131;30042:4;29916:131;:::i;:::-;29908:139;;29635:419;;;:::o;30060:220::-;30200:34;30196:1;30188:6;30184:14;30177:58;30269:3;30264:2;30256:6;30252:15;30245:28;30060:220;:::o;30286:366::-;30428:3;30449:67;30513:2;30508:3;30449:67;:::i;:::-;30442:74;;30525:93;30614:3;30525:93;:::i;:::-;30643:2;30638:3;30634:12;30627:19;;30286:366;;;:::o;30658:419::-;30824:4;30862:2;30851:9;30847:18;30839:26;;30911:9;30905:4;30901:20;30897:1;30886:9;30882:17;30875:47;30939:131;31065:4;30939:131;:::i;:::-;30931:139;;30658:419;;;:::o;31083:224::-;31223:34;31219:1;31211:6;31207:14;31200:58;31292:7;31287:2;31279:6;31275:15;31268:32;31083:224;:::o;31313:366::-;31455:3;31476:67;31540:2;31535:3;31476:67;:::i;:::-;31469:74;;31552:93;31641:3;31552:93;:::i;:::-;31670:2;31665:3;31661:12;31654:19;;31313:366;;;:::o;31685:419::-;31851:4;31889:2;31878:9;31874:18;31866:26;;31938:9;31932:4;31928:20;31924:1;31913:9;31909:17;31902:47;31966:131;32092:4;31966:131;:::i;:::-;31958:139;;31685:419;;;:::o;32110:172::-;32250:24;32246:1;32238:6;32234:14;32227:48;32110:172;:::o;32288:366::-;32430:3;32451:67;32515:2;32510:3;32451:67;:::i;:::-;32444:74;;32527:93;32616:3;32527:93;:::i;:::-;32645:2;32640:3;32636:12;32629:19;;32288:366;;;:::o;32660:419::-;32826:4;32864:2;32853:9;32849:18;32841:26;;32913:9;32907:4;32903:20;32899:1;32888:9;32884:17;32877:47;32941:131;33067:4;32941:131;:::i;:::-;32933:139;;32660:419;;;:::o;33085:222::-;33225:34;33221:1;33213:6;33209:14;33202:58;33294:5;33289:2;33281:6;33277:15;33270:30;33085:222;:::o;33313:366::-;33455:3;33476:67;33540:2;33535:3;33476:67;:::i;:::-;33469:74;;33552:93;33641:3;33552:93;:::i;:::-;33670:2;33665:3;33661:12;33654:19;;33313:366;;;:::o;33685:419::-;33851:4;33889:2;33878:9;33874:18;33866:26;;33938:9;33932:4;33928:20;33924:1;33913:9;33909:17;33902:47;33966:131;34092:4;33966:131;:::i;:::-;33958:139;;33685:419;;;:::o;34110:161::-;34250:13;34246:1;34238:6;34234:14;34227:37;34110:161;:::o;34277:366::-;34419:3;34440:67;34504:2;34499:3;34440:67;:::i;:::-;34433:74;;34516:93;34605:3;34516:93;:::i;:::-;34634:2;34629:3;34625:12;34618:19;;34277:366;;;:::o;34649:419::-;34815:4;34853:2;34842:9;34838:18;34830:26;;34902:9;34896:4;34892:20;34888:1;34877:9;34873:17;34866:47;34930:131;35056:4;34930:131;:::i;:::-;34922:139;;34649:419;;;:::o;35074:225::-;35214:34;35210:1;35202:6;35198:14;35191:58;35283:8;35278:2;35270:6;35266:15;35259:33;35074:225;:::o;35305:366::-;35447:3;35468:67;35532:2;35527:3;35468:67;:::i;:::-;35461:74;;35544:93;35633:3;35544:93;:::i;:::-;35662:2;35657:3;35653:12;35646:19;;35305:366;;;:::o;35677:419::-;35843:4;35881:2;35870:9;35866:18;35858:26;;35930:9;35924:4;35920:20;35916:1;35905:9;35901:17;35894:47;35958:131;36084:4;35958:131;:::i;:::-;35950:139;;35677:419;;;:::o;36102:174::-;36242:26;36238:1;36230:6;36226:14;36219:50;36102:174;:::o;36282:366::-;36424:3;36445:67;36509:2;36504:3;36445:67;:::i;:::-;36438:74;;36521:93;36610:3;36521:93;:::i;:::-;36639:2;36634:3;36630:12;36623:19;;36282:366;;;:::o;36654:419::-;36820:4;36858:2;36847:9;36843:18;36835:26;;36907:9;36901:4;36897:20;36893:1;36882:9;36878:17;36871:47;36935:131;37061:4;36935:131;:::i;:::-;36927:139;;36654:419;;;:::o;37079:165::-;37219:17;37215:1;37207:6;37203:14;37196:41;37079:165;:::o;37250:366::-;37392:3;37413:67;37477:2;37472:3;37413:67;:::i;:::-;37406:74;;37489:93;37578:3;37489:93;:::i;:::-;37607:2;37602:3;37598:12;37591:19;;37250:366;;;:::o;37622:419::-;37788:4;37826:2;37815:9;37811:18;37803:26;;37875:9;37869:4;37865:20;37861:1;37850:9;37846:17;37839:47;37903:131;38029:4;37903:131;:::i;:::-;37895:139;;37622:419;;;:::o;38047:181::-;38187:33;38183:1;38175:6;38171:14;38164:57;38047:181;:::o;38234:366::-;38376:3;38397:67;38461:2;38456:3;38397:67;:::i;:::-;38390:74;;38473:93;38562:3;38473:93;:::i;:::-;38591:2;38586:3;38582:12;38575:19;;38234:366;;;:::o;38606:419::-;38772:4;38810:2;38799:9;38795:18;38787:26;;38859:9;38853:4;38849:20;38845:1;38834:9;38830:17;38823:47;38887:131;39013:4;38887:131;:::i;:::-;38879:139;;38606:419;;;:::o;39031:442::-;39180:4;39218:2;39207:9;39203:18;39195:26;;39231:71;39299:1;39288:9;39284:17;39275:6;39231:71;:::i;:::-;39312:72;39380:2;39369:9;39365:18;39356:6;39312:72;:::i;:::-;39394;39462:2;39451:9;39447:18;39438:6;39394:72;:::i;:::-;39031:442;;;;;;:::o;39479:332::-;39600:4;39638:2;39627:9;39623:18;39615:26;;39651:71;39719:1;39708:9;39704:17;39695:6;39651:71;:::i;:::-;39732:72;39800:2;39789:9;39785:18;39776:6;39732:72;:::i;:::-;39479:332;;;;;:::o;39817:182::-;39957:34;39953:1;39945:6;39941:14;39934:58;39817:182;:::o;40005:366::-;40147:3;40168:67;40232:2;40227:3;40168:67;:::i;:::-;40161:74;;40244:93;40333:3;40244:93;:::i;:::-;40362:2;40357:3;40353:12;40346:19;;40005:366;;;:::o;40377:419::-;40543:4;40581:2;40570:9;40566:18;40558:26;;40630:9;40624:4;40620:20;40616:1;40605:9;40601:17;40594:47;40658:131;40784:4;40658:131;:::i;:::-;40650:139;;40377:419;;;:::o;40802:180::-;40850:77;40847:1;40840:88;40947:4;40944:1;40937:15;40971:4;40968:1;40961:15;40988:185;41028:1;41045:20;41063:1;41045:20;:::i;:::-;41040:25;;41079:20;41097:1;41079:20;:::i;:::-;41074:25;;41118:1;41108:35;;41123:18;;:::i;:::-;41108:35;41165:1;41162;41158:9;41153:14;;40988:185;;;;:::o;41179:116::-;41249:21;41264:5;41249:21;:::i;:::-;41242:5;41239:32;41229:60;;41285:1;41282;41275:12;41229:60;41179:116;:::o;41301:137::-;41355:5;41386:6;41380:13;41371:22;;41402:30;41426:5;41402:30;:::i;:::-;41301:137;;;;:::o;41444:345::-;41511:6;41560:2;41548:9;41539:7;41535:23;41531:32;41528:119;;;41566:79;;:::i;:::-;41528:119;41686:1;41711:61;41764:7;41755:6;41744:9;41740:22;41711:61;:::i;:::-;41701:71;;41657:125;41444:345;;;;:::o;41795:229::-;41935:34;41931:1;41923:6;41919:14;41912:58;42004:12;41999:2;41991:6;41987:15;41980:37;41795:229;:::o;42030:366::-;42172:3;42193:67;42257:2;42252:3;42193:67;:::i;:::-;42186:74;;42269:93;42358:3;42269:93;:::i;:::-;42387:2;42382:3;42378:12;42371:19;;42030:366;;;:::o;42402:419::-;42568:4;42606:2;42595:9;42591:18;42583:26;;42655:9;42649:4;42645:20;42641:1;42630:9;42626:17;42619:47;42683:131;42809:4;42683:131;:::i;:::-;42675:139;;42402:419;;;:::o;42827:225::-;42967:34;42963:1;42955:6;42951:14;42944:58;43036:8;43031:2;43023:6;43019:15;43012:33;42827:225;:::o;43058:366::-;43200:3;43221:67;43285:2;43280:3;43221:67;:::i;:::-;43214:74;;43297:93;43386:3;43297:93;:::i;:::-;43415:2;43410:3;43406:12;43399:19;;43058:366;;;:::o;43430:419::-;43596:4;43634:2;43623:9;43619:18;43611:26;;43683:9;43677:4;43673:20;43669:1;43658:9;43654:17;43647:47;43711:131;43837:4;43711:131;:::i;:::-;43703:139;;43430:419;;;:::o;43855:98::-;43906:6;43940:5;43934:12;43924:22;;43855:98;;;:::o;43959:139::-;44048:6;44043:3;44038;44032:23;44089:1;44080:6;44075:3;44071:16;44064:27;43959:139;;;:::o;44104:386::-;44208:3;44236:38;44268:5;44236:38;:::i;:::-;44290:88;44371:6;44366:3;44290:88;:::i;:::-;44283:95;;44387:65;44445:6;44440:3;44433:4;44426:5;44422:16;44387:65;:::i;:::-;44477:6;44472:3;44468:16;44461:23;;44212:278;44104:386;;;;:::o;44496:271::-;44626:3;44648:93;44737:3;44728:6;44648:93;:::i;:::-;44641:100;;44758:3;44751:10;;44496:271;;;;:::o;44773:179::-;44913:31;44909:1;44901:6;44897:14;44890:55;44773:179;:::o;44958:366::-;45100:3;45121:67;45185:2;45180:3;45121:67;:::i;:::-;45114:74;;45197:93;45286:3;45197:93;:::i;:::-;45315:2;45310:3;45306:12;45299:19;;44958:366;;;:::o;45330:419::-;45496:4;45534:2;45523:9;45519:18;45511:26;;45583:9;45577:4;45573:20;45569:1;45558:9;45554:17;45547:47;45611:131;45737:4;45611:131;:::i;:::-;45603:139;;45330:419;;;:::o;45755:99::-;45807:6;45841:5;45835:12;45825:22;;45755:99;;;:::o;45860:102::-;45901:6;45952:2;45948:7;45943:2;45936:5;45932:14;45928:28;45918:38;;45860:102;;;:::o;45968:377::-;46056:3;46084:39;46117:5;46084:39;:::i;:::-;46139:71;46203:6;46198:3;46139:71;:::i;:::-;46132:78;;46219:65;46277:6;46272:3;46265:4;46258:5;46254:16;46219:65;:::i;:::-;46309:29;46331:6;46309:29;:::i;:::-;46304:3;46300:39;46293:46;;46060:285;45968:377;;;;:::o;46351:313::-;46464:4;46502:2;46491:9;46487:18;46479:26;;46551:9;46545:4;46541:20;46537:1;46526:9;46522:17;46515:47;46579:78;46652:4;46643:6;46579:78;:::i;:::-;46571:86;;46351:313;;;;:::o
Swarm Source
ipfs://1cc98374352fbd4f4b59878e788f7538cb05bd440fc1273efabac24ead12798c
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.