Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 530 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Eth | 13828260 | 1139 days ago | IN | 0 ETH | 0.00136281 | ||||
Create Limit Ord... | 13702594 | 1159 days ago | IN | 0 ETH | 0.02743881 | ||||
Cancel Order | 13702540 | 1159 days ago | IN | 0 ETH | 0.00743292 | ||||
Create Limit Ord... | 13586090 | 1177 days ago | IN | 0 ETH | 0.0553887 | ||||
Deposit Stake | 13586064 | 1177 days ago | IN | 0 ETH | 0.01913369 | ||||
Deposit Stake | 13342528 | 1215 days ago | IN | 0 ETH | 0.00356595 | ||||
Deposit Stake | 13342528 | 1215 days ago | IN | 0 ETH | 0.00661311 | ||||
Withdraw Stake | 13206347 | 1236 days ago | IN | 0 ETH | 0.02097797 | ||||
Cancel Order | 13202187 | 1237 days ago | IN | 0 ETH | 0.00823458 | ||||
Withdraw Eth | 13201531 | 1237 days ago | IN | 0 ETH | 0.00162243 | ||||
Withdraw Eth | 13201511 | 1237 days ago | IN | 0 ETH | 0.00144949 | ||||
Withdraw Eth | 13197836 | 1238 days ago | IN | 0 ETH | 0.00179552 | ||||
Withdraw Eth | 13176605 | 1241 days ago | IN | 0 ETH | 0.00255874 | ||||
Withdraw Eth | 13160968 | 1243 days ago | IN | 0 ETH | 0.00311566 | ||||
Withdraw Eth | 13101443 | 1252 days ago | IN | 0 ETH | 0.00372186 | ||||
Withdraw Stake | 13100365 | 1253 days ago | IN | 0 ETH | 0.00638747 | ||||
Create Limit Ord... | 13100351 | 1253 days ago | IN | 0 ETH | 0.0067684 | ||||
Create Limit Ord... | 13100337 | 1253 days ago | IN | 0 ETH | 0.00831007 | ||||
Create Limit Ord... | 13100308 | 1253 days ago | IN | 0 ETH | 0.00716395 | ||||
Create Limit Ord... | 13100246 | 1253 days ago | IN | 0 ETH | 0.00663331 | ||||
Create Limit Ord... | 13100233 | 1253 days ago | IN | 0 ETH | 0.00815142 | ||||
Withdraw Stake | 13100162 | 1253 days ago | IN | 0 ETH | 0.00736165 | ||||
Create Limit Ord... | 13100133 | 1253 days ago | IN | 0 ETH | 0.00873363 | ||||
Deposit Eth | 13100116 | 1253 days ago | IN | 0.9168 ETH | 0.00207121 | ||||
Create Limit Ord... | 13090554 | 1254 days ago | IN | 0 ETH | 0.02951995 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
13828260 | 1139 days ago | 0.06037688 ETH | ||||
13197836 | 1238 days ago | 0.00854033 ETH | ||||
13176605 | 1241 days ago | 0.02161 ETH | ||||
13160968 | 1243 days ago | 0.1 ETH | ||||
13101443 | 1252 days ago | 0.8564 ETH | ||||
13072946 | 1257 days ago | 0.40002502 ETH | ||||
13072581 | 1257 days ago | 0.2 ETH | ||||
13012765 | 1266 days ago | 0.46 ETH | ||||
12951264 | 1276 days ago | 1.02145967 ETH | ||||
12863666 | 1289 days ago | 0.61100026 ETH | ||||
12805417 | 1299 days ago | 0.2 ETH | ||||
12805259 | 1299 days ago | 0.3 ETH | ||||
12805225 | 1299 days ago | 0.2 ETH | ||||
12799970 | 1299 days ago | 0.39679973 ETH | ||||
12763100 | 1305 days ago | 1.29 ETH | ||||
12762794 | 1305 days ago | 0.926394 ETH | ||||
12755475 | 1306 days ago | 0.711 ETH | ||||
12749846 | 1307 days ago | 0.5879 ETH | ||||
12702725 | 1315 days ago | 2 ETH | ||||
12702225 | 1315 days ago | 0.018161 ETH | ||||
12702199 | 1315 days ago | 0.4512 ETH | ||||
12699015 | 1315 days ago | 0.2875 ETH | ||||
12697404 | 1315 days ago | 2.2695985 ETH | ||||
12696715 | 1316 days ago | 0.4 ETH | ||||
12695818 | 1316 days ago | 0.8 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
NFYTradingPlatform
Compiler Version
v0.6.10+commit.00c0fcaf
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-07 */ // File: @openzeppelin/contracts/math/SafeMath.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: contracts/Ownable.sol pragma solidity ^0.6.10; contract Ownable is Context { address public owner; address private dev; modifier onlyOwner() { require(_msgSender() == owner, "Owner only"); _; } modifier onlyDev() { require(_msgSender() == dev, "Dev only"); _; } constructor(address _dev) public { owner = _msgSender(); dev = _dev; } function transferOwnership(address payable _owner) public onlyOwner() { owner = _owner; } function transferDev(address _dev) public onlyDev() { dev = _dev; } } // File: contracts/NFYTradingPlatform.sol pragma solidity 0.6.10; pragma experimental ABIEncoderV2; interface NFTContract { function ownerOf(uint256 tokenId) external view returns (address owner); function nftTokenId(address _stakeholder) external view returns(uint256 id); } contract NFYTradingPlatform is Ownable { using SafeMath for uint; bytes32[] private stakeTokenList; uint private nextTradeId; uint private nextOrderId; uint public platformFee; IERC20 public NFYToken; address public rewardPool; address public communityFund; address public devAddress; enum Side { BUY, SELL } struct StakeToken { bytes32 ticker; NFTContract nftContract; address nftAddress; address stakingAddress; } struct Order { uint id; address userAddress; Side side; bytes32 ticker; uint amount; uint filled; uint price; uint date; } struct PendingTransactions{ uint pendingAmount; uint id; } mapping(bytes32 => mapping(address => PendingTransactions[])) private pendingETH; mapping(bytes32 => mapping(address => PendingTransactions[])) private pendingToken; mapping(bytes32 => StakeToken) private tokens; mapping(address => mapping(bytes32 => uint)) private traderBalances; mapping(bytes32 => mapping(uint => Order[])) private orderBook; mapping(address => uint) private ethBalance; // Event for a new trade event NewTrade( uint tradeId, uint orderId, bytes32 indexed ticker, address trader1, address trader2, uint amount, uint price, uint date ); constructor(address _nfy, address _rewardPool, uint _fee, address _devFeeAddress, address _communityFundAddress, address _dev) Ownable(_dev) public { NFYToken = IERC20(_nfy); rewardPool = _rewardPool; platformFee = _fee; devAddress = _devFeeAddress; communityFund = _communityFundAddress; } // Function that updates platform fee function setFee(uint _fee) external onlyOwner() { platformFee = _fee; } // Function that updates dev address for portion of fee function setDevFeeAddress(address _devAddress) external onlyDev() { require(_devAddress != address(0), "Can not be 0 address"); devAddress = _devAddress; } // Function that updates community address for portion of fee function setCommunityFeeAddress(address _communityAddress) external onlyOwner() { require(_communityAddress != address(0), "Can not be 0 address"); communityFund = _communityAddress; } // Function that gets balance of a user function getTraderBalance(address _user, string memory ticker) external view returns(uint) { bytes32 _ticker = stringToBytes32(ticker); return traderBalances[_user][_ticker]; } // Function that gets eth balance of a user function getEthBalance(address _user) external view returns(uint) { return ethBalance[_user]; } // Function that adds staking NFT function addToken(string memory ticker, NFTContract _NFTContract, address _nftAddress, address _stakingAddress) onlyOwner() external { bytes32 _ticker = stringToBytes32(ticker); require(tokens[_ticker].stakingAddress == address(0), "Already exists"); tokens[_ticker] = StakeToken(_ticker, _NFTContract, _nftAddress, _stakingAddress); stakeTokenList.push(_ticker); } // Function that allows user to deposit staking NFT function depositStake(string memory ticker, uint _tokenId, uint _amount) stakeNFTExist(ticker) external { bytes32 _ticker = stringToBytes32(ticker); require(tokens[_ticker].nftContract.ownerOf(_tokenId) == _msgSender(), "Owner of token is not user"); (bool success, ) = tokens[_ticker].stakingAddress.call(abi.encodeWithSignature("decrementNFTValue(uint256,uint256)", _tokenId, _amount)); require(success == true, "decrement call failed"); traderBalances[_msgSender()][_ticker] = traderBalances[_msgSender()][_ticker].add(_amount); } // Function that allows a user to withdraw their staking NFT function withdrawStake(string memory ticker, uint _amount) stakeNFTExist(ticker) external { bytes32 _ticker = stringToBytes32(ticker); if(tokens[_ticker].nftContract.nftTokenId(_msgSender()) == 0){ // Call to contract to add stake holder (bool addSuccess, ) = tokens[_ticker].stakingAddress.call(abi.encodeWithSignature("addStakeholderExternal(address)", _msgSender())); require(addSuccess == true, "add stakeholder call failed"); } uint _tokenId = tokens[_ticker].nftContract.nftTokenId(_msgSender()); require(traderBalances[_msgSender()][_ticker] >= _amount, 'balance too low'); traderBalances[_msgSender()][_ticker] = traderBalances[_msgSender()][_ticker].sub(_amount); (bool success, ) = tokens[_ticker].stakingAddress.call(abi.encodeWithSignature("incrementNFTValue(uint256,uint256)", _tokenId, _amount)); require(success == true, "increment call failed"); } // Function that deposits eth function depositEth() external payable{ ethBalance[_msgSender()] = ethBalance[_msgSender()].add(msg.value); } // Function that withdraws eth function withdrawEth(uint _amount) external{ require(_amount > 0, "cannot withdraw 0 eth"); require(ethBalance[_msgSender()] >= _amount, "Not enough eth in trading balance"); ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(_amount); _msgSender().transfer(_amount); } // Function that gets total all orders function getOrders(string memory ticker, Side side) external view returns(Order[] memory) { bytes32 _ticker = stringToBytes32(ticker); return orderBook[_ticker][uint(side)]; } // Function that gets all trading function getTokens() external view returns(StakeToken[] memory) { StakeToken[] memory _tokens = new StakeToken[](stakeTokenList.length); for (uint i = 0; i < stakeTokenList.length; i++) { _tokens[i] = StakeToken( tokens[stakeTokenList[i]].ticker, tokens[stakeTokenList[i]].nftContract, tokens[stakeTokenList[i]].nftAddress, tokens[stakeTokenList[i]].stakingAddress ); } return _tokens; } // Function that creates limit order function createLimitOrder(string memory ticker, uint _amount, uint _price, Side _side) external { uint devFee = platformFee.mul(10).div(100); uint communityFee = platformFee.mul(5).div(100); uint rewardFee = platformFee.sub(devFee).sub(communityFee); NFYToken.transferFrom(_msgSender(), devAddress, devFee); NFYToken.transferFrom(_msgSender(), communityFund, communityFee); NFYToken.transferFrom(_msgSender(), rewardPool, rewardFee); _limitOrder(ticker, _amount, _price, _side); } // Limit order Function function _limitOrder(string memory ticker, uint _amount, uint _price, Side _side) stakeNFTExist(ticker) internal { bytes32 _ticker = stringToBytes32(ticker); require(_amount > 0, "Amount can not be 0"); require(_price > 0, "Price can not be 0"); Order[] storage orders = orderBook[_ticker][uint(_side == Side.BUY ? Side.SELL : Side.BUY)]; if(orders.length == 0){ _createOrder(_ticker, _amount, _price, _side); } else{ if(_side == Side.BUY){ uint remaining = _amount; uint i; uint orderLength = orders.length; while(i < orders.length && remaining > 0) { if(_price >= orders[i].price){ remaining = _matchOrder(_ticker,orders, remaining, i, _side); nextTradeId = nextTradeId.add(1); if(orders.length.sub(i) == 1 && remaining > 0){ _createOrder(_ticker, remaining, _price, _side); } i = i.add(1); } else{ i = orderLength; if(remaining > 0){ _createOrder(_ticker, remaining, _price, _side); } } } } if(_side == Side.SELL){ uint remaining = _amount; uint i; uint orderLength = orders.length; while(i < orders.length && remaining > 0) { if(_price <= orders[i].price){ remaining = _matchOrder(_ticker,orders, remaining, i, _side); nextTradeId = nextTradeId.add(1); if(orders.length.sub(i) == 1 && remaining > 0){ _createOrder(_ticker, remaining, _price, _side); } i = i.add(1); } else{ i = orderLength; if(remaining > 0){ _createOrder(_ticker, remaining, _price, _side); } } } } uint i = 0; while(i < orders.length && orders[i].filled == orders[i].amount) { for(uint j = i; j < orders.length.sub(1); j = j.add(1) ) { orders[j] = orders[j.add(1)]; } orders.pop(); i = i.add(1); } } } function _createOrder(bytes32 _ticker, uint _amount, uint _price, Side _side) internal { if(_side == Side.BUY) { require(ethBalance[_msgSender()] > 0, "Can not purchase no stake"); require(ethBalance[_msgSender()] >= _amount.mul(_price).div(1e18), "Eth too low"); PendingTransactions[] storage pending = pendingETH[_ticker][_msgSender()]; pending.push(PendingTransactions(_amount.mul(_price).div(1e18), nextOrderId)); ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(_amount.mul(_price).div(1e18)); } else { require(traderBalances[_msgSender()][_ticker] >= _amount, "Token too low"); PendingTransactions[] storage pending = pendingToken[_ticker][_msgSender()]; pending.push(PendingTransactions(_amount, nextOrderId)); traderBalances[_msgSender()][_ticker] = traderBalances[_msgSender()][_ticker].sub(_amount); } Order[] storage orders = orderBook[_ticker][uint(_side)]; orders.push(Order( nextOrderId, _msgSender(), _side, _ticker, _amount, 0, _price, now )); uint i = orders.length > 0 ? orders.length.sub(1) : 0; while(i > 0) { if(_side == Side.BUY && orders[i.sub(1)].price > orders[i].price) { break; } if(_side == Side.SELL && orders[i.sub(1)].price < orders[i].price) { break; } Order memory order = orders[i.sub(1)]; orders[i.sub(1)] = orders[i]; orders[i] = order; i = i.sub(1); } nextOrderId = nextOrderId.add(1); } function _matchOrder(bytes32 _ticker, Order[] storage orders, uint remaining, uint i, Side side) internal returns(uint left){ uint available = orders[i].amount.sub(orders[i].filled); uint matched = (remaining > available) ? available : remaining; remaining = remaining.sub(matched); orders[i].filled = orders[i].filled.add(matched); emit NewTrade( nextTradeId, orders[i].id, _ticker, orders[i].userAddress, _msgSender(), matched, orders[i].price, now ); if(side == Side.SELL) { traderBalances[_msgSender()][_ticker] = traderBalances[_msgSender()][_ticker].sub(matched); traderBalances[orders[i].userAddress][_ticker] = traderBalances[orders[i].userAddress][_ticker].add(matched); ethBalance[_msgSender()] = ethBalance[_msgSender()].add(matched.mul(orders[i].price).div(1e18)); PendingTransactions[] storage pending = pendingETH[_ticker][orders[i].userAddress]; uint userOrders = pending.length; uint b = 0; uint id = orders[i].id; while(b < userOrders){ if(pending[b].id == id && orders[i].filled == orders[i].amount){ for(uint o = b; o < userOrders.sub(1); o = o.add(1)){ pending[o] = pending[o.add(1)]; b = userOrders; } pending.pop(); } b = b.add(1); } } if(side == Side.BUY) { require(ethBalance[_msgSender()] >= matched.mul(orders[i].price).div(1e18), 'eth balance too low'); traderBalances[_msgSender()][_ticker] = traderBalances[_msgSender()][_ticker].add(matched); ethBalance[orders[i].userAddress] = ethBalance[orders[i].userAddress].add(matched.mul(orders[i].price).div(1e18)); ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(matched.mul(orders[i].price).div(1e18)); PendingTransactions[] storage pending = pendingToken[_ticker][orders[i].userAddress]; uint userOrders = pending.length; uint b = 0; while(b < userOrders){ if(pending[b].id == orders[i].id && orders[i].filled == orders[i].amount){ for(uint o = b; o < userOrders.sub(1); o = o.add(1)){ pending[o] = pending[o.add(1)]; b = userOrders; } pending.pop(); } b = b.add(1); } } left = remaining; return left; } function cancelOrder(string memory ticker, Side _side) external stakeNFTExist(ticker) { bytes32 _ticker = stringToBytes32(ticker); Order[] storage orders = orderBook[_ticker][uint(_side)]; if(_side == Side.BUY) { PendingTransactions[] storage pending = pendingETH[_ticker][_msgSender()]; uint amount = _cancelOrder(pending, orders, _side); ethBalance[_msgSender()] = ethBalance[_msgSender()].add(amount); } else{ PendingTransactions[] storage pending = pendingToken[_ticker][_msgSender()]; uint amount = _cancelOrder(pending, orders, _side); traderBalances[_msgSender()][_ticker] = traderBalances[_msgSender()][_ticker].add(amount); } } function _cancelOrder(PendingTransactions[] storage pending, Order[] storage orders, Side _side) internal returns(uint left){ int userOrders = int(pending.length - 1); require(userOrders >= 0, 'users has no pending order'); uint userOrder = uint(userOrders); uint orderId = pending[userOrder].id; uint orderLength = orders.length; uint i = 0; uint amount; while(i < orders.length){ if(orders[i].id == orderId){ if(_side == Side.BUY){ amount = pending[userOrder].pendingAmount.sub(orders[i].filled.mul(orders[i].price).div(1e18)); } else { amount = pending[userOrder].pendingAmount.sub(orders[i].filled); } for(uint c = i; c < orders.length.sub(1); c = c.add(1)){ orders[c] = orders[c.add(1)]; } orders.pop(); pending.pop(); i = orderLength; } i = i.add(1); } left = amount; return left; } modifier stakeNFTExist(string memory ticker) { bytes32 _ticker = stringToBytes32(ticker); require(tokens[_ticker].stakingAddress != address(0), "staking NFT does not exist"); _; } //HELPER FUNCTION // CONVERT STRING TO BYTES32 function stringToBytes32(string memory _source) public pure returns (bytes32 result) { bytes memory tempEmptyStringTest = bytes(_source); string memory tempSource = _source; if (tempEmptyStringTest.length == 0) { return 0x0; } assembly { result := mload(add(tempSource, 32)) } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_nfy","type":"address"},{"internalType":"address","name":"_rewardPool","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"address","name":"_devFeeAddress","type":"address"},{"internalType":"address","name":"_communityFundAddress","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tradeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"ticker","type":"bytes32"},{"indexed":false,"internalType":"address","name":"trader1","type":"address"},{"indexed":false,"internalType":"address","name":"trader2","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"}],"name":"NewTrade","type":"event"},{"inputs":[],"name":"NFYToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"ticker","type":"string"},{"internalType":"contract NFTContract","name":"_NFTContract","type":"address"},{"internalType":"address","name":"_nftAddress","type":"address"},{"internalType":"address","name":"_stakingAddress","type":"address"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ticker","type":"string"},{"internalType":"enum NFYTradingPlatform.Side","name":"_side","type":"uint8"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"communityFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"ticker","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"enum NFYTradingPlatform.Side","name":"_side","type":"uint8"}],"name":"createLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"ticker","type":"string"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getEthBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"ticker","type":"string"},{"internalType":"enum NFYTradingPlatform.Side","name":"side","type":"uint8"}],"name":"getOrders","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"enum NFYTradingPlatform.Side","name":"side","type":"uint8"},{"internalType":"bytes32","name":"ticker","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"filled","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"date","type":"uint256"}],"internalType":"struct NFYTradingPlatform.Order[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"components":[{"internalType":"bytes32","name":"ticker","type":"bytes32"},{"internalType":"contract NFTContract","name":"nftContract","type":"address"},{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"stakingAddress","type":"address"}],"internalType":"struct NFYTradingPlatform.StakeToken[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"string","name":"ticker","type":"string"}],"name":"getTraderBalance","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":"platformFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_communityAddress","type":"address"}],"name":"setCommunityFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_source","type":"string"}],"name":"stringToBytes32","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"name":"transferDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ticker","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawStake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200630238038062006302833981810160405281019062000037919062000216565b8062000048620001e060201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505085600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360058190555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200031e565b600033905090565b600081519050620001f981620002ea565b92915050565b600081519050620002108162000304565b92915050565b60008060008060008060c087890312156200023057600080fd5b60006200024089828a01620001e8565b96505060206200025389828a01620001e8565b95505060406200026689828a01620001ff565b94505060606200027989828a01620001e8565b93505060806200028c89828a01620001e8565b92505060a06200029f89828a01620001e8565b9150509295509295509295565b6000620002b982620002c0565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b620002f581620002ac565b81146200030157600080fd5b50565b6200030f81620002e0565b81146200031b57600080fd5b50565b615fd4806200032e6000396000f3fe60806040526004361061013f5760003560e01c80636c9128e2116100b6578063cfb519281161006f578063cfb5192814610428578063d687b4d114610465578063ebd516d51461048e578063ec776a13146104b7578063f2fde38b146104e0578063f825d323146105095761013f565b80636c9128e2146103185780638da5cb5b14610343578063aa6ca8081461036e578063b75975c814610399578063c311d049146103d6578063c7cff367146103ff5761013f565b80633cbca690116101085780633cbca6901461021757806343702fee14610240578063439370b11461027d5780634d2301cc1461028757806366666aa9146102c457806369fe0e2d146102ef5761013f565b8062f380f41461014457806326232a2e1461016f578063276e30761461019a578063332ca4f2146101c35780633ad10ef6146101ec575b600080fd5b34801561015057600080fd5b50610159610532565b604051610166919061582e565b60405180910390f35b34801561017b57600080fd5b50610184610558565b6040516101919190615bf2565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190614c08565b61055e565b005b3480156101cf57600080fd5b506101ea60048036038101906101e59190614c08565b6106a8565b005b3480156101f857600080fd5b50610201610783565b60405161020e919061582e565b60405180910390f35b34801561022357600080fd5b5061023e60048036038101906102399190614e10565b6107a9565b005b34801561024c57600080fd5b5061026760048036038101906102629190614dbc565b610e63565b60405161027491906158b6565b60405180910390f35b610285610fc0565b005b34801561029357600080fd5b506102ae60048036038101906102a99190614c08565b611065565b6040516102bb9190615bf2565b60405180910390f35b3480156102d057600080fd5b506102d96110ae565b6040516102e6919061582e565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190614f46565b6110d4565b005b34801561032457600080fd5b5061032d611174565b60405161033a9190615915565b60405180910390f35b34801561034f57600080fd5b5061035861119a565b604051610365919061582e565b60405180910390f35b34801561037a57600080fd5b506103836111bf565b60405161039091906158d8565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614c83565b6113d1565b6040516103cd9190615bf2565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190614f46565b611439565b005b34801561040b57600080fd5b5061042660048036038101906104219190614dbc565b6115f9565b005b34801561043457600080fd5b5061044f600480360381019061044a9190614d00565b61195a565b60405161045c91906158fa565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190614c08565b61198c565b005b34801561049a57600080fd5b506104b560048036038101906104b09190614d41565b611ad7565b005b3480156104c357600080fd5b506104de60048036038101906104d99190614e64565b611da7565b005b3480156104ec57600080fd5b5061050760048036038101906105029190614c5a565b6121e2565b005b34801561051557600080fd5b50610530600480360381019061052b9190614ecb565b6122bb565b005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661059e6125e5565b73ffffffffffffffffffffffffffffffffffffffff16146105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105eb90615b12565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b90615992565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106e96125e5565b73ffffffffffffffffffffffffffffffffffffffff161461073f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073690615a52565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8160006107b58261195a565b9050600073ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085490615b72565b60405180910390fd5b60006108688561195a565b90506000600c600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb6108c66125e5565b6040518263ffffffff1660e01b81526004016108e29190615849565b60206040518083038186803b1580156108fa57600080fd5b505afa15801561090e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109329190614f6f565b1415610ab8576000600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661098f6125e5565b60405160240161099f9190615864565b6040516020818303038152906040527f9ca152f1000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a299190615817565b6000604051808303816000865af19150503d8060008114610a66576040519150601f19603f3d011682016040523d82523d6000602084013e610a6b565b606091505b505090506001151581151514610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad90615a92565b60405180910390fd5b505b6000600c600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb610b146125e5565b6040518263ffffffff1660e01b8152600401610b309190615849565b60206040518083038186803b158015610b4857600080fd5b505afa158015610b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b809190614f6f565b905084600d6000610b8f6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020541015610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c13906159f2565b60405180910390fd5b610c8685600d6000610c2c6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020546125ed90919063ffffffff16565b600d6000610c926125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020819055506000600c600084815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168287604051602401610d43929190615c0d565b6040516020818303038152906040527f8306fddb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610dcd9190615817565b6000604051808303816000865af19150503d8060008114610e0a576040519150601f19603f3d011682016040523d82523d6000602084013e610e0f565b606091505b505090506001151581151514610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190615bd2565b60405180910390fd5b50505050505050565b60606000610e708461195a565b9050600e60008281526020019081526020016000206000846001811115610e9357fe5b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610fb3578382906000526020600020906007020160405180610100016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900460ff166001811115610f6357fe5b6001811115610f6e57fe5b81526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505081526020019060010190610ec1565b5050505091505092915050565b61101934600f6000610fd06125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263790919063ffffffff16565b600f60006110256125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111146125e5565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190615b12565b60405180910390fd5b8060058190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60608060028054905067ffffffffffffffff811180156111de57600080fd5b5060405190808252806020026020018201604052801561121857816020015b611205614a36565b8152602001906001900390816111fd5790505b50905060008090505b6002805490508110156113c9576040518060800160405280600c60006002858154811061124a57fe5b90600052602060002001548152602001908152602001600020600001548152602001600c60006002858154811061127d57fe5b9060005260206000200154815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600c6000600285815481106112e657fe5b9060005260206000200154815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600c60006002858154811061134f57fe5b9060005260206000200154815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508282815181106113b157fe5b60200260200101819052508080600101915050611221565b508091505090565b6000806113dd8361195a565b9050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000205491505092915050565b6000811161147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390615bb2565b60405180910390fd5b80600f60006114896125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90615972565b60405180910390fd5b61155e81600f60006115156125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ed90919063ffffffff16565b600f600061156a6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115b06125e5565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115f5573d6000803e3d6000fd5b5050565b8160006116058261195a565b9050600073ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490615b72565b60405180910390fd5b60006116b88561195a565b90506000600e600083815260200190815260200160002060008660018111156116dd57fe5b81526020019081526020016000209050600060018111156116fa57fe5b85600181111561170657fe5b1415611820576000600a6000848152602001908152602001600020600061172b6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061177482848961268c565b90506117cf81600f60006117866125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263790919063ffffffff16565b600f60006117db6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050611952565b6000600b6000848152602001908152602001600020600061183f6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061188882848961268c565b90506118f481600d600061189a6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000205461263790919063ffffffff16565b600d60006119006125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000208190555050505b505050505050565b60006060829050606083905060008251141561197d576000801b92505050611987565b6020810151925050505b919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119cd6125e5565b73ffffffffffffffffffffffffffffffffffffffff1614611a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1a90615a52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90615992565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b176125e5565b73ffffffffffffffffffffffffffffffffffffffff1614611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490615b12565b60405180910390fd5b6000611b788561195a565b9050600073ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690615a12565b60405180910390fd5b60405180608001604052808281526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815250600c60008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505060028190806001815401808255809150506001900390600052602060002001600090919091909150555050505050565b826000611db38261195a565b9050600073ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290615b72565b60405180910390fd5b6000611e668661195a565b9050611e706125e5565b73ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b8152600401611ef59190615bf2565b60206040518083038186803b158015611f0d57600080fd5b505afa158015611f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f459190614c31565b73ffffffffffffffffffffffffffffffffffffffff1614611f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f92906159d2565b60405180910390fd5b6000600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168686604051602401611ffd929190615c0d565b6040516020818303038152906040527f31455f2a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516120879190615817565b6000604051808303816000865af19150503d80600081146120c4576040519150601f19603f3d011682016040523d82523d6000602084013e6120c9565b606091505b505090506001151581151514612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90615b52565b60405180910390fd5b61217e85600d60006121246125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461263790919063ffffffff16565b600d600061218a6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122226125e5565b73ffffffffffffffffffffffffffffffffffffffff1614612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226f90615b12565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006122e660646122d8600a600554612aa990919063ffffffff16565b612b1990919063ffffffff16565b90506000612312606461230460058054612aa990919063ffffffff16565b612b1990919063ffffffff16565b9050600061233d8261232f856005546125ed90919063ffffffff16565b6125ed90919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6123856125e5565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b81526004016123c79392919061587f565b602060405180830381600087803b1580156123e157600080fd5b505af11580156123f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124199190614cd7565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6124606125e5565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b81526004016124a29392919061587f565b602060405180830381600087803b1580156124bc57600080fd5b505af11580156124d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f49190614cd7565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61253b6125e5565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161257d9392919061587f565b602060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cf9190614cd7565b506125dc87878787612b63565b50505050505050565b600033905090565b600061262f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131a8565b905092915050565b600080828401905083811015612682576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612679906159b2565b60405180910390fd5b8091505092915050565b6000806001858054905003905060008112156126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d490615a72565b60405180910390fd5b600081905060008682815481106126f057fe5b9060005260206000209060020201600101549050600086805490509050600080905060005b8880549050821015612a96578389838154811061272e57fe5b9060005260206000209060070201600001541415612a7b576000600181111561275357fe5b88600181111561275f57fe5b1415612802576127fb6127cf670de0b6b3a76400006127c18c868154811061278357fe5b9060005260206000209060070201600501548d87815481106127a157fe5b906000526020600020906007020160040154612aa990919063ffffffff16565b612b1990919063ffffffff16565b8b87815481106127db57fe5b9060005260206000209060020201600001546125ed90919063ffffffff16565b9050612852565b61284f89838154811061281157fe5b9060005260206000209060070201600401548b878154811061282f57fe5b9060005260206000209060020201600001546125ed90919063ffffffff16565b90505b60008290505b61287060018b805490506125ed90919063ffffffff16565b8110156129b5578961288c60018361263790919063ffffffff16565b8154811061289657fe5b90600052602060002090600702018a82815481106128b057fe5b9060005260206000209060070201600082015481600001556001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160149054906101000a900460ff168160010160146101000a81548160ff0219169083600181111561296057fe5b021790555060028201548160020155600382015481600301556004820154816004015560058201548160050155600682015481600601559050506129ae60018261263790919063ffffffff16565b9050612858565b50888054806129c057fe5b60019003818190600052602060002090600702016000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160146101000a81549060ff0219169055600282016000905560038201600090556004820160009055600582016000905560068201600090555050905589805480612a4e57fe5b60019003818190600052602060002090600202016000808201600090556001820160009055505090558291505b612a8f60018361263790919063ffffffff16565b9150612715565b8096508696505050505050509392505050565b600080831415612abc5760009050612b13565b6000828402905082848281612acd57fe5b0414612b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0590615ad2565b60405180910390fd5b809150505b92915050565b6000612b5b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613203565b905092915050565b836000612b6f8261195a565b9050600073ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0e90615b72565b60405180910390fd5b6000612c228761195a565b905060008611612c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5e90615b32565b60405180910390fd5b60008511612caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca190615a32565b60405180910390fd5b6000600e60008381526020019081526020016000206000806001811115612ccd57fe5b876001811115612cd957fe5b14612ce5576000612ce8565b60015b6001811115612cf357fe5b81526020019081526020016000209050600081805490501415612d2157612d1c82888888613264565b61319e565b60006001811115612d2e57fe5b856001811115612d3a57fe5b1415612e2d576000879050600080838054905090505b838054905082108015612d635750600083115b15612e2957838281548110612d7457fe5b9060005260206000209060070201600501548910612e0a57612d99858585858c613d56565b9250612db1600160035461263790919063ffffffff16565b6003819055506001612dd08386805490506125ed90919063ffffffff16565b148015612ddd5750600083115b15612def57612dee85848b8b613264565b5b612e0360018361263790919063ffffffff16565b9150612e24565b8091506000831115612e2357612e2285848b8b613264565b5b5b612d50565b5050505b600180811115612e3957fe5b856001811115612e4557fe5b1415612f38576000879050600080838054905090505b838054905082108015612e6e5750600083115b15612f3457838281548110612e7f57fe5b9060005260206000209060070201600501548911612f1557612ea4858585858c613d56565b9250612ebc600160035461263790919063ffffffff16565b6003819055506001612edb8386805490506125ed90919063ffffffff16565b148015612ee85750600083115b15612efa57612ef985848b8b613264565b5b612f0e60018361263790919063ffffffff16565b9150612f2f565b8091506000831115612f2e57612f2d85848b8b613264565b5b5b612e5b565b5050505b60008090505b818054905081108015612f8a5750818181548110612f5857fe5b906000526020600020906007020160030154828281548110612f7657fe5b906000526020600020906007020160040154145b1561319c5760008190505b612fad600184805490506125ed90919063ffffffff16565b8110156130f25782612fc960018361263790919063ffffffff16565b81548110612fd357fe5b9060005260206000209060070201838281548110612fed57fe5b9060005260206000209060070201600082015481600001556001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160149054906101000a900460ff168160010160146101000a81548160ff0219169083600181111561309d57fe5b021790555060028201548160020155600382015481600301556004820154816004015560058201548160050155600682015481600601559050506130eb60018261263790919063ffffffff16565b9050612f95565b50818054806130fd57fe5b60019003818190600052602060002090600702016000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160146101000a81549060ff0219169055600282016000905560038201600090556004820160009055600582016000905560068201600090555050905561319560018261263790919063ffffffff16565b9050612f3e565b505b5050505050505050565b60008383111582906131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e79190615930565b60405180910390fd5b5060008385039050809150509392505050565b6000808311829061324a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132419190615930565b60405180910390fd5b50600083858161325657fe5b049050809150509392505050565b6000600181111561327157fe5b81600181111561327d57fe5b1415613574576000600f60006132916125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161330c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330390615b92565b60405180910390fd5b613339670de0b6b3a764000061332b8486612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60006133456125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156133c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b890615af2565b60405180910390fd5b6000600a600086815260200190815260200160002060006133e06125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806040518060400160405280613455670de0b6b3a7640000613447888a612aa990919063ffffffff16565b612b1990919063ffffffff16565b81526020016004548152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550506135246134cf670de0b6b3a76400006134c18688612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60006134db6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ed90919063ffffffff16565b600f60006135306125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050613787565b82600d60006135816125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002054101561360e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360590615952565b60405180910390fd5b6000600b6000868152602001908152602001600020600061362d6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080604051806040016040528086815260200160045481525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505061372a84600d60006136d06125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000888152602001908152602001600020546125ed90919063ffffffff16565b600d60006137366125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002081905550505b6000600e600086815260200190815260200160002060008360018111156137aa57fe5b815260200190815260200160002090508060405180610100016040528060045481526020016137d76125e5565b73ffffffffffffffffffffffffffffffffffffffff1681526020018460018111156137fe57fe5b8152602001878152602001868152602001600081526020018581526020014281525090806001815401808255809150506001900390600052602060002090600702016000909190919091506000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff021916908360018111156138be57fe5b0217905550606082015181600201556080820151816003015560a0820151816004015560c0820151816005015560e08201518160060155505060008082805490501161390b576000613924565b613923600183805490506125ed90919063ffffffff16565b5b90505b6000811115613d32576000600181111561393d57fe5b83600181111561394957fe5b1480156139a2575081818154811061395d57fe5b906000526020600020906007020160050154826139846001846125ed90919063ffffffff16565b8154811061398e57fe5b906000526020600020906007020160050154115b156139ac57613d32565b6001808111156139b857fe5b8360018111156139c457fe5b148015613a1d57508181815481106139d857fe5b906000526020600020906007020160050154826139ff6001846125ed90919063ffffffff16565b81548110613a0957fe5b906000526020600020906007020160050154105b15613a2757613d32565b613a2f614aa3565b82613a446001846125ed90919063ffffffff16565b81548110613a4e57fe5b906000526020600020906007020160405180610100016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900460ff166001811115613ae657fe5b6001811115613af157fe5b8152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815250509050828281548110613b3557fe5b906000526020600020906007020183613b586001856125ed90919063ffffffff16565b81548110613b6257fe5b9060005260206000209060070201600082015481600001556001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160149054906101000a900460ff168160010160146101000a81548160ff02191690836001811115613c1257fe5b0217905550600282015481600201556003820154816003015560048201548160040155600582015481600501556006820154816006015590505080838381548110613c5957fe5b90600052602060002090600702016000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff02191690836001811115613cdc57fe5b0217905550606082015181600201556080820151816003015560a0820151816004015560c0820151816005015560e08201518160060155905050613d2a6001836125ed90919063ffffffff16565b915050613927565b613d48600160045461263790919063ffffffff16565b600481905550505050505050565b600080613da6868581548110613d6857fe5b906000526020600020906007020160040154878681548110613d8657fe5b9060005260206000209060070201600301546125ed90919063ffffffff16565b90506000818611613db75785613db9565b815b9050613dce81876125ed90919063ffffffff16565b9550613e0081888781548110613de057fe5b90600052602060002090600702016004015461263790919063ffffffff16565b878681548110613e0c57fe5b906000526020600020906007020160040181905550877fdb0c486e680ba8026643e6a85f8d157b5e7bcd4b32b54d564542570a9eb20416600354898881548110613e5257fe5b9060005260206000209060070201600001548a8981548110613e7057fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eaa6125e5565b868d8c81548110613eb757fe5b90600052602060002090600702016005015442604051613edd9796959493929190615c36565b60405180910390a2600180811115613ef157fe5b846001811115613efd57fe5b141561440b57613f6d81600d6000613f136125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b8152602001908152602001600020546125ed90919063ffffffff16565b600d6000613f796125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a81526020019081526020016000208190555061406881600d60008a8981548110613fdc57fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205461263790919063ffffffff16565b600d600089888154811061407857fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a81526020019081526020016000208190555061419b614146670de0b6b3a76400006141388a898154811061411757fe5b90600052602060002090600702016005015485612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60006141526125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263790919063ffffffff16565b600f60006141a76125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008a8152602001908152602001600020600089888154811061420857fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081805490509050600080905060008a898154811061429257fe5b90600052602060002090600702016000015490505b8282101561440657808483815481106142bc57fe5b90600052602060002090600202016001015414801561431457508a89815481106142e257fe5b9060005260206000209060070201600301548b8a8154811061430057fe5b906000526020600020906007020160040154145b156143eb5760008290505b6143336001856125ed90919063ffffffff16565b8110156143b6578461434f60018361263790919063ffffffff16565b8154811061435957fe5b906000526020600020906002020185828154811061437357fe5b906000526020600020906002020160008201548160000155600182015481600101559050508392506143af60018261263790919063ffffffff16565b905061431f565b50838054806143c157fe5b60019003818190600052602060002090600202016000808201600090556001820160009055505090555b6143ff60018361263790919063ffffffff16565b91506142a7565b505050505b6000600181111561441857fe5b84600181111561442457fe5b1415614a2557614474670de0b6b3a764000061446689888154811061444557fe5b90600052602060002090600702016005015484612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60006144806125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156144fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144f390615ab2565b60405180910390fd5b61456681600d600061450c6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205461263790919063ffffffff16565b600d60006145726125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a81526020019081526020016000208190555061469961460e670de0b6b3a76400006146008a89815481106145df57fe5b90600052602060002090600702016005015485612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60008a898154811061461e57fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263790919063ffffffff16565b600f60008988815481106146a957fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147bb614766670de0b6b3a76400006147588a898154811061473757fe5b90600052602060002090600702016005015485612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60006147726125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ed90919063ffffffff16565b600f60006147c76125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008a8152602001908152602001600020600089888154811061482857fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008180549050905060008090505b81811015614a21578988815481106148b957fe5b9060005260206000209060070201600001548382815481106148d757fe5b90600052602060002090600202016001015414801561492f57508988815481106148fd57fe5b9060005260206000209060070201600301548a898154811061491b57fe5b906000526020600020906007020160040154145b15614a065760008190505b61494e6001846125ed90919063ffffffff16565b8110156149d1578361496a60018361263790919063ffffffff16565b8154811061497457fe5b906000526020600020906002020184828154811061498e57fe5b906000526020600020906002020160008201548160000155600182015481600101559050508291506149ca60018261263790919063ffffffff16565b905061493a565b50828054806149dc57fe5b60019003818190600052602060002090600202016000808201600090556001820160009055505090555b614a1a60018261263790919063ffffffff16565b90506148a5565b5050505b859250829250505095945050505050565b604051806080016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180610100016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160006001811115614ae057fe5b815260200160008019168152602001600081526020016000815260200160008152602001600081525090565b600081359050614b1b81615f1b565b92915050565b600081519050614b3081615f1b565b92915050565b600081359050614b4581615f32565b92915050565b600081519050614b5a81615f49565b92915050565b600081359050614b6f81615f60565b92915050565b600081359050614b8481615f77565b92915050565b600082601f830112614b9b57600080fd5b8135614bae614ba982615cd2565b615ca5565b91508082526020830160208301858383011115614bca57600080fd5b614bd5838284615ebb565b50505092915050565b600081359050614bed81615f87565b92915050565b600081519050614c0281615f87565b92915050565b600060208284031215614c1a57600080fd5b6000614c2884828501614b0c565b91505092915050565b600060208284031215614c4357600080fd5b6000614c5184828501614b21565b91505092915050565b600060208284031215614c6c57600080fd5b6000614c7a84828501614b36565b91505092915050565b60008060408385031215614c9657600080fd5b6000614ca485828601614b0c565b925050602083013567ffffffffffffffff811115614cc157600080fd5b614ccd85828601614b8a565b9150509250929050565b600060208284031215614ce957600080fd5b6000614cf784828501614b4b565b91505092915050565b600060208284031215614d1257600080fd5b600082013567ffffffffffffffff811115614d2c57600080fd5b614d3884828501614b8a565b91505092915050565b60008060008060808587031215614d5757600080fd5b600085013567ffffffffffffffff811115614d7157600080fd5b614d7d87828801614b8a565b9450506020614d8e87828801614b60565b9350506040614d9f87828801614b0c565b9250506060614db087828801614b0c565b91505092959194509250565b60008060408385031215614dcf57600080fd5b600083013567ffffffffffffffff811115614de957600080fd5b614df585828601614b8a565b9250506020614e0685828601614b75565b9150509250929050565b60008060408385031215614e2357600080fd5b600083013567ffffffffffffffff811115614e3d57600080fd5b614e4985828601614b8a565b9250506020614e5a85828601614bde565b9150509250929050565b600080600060608486031215614e7957600080fd5b600084013567ffffffffffffffff811115614e9357600080fd5b614e9f86828701614b8a565b9350506020614eb086828701614bde565b9250506040614ec186828701614bde565b9150509250925092565b60008060008060808587031215614ee157600080fd5b600085013567ffffffffffffffff811115614efb57600080fd5b614f0787828801614b8a565b9450506020614f1887828801614bde565b9350506040614f2987828801614bde565b9250506060614f3a87828801614b75565b91505092959194509250565b600060208284031215614f5857600080fd5b6000614f6684828501614bde565b91505092915050565b600060208284031215614f8157600080fd5b6000614f8f84828501614bf3565b91505092915050565b6000614fa48383615702565b6101008301905092915050565b6000614fbd83836157a4565b60808301905092915050565b614fd281615e2b565b82525050565b614fe181615db4565b82525050565b614ff081615da2565b82525050565b614fff81615da2565b82525050565b600061501082615d1e565b61501a8185615d64565b935061502583615cfe565b8060005b8381101561505657815161503d8882614f98565b975061504883615d4a565b925050600181019050615029565b5085935050505092915050565b600061506e82615d29565b6150788185615d75565b935061508383615d0e565b8060005b838110156150b457815161509b8882614fb1565b97506150a683615d57565b925050600181019050615087565b5085935050505092915050565b6150ca81615dd2565b82525050565b6150d981615dd2565b82525050565b60006150ea82615d34565b6150f48185615d86565b9350615104818560208601615eca565b80840191505092915050565b61511981615e3d565b82525050565b61512881615e61565b82525050565b61513781615e85565b82525050565b600061514882615d3f565b6151528185615d91565b9350615162818560208601615eca565b61516b81615efd565b840191505092915050565b6000615183600d83615d91565b91507f546f6b656e20746f6f206c6f77000000000000000000000000000000000000006000830152602082019050919050565b60006151c3602183615d91565b91507f4e6f7420656e6f7567682065746820696e2074726164696e672062616c616e6360008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615229601483615d91565b91507f43616e206e6f74206265203020616464726573730000000000000000000000006000830152602082019050919050565b6000615269601b83615d91565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006152a9601a83615d91565b91507f4f776e6572206f6620746f6b656e206973206e6f7420757365720000000000006000830152602082019050919050565b60006152e9600f83615d91565b91507f62616c616e636520746f6f206c6f7700000000000000000000000000000000006000830152602082019050919050565b6000615329600e83615d91565b91507f416c7265616479206578697374730000000000000000000000000000000000006000830152602082019050919050565b6000615369601283615d91565b91507f50726963652063616e206e6f74206265203000000000000000000000000000006000830152602082019050919050565b60006153a9600883615d91565b91507f446576206f6e6c790000000000000000000000000000000000000000000000006000830152602082019050919050565b60006153e9601a83615d91565b91507f757365727320686173206e6f2070656e64696e67206f726465720000000000006000830152602082019050919050565b6000615429601b83615d91565b91507f616464207374616b65686f6c6465722063616c6c206661696c656400000000006000830152602082019050919050565b6000615469601383615d91565b91507f6574682062616c616e636520746f6f206c6f77000000000000000000000000006000830152602082019050919050565b60006154a9602183615d91565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061550f600b83615d91565b91507f45746820746f6f206c6f770000000000000000000000000000000000000000006000830152602082019050919050565b600061554f600a83615d91565b91507f4f776e6572206f6e6c79000000000000000000000000000000000000000000006000830152602082019050919050565b600061558f601383615d91565b91507f416d6f756e742063616e206e6f742062652030000000000000000000000000006000830152602082019050919050565b60006155cf601583615d91565b91507f64656372656d656e742063616c6c206661696c656400000000000000000000006000830152602082019050919050565b600061560f601a83615d91565b91507f7374616b696e67204e465420646f6573206e6f742065786973740000000000006000830152602082019050919050565b600061564f601983615d91565b91507f43616e206e6f74207075726368617365206e6f207374616b65000000000000006000830152602082019050919050565b600061568f601583615d91565b91507f63616e6e6f7420776974686472617720302065746800000000000000000000006000830152602082019050919050565b60006156cf601583615d91565b91507f696e6372656d656e742063616c6c206661696c656400000000000000000000006000830152602082019050919050565b6101008201600082015161571960008501826157f9565b50602082015161572c6020850182614fe7565b50604082015161573f604085018261512e565b50606082015161575260608501826150c1565b50608082015161576560808501826157f9565b5060a082015161577860a08501826157f9565b5060c082015161578b60c08501826157f9565b5060e082015161579e60e08501826157f9565b50505050565b6080820160008201516157ba60008501826150c1565b5060208201516157cd602085018261511f565b5060408201516157e06040850182614fe7565b5060608201516157f36060850182614fe7565b50505050565b61580281615e21565b82525050565b61581181615e21565b82525050565b600061582382846150df565b915081905092915050565b60006020820190506158436000830184614ff6565b92915050565b600060208201905061585e6000830184614fc9565b92915050565b60006020820190506158796000830184614fd8565b92915050565b60006060820190506158946000830186614fc9565b6158a16020830185614ff6565b6158ae6040830184615808565b949350505050565b600060208201905081810360008301526158d08184615005565b905092915050565b600060208201905081810360008301526158f28184615063565b905092915050565b600060208201905061590f60008301846150d0565b92915050565b600060208201905061592a6000830184615110565b92915050565b6000602082019050818103600083015261594a818461513d565b905092915050565b6000602082019050818103600083015261596b81615176565b9050919050565b6000602082019050818103600083015261598b816151b6565b9050919050565b600060208201905081810360008301526159ab8161521c565b9050919050565b600060208201905081810360008301526159cb8161525c565b9050919050565b600060208201905081810360008301526159eb8161529c565b9050919050565b60006020820190508181036000830152615a0b816152dc565b9050919050565b60006020820190508181036000830152615a2b8161531c565b9050919050565b60006020820190508181036000830152615a4b8161535c565b9050919050565b60006020820190508181036000830152615a6b8161539c565b9050919050565b60006020820190508181036000830152615a8b816153dc565b9050919050565b60006020820190508181036000830152615aab8161541c565b9050919050565b60006020820190508181036000830152615acb8161545c565b9050919050565b60006020820190508181036000830152615aeb8161549c565b9050919050565b60006020820190508181036000830152615b0b81615502565b9050919050565b60006020820190508181036000830152615b2b81615542565b9050919050565b60006020820190508181036000830152615b4b81615582565b9050919050565b60006020820190508181036000830152615b6b816155c2565b9050919050565b60006020820190508181036000830152615b8b81615602565b9050919050565b60006020820190508181036000830152615bab81615642565b9050919050565b60006020820190508181036000830152615bcb81615682565b9050919050565b60006020820190508181036000830152615beb816156c2565b9050919050565b6000602082019050615c076000830184615808565b92915050565b6000604082019050615c226000830185615808565b615c2f6020830184615808565b9392505050565b600060e082019050615c4b600083018a615808565b615c586020830189615808565b615c656040830188614ff6565b615c726060830187614fc9565b615c7f6080830186615808565b615c8c60a0830185615808565b615c9960c0830184615808565b98975050505050505050565b6000604051905081810181811067ffffffffffffffff82111715615cc857600080fd5b8060405250919050565b600067ffffffffffffffff821115615ce957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615dad82615e01565b9050919050565b6000615dbf82615e01565b9050919050565b60008115159050919050565b6000819050919050565b6000615de782615da2565b9050919050565b6000819050615dfc82615f0e565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615e3682615e97565b9050919050565b6000615e4882615e4f565b9050919050565b6000615e5a82615e01565b9050919050565b6000615e6c82615e73565b9050919050565b6000615e7e82615e01565b9050919050565b6000615e9082615dee565b9050919050565b6000615ea282615ea9565b9050919050565b6000615eb482615e01565b9050919050565b82818337600083830152505050565b60005b83811015615ee8578082015181840152602081019050615ecd565b83811115615ef7576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615f1857fe5b50565b615f2481615da2565b8114615f2f57600080fd5b50565b615f3b81615db4565b8114615f4657600080fd5b50565b615f5281615dc6565b8114615f5d57600080fd5b50565b615f6981615ddc565b8114615f7457600080fd5b50565b60028110615f8457600080fd5b50565b615f9081615e21565b8114615f9b57600080fd5b5056fea264697066735822122077ffa199e9f5b0f4e92699615e70df1039488f74a1bc2a65462f23fcb121e2af64736f6c634300060a00330000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc0000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac5700000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000628c3a02dc2f08f3592286150dbd67972583276500000000000000000000000051e486e7d62a798ff8c9bc105c1372b15c9396690000000000000000000000005530fb19c22b1b410708b0a9fd230c714cba12ed
Deployed Bytecode
0x60806040526004361061013f5760003560e01c80636c9128e2116100b6578063cfb519281161006f578063cfb5192814610428578063d687b4d114610465578063ebd516d51461048e578063ec776a13146104b7578063f2fde38b146104e0578063f825d323146105095761013f565b80636c9128e2146103185780638da5cb5b14610343578063aa6ca8081461036e578063b75975c814610399578063c311d049146103d6578063c7cff367146103ff5761013f565b80633cbca690116101085780633cbca6901461021757806343702fee14610240578063439370b11461027d5780634d2301cc1461028757806366666aa9146102c457806369fe0e2d146102ef5761013f565b8062f380f41461014457806326232a2e1461016f578063276e30761461019a578063332ca4f2146101c35780633ad10ef6146101ec575b600080fd5b34801561015057600080fd5b50610159610532565b604051610166919061582e565b60405180910390f35b34801561017b57600080fd5b50610184610558565b6040516101919190615bf2565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190614c08565b61055e565b005b3480156101cf57600080fd5b506101ea60048036038101906101e59190614c08565b6106a8565b005b3480156101f857600080fd5b50610201610783565b60405161020e919061582e565b60405180910390f35b34801561022357600080fd5b5061023e60048036038101906102399190614e10565b6107a9565b005b34801561024c57600080fd5b5061026760048036038101906102629190614dbc565b610e63565b60405161027491906158b6565b60405180910390f35b610285610fc0565b005b34801561029357600080fd5b506102ae60048036038101906102a99190614c08565b611065565b6040516102bb9190615bf2565b60405180910390f35b3480156102d057600080fd5b506102d96110ae565b6040516102e6919061582e565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190614f46565b6110d4565b005b34801561032457600080fd5b5061032d611174565b60405161033a9190615915565b60405180910390f35b34801561034f57600080fd5b5061035861119a565b604051610365919061582e565b60405180910390f35b34801561037a57600080fd5b506103836111bf565b60405161039091906158d8565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614c83565b6113d1565b6040516103cd9190615bf2565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190614f46565b611439565b005b34801561040b57600080fd5b5061042660048036038101906104219190614dbc565b6115f9565b005b34801561043457600080fd5b5061044f600480360381019061044a9190614d00565b61195a565b60405161045c91906158fa565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190614c08565b61198c565b005b34801561049a57600080fd5b506104b560048036038101906104b09190614d41565b611ad7565b005b3480156104c357600080fd5b506104de60048036038101906104d99190614e64565b611da7565b005b3480156104ec57600080fd5b5061050760048036038101906105029190614c5a565b6121e2565b005b34801561051557600080fd5b50610530600480360381019061052b9190614ecb565b6122bb565b005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661059e6125e5565b73ffffffffffffffffffffffffffffffffffffffff16146105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105eb90615b12565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b90615992565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106e96125e5565b73ffffffffffffffffffffffffffffffffffffffff161461073f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073690615a52565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8160006107b58261195a565b9050600073ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085490615b72565b60405180910390fd5b60006108688561195a565b90506000600c600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb6108c66125e5565b6040518263ffffffff1660e01b81526004016108e29190615849565b60206040518083038186803b1580156108fa57600080fd5b505afa15801561090e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109329190614f6f565b1415610ab8576000600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661098f6125e5565b60405160240161099f9190615864565b6040516020818303038152906040527f9ca152f1000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a299190615817565b6000604051808303816000865af19150503d8060008114610a66576040519150601f19603f3d011682016040523d82523d6000602084013e610a6b565b606091505b505090506001151581151514610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad90615a92565b60405180910390fd5b505b6000600c600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb610b146125e5565b6040518263ffffffff1660e01b8152600401610b309190615849565b60206040518083038186803b158015610b4857600080fd5b505afa158015610b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b809190614f6f565b905084600d6000610b8f6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020541015610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c13906159f2565b60405180910390fd5b610c8685600d6000610c2c6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020546125ed90919063ffffffff16565b600d6000610c926125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020819055506000600c600084815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168287604051602401610d43929190615c0d565b6040516020818303038152906040527f8306fddb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610dcd9190615817565b6000604051808303816000865af19150503d8060008114610e0a576040519150601f19603f3d011682016040523d82523d6000602084013e610e0f565b606091505b505090506001151581151514610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190615bd2565b60405180910390fd5b50505050505050565b60606000610e708461195a565b9050600e60008281526020019081526020016000206000846001811115610e9357fe5b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610fb3578382906000526020600020906007020160405180610100016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900460ff166001811115610f6357fe5b6001811115610f6e57fe5b81526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505081526020019060010190610ec1565b5050505091505092915050565b61101934600f6000610fd06125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263790919063ffffffff16565b600f60006110256125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111146125e5565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190615b12565b60405180910390fd5b8060058190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60608060028054905067ffffffffffffffff811180156111de57600080fd5b5060405190808252806020026020018201604052801561121857816020015b611205614a36565b8152602001906001900390816111fd5790505b50905060008090505b6002805490508110156113c9576040518060800160405280600c60006002858154811061124a57fe5b90600052602060002001548152602001908152602001600020600001548152602001600c60006002858154811061127d57fe5b9060005260206000200154815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600c6000600285815481106112e657fe5b9060005260206000200154815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600c60006002858154811061134f57fe5b9060005260206000200154815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508282815181106113b157fe5b60200260200101819052508080600101915050611221565b508091505090565b6000806113dd8361195a565b9050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000205491505092915050565b6000811161147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390615bb2565b60405180910390fd5b80600f60006114896125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90615972565b60405180910390fd5b61155e81600f60006115156125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ed90919063ffffffff16565b600f600061156a6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115b06125e5565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115f5573d6000803e3d6000fd5b5050565b8160006116058261195a565b9050600073ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490615b72565b60405180910390fd5b60006116b88561195a565b90506000600e600083815260200190815260200160002060008660018111156116dd57fe5b81526020019081526020016000209050600060018111156116fa57fe5b85600181111561170657fe5b1415611820576000600a6000848152602001908152602001600020600061172b6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061177482848961268c565b90506117cf81600f60006117866125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263790919063ffffffff16565b600f60006117db6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050611952565b6000600b6000848152602001908152602001600020600061183f6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061188882848961268c565b90506118f481600d600061189a6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000205461263790919063ffffffff16565b600d60006119006125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000208190555050505b505050505050565b60006060829050606083905060008251141561197d576000801b92505050611987565b6020810151925050505b919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119cd6125e5565b73ffffffffffffffffffffffffffffffffffffffff1614611a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1a90615a52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90615992565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b176125e5565b73ffffffffffffffffffffffffffffffffffffffff1614611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490615b12565b60405180910390fd5b6000611b788561195a565b9050600073ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690615a12565b60405180910390fd5b60405180608001604052808281526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815250600c60008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505060028190806001815401808255809150506001900390600052602060002001600090919091909150555050505050565b826000611db38261195a565b9050600073ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290615b72565b60405180910390fd5b6000611e668661195a565b9050611e706125e5565b73ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b8152600401611ef59190615bf2565b60206040518083038186803b158015611f0d57600080fd5b505afa158015611f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f459190614c31565b73ffffffffffffffffffffffffffffffffffffffff1614611f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f92906159d2565b60405180910390fd5b6000600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168686604051602401611ffd929190615c0d565b6040516020818303038152906040527f31455f2a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516120879190615817565b6000604051808303816000865af19150503d80600081146120c4576040519150601f19603f3d011682016040523d82523d6000602084013e6120c9565b606091505b505090506001151581151514612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90615b52565b60405180910390fd5b61217e85600d60006121246125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461263790919063ffffffff16565b600d600061218a6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122226125e5565b73ffffffffffffffffffffffffffffffffffffffff1614612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226f90615b12565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006122e660646122d8600a600554612aa990919063ffffffff16565b612b1990919063ffffffff16565b90506000612312606461230460058054612aa990919063ffffffff16565b612b1990919063ffffffff16565b9050600061233d8261232f856005546125ed90919063ffffffff16565b6125ed90919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6123856125e5565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b81526004016123c79392919061587f565b602060405180830381600087803b1580156123e157600080fd5b505af11580156123f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124199190614cd7565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6124606125e5565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b81526004016124a29392919061587f565b602060405180830381600087803b1580156124bc57600080fd5b505af11580156124d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f49190614cd7565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61253b6125e5565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161257d9392919061587f565b602060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cf9190614cd7565b506125dc87878787612b63565b50505050505050565b600033905090565b600061262f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131a8565b905092915050565b600080828401905083811015612682576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612679906159b2565b60405180910390fd5b8091505092915050565b6000806001858054905003905060008112156126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d490615a72565b60405180910390fd5b600081905060008682815481106126f057fe5b9060005260206000209060020201600101549050600086805490509050600080905060005b8880549050821015612a96578389838154811061272e57fe5b9060005260206000209060070201600001541415612a7b576000600181111561275357fe5b88600181111561275f57fe5b1415612802576127fb6127cf670de0b6b3a76400006127c18c868154811061278357fe5b9060005260206000209060070201600501548d87815481106127a157fe5b906000526020600020906007020160040154612aa990919063ffffffff16565b612b1990919063ffffffff16565b8b87815481106127db57fe5b9060005260206000209060020201600001546125ed90919063ffffffff16565b9050612852565b61284f89838154811061281157fe5b9060005260206000209060070201600401548b878154811061282f57fe5b9060005260206000209060020201600001546125ed90919063ffffffff16565b90505b60008290505b61287060018b805490506125ed90919063ffffffff16565b8110156129b5578961288c60018361263790919063ffffffff16565b8154811061289657fe5b90600052602060002090600702018a82815481106128b057fe5b9060005260206000209060070201600082015481600001556001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160149054906101000a900460ff168160010160146101000a81548160ff0219169083600181111561296057fe5b021790555060028201548160020155600382015481600301556004820154816004015560058201548160050155600682015481600601559050506129ae60018261263790919063ffffffff16565b9050612858565b50888054806129c057fe5b60019003818190600052602060002090600702016000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160146101000a81549060ff0219169055600282016000905560038201600090556004820160009055600582016000905560068201600090555050905589805480612a4e57fe5b60019003818190600052602060002090600202016000808201600090556001820160009055505090558291505b612a8f60018361263790919063ffffffff16565b9150612715565b8096508696505050505050509392505050565b600080831415612abc5760009050612b13565b6000828402905082848281612acd57fe5b0414612b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0590615ad2565b60405180910390fd5b809150505b92915050565b6000612b5b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613203565b905092915050565b836000612b6f8261195a565b9050600073ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0e90615b72565b60405180910390fd5b6000612c228761195a565b905060008611612c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5e90615b32565b60405180910390fd5b60008511612caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca190615a32565b60405180910390fd5b6000600e60008381526020019081526020016000206000806001811115612ccd57fe5b876001811115612cd957fe5b14612ce5576000612ce8565b60015b6001811115612cf357fe5b81526020019081526020016000209050600081805490501415612d2157612d1c82888888613264565b61319e565b60006001811115612d2e57fe5b856001811115612d3a57fe5b1415612e2d576000879050600080838054905090505b838054905082108015612d635750600083115b15612e2957838281548110612d7457fe5b9060005260206000209060070201600501548910612e0a57612d99858585858c613d56565b9250612db1600160035461263790919063ffffffff16565b6003819055506001612dd08386805490506125ed90919063ffffffff16565b148015612ddd5750600083115b15612def57612dee85848b8b613264565b5b612e0360018361263790919063ffffffff16565b9150612e24565b8091506000831115612e2357612e2285848b8b613264565b5b5b612d50565b5050505b600180811115612e3957fe5b856001811115612e4557fe5b1415612f38576000879050600080838054905090505b838054905082108015612e6e5750600083115b15612f3457838281548110612e7f57fe5b9060005260206000209060070201600501548911612f1557612ea4858585858c613d56565b9250612ebc600160035461263790919063ffffffff16565b6003819055506001612edb8386805490506125ed90919063ffffffff16565b148015612ee85750600083115b15612efa57612ef985848b8b613264565b5b612f0e60018361263790919063ffffffff16565b9150612f2f565b8091506000831115612f2e57612f2d85848b8b613264565b5b5b612e5b565b5050505b60008090505b818054905081108015612f8a5750818181548110612f5857fe5b906000526020600020906007020160030154828281548110612f7657fe5b906000526020600020906007020160040154145b1561319c5760008190505b612fad600184805490506125ed90919063ffffffff16565b8110156130f25782612fc960018361263790919063ffffffff16565b81548110612fd357fe5b9060005260206000209060070201838281548110612fed57fe5b9060005260206000209060070201600082015481600001556001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160149054906101000a900460ff168160010160146101000a81548160ff0219169083600181111561309d57fe5b021790555060028201548160020155600382015481600301556004820154816004015560058201548160050155600682015481600601559050506130eb60018261263790919063ffffffff16565b9050612f95565b50818054806130fd57fe5b60019003818190600052602060002090600702016000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160146101000a81549060ff0219169055600282016000905560038201600090556004820160009055600582016000905560068201600090555050905561319560018261263790919063ffffffff16565b9050612f3e565b505b5050505050505050565b60008383111582906131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e79190615930565b60405180910390fd5b5060008385039050809150509392505050565b6000808311829061324a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132419190615930565b60405180910390fd5b50600083858161325657fe5b049050809150509392505050565b6000600181111561327157fe5b81600181111561327d57fe5b1415613574576000600f60006132916125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161330c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330390615b92565b60405180910390fd5b613339670de0b6b3a764000061332b8486612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60006133456125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156133c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b890615af2565b60405180910390fd5b6000600a600086815260200190815260200160002060006133e06125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806040518060400160405280613455670de0b6b3a7640000613447888a612aa990919063ffffffff16565b612b1990919063ffffffff16565b81526020016004548152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550506135246134cf670de0b6b3a76400006134c18688612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60006134db6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ed90919063ffffffff16565b600f60006135306125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050613787565b82600d60006135816125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002054101561360e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360590615952565b60405180910390fd5b6000600b6000868152602001908152602001600020600061362d6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080604051806040016040528086815260200160045481525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505061372a84600d60006136d06125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000888152602001908152602001600020546125ed90919063ffffffff16565b600d60006137366125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002081905550505b6000600e600086815260200190815260200160002060008360018111156137aa57fe5b815260200190815260200160002090508060405180610100016040528060045481526020016137d76125e5565b73ffffffffffffffffffffffffffffffffffffffff1681526020018460018111156137fe57fe5b8152602001878152602001868152602001600081526020018581526020014281525090806001815401808255809150506001900390600052602060002090600702016000909190919091506000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff021916908360018111156138be57fe5b0217905550606082015181600201556080820151816003015560a0820151816004015560c0820151816005015560e08201518160060155505060008082805490501161390b576000613924565b613923600183805490506125ed90919063ffffffff16565b5b90505b6000811115613d32576000600181111561393d57fe5b83600181111561394957fe5b1480156139a2575081818154811061395d57fe5b906000526020600020906007020160050154826139846001846125ed90919063ffffffff16565b8154811061398e57fe5b906000526020600020906007020160050154115b156139ac57613d32565b6001808111156139b857fe5b8360018111156139c457fe5b148015613a1d57508181815481106139d857fe5b906000526020600020906007020160050154826139ff6001846125ed90919063ffffffff16565b81548110613a0957fe5b906000526020600020906007020160050154105b15613a2757613d32565b613a2f614aa3565b82613a446001846125ed90919063ffffffff16565b81548110613a4e57fe5b906000526020600020906007020160405180610100016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900460ff166001811115613ae657fe5b6001811115613af157fe5b8152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815250509050828281548110613b3557fe5b906000526020600020906007020183613b586001856125ed90919063ffffffff16565b81548110613b6257fe5b9060005260206000209060070201600082015481600001556001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160149054906101000a900460ff168160010160146101000a81548160ff02191690836001811115613c1257fe5b0217905550600282015481600201556003820154816003015560048201548160040155600582015481600501556006820154816006015590505080838381548110613c5957fe5b90600052602060002090600702016000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff02191690836001811115613cdc57fe5b0217905550606082015181600201556080820151816003015560a0820151816004015560c0820151816005015560e08201518160060155905050613d2a6001836125ed90919063ffffffff16565b915050613927565b613d48600160045461263790919063ffffffff16565b600481905550505050505050565b600080613da6868581548110613d6857fe5b906000526020600020906007020160040154878681548110613d8657fe5b9060005260206000209060070201600301546125ed90919063ffffffff16565b90506000818611613db75785613db9565b815b9050613dce81876125ed90919063ffffffff16565b9550613e0081888781548110613de057fe5b90600052602060002090600702016004015461263790919063ffffffff16565b878681548110613e0c57fe5b906000526020600020906007020160040181905550877fdb0c486e680ba8026643e6a85f8d157b5e7bcd4b32b54d564542570a9eb20416600354898881548110613e5257fe5b9060005260206000209060070201600001548a8981548110613e7057fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eaa6125e5565b868d8c81548110613eb757fe5b90600052602060002090600702016005015442604051613edd9796959493929190615c36565b60405180910390a2600180811115613ef157fe5b846001811115613efd57fe5b141561440b57613f6d81600d6000613f136125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b8152602001908152602001600020546125ed90919063ffffffff16565b600d6000613f796125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a81526020019081526020016000208190555061406881600d60008a8981548110613fdc57fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205461263790919063ffffffff16565b600d600089888154811061407857fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a81526020019081526020016000208190555061419b614146670de0b6b3a76400006141388a898154811061411757fe5b90600052602060002090600702016005015485612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60006141526125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263790919063ffffffff16565b600f60006141a76125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008a8152602001908152602001600020600089888154811061420857fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081805490509050600080905060008a898154811061429257fe5b90600052602060002090600702016000015490505b8282101561440657808483815481106142bc57fe5b90600052602060002090600202016001015414801561431457508a89815481106142e257fe5b9060005260206000209060070201600301548b8a8154811061430057fe5b906000526020600020906007020160040154145b156143eb5760008290505b6143336001856125ed90919063ffffffff16565b8110156143b6578461434f60018361263790919063ffffffff16565b8154811061435957fe5b906000526020600020906002020185828154811061437357fe5b906000526020600020906002020160008201548160000155600182015481600101559050508392506143af60018261263790919063ffffffff16565b905061431f565b50838054806143c157fe5b60019003818190600052602060002090600202016000808201600090556001820160009055505090555b6143ff60018361263790919063ffffffff16565b91506142a7565b505050505b6000600181111561441857fe5b84600181111561442457fe5b1415614a2557614474670de0b6b3a764000061446689888154811061444557fe5b90600052602060002090600702016005015484612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60006144806125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156144fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144f390615ab2565b60405180910390fd5b61456681600d600061450c6125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205461263790919063ffffffff16565b600d60006145726125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a81526020019081526020016000208190555061469961460e670de0b6b3a76400006146008a89815481106145df57fe5b90600052602060002090600702016005015485612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60008a898154811061461e57fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263790919063ffffffff16565b600f60008988815481106146a957fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147bb614766670de0b6b3a76400006147588a898154811061473757fe5b90600052602060002090600702016005015485612aa990919063ffffffff16565b612b1990919063ffffffff16565b600f60006147726125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ed90919063ffffffff16565b600f60006147c76125e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008a8152602001908152602001600020600089888154811061482857fe5b906000526020600020906007020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008180549050905060008090505b81811015614a21578988815481106148b957fe5b9060005260206000209060070201600001548382815481106148d757fe5b90600052602060002090600202016001015414801561492f57508988815481106148fd57fe5b9060005260206000209060070201600301548a898154811061491b57fe5b906000526020600020906007020160040154145b15614a065760008190505b61494e6001846125ed90919063ffffffff16565b8110156149d1578361496a60018361263790919063ffffffff16565b8154811061497457fe5b906000526020600020906002020184828154811061498e57fe5b906000526020600020906002020160008201548160000155600182015481600101559050508291506149ca60018261263790919063ffffffff16565b905061493a565b50828054806149dc57fe5b60019003818190600052602060002090600202016000808201600090556001820160009055505090555b614a1a60018261263790919063ffffffff16565b90506148a5565b5050505b859250829250505095945050505050565b604051806080016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180610100016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160006001811115614ae057fe5b815260200160008019168152602001600081526020016000815260200160008152602001600081525090565b600081359050614b1b81615f1b565b92915050565b600081519050614b3081615f1b565b92915050565b600081359050614b4581615f32565b92915050565b600081519050614b5a81615f49565b92915050565b600081359050614b6f81615f60565b92915050565b600081359050614b8481615f77565b92915050565b600082601f830112614b9b57600080fd5b8135614bae614ba982615cd2565b615ca5565b91508082526020830160208301858383011115614bca57600080fd5b614bd5838284615ebb565b50505092915050565b600081359050614bed81615f87565b92915050565b600081519050614c0281615f87565b92915050565b600060208284031215614c1a57600080fd5b6000614c2884828501614b0c565b91505092915050565b600060208284031215614c4357600080fd5b6000614c5184828501614b21565b91505092915050565b600060208284031215614c6c57600080fd5b6000614c7a84828501614b36565b91505092915050565b60008060408385031215614c9657600080fd5b6000614ca485828601614b0c565b925050602083013567ffffffffffffffff811115614cc157600080fd5b614ccd85828601614b8a565b9150509250929050565b600060208284031215614ce957600080fd5b6000614cf784828501614b4b565b91505092915050565b600060208284031215614d1257600080fd5b600082013567ffffffffffffffff811115614d2c57600080fd5b614d3884828501614b8a565b91505092915050565b60008060008060808587031215614d5757600080fd5b600085013567ffffffffffffffff811115614d7157600080fd5b614d7d87828801614b8a565b9450506020614d8e87828801614b60565b9350506040614d9f87828801614b0c565b9250506060614db087828801614b0c565b91505092959194509250565b60008060408385031215614dcf57600080fd5b600083013567ffffffffffffffff811115614de957600080fd5b614df585828601614b8a565b9250506020614e0685828601614b75565b9150509250929050565b60008060408385031215614e2357600080fd5b600083013567ffffffffffffffff811115614e3d57600080fd5b614e4985828601614b8a565b9250506020614e5a85828601614bde565b9150509250929050565b600080600060608486031215614e7957600080fd5b600084013567ffffffffffffffff811115614e9357600080fd5b614e9f86828701614b8a565b9350506020614eb086828701614bde565b9250506040614ec186828701614bde565b9150509250925092565b60008060008060808587031215614ee157600080fd5b600085013567ffffffffffffffff811115614efb57600080fd5b614f0787828801614b8a565b9450506020614f1887828801614bde565b9350506040614f2987828801614bde565b9250506060614f3a87828801614b75565b91505092959194509250565b600060208284031215614f5857600080fd5b6000614f6684828501614bde565b91505092915050565b600060208284031215614f8157600080fd5b6000614f8f84828501614bf3565b91505092915050565b6000614fa48383615702565b6101008301905092915050565b6000614fbd83836157a4565b60808301905092915050565b614fd281615e2b565b82525050565b614fe181615db4565b82525050565b614ff081615da2565b82525050565b614fff81615da2565b82525050565b600061501082615d1e565b61501a8185615d64565b935061502583615cfe565b8060005b8381101561505657815161503d8882614f98565b975061504883615d4a565b925050600181019050615029565b5085935050505092915050565b600061506e82615d29565b6150788185615d75565b935061508383615d0e565b8060005b838110156150b457815161509b8882614fb1565b97506150a683615d57565b925050600181019050615087565b5085935050505092915050565b6150ca81615dd2565b82525050565b6150d981615dd2565b82525050565b60006150ea82615d34565b6150f48185615d86565b9350615104818560208601615eca565b80840191505092915050565b61511981615e3d565b82525050565b61512881615e61565b82525050565b61513781615e85565b82525050565b600061514882615d3f565b6151528185615d91565b9350615162818560208601615eca565b61516b81615efd565b840191505092915050565b6000615183600d83615d91565b91507f546f6b656e20746f6f206c6f77000000000000000000000000000000000000006000830152602082019050919050565b60006151c3602183615d91565b91507f4e6f7420656e6f7567682065746820696e2074726164696e672062616c616e6360008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615229601483615d91565b91507f43616e206e6f74206265203020616464726573730000000000000000000000006000830152602082019050919050565b6000615269601b83615d91565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006152a9601a83615d91565b91507f4f776e6572206f6620746f6b656e206973206e6f7420757365720000000000006000830152602082019050919050565b60006152e9600f83615d91565b91507f62616c616e636520746f6f206c6f7700000000000000000000000000000000006000830152602082019050919050565b6000615329600e83615d91565b91507f416c7265616479206578697374730000000000000000000000000000000000006000830152602082019050919050565b6000615369601283615d91565b91507f50726963652063616e206e6f74206265203000000000000000000000000000006000830152602082019050919050565b60006153a9600883615d91565b91507f446576206f6e6c790000000000000000000000000000000000000000000000006000830152602082019050919050565b60006153e9601a83615d91565b91507f757365727320686173206e6f2070656e64696e67206f726465720000000000006000830152602082019050919050565b6000615429601b83615d91565b91507f616464207374616b65686f6c6465722063616c6c206661696c656400000000006000830152602082019050919050565b6000615469601383615d91565b91507f6574682062616c616e636520746f6f206c6f77000000000000000000000000006000830152602082019050919050565b60006154a9602183615d91565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061550f600b83615d91565b91507f45746820746f6f206c6f770000000000000000000000000000000000000000006000830152602082019050919050565b600061554f600a83615d91565b91507f4f776e6572206f6e6c79000000000000000000000000000000000000000000006000830152602082019050919050565b600061558f601383615d91565b91507f416d6f756e742063616e206e6f742062652030000000000000000000000000006000830152602082019050919050565b60006155cf601583615d91565b91507f64656372656d656e742063616c6c206661696c656400000000000000000000006000830152602082019050919050565b600061560f601a83615d91565b91507f7374616b696e67204e465420646f6573206e6f742065786973740000000000006000830152602082019050919050565b600061564f601983615d91565b91507f43616e206e6f74207075726368617365206e6f207374616b65000000000000006000830152602082019050919050565b600061568f601583615d91565b91507f63616e6e6f7420776974686472617720302065746800000000000000000000006000830152602082019050919050565b60006156cf601583615d91565b91507f696e6372656d656e742063616c6c206661696c656400000000000000000000006000830152602082019050919050565b6101008201600082015161571960008501826157f9565b50602082015161572c6020850182614fe7565b50604082015161573f604085018261512e565b50606082015161575260608501826150c1565b50608082015161576560808501826157f9565b5060a082015161577860a08501826157f9565b5060c082015161578b60c08501826157f9565b5060e082015161579e60e08501826157f9565b50505050565b6080820160008201516157ba60008501826150c1565b5060208201516157cd602085018261511f565b5060408201516157e06040850182614fe7565b5060608201516157f36060850182614fe7565b50505050565b61580281615e21565b82525050565b61581181615e21565b82525050565b600061582382846150df565b915081905092915050565b60006020820190506158436000830184614ff6565b92915050565b600060208201905061585e6000830184614fc9565b92915050565b60006020820190506158796000830184614fd8565b92915050565b60006060820190506158946000830186614fc9565b6158a16020830185614ff6565b6158ae6040830184615808565b949350505050565b600060208201905081810360008301526158d08184615005565b905092915050565b600060208201905081810360008301526158f28184615063565b905092915050565b600060208201905061590f60008301846150d0565b92915050565b600060208201905061592a6000830184615110565b92915050565b6000602082019050818103600083015261594a818461513d565b905092915050565b6000602082019050818103600083015261596b81615176565b9050919050565b6000602082019050818103600083015261598b816151b6565b9050919050565b600060208201905081810360008301526159ab8161521c565b9050919050565b600060208201905081810360008301526159cb8161525c565b9050919050565b600060208201905081810360008301526159eb8161529c565b9050919050565b60006020820190508181036000830152615a0b816152dc565b9050919050565b60006020820190508181036000830152615a2b8161531c565b9050919050565b60006020820190508181036000830152615a4b8161535c565b9050919050565b60006020820190508181036000830152615a6b8161539c565b9050919050565b60006020820190508181036000830152615a8b816153dc565b9050919050565b60006020820190508181036000830152615aab8161541c565b9050919050565b60006020820190508181036000830152615acb8161545c565b9050919050565b60006020820190508181036000830152615aeb8161549c565b9050919050565b60006020820190508181036000830152615b0b81615502565b9050919050565b60006020820190508181036000830152615b2b81615542565b9050919050565b60006020820190508181036000830152615b4b81615582565b9050919050565b60006020820190508181036000830152615b6b816155c2565b9050919050565b60006020820190508181036000830152615b8b81615602565b9050919050565b60006020820190508181036000830152615bab81615642565b9050919050565b60006020820190508181036000830152615bcb81615682565b9050919050565b60006020820190508181036000830152615beb816156c2565b9050919050565b6000602082019050615c076000830184615808565b92915050565b6000604082019050615c226000830185615808565b615c2f6020830184615808565b9392505050565b600060e082019050615c4b600083018a615808565b615c586020830189615808565b615c656040830188614ff6565b615c726060830187614fc9565b615c7f6080830186615808565b615c8c60a0830185615808565b615c9960c0830184615808565b98975050505050505050565b6000604051905081810181811067ffffffffffffffff82111715615cc857600080fd5b8060405250919050565b600067ffffffffffffffff821115615ce957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615dad82615e01565b9050919050565b6000615dbf82615e01565b9050919050565b60008115159050919050565b6000819050919050565b6000615de782615da2565b9050919050565b6000819050615dfc82615f0e565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615e3682615e97565b9050919050565b6000615e4882615e4f565b9050919050565b6000615e5a82615e01565b9050919050565b6000615e6c82615e73565b9050919050565b6000615e7e82615e01565b9050919050565b6000615e9082615dee565b9050919050565b6000615ea282615ea9565b9050919050565b6000615eb482615e01565b9050919050565b82818337600083830152505050565b60005b83811015615ee8578082015181840152602081019050615ecd565b83811115615ef7576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615f1857fe5b50565b615f2481615da2565b8114615f2f57600080fd5b50565b615f3b81615db4565b8114615f4657600080fd5b50565b615f5281615dc6565b8114615f5d57600080fd5b50565b615f6981615ddc565b8114615f7457600080fd5b50565b60028110615f8457600080fd5b50565b615f9081615e21565b8114615f9b57600080fd5b5056fea264697066735822122077ffa199e9f5b0f4e92699615e70df1039488f74a1bc2a65462f23fcb121e2af64736f6c634300060a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc0000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac5700000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000628c3a02dc2f08f3592286150dbd67972583276500000000000000000000000051e486e7d62a798ff8c9bc105c1372b15c9396690000000000000000000000005530fb19c22b1b410708b0a9fd230c714cba12ed
-----Decoded View---------------
Arg [0] : _nfy (address): 0x1cBb83EbcD552D5EBf8131eF8c9CD9d9BAB342bC
Arg [1] : _rewardPool (address): 0x2f822dA8016d5e8ce3c93b53eE1528392Ca3ac57
Arg [2] : _fee (uint256): 250000000000000000
Arg [3] : _devFeeAddress (address): 0x628c3A02DC2f08F3592286150dbD679725832765
Arg [4] : _communityFundAddress (address): 0x51e486E7D62a798Ff8c9bc105C1372B15C939669
Arg [5] : _dev (address): 0x5530fb19c22B1B410708b0A9fD230c714cbA12Ed
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc
Arg [1] : 0000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac57
Arg [2] : 00000000000000000000000000000000000000000000000003782dace9d90000
Arg [3] : 000000000000000000000000628c3a02dc2f08f3592286150dbd679725832765
Arg [4] : 00000000000000000000000051e486e7d62a798ff8c9bc105c1372b15c939669
Arg [5] : 0000000000000000000000005530fb19c22b1b410708b0a9fd230c714cba12ed
Deployed Bytecode Sourcemap
10162:17041:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10436:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10343:23;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12495:207;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9769:81;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10471:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14301:989;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15871:199;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15333:123;;;:::i;:::-;;13013:109;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10404:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12088:85;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10375:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9300:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16117:524;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12755:201;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15500:319;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24589:778;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26821:377;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12242:178;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13169:406;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13640:587;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9658:103;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16691:556;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10436:28;;;;;;;;;;;;;:::o;10343:23::-;;;;:::o;12495:207::-;9411:5;;;;;;;;;;;9395:21;;:12;:10;:12::i;:::-;:21;;;9387:44;;;;;;;;;;;;;;;;;;;;;;12623:1:::1;12594:31;;:17;:31;;;;12586:64;;;;;;;;;;;;;;;;;;;;;;12677:17;12661:13;;:33;;;;;;;;;;;;;;;;;;12495:207:::0;:::o;9769:81::-;9513:3;;;;;;;;;;;9497:19;;:12;:10;:12::i;:::-;:19;;;9489:40;;;;;;;;;;;;;;;;;;;;;;9838:4:::1;9832:3;;:10;;;;;;;;;;;;;;;;;;9769:81:::0;:::o;10471:25::-;;;;;;;;;;;;;:::o;14301:989::-;14374:6;26599:15;26617:23;26633:6;26617:15;:23::i;:::-;26599:41;;26701:1;26659:44;;:6;:15;26666:7;26659:15;;;;;;;;;;;:30;;;;;;;;;;;;:44;;;;26651:83;;;;;;;;;;;;;;;;;;;;;;14402:15:::1;14420:23;14436:6;14420:15;:23::i;:::-;14402:41;;14515:1;14459:6;:15;14466:7;14459:15;;;;;;;;;;;:27;;;;;;;;;;;;:38;;;14498:12;:10;:12::i;:::-;14459:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:57;14456:347;;;14588:15;14609:6;:15;14616:7;14609:15;;;;;;;;;;;:30;;;;;;;;;;;;:35;;14704:12;:10;:12::i;:::-;14645:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14609:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14587:131;;;14755:4;14741:18;;:10;:18;;;14733:58;;;;;;;;;;;;;;;;;;;;;;14456:347;;14815:13;14831:6;:15;14838:7;14831:15;;;;;;;;;;;:27;;;;;;;;;;;;:38;;;14870:12;:10;:12::i;:::-;14831:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14815:68;;14943:7;14902:14;:28;14917:12;:10;:12::i;:::-;14902:28;;;;;;;;;;;;;;;:37;14931:7;14902:37;;;;;;;;;;;;:48;;14894:76;;;;;;;;;;;;;;;;;;;;;;15023:50;15065:7;15023:14;:28;15038:12;:10;:12::i;:::-;15023:28;;;;;;;;;;;;;;;:37;15052:7;15023:37;;;;;;;;;;;;:41;;:50;;;;:::i;:::-;14983:14;:28;14998:12;:10;:12::i;:::-;14983:28;;;;;;;;;;;;;;;:37;15012:7;14983:37;;;;;;;;;;;:90;;;;15087:12;15105:6;:15;15112:7;15105:15;;;;;;;;;;;:30;;;;;;;;;;;;:35;;15203:8;15213:7;15141:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15105:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15086:136;;;15252:4;15241:15;;:7;:15;;;15233:49;;;;;;;;;;;;;;;;;;;;;;26745:1;;;14301:989:::0;;;;:::o;15871:199::-;15945:14;15972:15;15990:23;16006:6;15990:15;:23::i;:::-;15972:41;;16031:9;:18;16041:7;16031:18;;;;;;;;;;;:30;16055:4;16050:10;;;;;;;;16031:30;;;;;;;;;;;16024:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15871:199;;;;:::o;15333:123::-;15409:39;15438:9;15409:10;:24;15420:12;:10;:12::i;:::-;15409:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;15382:10;:24;15393:12;:10;:12::i;:::-;15382:24;;;;;;;;;;;;;;;:66;;;;15333:123::o;13013:109::-;13073:4;13097:10;:17;13108:5;13097:17;;;;;;;;;;;;;;;;13090:24;;13013:109;;;:::o;10404:25::-;;;;;;;;;;;;;:::o;12088:85::-;9411:5;;;;;;;;;;;9395:21;;:12;:10;:12::i;:::-;:21;;;9387:44;;;;;;;;;;;;;;;;;;;;;;12161:4:::1;12147:11;:18;;;;12088:85:::0;:::o;10375:22::-;;;;;;;;;;;;;:::o;9300:20::-;;;;;;;;;;;;;:::o;16117:524::-;16160:19;16193:27;16240:14;:21;;;;16223:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;16193:69;;16279:6;16288:1;16279:10;;16274:334;16295:14;:21;;;;16291:1;:25;16274:334;;;16352:243;;;;;;;;16380:6;:25;16387:14;16402:1;16387:17;;;;;;;;;;;;;;;;16380:25;;;;;;;;;;;:32;;;16352:243;;;;16430:6;:25;16437:14;16452:1;16437:17;;;;;;;;;;;;;;;;16430:25;;;;;;;;;;;:37;;;;;;;;;;;;16352:243;;;;;;16485:6;:25;16492:14;16507:1;16492:17;;;;;;;;;;;;;;;;16485:25;;;;;;;;;;;:36;;;;;;;;;;;;16352:243;;;;;;16539:6;:25;16546:14;16561:1;16546:17;;;;;;;;;;;;;;;;16539:25;;;;;;;;;;;:40;;;;;;;;;;;;16352:243;;;;;16339:7;16347:1;16339:10;;;;;;;;;;;;;:256;;;;16318:3;;;;;;;16274:334;;;;16626:7;16619:14;;;16117:524;:::o;12755:201::-;12840:4;12857:15;12875:23;12891:6;12875:15;:23::i;:::-;12857:41;;12918:14;:21;12933:5;12918:21;;;;;;;;;;;;;;;:30;12940:7;12918:30;;;;;;;;;;;;12911:37;;;12755:201;;;;:::o;15500:319::-;15572:1;15562:7;:11;15554:45;;;;;;;;;;;;;;;;;;;;;;15646:7;15618:10;:24;15629:12;:10;:12::i;:::-;15618:24;;;;;;;;;;;;;;;;:35;;15610:81;;;;;;;;;;;;;;;;;;;;;;15731:37;15760:7;15731:10;:24;15742:12;:10;:12::i;:::-;15731:24;;;;;;;;;;;;;;;;:28;;:37;;;;:::i;:::-;15704:10;:24;15715:12;:10;:12::i;:::-;15704:24;;;;;;;;;;;;;;;:64;;;;15781:12;:10;:12::i;:::-;:21;;:30;15803:7;15781:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15500:319;:::o;24589:778::-;24667:6;26599:15;26617:23;26633:6;26617:15;:23::i;:::-;26599:41;;26701:1;26659:44;;:6;:15;26666:7;26659:15;;;;;;;;;;;:30;;;;;;;;;;;;:44;;;;26651:83;;;;;;;;;;;;;;;;;;;;;;24686:15:::1;24704:23;24720:6;24704:15;:23::i;:::-;24686:41;;24740:22;24765:9;:18;24775:7;24765:18;;;;;;;;;;;:31;24789:5;24784:11;;;;;;;;24765:31;;;;;;;;;;;24740:56;;24821:8;24812:17;;;;;;;;:5;:17;;;;;;;;;24809:551;;;24846:37;24886:10;:19;24897:7;24886:19;;;;;;;;;;;:33;24906:12;:10;:12::i;:::-;24886:33;;;;;;;;;;;;;;;24846:73;;24934:11;24948:36;24961:7;24970:6;24978:5;24948:12;:36::i;:::-;24934:50;;25027:36;25056:6;25027:10;:24;25038:12;:10;:12::i;:::-;25027:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;24999:10;:24;25010:12;:10;:12::i;:::-;24999:24;;;;;;;;;;;;;;;:64;;;;24809:551;;;;;25104:37;25144:12;:21;25157:7;25144:21;;;;;;;;;;;:35;25166:12;:10;:12::i;:::-;25144:35;;;;;;;;;;;;;;;25104:75;;25194:11;25208:36;25221:7;25230:6;25238:5;25208:12;:36::i;:::-;25194:50;;25299:49;25341:6;25299:14;:28;25314:12;:10;:12::i;:::-;25299:28;;;;;;;;;;;;;;;:37;25328:7;25299:37;;;;;;;;;;;;:41;;:49;;;;:::i;:::-;25259:14;:28;25274:12;:10;:12::i;:::-;25259:28;;;;;;;;;;;;;;;:37;25288:7;25259:37;;;;;;;;;;;:89;;;;24809:551;;;26745:1;;24589:778:::0;;;;:::o;26821:377::-;26900:14;26927:32;26968:7;26927:49;;26987:24;27014:7;26987:34;;27068:1;27038:19;:26;:31;27034:74;;;27093:3;27086:10;;;;;;;;27034:74;27176:2;27164:10;27160:19;27154:26;27144:36;;27129:62;;;;;;:::o;12242:178::-;9513:3;;;;;;;;;;;9497:19;;:12;:10;:12::i;:::-;:19;;;9489:40;;;;;;;;;;;;;;;;;;;;;;12350:1:::1;12327:25;;:11;:25;;;;12319:58;;;;;;;;;;;;;;;;;;;;;;12401:11;12388:10;;:24;;;;;;;;;;;;;;;;;;12242:178:::0;:::o;13169:406::-;9411:5;;;;;;;;;;;9395:21;;:12;:10;:12::i;:::-;:21;;;9387:44;;;;;;;;;;;;;;;;;;;;;;13313:15:::1;13331:23;13347:6;13331:15;:23::i;:::-;13313:41;;13415:1;13373:44;;:6;:15;13380:7;13373:15;;;;;;;;;;;:30;;;;;;;;;;;;:44;;;13365:71;;;;;;;;;;;;;;;;;;;;;;13465:63;;;;;;;;13476:7;13465:63;;;;13485:12;13465:63;;;;;;13499:11;13465:63;;;;;;13512:15;13465:63;;;;::::0;13447:6:::1;:15;13454:7;13447:15;;;;;;;;;;;:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13539:14;13559:7;13539:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9442:1;13169:406:::0;;;;:::o;13640:587::-;13727:6;26599:15;26617:23;26633:6;26617:15;:23::i;:::-;26599:41;;26701:1;26659:44;;:6;:15;26666:7;26659:15;;;;;;;;;;;:30;;;;;;;;;;;;:44;;;;26651:83;;;;;;;;;;;;;;;;;;;;;;13755:15:::1;13773:23;13789:6;13773:15;:23::i;:::-;13755:41;;13864:12;:10;:12::i;:::-;13815:61;;:6;:15;13822:7;13815:15;;;;;;;;;;;:27;;;;;;;;;;;;:35;;;13851:8;13815:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;13807:100;;;;;;;;;;;;;;;;;;;;;;13921:12;13939:6;:15;13946:7;13939:15;;;;;;;;;;;:30;;;;;;;;;;;;:35;;14037:8;14047:7;13975:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13939:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13920:136;;;14086:4;14075:15;;:7;:15;;;14067:49;;;;;;;;;;;;;;;;;;;;;;14169:50;14211:7;14169:14;:28;14184:12;:10;:12::i;:::-;14169:28;;;;;;;;;;;;;;;:37;14198:7;14169:37;;;;;;;;;;;;:41;;:50;;;;:::i;:::-;14129:14;:28;14144:12;:10;:12::i;:::-;14129:28;;;;;;;;;;;;;;;:37;14158:7;14129:37;;;;;;;;;;;:90;;;;26745:1;;13640:587:::0;;;;;:::o;9658:103::-;9411:5;;;;;;;;;;;9395:21;;:12;:10;:12::i;:::-;:21;;;9387:44;;;;;;;;;;;;;;;;;;;;;;9747:6:::1;9739:5;::::0;:14:::1;;;;;;;;;;;;;;;;;;9658:103:::0;:::o;16691:556::-;16800:11;16814:28;16838:3;16814:19;16830:2;16814:11;;:15;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;16800:42;;16853:17;16873:27;16896:3;16873:18;16889:1;16873:11;;:15;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;16853:47;;16913:14;16930:41;16958:12;16930:23;16946:6;16930:11;;:15;;:23;;;;:::i;:::-;:27;;:41;;;;:::i;:::-;16913:58;;16984:8;;;;;;;;;;;:21;;;17006:12;:10;:12::i;:::-;17020:10;;;;;;;;;;;17032:6;16984:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17050:8;;;;;;;;;;;:21;;;17072:12;:10;:12::i;:::-;17086:13;;;;;;;;;;;17101:12;17050:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17125:8;;;;;;;;;;;:21;;;17147:12;:10;:12::i;:::-;17161:10;;;;;;;;;;;17173:9;17125:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17196:43;17208:6;17216:7;17225:6;17233:5;17196:11;:43::i;:::-;16691:556;;;;;;;:::o;8845:106::-;8898:15;8933:10;8926:17;;8845:106;:::o;1420:136::-;1478:7;1505:43;1509:1;1512;1505:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1498:50;;1420:136;;;;:::o;956:181::-;1014:7;1034:9;1050:1;1046;:5;1034:17;;1075:1;1070;:6;;1062:46;;;;;;;;;;;;;;;;;;;;;;1128:1;1121:8;;;956:181;;;;:::o;25375:1160::-;25489:9;25510:14;25548:1;25531:7;:14;;;;:18;25510:40;;25583:1;25569:10;:15;;25561:54;;;;;;;;;;;;;;;;;;;;;;25626:14;25648:10;25626:33;;25670:12;25685:7;25693:9;25685:18;;;;;;;;;;;;;;;;;;:21;;;25670:36;;25717:16;25736:6;:13;;;;25717:32;;25762:6;25771:1;25762:10;;25783:11;25807:675;25817:6;:13;;;;25813:1;:17;25807:675;;;25866:7;25850:6;25857:1;25850:9;;;;;;;;;;;;;;;;;;:12;;;:23;25847:596;;;25907:8;25898:17;;;;;;;;:5;:17;;;;;;;;;25895:289;;;25948:85;25985:47;26027:4;25985:37;26006:6;26013:1;26006:9;;;;;;;;;;;;;;;;;;:15;;;25985:6;25992:1;25985:9;;;;;;;;;;;;;;;;;;:16;;;:20;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;25948:7;25956:9;25948:18;;;;;;;;;;;;;;;;;;:32;;;:36;;:85;;;;:::i;:::-;25939:94;;25895:289;;;26110:54;26147:6;26154:1;26147:9;;;;;;;;;;;;;;;;;;:16;;;26110:7;26118:9;26110:18;;;;;;;;;;;;;;;;;;:32;;;:36;;:54;;;;:::i;:::-;26101:63;;25895:289;26208:6;26217:1;26208:10;;26204:126;26224:20;26242:1;26224:6;:13;;;;:17;;:20;;;;:::i;:::-;26220:1;:24;26204:126;;;26294:6;26301:8;26307:1;26301;:5;;:8;;;;:::i;:::-;26294:16;;;;;;;;;;;;;;;;;;26282:6;26289:1;26282:9;;;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26250:8;26256:1;26250;:5;;:8;;;;:::i;:::-;26246:12;;26204:126;;;;26350:6;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26381:7;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26417:11;26413:15;;25847:596;26462:8;26468:1;26462;:5;;:8;;;;:::i;:::-;26458:12;;25807:675;;;26499:6;26492:13;;26523:4;26516:11;;;;;;;;25375:1160;;;;;:::o;2310:471::-;2368:7;2618:1;2613;:6;2609:47;;;2643:1;2636:8;;;;2609:47;2668:9;2684:1;2680;:5;2668:17;;2713:1;2708;2704;:5;;;;;;:10;2696:56;;;;;;;;;;;;;;;;;;;;;;2772:1;2765:8;;;2310:471;;;;;:::o;3257:132::-;3315:7;3342:39;3346:1;3349;3342:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3335:46;;3257:132;;;;:::o;17284:2703::-;17380:6;26599:15;26617:23;26633:6;26617:15;:23::i;:::-;26599:41;;26701:1;26659:44;;:6;:15;26666:7;26659:15;;;;;;;;;;;:30;;;;;;;;;;;;:44;;;;26651:83;;;;;;;;;;;;;;;;;;;;;;17408:15:::1;17426:23;17442:6;17426:15;:23::i;:::-;17408:41;;17478:1;17468:7;:11;17460:43;;;;;;;;;;;;;;;;;;;;;;17531:1;17522:6;:10;17514:41;;;;;;;;;;;;;;;;;;;;;;17568:22;17593:9;:18;17603:7;17593:18;;;;;;;;;;;:66;17626:8:::0;17617:17:::1;;;;;;;;:5;:17;;;;;;;;;:40;;17649:8;17617:40;;;17637:9;17617:40;17612:46;;;;;;;;17593:66;;;;;;;;;;;17568:91;;17690:1;17673:6;:13;;;;:18;17670:2310;;;17707:45;17720:7;17729;17738:6;17746:5;17707:12;:45::i;:::-;17670:2310;;;17805:8;17796:17;;;;;;;;:5;:17;;;;;;;;;17793:919;;;17833:14;17850:7;17833:24;;17876:6;17901:16:::0;17920:6:::1;:13;;;;17901:32;;17952:745;17962:6;:13;;;;17958:1;:17;:34;;;;;17991:1;17979:9;:13;17958:34;17952:745;;;18032:6;18039:1;18032:9;;;;;;;;;;;;;;;;;;:15;;;18022:6;:25;18019:659;;18087:48;18099:7;18107:6;18115:9;18126:1;18129:5;18087:11;:48::i;:::-;18075:60;;18176:18;18192:1;18176:11;;:15;;:18;;;;:::i;:::-;18162:11;:32;;;;18250:1;18226:20;18244:1;18226:6;:13;;;;:17;;:20;;;;:::i;:::-;:25;:42;;;;;18267:1;18255:9;:13;18226:42;18223:152;;;18300:47;18313:7;18322:9;18333:6;18341:5;18300:12;:47::i;:::-;18223:152;18405:8;18411:1;18405;:5;;:8;;;;:::i;:::-;18401:12;;18019:659;;;18494:11;18490:15;;18547:1;18535:9;:13;18532:123;;;18580:47;18593:7;18602:9;18613:6;18621:5;18580:12;:47::i;:::-;18532:123;18019:659;17952:745;;;17793:919;;;;18740:9;18731:18:::0;::::1;;;;;;;:5;:18;;;;;;;;;18728:918;;;18769:14;18786:7;18769:24;;18812:6;18837:16:::0;18856:6:::1;:13;;;;18837:32;;18888:743;18898:6;:13;;;;18894:1;:17;:34;;;;;18927:1;18915:9;:13;18894:34;18888:743;;;18966:6;18973:1;18966:9;;;;;;;;;;;;;;;;;;:15;;;18956:6;:25;18953:659;;19021:48;19033:7;19041:6;19049:9;19060:1;19063:5;19021:11;:48::i;:::-;19009:60;;19110:18;19126:1;19110:11;;:15;;:18;;;;:::i;:::-;19096:11;:32;;;;19184:1;19160:20;19178:1;19160:6;:13;;;;:17;;:20;;;;:::i;:::-;:25;:42;;;;;19201:1;19189:9;:13;19160:42;19157:152;;;19234:47;19247:7;19256:9;19267:6;19275:5;19234:12;:47::i;:::-;19157:152;19339:8;19345:1;19339;:5;;:8;;;;:::i;:::-;19335:12;;18953:659;;;19428:11;19424:15;;19481:1;19469:9;:13;19466:123;;;19514:47;19527:7;19536:9;19547:6;19555:5;19514:12;:47::i;:::-;19466:123;18953:659;18888:743;;;18728:918;;;;19661:6;19670:1:::0;19661:10:::1;;19688:281;19698:6;:13;;;;19694:1;:17;:57;;;;;19735:6;19742:1;19735:9;;;;;;;;;;;;;;;;;;:16;;;19715:6;19722:1;19715:9;;;;;;;;;;;;;;;;;;:16;;;:36;19694:57;19688:281;;;19776:6;19785:1;19776:10;;19772:128;19792:20;19810:1;19792:6;:13;;;;:17;;:20;;;;:::i;:::-;19788:1;:24;19772:128;;;19864:6;19871:8;19877:1;19871;:5;;:8;;;;:::i;:::-;19864:16;;;;;;;;;;;;;;;;;;19852:6;19859:1;19852:9;;;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19818:8;19824:1;19818;:5;;:8;;;;:::i;:::-;19814:12;;19772:128;;;;19914:6;:12;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19945:8;19951:1;19945;:5;;:8;;;;:::i;:::-;19941:12;;19688:281;;;17670:2310;;26745:1;;17284:2703:::0;;;;;;:::o;1859:192::-;1945:7;1978:1;1973;:6;;1981:12;1965:29;;;;;;;;;;;;;;;;;;;;;;;;;2005:9;2021:1;2017;:5;2005:17;;2042:1;2035:8;;;1859:192;;;;;:::o;3885:278::-;3971:7;4003:1;3999;:5;4006:12;3991:28;;;;;;;;;;;;;;;;;;;;;;;;;4030:9;4046:1;4042;:5;;;;;;4030:17;;4154:1;4147:8;;;3885:278;;;;;:::o;19995:1800::-;20105:8;20096:17;;;;;;;;:5;:17;;;;;;;;;20093:873;;;20165:1;20138:10;:24;20149:12;:10;:12::i;:::-;20138:24;;;;;;;;;;;;;;;;:28;20130:66;;;;;;;;;;;;;;;;;;;;;;20247:29;20271:4;20247:19;20259:6;20247:7;:11;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;20219:10;:24;20230:12;:10;:12::i;:::-;20219:24;;;;;;;;;;;;;;;;:57;;20211:81;;;;;;;;;;;;;;;;;;;;;;20307:37;20347:10;:19;20358:7;20347:19;;;;;;;;;;;:33;20367:12;:10;:12::i;:::-;20347:33;;;;;;;;;;;;;;;20307:73;;20395:7;20408:63;;;;;;;;20428:29;20452:4;20428:19;20440:6;20428:7;:11;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;20408:63;;;;20459:11;;20408:63;;;20395:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20514:59;20543:29;20567:4;20543:19;20555:6;20543:7;:11;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;20514:10;:24;20525:12;:10;:12::i;:::-;20514:24;;;;;;;;;;;;;;;;:28;;:59;;;;:::i;:::-;20487:10;:24;20498:12;:10;:12::i;:::-;20487:24;;;;;;;;;;;;;;;:86;;;;20093:873;;;;20664:7;20623:14;:28;20638:12;:10;:12::i;:::-;20623:28;;;;;;;;;;;;;;;:37;20652:7;20623:37;;;;;;;;;;;;:48;;20615:74;;;;;;;;;;;;;;;;;;;;;;20704:37;20744:12;:21;20757:7;20744:21;;;;;;;;;;;:35;20766:12;:10;:12::i;:::-;20744:35;;;;;;;;;;;;;;;20704:75;;20794:7;20807:41;;;;;;;;20827:7;20807:41;;;;20836:11;;20807:41;;;20794:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20904:50;20946:7;20904:14;:28;20919:12;:10;:12::i;:::-;20904:28;;;;;;;;;;;;;;;:37;20933:7;20904:37;;;;;;;;;;;;:41;;:50;;;;:::i;:::-;20864:14;:28;20879:12;:10;:12::i;:::-;20864:28;;;;;;;;;;;;;;;:37;20893:7;20864:37;;;;;;;;;;;:90;;;;20093:873;;20978:22;21003:9;:18;21013:7;21003:18;;;;;;;;;;;:31;21027:5;21022:11;;;;;;;;21003:31;;;;;;;;;;;20978:56;;21047:6;21059:188;;;;;;;;21079:11;;21059:188;;;;21105:12;:10;:12::i;:::-;21059:188;;;;;;21132:5;21059:188;;;;;;;;;;;;21152:7;21059:188;;;;21174:7;21059:188;;;;21196:1;21059:188;;;;21212:6;21059:188;;;;21233:3;21059:188;;;21047:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21261:6;21286:1;21270:6;:13;;;;:17;:44;;21313:1;21270:44;;;21290:20;21308:1;21290:6;:13;;;;:17;;:20;;;;:::i;:::-;21270:44;21261:53;;21325:420;21335:1;21331;:5;21325:420;;;21365:8;21356:17;;;;;;;;:5;:17;;;;;;;;;:61;;;;;21402:6;21409:1;21402:9;;;;;;;;;;;;;;;;;;:15;;;21377:6;21384:8;21390:1;21384;:5;;:8;;;;:::i;:::-;21377:16;;;;;;;;;;;;;;;;;;:22;;;:40;21356:61;21353:106;;;21438:5;;21353:106;21485:9;21476:18;;;;;;;;:5;:18;;;;;;;;;:62;;;;;21523:6;21530:1;21523:9;;;;;;;;;;;;;;;;;;:15;;;21498:6;21505:8;21511:1;21505;:5;;:8;;;;:::i;:::-;21498:16;;;;;;;;;;;;;;;;;;:22;;;:40;21476:62;21473:107;;;21559:5;;21473:107;21594:18;;:::i;:::-;21615:6;21622:8;21628:1;21622;:5;;:8;;;;:::i;:::-;21615:16;;;;;;;;;;;;;;;;;;21594:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21665:6;21672:1;21665:9;;;;;;;;;;;;;;;;;;21646:6;21653:8;21659:1;21653;:5;;:8;;;;:::i;:::-;21646:16;;;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21701:5;21689:6;21696:1;21689:9;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21725:8;21731:1;21725;:5;;:8;;;;:::i;:::-;21721:12;;21325:420;;;;21769:18;21785:1;21769:11;;:15;;:18;;;;:::i;:::-;21755:11;:32;;;;19995:1800;;;;;;:::o;21803:2778::-;21917:9;21938:14;21955:38;21976:6;21983:1;21976:9;;;;;;;;;;;;;;;;;;:16;;;21955:6;21962:1;21955:9;;;;;;;;;;;;;;;;;;:16;;;:20;;:38;;;;:::i;:::-;21938:55;;22004:12;22032:9;22020;:21;22019:47;;22057:9;22019:47;;;22045:9;22019:47;22004:62;;22089:22;22103:7;22089:9;:13;;:22;;;;:::i;:::-;22077:34;;22141:29;22162:7;22141:6;22148:1;22141:9;;;;;;;;;;;;;;;;;;:16;;;:20;;:29;;;;:::i;:::-;22122:6;22129:1;22122:9;;;;;;;;;;;;;;;;;;:16;;:48;;;;22264:7;22188:227;22211:11;;22237:6;22244:1;22237:9;;;;;;;;;;;;;;;;;;:12;;;22286:6;22293:1;22286:9;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;22322:12;:10;:12::i;:::-;22349:7;22371:6;22378:1;22371:9;;;;;;;;;;;;;;;;;;:15;;;22401:3;22188:227;;;;;;;;;;;;;;;;;;;;;22439:9;22431:17;;;;;;;;:4;:17;;;;;;;;;22428:996;;;22505:50;22547:7;22505:14;:28;22520:12;:10;:12::i;:::-;22505:28;;;;;;;;;;;;;;;:37;22534:7;22505:37;;;;;;;;;;;;:41;;:50;;;;:::i;:::-;22465:14;:28;22480:12;:10;:12::i;:::-;22465:28;;;;;;;;;;;;;;;:37;22494:7;22465:37;;;;;;;;;;;:90;;;;22619:59;22670:7;22619:14;:37;22634:6;22641:1;22634:9;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;22619:37;;;;;;;;;;;;;;;:46;22657:7;22619:46;;;;;;;;;;;;:50;;:59;;;;:::i;:::-;22570:14;:37;22585:6;22592:1;22585:9;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;22570:37;;;;;;;;;;;;;;;:46;22608:7;22570:46;;;;;;;;;;;:108;;;;22721:68;22750:38;22783:4;22750:28;22762:6;22769:1;22762:9;;;;;;;;;;;;;;;;;;:15;;;22750:7;:11;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;22721:10;:24;22732:12;:10;:12::i;:::-;22721:24;;;;;;;;;;;;;;;;:28;;:68;;;;:::i;:::-;22693:10;:24;22704:12;:10;:12::i;:::-;22693:24;;;;;;;;;;;;;;;:96;;;;22806:37;22846:10;:19;22857:7;22846:19;;;;;;;;;;;:42;22866:6;22873:1;22866:9;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;22846:42;;;;;;;;;;;;;;;22806:82;;22903:15;22921:7;:14;;;;22903:32;;22950:6;22959:1;22950:10;;22975:7;22985:6;22992:1;22985:9;;;;;;;;;;;;;;;;;;:12;;;22975:22;;23012:401;23022:10;23018:1;:14;23012:401;;;23072:2;23055:7;23063:1;23055:10;;;;;;;;;;;;;;;;;;:13;;;:19;:59;;;;;23098:6;23105:1;23098:9;;;;;;;;;;;;;;;;;;:16;;;23078:6;23085:1;23078:9;;;;;;;;;;;;;;;;;;:16;;;:36;23055:59;23052:315;;;23142:6;23151:1;23142:10;;23138:174;23158:17;23173:1;23158:10;:14;;:17;;;;:::i;:::-;23154:1;:21;23138:174;;;23230:7;23238:8;23244:1;23238;:5;;:8;;;;:::i;:::-;23230:17;;;;;;;;;;;;;;;;;;23217:7;23225:1;23217:10;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;23278:10;23274:14;;23181:8;23187:1;23181;:5;;:8;;;;:::i;:::-;23177:12;;23138:174;;;;23334:7;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23052:315;23389:8;23395:1;23389;:5;;:8;;;;:::i;:::-;23385:12;;23012:401;;;22428:996;;;;;23447:8;23439:16;;;;;;;;:4;:16;;;;;;;;;23436:1089;;;23508:38;23541:4;23508:28;23520:6;23527:1;23520:9;;;;;;;;;;;;;;;;;;:15;;;23508:7;:11;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;23480:10;:24;23491:12;:10;:12::i;:::-;23480:24;;;;;;;;;;;;;;;;:66;;23472:98;;;;;;;;;;;;;;;;;;;;;;23625:50;23667:7;23625:14;:28;23640:12;:10;:12::i;:::-;23625:28;;;;;;;;;;;;;;;:37;23654:7;23625:37;;;;;;;;;;;;:41;;:50;;;;:::i;:::-;23585:14;:28;23600:12;:10;:12::i;:::-;23585:28;;;;;;;;;;;;;;;:37;23614:7;23585:37;;;;;;;;;;;:90;;;;23727:77;23765:38;23798:4;23765:28;23777:6;23784:1;23777:9;;;;;;;;;;;;;;;;;;:15;;;23765:7;:11;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;23727:10;:33;23738:6;23745:1;23738:9;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;23727:33;;;;;;;;;;;;;;;;:37;;:77;;;;:::i;:::-;23690:10;:33;23701:6;23708:1;23701:9;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;23690:33;;;;;;;;;;;;;;;:114;;;;23847:68;23876:38;23909:4;23876:28;23888:6;23895:1;23888:9;;;;;;;;;;;;;;;;;;:15;;;23876:7;:11;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;23847:10;:24;23858:12;:10;:12::i;:::-;23847:24;;;;;;;;;;;;;;;;:28;;:68;;;;:::i;:::-;23819:10;:24;23830:12;:10;:12::i;:::-;23819:24;;;;;;;;;;;;;;;:96;;;;23932:37;23972:12;:21;23985:7;23972:21;;;;;;;;;;;:44;23994:6;24001:1;23994:9;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;23972:44;;;;;;;;;;;;;;;23932:84;;24031:15;24049:7;:14;;;;24031:32;;24078:6;24087:1;24078:10;;24103:411;24113:10;24109:1;:14;24103:411;;;24163:6;24170:1;24163:9;;;;;;;;;;;;;;;;;;:12;;;24146:7;24154:1;24146:10;;;;;;;;;;;;;;;;;;:13;;;:29;:69;;;;;24199:6;24206:1;24199:9;;;;;;;;;;;;;;;;;;:16;;;24179:6;24186:1;24179:9;;;;;;;;;;;;;;;;;;:16;;;:36;24146:69;24143:325;;;24243:6;24252:1;24243:10;;24239:174;24259:17;24274:1;24259:10;:14;;:17;;;;:::i;:::-;24255:1;:21;24239:174;;;24331:7;24339:8;24345:1;24339;:5;;:8;;;;:::i;:::-;24331:17;;;;;;;;;;;;;;;;;;24318:7;24326:1;24318:10;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;24379:10;24375:14;;24282:8;24288:1;24282;:5;;:8;;;;:::i;:::-;24278:12;;24239:174;;;;24435:7;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24143:325;24490:8;24496:1;24490;:5;;:8;;;;:::i;:::-;24486:12;;24103:411;;;23436:1089;;;;24542:9;24535:16;;24569:4;24562:11;;;;21803:2778;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;283:146;;371:6;358:20;349:29;;383:41;418:5;383:41;;;343:86;;;;;436:128;;517:6;511:13;502:22;;529:30;553:5;529:30;;;496:68;;;;;571:168;;670:6;657:20;648:29;;682:52;728:5;682:52;;;642:97;;;;;746:146;;834:6;821:20;812:29;;846:41;881:5;846:41;;;806:86;;;;;900:442;;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1057:6;1044:20;1079:65;1094:49;1136:6;1094:49;;;1079:65;;;1070:74;;1164:6;1157:5;1150:21;1200:4;1192:6;1188:17;1233:4;1226:5;1222:16;1268:3;1259:6;1254:3;1250:16;1247:25;1244:2;;;1285:1;1282;1275:12;1244:2;1295:41;1329:6;1324:3;1319;1295:41;;;962:380;;;;;;;;1350:130;;1430:6;1417:20;1408:29;;1442:33;1469:5;1442:33;;;1402:78;;;;;1487:134;;1571:6;1565:13;1556:22;;1583:33;1610:5;1583:33;;;1550:71;;;;;1628:241;;1732:2;1720:9;1711:7;1707:23;1703:32;1700:2;;;1748:1;1745;1738:12;1700:2;1783:1;1800:53;1845:7;1836:6;1825:9;1821:22;1800:53;;;1790:63;;1762:97;1694:175;;;;;1876:263;;1991:2;1979:9;1970:7;1966:23;1962:32;1959:2;;;2007:1;2004;1997:12;1959:2;2042:1;2059:64;2115:7;2106:6;2095:9;2091:22;2059:64;;;2049:74;;2021:108;1953:186;;;;;2146:257;;2258:2;2246:9;2237:7;2233:23;2229:32;2226:2;;;2274:1;2271;2264:12;2226:2;2309:1;2326:61;2379:7;2370:6;2359:9;2355:22;2326:61;;;2316:71;;2288:105;2220:183;;;;;2410:472;;;2541:2;2529:9;2520:7;2516:23;2512:32;2509:2;;;2557:1;2554;2547:12;2509:2;2592:1;2609:53;2654:7;2645:6;2634:9;2630:22;2609:53;;;2599:63;;2571:97;2727:2;2716:9;2712:18;2699:32;2751:18;2743:6;2740:30;2737:2;;;2783:1;2780;2773:12;2737:2;2803:63;2858:7;2849:6;2838:9;2834:22;2803:63;;;2793:73;;2678:194;2503:379;;;;;;2889:257;;3001:2;2989:9;2980:7;2976:23;2972:32;2969:2;;;3017:1;3014;3007:12;2969:2;3052:1;3069:61;3122:7;3113:6;3102:9;3098:22;3069:61;;;3059:71;;3031:105;2963:183;;;;;3153:347;;3267:2;3255:9;3246:7;3242:23;3238:32;3235:2;;;3283:1;3280;3273:12;3235:2;3346:1;3335:9;3331:17;3318:31;3369:18;3361:6;3358:30;3355:2;;;3401:1;3398;3391:12;3355:2;3421:63;3476:7;3467:6;3456:9;3452:22;3421:63;;;3411:73;;3297:193;3229:271;;;;;3507:761;;;;;3691:3;3679:9;3670:7;3666:23;3662:33;3659:2;;;3708:1;3705;3698:12;3659:2;3771:1;3760:9;3756:17;3743:31;3794:18;3786:6;3783:30;3780:2;;;3826:1;3823;3816:12;3780:2;3846:63;3901:7;3892:6;3881:9;3877:22;3846:63;;;3836:73;;3722:193;3946:2;3964:72;4028:7;4019:6;4008:9;4004:22;3964:72;;;3954:82;;3925:117;4073:2;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;;;4081:63;;4052:98;4181:2;4199:53;4244:7;4235:6;4224:9;4220:22;4199:53;;;4189:63;;4160:98;3653:615;;;;;;;;4275:488;;;4414:2;4402:9;4393:7;4389:23;4385:32;4382:2;;;4430:1;4427;4420:12;4382:2;4493:1;4482:9;4478:17;4465:31;4516:18;4508:6;4505:30;4502:2;;;4548:1;4545;4538:12;4502:2;4568:63;4623:7;4614:6;4603:9;4599:22;4568:63;;;4558:73;;4444:193;4668:2;4686:61;4739:7;4730:6;4719:9;4715:22;4686:61;;;4676:71;;4647:106;4376:387;;;;;;4770:472;;;4901:2;4889:9;4880:7;4876:23;4872:32;4869:2;;;4917:1;4914;4907:12;4869:2;4980:1;4969:9;4965:17;4952:31;5003:18;4995:6;4992:30;4989:2;;;5035:1;5032;5025:12;4989:2;5055:63;5110:7;5101:6;5090:9;5086:22;5055:63;;;5045:73;;4931:193;5155:2;5173:53;5218:7;5209:6;5198:9;5194:22;5173:53;;;5163:63;;5134:98;4863:379;;;;;;5249:597;;;;5397:2;5385:9;5376:7;5372:23;5368:32;5365:2;;;5413:1;5410;5403:12;5365:2;5476:1;5465:9;5461:17;5448:31;5499:18;5491:6;5488:30;5485:2;;;5531:1;5528;5521:12;5485:2;5551:63;5606:7;5597:6;5586:9;5582:22;5551:63;;;5541:73;;5427:193;5651:2;5669:53;5714:7;5705:6;5694:9;5690:22;5669:53;;;5659:63;;5630:98;5759:2;5777:53;5822:7;5813:6;5802:9;5798:22;5777:53;;;5767:63;;5738:98;5359:487;;;;;;5853:739;;;;;6026:3;6014:9;6005:7;6001:23;5997:33;5994:2;;;6043:1;6040;6033:12;5994:2;6106:1;6095:9;6091:17;6078:31;6129:18;6121:6;6118:30;6115:2;;;6161:1;6158;6151:12;6115:2;6181:63;6236:7;6227:6;6216:9;6212:22;6181:63;;;6171:73;;6057:193;6281:2;6299:53;6344:7;6335:6;6324:9;6320:22;6299:53;;;6289:63;;6260:98;6389:2;6407:53;6452:7;6443:6;6432:9;6428:22;6407:53;;;6397:63;;6368:98;6497:2;6515:61;6568:7;6559:6;6548:9;6544:22;6515:61;;;6505:71;;6476:106;5988:604;;;;;;;;6599:241;;6703:2;6691:9;6682:7;6678:23;6674:32;6671:2;;;6719:1;6716;6709:12;6671:2;6754:1;6771:53;6816:7;6807:6;6796:9;6792:22;6771:53;;;6761:63;;6733:97;6665:175;;;;;6847:263;;6962:2;6950:9;6941:7;6937:23;6933:32;6930:2;;;6978:1;6975;6968:12;6930:2;7013:1;7030:64;7086:7;7077:6;7066:9;7062:22;7030:64;;;7020:74;;6992:108;6924:186;;;;;7118:263;;7249:90;7335:3;7327:6;7249:90;;;7368:6;7363:3;7359:16;7345:30;;7242:139;;;;;7390:281;;7531:100;7627:3;7619:6;7531:100;;;7660:4;7655:3;7651:14;7637:28;;7524:147;;;;;7679:142;7770:45;7809:5;7770:45;;;7765:3;7758:58;7752:69;;;7828:137;7927:32;7953:5;7927:32;;;7922:3;7915:45;7909:56;;;7972:103;8045:24;8063:5;8045:24;;;8040:3;8033:37;8027:48;;;8082:113;8165:24;8183:5;8165:24;;;8160:3;8153:37;8147:48;;;8281:866;;8470:76;8540:5;8470:76;;;8559:108;8660:6;8655:3;8559:108;;;8552:115;;8688:78;8760:5;8688:78;;;8786:7;8814:1;8799:326;8824:6;8821:1;8818:13;8799:326;;;8891:6;8885:13;8912:107;9015:3;9000:13;8912:107;;;8905:114;;9036:82;9111:6;9036:82;;;9026:92;;8856:269;8846:1;8843;8839:9;8834:14;;8799:326;;;8803:14;9138:3;9131:10;;8449:698;;;;;;;;9244:906;;9443:81;9518:5;9443:81;;;9537:113;9643:6;9638:3;9537:113;;;9530:120;;9671:83;9748:5;9671:83;;;9774:7;9802:1;9787:341;9812:6;9809:1;9806:13;9787:341;;;9879:6;9873:13;9900:117;10013:3;9998:13;9900:117;;;9893:124;;10034:87;10114:6;10034:87;;;10024:97;;9844:284;9834:1;9831;9827:9;9822:14;;9787:341;;;9791:14;10141:3;10134:10;;9422:728;;;;;;;;10158:103;10231:24;10249:5;10231:24;;;10226:3;10219:37;10213:48;;;10268:113;10351:24;10369:5;10351:24;;;10346:3;10339:37;10333:48;;;10388:356;;10516:38;10548:5;10516:38;;;10566:88;10647:6;10642:3;10566:88;;;10559:95;;10659:52;10704:6;10699:3;10692:4;10685:5;10681:16;10659:52;;;10732:6;10727:3;10723:16;10716:23;;10496:248;;;;;;10751:154;10848:51;10893:5;10848:51;;;10843:3;10836:64;10830:75;;;10912:154;11004:56;11054:5;11004:56;;;10999:3;10992:69;10986:80;;;11073:128;11152:43;11189:5;11152:43;;;11147:3;11140:56;11134:67;;;11208:347;;11320:39;11353:5;11320:39;;;11371:71;11435:6;11430:3;11371:71;;;11364:78;;11447:52;11492:6;11487:3;11480:4;11473:5;11469:16;11447:52;;;11520:29;11542:6;11520:29;;;11515:3;11511:39;11504:46;;11300:255;;;;;;11563:313;;11723:67;11787:2;11782:3;11723:67;;;11716:74;;11823:15;11819:1;11814:3;11810:11;11803:36;11867:2;11862:3;11858:12;11851:19;;11709:167;;;;11885:370;;12045:67;12109:2;12104:3;12045:67;;;12038:74;;12145:34;12141:1;12136:3;12132:11;12125:55;12214:3;12209:2;12204:3;12200:12;12193:25;12246:2;12241:3;12237:12;12230:19;;12031:224;;;;12264:320;;12424:67;12488:2;12483:3;12424:67;;;12417:74;;12524:22;12520:1;12515:3;12511:11;12504:43;12575:2;12570:3;12566:12;12559:19;;12410:174;;;;12593:327;;12753:67;12817:2;12812:3;12753:67;;;12746:74;;12853:29;12849:1;12844:3;12840:11;12833:50;12911:2;12906:3;12902:12;12895:19;;12739:181;;;;12929:326;;13089:67;13153:2;13148:3;13089:67;;;13082:74;;13189:28;13185:1;13180:3;13176:11;13169:49;13246:2;13241:3;13237:12;13230:19;;13075:180;;;;13264:315;;13424:67;13488:2;13483:3;13424:67;;;13417:74;;13524:17;13520:1;13515:3;13511:11;13504:38;13570:2;13565:3;13561:12;13554:19;;13410:169;;;;13588:314;;13748:67;13812:2;13807:3;13748:67;;;13741:74;;13848:16;13844:1;13839:3;13835:11;13828:37;13893:2;13888:3;13884:12;13877:19;;13734:168;;;;13911:318;;14071:67;14135:2;14130:3;14071:67;;;14064:74;;14171:20;14167:1;14162:3;14158:11;14151:41;14220:2;14215:3;14211:12;14204:19;;14057:172;;;;14238:307;;14398:66;14462:1;14457:3;14398:66;;;14391:73;;14497:10;14493:1;14488:3;14484:11;14477:31;14536:2;14531:3;14527:12;14520:19;;14384:161;;;;14554:326;;14714:67;14778:2;14773:3;14714:67;;;14707:74;;14814:28;14810:1;14805:3;14801:11;14794:49;14871:2;14866:3;14862:12;14855:19;;14700:180;;;;14889:327;;15049:67;15113:2;15108:3;15049:67;;;15042:74;;15149:29;15145:1;15140:3;15136:11;15129:50;15207:2;15202:3;15198:12;15191:19;;15035:181;;;;15225:319;;15385:67;15449:2;15444:3;15385:67;;;15378:74;;15485:21;15481:1;15476:3;15472:11;15465:42;15535:2;15530:3;15526:12;15519:19;;15371:173;;;;15553:370;;15713:67;15777:2;15772:3;15713:67;;;15706:74;;15813:34;15809:1;15804:3;15800:11;15793:55;15882:3;15877:2;15872:3;15868:12;15861:25;15914:2;15909:3;15905:12;15898:19;;15699:224;;;;15932:311;;16092:67;16156:2;16151:3;16092:67;;;16085:74;;16192:13;16188:1;16183:3;16179:11;16172:34;16234:2;16229:3;16225:12;16218:19;;16078:165;;;;16252:310;;16412:67;16476:2;16471:3;16412:67;;;16405:74;;16512:12;16508:1;16503:3;16499:11;16492:33;16553:2;16548:3;16544:12;16537:19;;16398:164;;;;16571:319;;16731:67;16795:2;16790:3;16731:67;;;16724:74;;16831:21;16827:1;16822:3;16818:11;16811:42;16881:2;16876:3;16872:12;16865:19;;16717:173;;;;16899:321;;17059:67;17123:2;17118:3;17059:67;;;17052:74;;17159:23;17155:1;17150:3;17146:11;17139:44;17211:2;17206:3;17202:12;17195:19;;17045:175;;;;17229:326;;17389:67;17453:2;17448:3;17389:67;;;17382:74;;17489:28;17485:1;17480:3;17476:11;17469:49;17546:2;17541:3;17537:12;17530:19;;17375:180;;;;17564:325;;17724:67;17788:2;17783:3;17724:67;;;17717:74;;17824:27;17820:1;17815:3;17811:11;17804:48;17880:2;17875:3;17871:12;17864:19;;17710:179;;;;17898:321;;18058:67;18122:2;18117:3;18058:67;;;18051:74;;18158:23;18154:1;18149:3;18145:11;18138:44;18210:2;18205:3;18201:12;18194:19;;18044:175;;;;18228:321;;18388:67;18452:2;18447:3;18388:67;;;18381:74;;18488:23;18484:1;18479:3;18475:11;18468:44;18540:2;18535:3;18531:12;18524:19;;18374:175;;;;18630:1404;18757:6;18752:3;18748:16;18840:4;18833:5;18829:16;18823:23;18852:63;18909:4;18904:3;18900:14;18886:12;18852:63;;;18779:142;19001:4;18994:5;18990:16;18984:23;19013:63;19070:4;19065:3;19061:14;19047:12;19013:63;;;18931:151;19155:4;19148:5;19144:16;19138:23;19167:69;19230:4;19225:3;19221:14;19207:12;19167:69;;;19092:150;19317:4;19310:5;19306:16;19300:23;19329:63;19386:4;19381:3;19377:14;19363:12;19329:63;;;19252:146;19473:4;19466:5;19462:16;19456:23;19485:63;19542:4;19537:3;19533:14;19519:12;19485:63;;;19408:146;19629:4;19622:5;19618:16;19612:23;19641:63;19698:4;19693:3;19689:14;19675:12;19641:63;;;19564:146;19784:4;19777:5;19773:16;19767:23;19796:63;19853:4;19848:3;19844:14;19830:12;19796:63;;;19720:145;19938:4;19931:5;19927:16;19921:23;19950:63;20007:4;20002:3;19998:14;19984:12;19950:63;;;19875:144;18730:1304;;;;20124:822;20261:4;20256:3;20252:14;20346:4;20339:5;20335:16;20329:23;20358:63;20415:4;20410:3;20406:14;20392:12;20358:63;;;20281:146;20507:4;20500:5;20496:16;20490:23;20519:82;20595:4;20590:3;20586:14;20572:12;20519:82;;;20437:170;20686:4;20679:5;20675:16;20669:23;20698:63;20755:4;20750:3;20746:14;20732:12;20698:63;;;20617:150;20850:4;20843:5;20839:16;20833:23;20862:63;20919:4;20914:3;20910:14;20896:12;20862:63;;;20777:154;20234:712;;;;20953:103;21026:24;21044:5;21026:24;;;21021:3;21014:37;21008:48;;;21063:113;21146:24;21164:5;21146:24;;;21141:3;21134:37;21128:48;;;21183:271;;21336:93;21425:3;21416:6;21336:93;;;21329:100;;21446:3;21439:10;;21317:137;;;;;21461:222;;21588:2;21577:9;21573:18;21565:26;;21602:71;21670:1;21659:9;21655:17;21646:6;21602:71;;;21559:124;;;;;21690:238;;21825:2;21814:9;21810:18;21802:26;;21839:79;21915:1;21904:9;21900:17;21891:6;21839:79;;;21796:132;;;;;21935:254;;22078:2;22067:9;22063:18;22055:26;;22092:87;22176:1;22165:9;22161:17;22152:6;22092:87;;;22049:140;;;;;22196:460;;22387:2;22376:9;22372:18;22364:26;;22401:79;22477:1;22466:9;22462:17;22453:6;22401:79;;;22491:72;22559:2;22548:9;22544:18;22535:6;22491:72;;;22574;22642:2;22631:9;22627:18;22618:6;22574:72;;;22358:298;;;;;;;22663:458;;22884:2;22873:9;22869:18;22861:26;;22934:9;22928:4;22924:20;22920:1;22909:9;22905:17;22898:47;22959:152;23106:4;23097:6;22959:152;;;22951:160;;22855:266;;;;;23128:478;;23359:2;23348:9;23344:18;23336:26;;23409:9;23403:4;23399:20;23395:1;23384:9;23380:17;23373:47;23434:162;23591:4;23582:6;23434:162;;;23426:170;;23330:276;;;;;23613:222;;23740:2;23729:9;23725:18;23717:26;;23754:71;23822:1;23811:9;23807:17;23798:6;23754:71;;;23711:124;;;;;23842:250;;23983:2;23972:9;23968:18;23960:26;;23997:85;24079:1;24068:9;24064:17;24055:6;23997:85;;;23954:138;;;;;24099:310;;24246:2;24235:9;24231:18;24223:26;;24296:9;24290:4;24286:20;24282:1;24271:9;24267:17;24260:47;24321:78;24394:4;24385:6;24321:78;;;24313:86;;24217:192;;;;;24416:416;;24616:2;24605:9;24601:18;24593:26;;24666:9;24660:4;24656:20;24652:1;24641:9;24637:17;24630:47;24691:131;24817:4;24691:131;;;24683:139;;24587:245;;;;24839:416;;25039:2;25028:9;25024:18;25016:26;;25089:9;25083:4;25079:20;25075:1;25064:9;25060:17;25053:47;25114:131;25240:4;25114:131;;;25106:139;;25010:245;;;;25262:416;;25462:2;25451:9;25447:18;25439:26;;25512:9;25506:4;25502:20;25498:1;25487:9;25483:17;25476:47;25537:131;25663:4;25537:131;;;25529:139;;25433:245;;;;25685:416;;25885:2;25874:9;25870:18;25862:26;;25935:9;25929:4;25925:20;25921:1;25910:9;25906:17;25899:47;25960:131;26086:4;25960:131;;;25952:139;;25856:245;;;;26108:416;;26308:2;26297:9;26293:18;26285:26;;26358:9;26352:4;26348:20;26344:1;26333:9;26329:17;26322:47;26383:131;26509:4;26383:131;;;26375:139;;26279:245;;;;26531:416;;26731:2;26720:9;26716:18;26708:26;;26781:9;26775:4;26771:20;26767:1;26756:9;26752:17;26745:47;26806:131;26932:4;26806:131;;;26798:139;;26702:245;;;;26954:416;;27154:2;27143:9;27139:18;27131:26;;27204:9;27198:4;27194:20;27190:1;27179:9;27175:17;27168:47;27229:131;27355:4;27229:131;;;27221:139;;27125:245;;;;27377:416;;27577:2;27566:9;27562:18;27554:26;;27627:9;27621:4;27617:20;27613:1;27602:9;27598:17;27591:47;27652:131;27778:4;27652:131;;;27644:139;;27548:245;;;;27800:416;;28000:2;27989:9;27985:18;27977:26;;28050:9;28044:4;28040:20;28036:1;28025:9;28021:17;28014:47;28075:131;28201:4;28075:131;;;28067:139;;27971:245;;;;28223:416;;28423:2;28412:9;28408:18;28400:26;;28473:9;28467:4;28463:20;28459:1;28448:9;28444:17;28437:47;28498:131;28624:4;28498:131;;;28490:139;;28394:245;;;;28646:416;;28846:2;28835:9;28831:18;28823:26;;28896:9;28890:4;28886:20;28882:1;28871:9;28867:17;28860:47;28921:131;29047:4;28921:131;;;28913:139;;28817:245;;;;29069:416;;29269:2;29258:9;29254:18;29246:26;;29319:9;29313:4;29309:20;29305:1;29294:9;29290:17;29283:47;29344:131;29470:4;29344:131;;;29336:139;;29240:245;;;;29492:416;;29692:2;29681:9;29677:18;29669:26;;29742:9;29736:4;29732:20;29728:1;29717:9;29713:17;29706:47;29767:131;29893:4;29767:131;;;29759:139;;29663:245;;;;29915:416;;30115:2;30104:9;30100:18;30092:26;;30165:9;30159:4;30155:20;30151:1;30140:9;30136:17;30129:47;30190:131;30316:4;30190:131;;;30182:139;;30086:245;;;;30338:416;;30538:2;30527:9;30523:18;30515:26;;30588:9;30582:4;30578:20;30574:1;30563:9;30559:17;30552:47;30613:131;30739:4;30613:131;;;30605:139;;30509:245;;;;30761:416;;30961:2;30950:9;30946:18;30938:26;;31011:9;31005:4;31001:20;30997:1;30986:9;30982:17;30975:47;31036:131;31162:4;31036:131;;;31028:139;;30932:245;;;;31184:416;;31384:2;31373:9;31369:18;31361:26;;31434:9;31428:4;31424:20;31420:1;31409:9;31405:17;31398:47;31459:131;31585:4;31459:131;;;31451:139;;31355:245;;;;31607:416;;31807:2;31796:9;31792:18;31784:26;;31857:9;31851:4;31847:20;31843:1;31832:9;31828:17;31821:47;31882:131;32008:4;31882:131;;;31874:139;;31778:245;;;;32030:416;;32230:2;32219:9;32215:18;32207:26;;32280:9;32274:4;32270:20;32266:1;32255:9;32251:17;32244:47;32305:131;32431:4;32305:131;;;32297:139;;32201:245;;;;32453:416;;32653:2;32642:9;32638:18;32630:26;;32703:9;32697:4;32693:20;32689:1;32678:9;32674:17;32667:47;32728:131;32854:4;32728:131;;;32720:139;;32624:245;;;;32876:416;;33076:2;33065:9;33061:18;33053:26;;33126:9;33120:4;33116:20;33112:1;33101:9;33097:17;33090:47;33151:131;33277:4;33151:131;;;33143:139;;33047:245;;;;33299:222;;33426:2;33415:9;33411:18;33403:26;;33440:71;33508:1;33497:9;33493:17;33484:6;33440:71;;;33397:124;;;;;33528:333;;33683:2;33672:9;33668:18;33660:26;;33697:71;33765:1;33754:9;33750:17;33741:6;33697:71;;;33779:72;33847:2;33836:9;33832:18;33823:6;33779:72;;;33654:207;;;;;;33868:908;;34171:3;34160:9;34156:19;34148:27;;34186:71;34254:1;34243:9;34239:17;34230:6;34186:71;;;34268:72;34336:2;34325:9;34321:18;34312:6;34268:72;;;34351;34419:2;34408:9;34404:18;34395:6;34351:72;;;34434:80;34510:2;34499:9;34495:18;34486:6;34434:80;;;34525:73;34593:3;34582:9;34578:19;34569:6;34525:73;;;34609;34677:3;34666:9;34662:19;34653:6;34609:73;;;34693;34761:3;34750:9;34746:19;34737:6;34693:73;;;34142:634;;;;;;;;;;;34783:256;;34845:2;34839:9;34829:19;;34883:4;34875:6;34871:17;34982:6;34970:10;34967:22;34946:18;34934:10;34931:34;34928:62;34925:2;;;35003:1;35000;34993:12;34925:2;35023:10;35019:2;35012:22;34823:216;;;;;35046:322;;35190:18;35182:6;35179:30;35176:2;;;35222:1;35219;35212:12;35176:2;35289:4;35285:9;35278:4;35270:6;35266:17;35262:33;35254:41;;35353:4;35347;35343:15;35335:23;;35113:255;;;;35375:173;;35483:3;35475:11;;35521:4;35516:3;35512:14;35504:22;;35469:79;;;;35555:178;;35668:3;35660:11;;35706:4;35701:3;35697:14;35689:22;;35654:79;;;;35740:159;;35871:5;35865:12;35855:22;;35836:63;;;;35906:164;;36042:5;36036:12;36026:22;;36007:63;;;;36077:121;;36170:5;36164:12;36154:22;;36135:63;;;;36205:122;;36299:5;36293:12;36283:22;;36264:63;;;;36334:130;;36454:4;36449:3;36445:14;36437:22;;36431:33;;;;36471:135;;36596:4;36591:3;36587:14;36579:22;;36573:33;;;;36614:200;;36766:6;36761:3;36754:19;36803:4;36798:3;36794:14;36779:29;;36747:67;;;;;36823:205;;36980:6;36975:3;36968:19;37017:4;37012:3;37008:14;36993:29;;36961:67;;;;;37037:144;;37172:3;37157:18;;37150:31;;;;;37190:163;;37305:6;37300:3;37293:19;37342:4;37337:3;37333:14;37318:29;;37286:67;;;;;37361:91;;37423:24;37441:5;37423:24;;;37412:35;;37406:46;;;;37459:99;;37529:24;37547:5;37529:24;;;37518:35;;37512:46;;;;37565:85;;37638:5;37631:13;37624:21;37613:32;;37607:43;;;;37657:72;;37719:5;37708:16;;37702:27;;;;37736:110;;37817:24;37835:5;37817:24;;;37806:35;;37800:46;;;;37853:122;;37923:5;37912:16;;37929:41;37964:5;37929:41;;;37906:69;;;;37982:121;;38055:42;38048:5;38044:54;38033:65;;38027:76;;;;38110:72;;38172:5;38161:16;;38155:27;;;;38189:129;;38276:37;38307:5;38276:37;;;38263:50;;38257:61;;;;38325:149;;38418:51;38463:5;38418:51;;;38405:64;;38399:75;;;;38481:122;;38574:24;38592:5;38574:24;;;38561:37;;38555:48;;;;38610:159;;38708:56;38758:5;38708:56;;;38695:69;;38689:80;;;;38776:127;;38874:24;38892:5;38874:24;;;38861:37;;38855:48;;;;38910:122;;38995:32;39021:5;38995:32;;;38982:45;;38976:56;;;;39039:121;;39118:37;39149:5;39118:37;;;39105:50;;39099:61;;;;39167:108;;39246:24;39264:5;39246:24;;;39233:37;;39227:48;;;;39283:145;39364:6;39359:3;39354;39341:30;39420:1;39411:6;39406:3;39402:16;39395:27;39334:94;;;;39437:268;39502:1;39509:101;39523:6;39520:1;39517:13;39509:101;;;39599:1;39594:3;39590:11;39584:18;39580:1;39575:3;39571:11;39564:39;39545:2;39542:1;39538:10;39533:15;;39509:101;;;39625:6;39622:1;39619:13;39616:2;;;39690:1;39681:6;39676:3;39672:16;39665:27;39616:2;39486:219;;;;;39713:97;;39801:2;39797:7;39792:2;39785:5;39781:14;39777:28;39767:38;;39761:49;;;;39818:99;39895:1;39888:5;39885:12;39875:2;;39901:9;39875:2;39869:48;;39924:117;39993:24;40011:5;39993:24;;;39986:5;39983:35;39973:2;;40032:1;40029;40022:12;39973:2;39967:74;;40048:133;40125:32;40151:5;40125:32;;;40118:5;40115:43;40105:2;;40172:1;40169;40162:12;40105:2;40099:82;;40188:111;40254:21;40269:5;40254:21;;;40247:5;40244:32;40234:2;;40290:1;40287;40280:12;40234:2;40228:71;;40306:155;40394:43;40431:5;40394:43;;;40387:5;40384:54;40374:2;;40452:1;40449;40442:12;40374:2;40368:93;;40468:102;40545:1;40538:5;40535:12;40525:2;;40561:1;40558;40551:12;40525:2;40519:51;;40577:117;40646:24;40664:5;40646:24;;;40639:5;40636:35;40626:2;;40685:1;40682;40675:12;40626:2;40620:74;
Swarm Source
ipfs://77ffa199e9f5b0f4e92699615e70df1039488f74a1bc2a65462f23fcb121e2af
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,257.1 | 4.4606 | $14,528.49 |
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.