Source Code
Overview
POL Balance
Token Holdings
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 93 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdrawal Pool | 18226917 | 12 hrs ago | IN | 0 POL | 0.00258505 | ||||
Multi Deposit Po... | 18226825 | 12 hrs ago | IN | 0 POL | 0.01159843 | ||||
Deposit Pool | 18184040 | 38 hrs ago | IN | 0 POL | 0.00687111 | ||||
Withdrawal Pool | 18065808 | 4 days ago | IN | 0 POL | 0.00277236 | ||||
Withdrawal Pool | 18026741 | 5 days ago | IN | 0 POL | 0.02175486 | ||||
Withdrawal Pool | 18020420 | 5 days ago | IN | 0 POL | 0.00266533 | ||||
Multi Deposit Po... | 18016912 | 5 days ago | IN | 0 POL | 0.01347126 | ||||
Multi Deposit Po... | 17991346 | 6 days ago | IN | 0 POL | 0.0371332 | ||||
Withdrawal Pool | 17987887 | 6 days ago | IN | 0 POL | 0.0075632 | ||||
Deposit Pool | 17899069 | 8 days ago | IN | 0 POL | 0.00900672 | ||||
Withdrawal Pool | 17473347 | 19 days ago | IN | 0 POL | 0.0066843 | ||||
Withdrawal Pool | 17472001 | 19 days ago | IN | 0 POL | 0.00855462 | ||||
Multi Deposit Po... | 17471967 | 19 days ago | IN | 0 POL | 0.00937852 | ||||
Deposit Pool | 17471921 | 19 days ago | IN | 0 POL | 0.00586282 | ||||
Deposit Pool | 17469154 | 19 days ago | IN | 0 POL | 0.0220368 | ||||
Deposit Pool | 17468976 | 19 days ago | IN | 0 POL | 0.0220368 | ||||
Multi Deposit Po... | 17468182 | 19 days ago | IN | 0 POL | 0.0504561 | ||||
Multi Deposit Po... | 17468103 | 19 days ago | IN | 0 POL | 0.0518432 | ||||
Withdrawal Pool | 17436664 | 20 days ago | IN | 0 POL | 0.0075112 | ||||
Deposit Pool | 17436602 | 20 days ago | IN | 0 POL | 0.0225168 | ||||
Deposit Pool | 17436593 | 20 days ago | IN | 0 POL | 0.0225168 | ||||
Withdrawal Pool | 17360197 | 22 days ago | IN | 0 POL | 0.00313091 | ||||
Deposit Pool | 17355213 | 22 days ago | IN | 0 POL | 0.0067861 | ||||
Deposit Pool | 17230193 | 25 days ago | IN | 0 POL | 0.00838138 | ||||
Register Pool | 17230179 | 25 days ago | IN | 0 POL | 0.00747309 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
IPMBStaking
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /** * * @title: IPMB Staking Pools * @date: 20-November-2024 * @version: 2.5 * @author: IPMB Dev Team */ import "./IERC20.sol"; import "./Ownable.sol"; import "./IPriceFeed.sol"; pragma solidity ^0.8.19; contract IPMBStaking is Ownable { // pool structure struct poolStr { uint256 poolID; string poolName; uint256 duration; uint256 amount; uint256 discount; uint256 lockDuration; uint256 poolMax; bool status; } // address pool data structure struct addressStr { uint256 amount; uint256 dateDeposit; uint256 epoch; uint256 ipmbPrice; uint256 goldPrice; } // mappings declaration mapping (address => bool) public admin; mapping (address => bool) public authority; mapping (address => bool) public blacklist; mapping (uint256 => poolStr) public poolsRegistry; mapping (address => bool) public kycAddress; mapping (address => mapping (uint256 => uint256)) public addressCounter; mapping (address => mapping (uint256 => uint256[])) public addressArray; mapping (address => mapping (uint256 => mapping (uint256 => addressStr))) public addressDataNew; // variables declaration uint256 public nextpoolCounter; address public ipmbAddress; IPriceFeed public priceFeedAddress; address public gemMintingContract; uint256 public blackPeriod; uint256 public minDiscount; uint256 public maxDiscount; // modifiers modifier onlyAdmin() { require(admin[msg.sender] == true, "Not allowed"); _; } modifier onlyAuthority() { require(admin[msg.sender] == true || authority[msg.sender] == true, "Not allowed"); _; } // events event poolRegistration(uint256 indexed poolId); event poolUpdate(uint256 indexed poolId); event poolDeposit(uint256 indexed poolId, address indexed addr, uint256 indexed index, uint256 amount); event poolWithdrawal(uint256 indexed poolId, address indexed addr, uint256 indexed index, uint256 amount); event blacklistWithdrawal(uint256 indexed poolId, address indexed addr, uint256 indexed index, uint256 amount); event poolResetAfterMinting(uint256 indexed poolId, address indexed addr, uint256 indexed index); event adminStatus(address indexed addr, bool indexed status); event authorityStatus(address indexed addr, bool indexed status); event blacklistStatus(address indexed addr, bool indexed status); event updateBlackPeriod(uint256 indexed bperiod); event kycStatus(address indexed addr, bool indexed status); // constructor constructor (address _ipmbAddress, address _priceFeedAddress, uint256 _blackPeriod) { admin[msg.sender] = true; ipmbAddress = _ipmbAddress; nextpoolCounter = 1; priceFeedAddress = IPriceFeed(_priceFeedAddress); blackPeriod = _blackPeriod; minDiscount = 2; maxDiscount = 11; } // function to register a Pool function registerPool(string memory _poolName, uint256 _duration, uint256 _discount, uint256 _amount, uint256 _lockDuration, uint256 _poolMax) public onlyAdmin { require(_duration > 0 && _amount > 0 , "err"); require(_discount >= minDiscount && _discount <= maxDiscount, "Check min & max"); uint256 poolID = nextpoolCounter; poolsRegistry[poolID].poolID = poolID; poolsRegistry[poolID].poolName = _poolName; poolsRegistry[poolID].duration = _duration; poolsRegistry[poolID].amount = _amount; poolsRegistry[poolID].discount = _discount; poolsRegistry[poolID].lockDuration = _lockDuration; poolsRegistry[poolID].poolMax = _poolMax; poolsRegistry[poolID].status = true; emit poolRegistration(poolID); nextpoolCounter = nextpoolCounter + 1; } // function to deposit funds function depositPool(uint256 _poolID) public { require(kycAddress[msg.sender] == true, "No KYC"); require(blacklist[msg.sender] == false, "Address is blacklisted"); require(poolsRegistry[_poolID].status == true, "Pool is inactive"); require(poolsRegistry[_poolID].poolMax > addressArray[msg.sender][_poolID].length, "Already deposited max times"); require(IERC20(ipmbAddress).balanceOf(msg.sender) >= poolsRegistry[_poolID].amount, "Your ERC20 balance is not enough"); (uint256 epoch, uint256 ipmbPrice, uint256 goldPrice, , ,) = priceFeedAddress.getLatestPrices(); uint256 count = addressCounter[msg.sender][_poolID]; addressDataNew[msg.sender][_poolID][count].amount = poolsRegistry[_poolID].amount; addressDataNew[msg.sender][_poolID][count].dateDeposit = block.timestamp; addressDataNew[msg.sender][_poolID][count].epoch = epoch; addressDataNew[msg.sender][_poolID][count].ipmbPrice = ipmbPrice; addressDataNew[msg.sender][_poolID][count].goldPrice = goldPrice; addressArray[msg.sender][_poolID].push(count); addressCounter[msg.sender][_poolID]++; IERC20(ipmbAddress).transferFrom(msg.sender, address(this), poolsRegistry[_poolID].amount); emit poolDeposit(_poolID, msg.sender, count, poolsRegistry[_poolID].amount); } // function to deposit multitimes function multiDepositPool(uint256[] memory _poolIDs, uint256[] memory _quantity) public { require(_poolIDs.length == _quantity.length , "Check lengths"); for (uint256 i = 0; i < _poolIDs.length; i++) { for (uint256 y = 0; y < _quantity[i]; y++) { depositPool(_poolIDs[i]); } } } // function to withdrawl deposit amounts function withdrawalPool(uint256 _poolID, uint256 _index) public { require(blacklist[msg.sender] == false, "Address is blacklisted"); require(addressDataNew[msg.sender][_poolID][_index].amount == poolsRegistry[_poolID].amount, "No deposit"); require(block.timestamp >= addressDataNew[msg.sender][_poolID][_index].dateDeposit + poolsRegistry[_poolID].lockDuration, "Time has not passed"); uint256 amount = addressDataNew[msg.sender][_poolID][_index].amount; addressDataNew[msg.sender][_poolID][_index].amount = 0; addressDataNew[msg.sender][_poolID][_index].dateDeposit = 0; addressDataNew[msg.sender][_poolID][_index].epoch = 0; addressDataNew[msg.sender][_poolID][_index].ipmbPrice = 0; addressDataNew[msg.sender][_poolID][_index].goldPrice = 0; for (uint256 i = 0; i < addressArray[msg.sender][_poolID].length; i++) { if (_index == addressArray[msg.sender][_poolID][i]) { addressArray[msg.sender][_poolID][i] = addressArray[msg.sender][_poolID][addressArray[msg.sender][_poolID].length-1]; addressArray[msg.sender][_poolID].pop(); } } IERC20(ipmbAddress).transfer(msg.sender, amount); emit poolWithdrawal(_poolID, msg.sender, _index, amount); } // function to update pool data function updatePoolData(uint256 _poolID, uint256 _poolMax, bool status) public onlyAdmin { poolsRegistry[_poolID].poolMax = _poolMax; poolsRegistry[_poolID].status = status; emit poolUpdate(_poolID); } // function to update address pool details after nft minting function updateAddressPool(address _address, uint256 _poolID, uint256 _index) public { require(msg.sender == gemMintingContract, "Not allowed"); addressDataNew[_address][_poolID][_index].amount = 0; addressDataNew[_address][_poolID][_index].dateDeposit = 0; addressDataNew[_address][_poolID][_index].epoch = 0; addressDataNew[_address][_poolID][_index].ipmbPrice = 0; addressDataNew[_address][_poolID][_index].goldPrice = 0; emit poolResetAfterMinting(_poolID, _address, _index); } // function to add/remove an admin function addAdmin(address _address, bool _status) public onlyOwner { admin[_address] = _status; emit adminStatus(_address, _status); } // function to add/remove an authority function addAuthority(address _address, bool _status) public onlyOwner { authority[_address] = _status; emit authorityStatus(_address, _status); } // function to add/remove a wallet from blacklist function addBlacklist(address _address, bool _status) public onlyAuthority { blacklist[_address] = _status; emit blacklistStatus(_address, _status); } // function to set GEM minting contract function setGEMMintingContract(address _address) public onlyOwner { gemMintingContract = _address; } // function to update prices contract admin function updatePricesContract(address _address) public onlyOwner { priceFeedAddress = IPriceFeed(_address); } // function to approve GEM minting contract function approveGEMMintingContract(uint256 _amount) public onlyAdmin { IERC20(ipmbAddress).approve(gemMintingContract, _amount); } // function to modify the time that the blacklist funds can be withdrawl function changeBlackPeriod(uint256 _blackPeriod) public onlyAdmin { blackPeriod = _blackPeriod; emit updateBlackPeriod(_blackPeriod); } // function to update address kyc status function updateKYCAddress(address _address, bool _status) public onlyAdmin { kycAddress[_address] = _status; emit kycStatus(_address, _status); } // function to update the min and max % of discounts for pool registration function updateMinMaxDiscounts(uint256 _min, uint256 _max) public onlyAdmin { minDiscount = _min; maxDiscount = _max; } // function to update kyc status for multiple addresses function updateKYCAddressBatch(address[] memory _address, bool[] memory _status) public onlyAdmin { for (uint256 i = 0; i < _address.length; i++) { kycAddress[_address[i]] = _status[i]; emit kycStatus(_address[i], _status[i]); } } // function to withdrawal blacklist amount for a blaclist address function blacklistAddressWithdrawalPool(address _receiver, address _address, uint256 _poolID, uint256 _index) public onlyOwner { require(blacklist[_address] == true, "Address is not blacklisted"); require(addressDataNew[_address][_poolID][_index].amount == poolsRegistry[_poolID].amount, "No deposit"); require(block.timestamp >= addressDataNew[_address][_poolID][_index].dateDeposit + blackPeriod, "Time has not passed"); uint256 amount = addressDataNew[_address][_poolID][_index].amount; addressDataNew[_address][_poolID][_index].amount = 0; addressDataNew[_address][_poolID][_index].dateDeposit = 0; addressDataNew[_address][_poolID][_index].epoch = 0; addressDataNew[_address][_poolID][_index].ipmbPrice = 0; addressDataNew[_address][_poolID][_index].goldPrice = 0; IERC20(ipmbAddress).transfer(_receiver, amount); emit blacklistWithdrawal(_poolID, _address, _index, amount); } // retrieve discount function getDiscount(uint256 _poolID, address _address, uint256 _index) public view returns (uint256) { if ((addressDataNew[_address][_poolID][_index].amount == poolsRegistry[_poolID].amount) && (block.timestamp >= addressDataNew[_address][_poolID][_index].dateDeposit + poolsRegistry[_poolID].duration)) { return poolsRegistry[_poolID].discount; } else { return 0; } } // retrieve pool info function poolInfo(uint256 _poolID) public view returns (string memory, uint256, uint256, uint256, uint256, uint256, bool) { return (poolsRegistry[_poolID].poolName, poolsRegistry[_poolID].duration, poolsRegistry[_poolID].amount, poolsRegistry[_poolID].discount, poolsRegistry[_poolID].lockDuration, poolsRegistry[_poolID].poolMax, poolsRegistry[_poolID].status); } // retrieve pool price function poolPrice(uint256 _poolID) public view returns (uint256) { return (poolsRegistry[_poolID].amount); } // retrieve pool status function poolStatus(uint256 _poolID) public view returns (bool) { return (poolsRegistry[_poolID].status); } // retrieve pool discount function poolDiscount(uint256 _poolID) public view returns (uint256) { return (poolsRegistry[_poolID].discount); } // retrieve deposit amount function poolAmountPerAddress(uint256 _poolID, address _address, uint256 _index) public view returns (uint256) { return (addressDataNew[_address][_poolID][_index].amount); } // retrieve deposit amount function poolDataPerAddress(uint256 _poolID, address _address, uint256 _index) public view returns (uint256, uint256, uint256, uint256, uint256) { return (addressDataNew[_address][_poolID][_index].amount, addressDataNew[_address][_poolID][_index].dateDeposit, addressDataNew[_address][_poolID][_index].epoch, addressDataNew[_address][_poolID][_index].ipmbPrice, addressDataNew[_address][_poolID][_index].goldPrice); } // retrieve deposit date function poolDepositDatePerAddress(uint256 _poolID, address _address, uint256 _index) public view returns (uint256) { return (addressDataNew[_address][_poolID][_index].dateDeposit); } // retrieve ipmb price at pool deposit function poolIPMBPricePerAddress(uint256 _poolID, address _address, uint256 _index) public view returns (uint256) { return (addressDataNew[_address][_poolID][_index].ipmbPrice); } // retrieve gold price at pool deposit function poolGoldPricePerAddress(uint256 _poolID, address _address, uint256 _index) public view returns (uint256) { return (addressDataNew[_address][_poolID][_index].goldPrice); } // retrieve epoch at pool deposit function poolEpochPerAddress(uint256 _poolID, address _address, uint256 _index) public view returns (uint256) { return (addressDataNew[_address][_poolID][_index].epoch); } // retrieve KYC address status function retrieveKYCStatus(address _address) public view returns (bool) { return (kycAddress[_address]); } // retrieve the deposit indeces per address per pool function retrieveAddressArrayPool(address _address, uint256 _pool) public view returns (uint256[] memory) { return (addressArray[_address][_pool]); } // retrieve counter per address per pool function retrieveAddressCounterPool(address _address, uint256 _pool) public view returns (uint256) { return (addressCounter[_address][_pool]); } // retrieve blacklist status function retrieveBlackListStatus(address _address) public view returns (bool) { return (blacklist[_address]); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.5; /* * @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) { 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; } }
// SPDX-License-Identifier: MIT /** * * @title IERC20 */ pragma solidity ^0.8.5; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT /** * * @title IPMB and Gold Price Feed Interface */ pragma solidity ^0.8.5; interface IPriceFeed { function getLatestPrices() external view returns (uint256, uint256, uint256, uint256, bytes32, uint256); function getEpochPrices(uint256 _epoch) external view returns (uint256, uint256, uint256, bytes32, uint256); function getEpochDataSetHash(uint256 _epoch) external view returns (bytes32, bytes32); }
// SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.5; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ import "./Context.sol"; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
[{"inputs":[{"internalType":"address","name":"_ipmbAddress","type":"address"},{"internalType":"address","name":"_priceFeedAddress","type":"address"},{"internalType":"uint256","name":"_blackPeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"adminStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"authorityStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"blacklistStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"blacklistWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"kycStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"poolDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"poolRegistration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"}],"name":"poolResetAfterMinting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"poolUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"poolWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"bperiod","type":"uint256"}],"name":"updateBlackPeriod","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"addAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"addBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressArray","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressDataNew","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"dateDeposit","type":"uint256"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"ipmbPrice","type":"uint256"},{"internalType":"uint256","name":"goldPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approveGEMMintingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authority","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blackPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"blacklistAddressWithdrawalPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blackPeriod","type":"uint256"}],"name":"changeBlackPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"}],"name":"depositPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gemMintingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ipmbAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"kycAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_poolIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantity","type":"uint256[]"}],"name":"multiDepositPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextpoolCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"poolAmountPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"poolDataPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"poolDepositDatePerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"}],"name":"poolDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"poolEpochPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"poolGoldPricePerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"poolIPMBPricePerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"}],"name":"poolPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"}],"name":"poolStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolsRegistry","outputs":[{"internalType":"uint256","name":"poolID","type":"uint256"},{"internalType":"string","name":"poolName","type":"string"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"lockDuration","type":"uint256"},{"internalType":"uint256","name":"poolMax","type":"uint256"},{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceFeedAddress","outputs":[{"internalType":"contract IPriceFeed","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_poolName","type":"string"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_discount","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_lockDuration","type":"uint256"},{"internalType":"uint256","name":"_poolMax","type":"uint256"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_pool","type":"uint256"}],"name":"retrieveAddressArrayPool","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_pool","type":"uint256"}],"name":"retrieveAddressCounterPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"retrieveBlackListStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"retrieveKYCStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setGEMMintingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"updateAddressPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"updateKYCAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"bool[]","name":"_status","type":"bool[]"}],"name":"updateKYCAddressBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"updateMinMaxDiscounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"uint256","name":"_poolMax","type":"uint256"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updatePoolData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updatePricesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"withdrawalPool","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b50604051612b54380380612b5483398101604081905261002e916100e9565b5f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350335f908152600160208190526040909120805460ff191682179055600a80546001600160a01b039586166001600160a01b031991821617909155600991909155600b8054939094169216919091178255600d556002600e55600f55610122565b80516001600160a01b03811681146100e4575f80fd5b919050565b5f805f606084860312156100fb575f80fd5b610104846100ce565b9250610112602085016100ce565b9150604084015190509250925092565b612a258061012f5f395ff3fe608060405234801561000f575f80fd5b50600436106102ad575f3560e01c80638da5cb5b1161016c578063c2d148ec116100d5578063e6b284491161008f578063e6b284491461080f578063e6ee309214610822578063ee60bd4a14610835578063f2fde38b14610874578063f665d10b14610887578063f7fbff8f146108ac578063f9f92be4146108bf575f80fd5b8063c2d148ec14610725578063c4b05eb314610738578063cbc6fda71461077a578063d0998c95146107c7578063d52e4f06146107da578063e0abca0b146107fc575f80fd5b8063a4230bd511610126578063a4230bd514610647578063acf513c11461065a578063b7dda8d21461066d578063b8214a37146106af578063b8b89e1b146106f1578063bf759150146106fa575f80fd5b80638da5cb5b146105dd578063914b9a53146105e5578063976ca7d3146105ee578063998c2347146106015780639ace5699146106145780639b056afb1461063e575f80fd5b8063401d65df116102195780636473eec6116101d35780636473eec6146105255780636d283482146105385780637104dd031461054b578063715018a61461056d5780638536ef3714610575578063892950d1146105885780638d64bc531461059b575f80fd5b8063401d65df1461047557806342cf0309146104885780634347d052146104a857806357fdb107146104b157806360419bda146104dc57806363a846f814610503575f80fd5b80631e275daf1161026a5780631e275daf146103835780632344094414610396578063267abd92146103a957806337b80a70146103cb57806338559d72146103de578063388b7661146103f1575f80fd5b80630244cd8a146102b15780630558d721146102e7578063141c21c8146102fc5780631526fe271461030f57806317ca2e41146103355780631a47bd9314610348575b5f80fd5b6102d46102bf366004612116565b5f908152600460208190526040909120015490565b6040519081526020015b60405180910390f35b6102fa6102f5366004612116565b6108e1565b005b6102fa61030a366004612148565b610950565b61032261031d366004612116565b6109a1565b6040516102de979695949392919061218f565b6102fa6103433660046121e4565b610a91565b610373610356366004612148565b6001600160a01b03165f9081526003602052604090205460ff1690565b60405190151581526020016102de565b6102fa6103913660046121e4565b610b36565b6102fa6103a4366004612116565b610bbd565b6103736103b7366004612148565b60056020525f908152604090205460ff1681565b6102d46103d9366004612219565b611190565b6102d46103ec36600461224c565b611241565b61044d6103ff366004612219565b6001600160a01b03919091165f908152600860209081526040808320948352938152838220928252919091522080546001820154600283015460038401546004909401549294919390929091565b604080519586526020860194909452928401919091526060830152608082015260a0016102de565b6102fa610483366004612274565b61126b565b61049b61049636600461224c565b611559565b6040516102de9190612294565b6102d4600d5481565b600c546104c4906001600160a01b031681565b6040516001600160a01b0390911681526020016102de565b6104ef6104ea366004612116565b6115cb565b6040516102de9897969594939291906122d6565b610373610511366004612148565b60016020525f908152604090205460ff1681565b6102fa610533366004612324565b611697565b6102fa610546366004612354565b611739565b610373610559366004612148565b60026020525f908152604090205460ff1681565b6102fa61197b565b6102fa610583366004612116565b6119f2565b6102d4610596366004612324565b611aa0565b6102d46105a9366004612219565b6001600160a01b03919091165f90815260086020908152604080832094835293815283822092825291909152206002015490565b6104c4611ad6565b6102d460095481565b6102fa6105fc366004612274565b611ae4565b6102fa61060f366004612393565b611b23565b6102d461062236600461224c565b600660209081525f928352604080842090915290825290205481565b6102d4600e5481565b6102fa6106553660046121e4565b611ba6565b6102fa61066836600461240d565b611c28565b6102d461067b366004612219565b6001600160a01b03919091165f90815260086020908152604080832094835293815283822092825291909152206003015490565b6102d46106bd366004612219565b6001600160a01b03919091165f90815260086020908152604080832094835293815283822092825291909152206004015490565b6102d4600f5481565b610373610708366004612148565b6001600160a01b03165f9081526005602052604090205460ff1690565b6102fa610733366004612148565b611d91565b6102d4610746366004612219565b6001600160a01b03919091165f90815260086020908152604080832094835293815283822092825291909152206001015490565b61044d610788366004612324565b600860209081525f9384526040808520825292845282842090528252902080546001820154600283015460038401546004909401549293919290919085565b600a546104c4906001600160a01b031681565b6102d46107e8366004612116565b5f9081526004602052604090206003015490565b600b546104c4906001600160a01b031681565b6102fa61081d3660046121e4565b611de2565b6102fa61083036600461254e565b611e64565b6102d4610843366004612219565b6001600160a01b03919091165f90815260086020908152604080832094835293815283822092825291909152205490565b6102fa610882366004612148565b611f0b565b610373610895366004612116565b5f9081526004602052604090206007015460ff1690565b6102fa6108ba366004612615565b611ff8565b6103736108cd366004612148565b60036020525f908152604090205460ff1681565b335f9081526001602081905260409091205460ff1615151461091e5760405162461bcd60e51b8152600401610915906126cc565b60405180910390fd5b600d81905560405181907f455bd98bd2d908608322751f3b7614208dcf5b93ab9b6eb1ce22dfa20d002713905f90a250565b33610959611ad6565b6001600160a01b03161461097f5760405162461bcd60e51b8152600401610915906126f1565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f818152600460208190526040822060028101546003820154928201546005830154600684015460078501546001909501805460609897889788978897889788979295919390929160ff9091169087906109fa90612726565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2690612726565b8015610a715780601f10610a4857610100808354040283529160200191610a71565b820191905f5260205f20905b815481529060010190602001808311610a5457829003601f168201915b505050505096509650965096509650965096509650919395979092949650565b335f9081526001602081905260409091205460ff1615151480610ac75750335f9081526002602052604090205460ff1615156001145b610ae35760405162461bcd60e51b8152600401610915906126cc565b6001600160a01b0382165f81815260036020526040808220805460ff191685151590811790915590519092917f1036c1e68dffa49bd561f2edfd63a11079114fb320a2fbef76709f0536ec6ab491a35050565b335f9081526001602081905260409091205460ff16151514610b6a5760405162461bcd60e51b8152600401610915906126cc565b6001600160a01b0382165f81815260056020526040808220805460ff191685151590811790915590519092917facc96907734141e646498435b03deb52adc4805c94c610b604114bc3eea9a4c891a35050565b335f9081526005602052604090205460ff161515600114610c095760405162461bcd60e51b81526020600482015260066024820152654e6f204b594360d01b6044820152606401610915565b335f9081526003602052604090205460ff1615610c385760405162461bcd60e51b81526004016109159061275e565b5f8181526004602052604090206007015460ff161515600114610c905760405162461bcd60e51b815260206004820152601060248201526f506f6f6c20697320696e61637469766560801b6044820152606401610915565b335f90815260076020908152604080832084845282528083205460049092529091206006015411610d035760405162461bcd60e51b815260206004820152601b60248201527f416c7265616479206465706f7369746564206d61782074696d657300000000006044820152606401610915565b5f8181526004602081905260409182902060030154600a5492516370a0823160e01b81523392810192909252916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d82919061278e565b1015610dd05760405162461bcd60e51b815260206004820181905260248201527f596f75722045524332302062616c616e6365206973206e6f7420656e6f7567686044820152606401610915565b5f805f600b5f9054906101000a90046001600160a01b03166001600160a01b031663ff61ba5c6040518163ffffffff1660e01b815260040160c060405180830381865afa158015610e23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4791906127a5565b5050509250925092505f60065f336001600160a01b03166001600160a01b031681526020019081526020015f205f8681526020019081526020015f2054905060045f8681526020019081526020015f206003015460085f336001600160a01b03166001600160a01b031681526020019081526020015f205f8781526020019081526020015f205f8381526020019081526020015f205f01819055504260085f336001600160a01b03166001600160a01b031681526020019081526020015f205f8781526020019081526020015f205f8381526020019081526020015f20600101819055508360085f336001600160a01b03166001600160a01b031681526020019081526020015f205f8781526020019081526020015f205f8381526020019081526020015f20600201819055508260085f336001600160a01b03166001600160a01b031681526020019081526020015f205f8781526020019081526020015f205f8381526020019081526020015f20600301819055508160085f336001600160a01b03166001600160a01b031681526020019081526020015f205f8781526020019081526020015f205f8381526020019081526020015f206004018190555060075f336001600160a01b03166001600160a01b031681526020019081526020015f205f8681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f909190919091505560065f336001600160a01b03166001600160a01b031681526020019081526020015f205f8681526020019081526020015f205f81548092919061109e906127ff565b9091555050600a545f8681526004602081815260408084206003015481516323b872dd60e01b815233948101949094523060248501526044840152516001600160a01b03909416936323b872dd9360648085019483900301908290875af115801561110b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112f9190612817565b5080336001600160a01b0316867f792dc12b7630a6a6b000ca94502fa0138161ffe9302a6493a96ed1b96af6d60960045f8a81526020019081526020015f206003015460405161118191815260200190565b60405180910390a45050505050565b5f838152600460209081526040808320600301546001600160a01b038616845260088352818420878552835281842085855290925282205414801561121a57505f848152600460209081526040808320600201546001600160a01b0387168452600883528184208885528352818420868552909252909120600101546112169190612832565b4210155b1561123757505f838152600460208190526040909120015461123a565b505f5b9392505050565b6001600160a01b0382165f9081526006602090815260408083208484529091529020545b92915050565b335f9081526003602052604090205460ff161561129a5760405162461bcd60e51b81526004016109159061275e565b5f8281526004602090815260408083206003015433845260088352818420868552835281842085855290925290912054146112e75760405162461bcd60e51b815260040161091590612845565b5f82815260046020908152604080832060050154338452600883528184208685528352818420858552909252909120600101546113249190612832565b4210156113435760405162461bcd60e51b815260040161091590612869565b335f9081526008602090815260408083208584528252808320848452909152812080548282556001820183905560028201839055600382018390556004909101829055905b335f90815260076020908152604080832087845290915290205481101561149b57335f90815260076020908152604080832087845290915290208054829081106113d4576113d4612896565b905f5260205f200154830361149357335f9081526007602090815260408083208784529091529020805461140a906001906128aa565b8154811061141a5761141a612896565b5f918252602080832090910154338352600782526040808420888552909252912080548390811061144d5761144d612896565b5f9182526020808320909101929092553381526007825260408082208783529092522080548061147f5761147f6128bd565b600190038181905f5260205f20015f905590555b600101611388565b50600a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906114ce90339085906004016128d1565b6020604051808303815f875af11580156114ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150e9190612817565b5081336001600160a01b0316847fda69eb80482fd8e6c337a1ca9d6de692a2c2b93bc40140b739915b9893857b548460405161154c91815260200190565b60405180910390a4505050565b6001600160a01b0382165f9081526007602090815260408083208484528252918290208054835181840281018401909452808452606093928301828280156115be57602002820191905f5260205f20905b8154815260200190600101908083116115aa575b5050505050905092915050565b60046020525f9081526040902080546001820180549192916115ec90612726565b80601f016020809104026020016040519081016040528092919081815260200182805461161890612726565b80156116635780601f1061163a57610100808354040283529160200191611663565b820191905f5260205f20905b81548152906001019060200180831161164657829003601f168201915b5050506002840154600385015460048601546005870154600688015460079098015496979396929550909350919060ff1688565b600c546001600160a01b031633146116c15760405162461bcd60e51b8152600401610915906126cc565b6001600160a01b0383165f81815260086020908152604080832086845282528083208584529091528082208281556001810183905560028101839055600381018390556004018290555183929185917f32b90fd018ae2a1ec15120ce7bbf7b170888d820027c1b0ed237d2a393cad27a9190a4505050565b33611742611ad6565b6001600160a01b0316146117685760405162461bcd60e51b8152600401610915906126f1565b6001600160a01b0383165f9081526003602052604090205460ff1615156001146117d45760405162461bcd60e51b815260206004820152601a60248201527f41646472657373206973206e6f7420626c61636b6c69737465640000000000006044820152606401610915565b5f828152600460209081526040808320600301546001600160a01b0387168452600883528184208685528352818420858552909252909120541461182a5760405162461bcd60e51b815260040161091590612845565b600d546001600160a01b0384165f90815260086020908152604080832086845282528083208584529091529020600101546118659190612832565b4210156118845760405162461bcd60e51b815260040161091590612869565b6001600160a01b038381165f90815260086020908152604080832086845282528083208584529091528082208054838255600182018490556002820184905560038201849055600491820193909355600a54915163a9059cbb60e01b81529293919091169163a9059cbb916118fd9189918691016128d1565b6020604051808303815f875af1158015611919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193d9190612817565b5081846001600160a01b0316847f5d64492d7bf60171a1d18557f8ce1ff39f332683ca7f9e51066b3b89185fec7c8460405161118191815260200190565b33611984611ad6565b6001600160a01b0316146119aa5760405162461bcd60e51b8152600401610915906126f1565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b335f9081526001602081905260409091205460ff16151514611a265760405162461bcd60e51b8152600401610915906126cc565b600a54600c5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611a5c9291169085906004016128d1565b6020604051808303815f875af1158015611a78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a9c9190612817565b5050565b6007602052825f5260405f20602052815f5260405f208181548110611ac3575f80fd5b905f5260205f20015f9250925050505481565b5f546001600160a01b031690565b335f9081526001602081905260409091205460ff16151514611b185760405162461bcd60e51b8152600401610915906126cc565b600e91909155600f55565b335f9081526001602081905260409091205460ff16151514611b575760405162461bcd60e51b8152600401610915906126cc565b5f8381526004602052604080822060068101859055600701805460ff19168415151790555184917f5ea024fc07ed117607d3f6225be684cd813fab5371028b9dba87f793b1333b8991a2505050565b33611baf611ad6565b6001600160a01b031614611bd55760405162461bcd60e51b8152600401610915906126f1565b6001600160a01b0382165f81815260016020526040808220805460ff191685151590811790915590519092917f31e432c8a0b8a5d799c926dfc9357612dec1d1171af2b563beb34e54fc57196091a35050565b335f9081526001602081905260409091205460ff16151514611c5c5760405162461bcd60e51b8152600401610915906126cc565b5f85118015611c6a57505f83115b611c9c5760405162461bcd60e51b815260206004820152600360248201526232b93960e91b6044820152606401610915565b600e548410158015611cb05750600f548411155b611cee5760405162461bcd60e51b815260206004820152600f60248201526e086d0cac6d640dad2dc404c40dac2f608b1b6044820152606401610915565b6009545f818152600460205260409020818155600101611d0e8882612935565b505f818152600460208190526040808320600281018a90556003810188905591820188905560058201869055600682018590556007909101805460ff191660011790555182917f3eab7cd7b91b05da9ef283cab6a769878feb6ae17b982bc7aef8c6c9487e5dbb91a2600954611d85906001612832565b60095550505050505050565b33611d9a611ad6565b6001600160a01b031614611dc05760405162461bcd60e51b8152600401610915906126f1565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b33611deb611ad6565b6001600160a01b031614611e115760405162461bcd60e51b8152600401610915906126f1565b6001600160a01b0382165f81815260026020526040808220805460ff191685151590811790915590519092917ff58b84d12f1d006909ec67d87c36fe211d74a3dff077d1df5c158bd6fd0e4fab91a35050565b8051825114611ea55760405162461bcd60e51b815260206004820152600d60248201526c436865636b206c656e6774687360981b6044820152606401610915565b5f5b8251811015611f06575f5b828281518110611ec457611ec4612896565b6020026020010151811015611efd57611ef5848381518110611ee857611ee8612896565b6020026020010151610bbd565b600101611eb2565b50600101611ea7565b505050565b33611f14611ad6565b6001600160a01b031614611f3a5760405162461bcd60e51b8152600401610915906126f1565b6001600160a01b038116611f9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610915565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526001602081905260409091205460ff1615151461202c5760405162461bcd60e51b8152600401610915906126cc565b5f5b8251811015611f065781818151811061204957612049612896565b602002602001015160055f85848151811061206657612066612896565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055508181815181106120b5576120b5612896565b602002602001015115158382815181106120d1576120d1612896565b60200260200101516001600160a01b03167facc96907734141e646498435b03deb52adc4805c94c610b604114bc3eea9a4c860405160405180910390a360010161202e565b5f60208284031215612126575f80fd5b5035919050565b80356001600160a01b0381168114612143575f80fd5b919050565b5f60208284031215612158575f80fd5b61123a8261212d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60e081525f6121a160e083018a612161565b60208301989098525060408101959095526060850193909352608084019190915260a0830152151560c090910152919050565b80151581146121e1575f80fd5b50565b5f80604083850312156121f5575f80fd5b6121fe8361212d565b9150602083013561220e816121d4565b809150509250929050565b5f805f6060848603121561222b575f80fd5b8335925061223b6020850161212d565b929592945050506040919091013590565b5f806040838503121561225d575f80fd5b6122668361212d565b946020939093013593505050565b5f8060408385031215612285575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b818110156122cb5783518352602093840193909201916001016122ad565b509095945050505050565b88815261010060208201525f6122f061010083018a612161565b6040830198909852506060810195909552608085019390935260a084019190915260c0830152151560e09091015292915050565b5f805f60608486031215612336575f80fd5b61233f8461212d565b95602085013595506040909401359392505050565b5f805f8060808587031215612367575f80fd5b6123708561212d565b935061237e6020860161212d565b93969395505050506040820135916060013590565b5f805f606084860312156123a5575f80fd5b833592506020840135915060408401356123be816121d4565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612405576124056123c9565b604052919050565b5f805f805f8060c08789031215612422575f80fd5b86356001600160401b03811115612437575f80fd5b8701601f81018913612447575f80fd5b80356001600160401b03811115612460576124606123c9565b612473601f8201601f19166020016123dd565b8181528a6020838501011115612487575f80fd5b816020840160208301375f60209282018301529a908901359950604089013598606081013598506080810135975060a0013595509350505050565b5f6001600160401b038211156124da576124da6123c9565b5060051b60200190565b5f82601f8301126124f3575f80fd5b8135612506612501826124c2565b6123dd565b8082825260208201915060208360051b860101925085831115612527575f80fd5b602085015b8381101561254457803583526020928301920161252c565b5095945050505050565b5f806040838503121561255f575f80fd5b82356001600160401b03811115612574575f80fd5b612580858286016124e4565b92505060208301356001600160401b0381111561259b575f80fd5b6125a7858286016124e4565b9150509250929050565b5f82601f8301126125c0575f80fd5b81356125ce612501826124c2565b8082825260208201915060208360051b8601019250858311156125ef575f80fd5b602085015b83811015612544578035612607816121d4565b8352602092830192016125f4565b5f8060408385031215612626575f80fd5b82356001600160401b0381111561263b575f80fd5b8301601f8101851361264b575f80fd5b8035612659612501826124c2565b8082825260208201915060208360051b85010192508783111561267a575f80fd5b6020840193505b828410156126a3576126928461212d565b825260209384019390910190612681565b945050505060208301356001600160401b038111156126c0575f80fd5b6125a7858286016125b1565b6020808252600b908201526a139bdd08185b1b1bddd95960aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061273a57607f821691505b60208210810361275857634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252601690820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b604082015260600190565b5f6020828403121561279e575f80fd5b5051919050565b5f805f805f8060c087890312156127ba575f80fd5b50508451602086015160408701516060880151608089015160a090990151939a929950909790965094509092509050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201612810576128106127eb565b5060010190565b5f60208284031215612827575f80fd5b815161123a816121d4565b80820180821115611265576112656127eb565b6020808252600a9082015269139bc819195c1bdcda5d60b21b604082015260600190565b602080825260139082015272151a5b59481a185cc81b9bdd081c185cdcd959606a1b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b81810381811115611265576112656127eb565b634e487b7160e01b5f52603160045260245ffd5b6001600160a01b03929092168252602082015260400190565b601f821115611f0657805f5260205f20601f840160051c8101602085101561290f5750805b601f840160051c820191505b8181101561292e575f815560010161291b565b5050505050565b81516001600160401b0381111561294e5761294e6123c9565b6129628161295c8454612726565b846128ea565b6020601f821160018114612994575f831561297d5750848201515b5f19600385901b1c1916600184901b17845561292e565b5f84815260208120601f198516915b828110156129c357878501518255602094850194600190920191016129a3565b50848210156129e057868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fea264697066735822122020833207ce8934b0710b7f65ed5e92a9f205ccd5b60becb667160bf7bdb6fd3364736f6c634300081a0033000000000000000000000000ff22c94ffb6bb5d1df18beb5fd1dfe7583d3b214000000000000000000000000b2f7243b6c5f3a3660941bb77bf82d274e6645870000000000000000000000000000000000000000000000000000000000015180
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106102ad575f3560e01c80638da5cb5b1161016c578063c2d148ec116100d5578063e6b284491161008f578063e6b284491461080f578063e6ee309214610822578063ee60bd4a14610835578063f2fde38b14610874578063f665d10b14610887578063f7fbff8f146108ac578063f9f92be4146108bf575f80fd5b8063c2d148ec14610725578063c4b05eb314610738578063cbc6fda71461077a578063d0998c95146107c7578063d52e4f06146107da578063e0abca0b146107fc575f80fd5b8063a4230bd511610126578063a4230bd514610647578063acf513c11461065a578063b7dda8d21461066d578063b8214a37146106af578063b8b89e1b146106f1578063bf759150146106fa575f80fd5b80638da5cb5b146105dd578063914b9a53146105e5578063976ca7d3146105ee578063998c2347146106015780639ace5699146106145780639b056afb1461063e575f80fd5b8063401d65df116102195780636473eec6116101d35780636473eec6146105255780636d283482146105385780637104dd031461054b578063715018a61461056d5780638536ef3714610575578063892950d1146105885780638d64bc531461059b575f80fd5b8063401d65df1461047557806342cf0309146104885780634347d052146104a857806357fdb107146104b157806360419bda146104dc57806363a846f814610503575f80fd5b80631e275daf1161026a5780631e275daf146103835780632344094414610396578063267abd92146103a957806337b80a70146103cb57806338559d72146103de578063388b7661146103f1575f80fd5b80630244cd8a146102b15780630558d721146102e7578063141c21c8146102fc5780631526fe271461030f57806317ca2e41146103355780631a47bd9314610348575b5f80fd5b6102d46102bf366004612116565b5f908152600460208190526040909120015490565b6040519081526020015b60405180910390f35b6102fa6102f5366004612116565b6108e1565b005b6102fa61030a366004612148565b610950565b61032261031d366004612116565b6109a1565b6040516102de979695949392919061218f565b6102fa6103433660046121e4565b610a91565b610373610356366004612148565b6001600160a01b03165f9081526003602052604090205460ff1690565b60405190151581526020016102de565b6102fa6103913660046121e4565b610b36565b6102fa6103a4366004612116565b610bbd565b6103736103b7366004612148565b60056020525f908152604090205460ff1681565b6102d46103d9366004612219565b611190565b6102d46103ec36600461224c565b611241565b61044d6103ff366004612219565b6001600160a01b03919091165f908152600860209081526040808320948352938152838220928252919091522080546001820154600283015460038401546004909401549294919390929091565b604080519586526020860194909452928401919091526060830152608082015260a0016102de565b6102fa610483366004612274565b61126b565b61049b61049636600461224c565b611559565b6040516102de9190612294565b6102d4600d5481565b600c546104c4906001600160a01b031681565b6040516001600160a01b0390911681526020016102de565b6104ef6104ea366004612116565b6115cb565b6040516102de9897969594939291906122d6565b610373610511366004612148565b60016020525f908152604090205460ff1681565b6102fa610533366004612324565b611697565b6102fa610546366004612354565b611739565b610373610559366004612148565b60026020525f908152604090205460ff1681565b6102fa61197b565b6102fa610583366004612116565b6119f2565b6102d4610596366004612324565b611aa0565b6102d46105a9366004612219565b6001600160a01b03919091165f90815260086020908152604080832094835293815283822092825291909152206002015490565b6104c4611ad6565b6102d460095481565b6102fa6105fc366004612274565b611ae4565b6102fa61060f366004612393565b611b23565b6102d461062236600461224c565b600660209081525f928352604080842090915290825290205481565b6102d4600e5481565b6102fa6106553660046121e4565b611ba6565b6102fa61066836600461240d565b611c28565b6102d461067b366004612219565b6001600160a01b03919091165f90815260086020908152604080832094835293815283822092825291909152206003015490565b6102d46106bd366004612219565b6001600160a01b03919091165f90815260086020908152604080832094835293815283822092825291909152206004015490565b6102d4600f5481565b610373610708366004612148565b6001600160a01b03165f9081526005602052604090205460ff1690565b6102fa610733366004612148565b611d91565b6102d4610746366004612219565b6001600160a01b03919091165f90815260086020908152604080832094835293815283822092825291909152206001015490565b61044d610788366004612324565b600860209081525f9384526040808520825292845282842090528252902080546001820154600283015460038401546004909401549293919290919085565b600a546104c4906001600160a01b031681565b6102d46107e8366004612116565b5f9081526004602052604090206003015490565b600b546104c4906001600160a01b031681565b6102fa61081d3660046121e4565b611de2565b6102fa61083036600461254e565b611e64565b6102d4610843366004612219565b6001600160a01b03919091165f90815260086020908152604080832094835293815283822092825291909152205490565b6102fa610882366004612148565b611f0b565b610373610895366004612116565b5f9081526004602052604090206007015460ff1690565b6102fa6108ba366004612615565b611ff8565b6103736108cd366004612148565b60036020525f908152604090205460ff1681565b335f9081526001602081905260409091205460ff1615151461091e5760405162461bcd60e51b8152600401610915906126cc565b60405180910390fd5b600d81905560405181907f455bd98bd2d908608322751f3b7614208dcf5b93ab9b6eb1ce22dfa20d002713905f90a250565b33610959611ad6565b6001600160a01b03161461097f5760405162461bcd60e51b8152600401610915906126f1565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f818152600460208190526040822060028101546003820154928201546005830154600684015460078501546001909501805460609897889788978897889788979295919390929160ff9091169087906109fa90612726565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2690612726565b8015610a715780601f10610a4857610100808354040283529160200191610a71565b820191905f5260205f20905b815481529060010190602001808311610a5457829003601f168201915b505050505096509650965096509650965096509650919395979092949650565b335f9081526001602081905260409091205460ff1615151480610ac75750335f9081526002602052604090205460ff1615156001145b610ae35760405162461bcd60e51b8152600401610915906126cc565b6001600160a01b0382165f81815260036020526040808220805460ff191685151590811790915590519092917f1036c1e68dffa49bd561f2edfd63a11079114fb320a2fbef76709f0536ec6ab491a35050565b335f9081526001602081905260409091205460ff16151514610b6a5760405162461bcd60e51b8152600401610915906126cc565b6001600160a01b0382165f81815260056020526040808220805460ff191685151590811790915590519092917facc96907734141e646498435b03deb52adc4805c94c610b604114bc3eea9a4c891a35050565b335f9081526005602052604090205460ff161515600114610c095760405162461bcd60e51b81526020600482015260066024820152654e6f204b594360d01b6044820152606401610915565b335f9081526003602052604090205460ff1615610c385760405162461bcd60e51b81526004016109159061275e565b5f8181526004602052604090206007015460ff161515600114610c905760405162461bcd60e51b815260206004820152601060248201526f506f6f6c20697320696e61637469766560801b6044820152606401610915565b335f90815260076020908152604080832084845282528083205460049092529091206006015411610d035760405162461bcd60e51b815260206004820152601b60248201527f416c7265616479206465706f7369746564206d61782074696d657300000000006044820152606401610915565b5f8181526004602081905260409182902060030154600a5492516370a0823160e01b81523392810192909252916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d82919061278e565b1015610dd05760405162461bcd60e51b815260206004820181905260248201527f596f75722045524332302062616c616e6365206973206e6f7420656e6f7567686044820152606401610915565b5f805f600b5f9054906101000a90046001600160a01b03166001600160a01b031663ff61ba5c6040518163ffffffff1660e01b815260040160c060405180830381865afa158015610e23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4791906127a5565b5050509250925092505f60065f336001600160a01b03166001600160a01b031681526020019081526020015f205f8681526020019081526020015f2054905060045f8681526020019081526020015f206003015460085f336001600160a01b03166001600160a01b031681526020019081526020015f205f8781526020019081526020015f205f8381526020019081526020015f205f01819055504260085f336001600160a01b03166001600160a01b031681526020019081526020015f205f8781526020019081526020015f205f8381526020019081526020015f20600101819055508360085f336001600160a01b03166001600160a01b031681526020019081526020015f205f8781526020019081526020015f205f8381526020019081526020015f20600201819055508260085f336001600160a01b03166001600160a01b031681526020019081526020015f205f8781526020019081526020015f205f8381526020019081526020015f20600301819055508160085f336001600160a01b03166001600160a01b031681526020019081526020015f205f8781526020019081526020015f205f8381526020019081526020015f206004018190555060075f336001600160a01b03166001600160a01b031681526020019081526020015f205f8681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f909190919091505560065f336001600160a01b03166001600160a01b031681526020019081526020015f205f8681526020019081526020015f205f81548092919061109e906127ff565b9091555050600a545f8681526004602081815260408084206003015481516323b872dd60e01b815233948101949094523060248501526044840152516001600160a01b03909416936323b872dd9360648085019483900301908290875af115801561110b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112f9190612817565b5080336001600160a01b0316867f792dc12b7630a6a6b000ca94502fa0138161ffe9302a6493a96ed1b96af6d60960045f8a81526020019081526020015f206003015460405161118191815260200190565b60405180910390a45050505050565b5f838152600460209081526040808320600301546001600160a01b038616845260088352818420878552835281842085855290925282205414801561121a57505f848152600460209081526040808320600201546001600160a01b0387168452600883528184208885528352818420868552909252909120600101546112169190612832565b4210155b1561123757505f838152600460208190526040909120015461123a565b505f5b9392505050565b6001600160a01b0382165f9081526006602090815260408083208484529091529020545b92915050565b335f9081526003602052604090205460ff161561129a5760405162461bcd60e51b81526004016109159061275e565b5f8281526004602090815260408083206003015433845260088352818420868552835281842085855290925290912054146112e75760405162461bcd60e51b815260040161091590612845565b5f82815260046020908152604080832060050154338452600883528184208685528352818420858552909252909120600101546113249190612832565b4210156113435760405162461bcd60e51b815260040161091590612869565b335f9081526008602090815260408083208584528252808320848452909152812080548282556001820183905560028201839055600382018390556004909101829055905b335f90815260076020908152604080832087845290915290205481101561149b57335f90815260076020908152604080832087845290915290208054829081106113d4576113d4612896565b905f5260205f200154830361149357335f9081526007602090815260408083208784529091529020805461140a906001906128aa565b8154811061141a5761141a612896565b5f918252602080832090910154338352600782526040808420888552909252912080548390811061144d5761144d612896565b5f9182526020808320909101929092553381526007825260408082208783529092522080548061147f5761147f6128bd565b600190038181905f5260205f20015f905590555b600101611388565b50600a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906114ce90339085906004016128d1565b6020604051808303815f875af11580156114ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150e9190612817565b5081336001600160a01b0316847fda69eb80482fd8e6c337a1ca9d6de692a2c2b93bc40140b739915b9893857b548460405161154c91815260200190565b60405180910390a4505050565b6001600160a01b0382165f9081526007602090815260408083208484528252918290208054835181840281018401909452808452606093928301828280156115be57602002820191905f5260205f20905b8154815260200190600101908083116115aa575b5050505050905092915050565b60046020525f9081526040902080546001820180549192916115ec90612726565b80601f016020809104026020016040519081016040528092919081815260200182805461161890612726565b80156116635780601f1061163a57610100808354040283529160200191611663565b820191905f5260205f20905b81548152906001019060200180831161164657829003601f168201915b5050506002840154600385015460048601546005870154600688015460079098015496979396929550909350919060ff1688565b600c546001600160a01b031633146116c15760405162461bcd60e51b8152600401610915906126cc565b6001600160a01b0383165f81815260086020908152604080832086845282528083208584529091528082208281556001810183905560028101839055600381018390556004018290555183929185917f32b90fd018ae2a1ec15120ce7bbf7b170888d820027c1b0ed237d2a393cad27a9190a4505050565b33611742611ad6565b6001600160a01b0316146117685760405162461bcd60e51b8152600401610915906126f1565b6001600160a01b0383165f9081526003602052604090205460ff1615156001146117d45760405162461bcd60e51b815260206004820152601a60248201527f41646472657373206973206e6f7420626c61636b6c69737465640000000000006044820152606401610915565b5f828152600460209081526040808320600301546001600160a01b0387168452600883528184208685528352818420858552909252909120541461182a5760405162461bcd60e51b815260040161091590612845565b600d546001600160a01b0384165f90815260086020908152604080832086845282528083208584529091529020600101546118659190612832565b4210156118845760405162461bcd60e51b815260040161091590612869565b6001600160a01b038381165f90815260086020908152604080832086845282528083208584529091528082208054838255600182018490556002820184905560038201849055600491820193909355600a54915163a9059cbb60e01b81529293919091169163a9059cbb916118fd9189918691016128d1565b6020604051808303815f875af1158015611919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193d9190612817565b5081846001600160a01b0316847f5d64492d7bf60171a1d18557f8ce1ff39f332683ca7f9e51066b3b89185fec7c8460405161118191815260200190565b33611984611ad6565b6001600160a01b0316146119aa5760405162461bcd60e51b8152600401610915906126f1565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b335f9081526001602081905260409091205460ff16151514611a265760405162461bcd60e51b8152600401610915906126cc565b600a54600c5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611a5c9291169085906004016128d1565b6020604051808303815f875af1158015611a78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a9c9190612817565b5050565b6007602052825f5260405f20602052815f5260405f208181548110611ac3575f80fd5b905f5260205f20015f9250925050505481565b5f546001600160a01b031690565b335f9081526001602081905260409091205460ff16151514611b185760405162461bcd60e51b8152600401610915906126cc565b600e91909155600f55565b335f9081526001602081905260409091205460ff16151514611b575760405162461bcd60e51b8152600401610915906126cc565b5f8381526004602052604080822060068101859055600701805460ff19168415151790555184917f5ea024fc07ed117607d3f6225be684cd813fab5371028b9dba87f793b1333b8991a2505050565b33611baf611ad6565b6001600160a01b031614611bd55760405162461bcd60e51b8152600401610915906126f1565b6001600160a01b0382165f81815260016020526040808220805460ff191685151590811790915590519092917f31e432c8a0b8a5d799c926dfc9357612dec1d1171af2b563beb34e54fc57196091a35050565b335f9081526001602081905260409091205460ff16151514611c5c5760405162461bcd60e51b8152600401610915906126cc565b5f85118015611c6a57505f83115b611c9c5760405162461bcd60e51b815260206004820152600360248201526232b93960e91b6044820152606401610915565b600e548410158015611cb05750600f548411155b611cee5760405162461bcd60e51b815260206004820152600f60248201526e086d0cac6d640dad2dc404c40dac2f608b1b6044820152606401610915565b6009545f818152600460205260409020818155600101611d0e8882612935565b505f818152600460208190526040808320600281018a90556003810188905591820188905560058201869055600682018590556007909101805460ff191660011790555182917f3eab7cd7b91b05da9ef283cab6a769878feb6ae17b982bc7aef8c6c9487e5dbb91a2600954611d85906001612832565b60095550505050505050565b33611d9a611ad6565b6001600160a01b031614611dc05760405162461bcd60e51b8152600401610915906126f1565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b33611deb611ad6565b6001600160a01b031614611e115760405162461bcd60e51b8152600401610915906126f1565b6001600160a01b0382165f81815260026020526040808220805460ff191685151590811790915590519092917ff58b84d12f1d006909ec67d87c36fe211d74a3dff077d1df5c158bd6fd0e4fab91a35050565b8051825114611ea55760405162461bcd60e51b815260206004820152600d60248201526c436865636b206c656e6774687360981b6044820152606401610915565b5f5b8251811015611f06575f5b828281518110611ec457611ec4612896565b6020026020010151811015611efd57611ef5848381518110611ee857611ee8612896565b6020026020010151610bbd565b600101611eb2565b50600101611ea7565b505050565b33611f14611ad6565b6001600160a01b031614611f3a5760405162461bcd60e51b8152600401610915906126f1565b6001600160a01b038116611f9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610915565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526001602081905260409091205460ff1615151461202c5760405162461bcd60e51b8152600401610915906126cc565b5f5b8251811015611f065781818151811061204957612049612896565b602002602001015160055f85848151811061206657612066612896565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055508181815181106120b5576120b5612896565b602002602001015115158382815181106120d1576120d1612896565b60200260200101516001600160a01b03167facc96907734141e646498435b03deb52adc4805c94c610b604114bc3eea9a4c860405160405180910390a360010161202e565b5f60208284031215612126575f80fd5b5035919050565b80356001600160a01b0381168114612143575f80fd5b919050565b5f60208284031215612158575f80fd5b61123a8261212d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60e081525f6121a160e083018a612161565b60208301989098525060408101959095526060850193909352608084019190915260a0830152151560c090910152919050565b80151581146121e1575f80fd5b50565b5f80604083850312156121f5575f80fd5b6121fe8361212d565b9150602083013561220e816121d4565b809150509250929050565b5f805f6060848603121561222b575f80fd5b8335925061223b6020850161212d565b929592945050506040919091013590565b5f806040838503121561225d575f80fd5b6122668361212d565b946020939093013593505050565b5f8060408385031215612285575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b818110156122cb5783518352602093840193909201916001016122ad565b509095945050505050565b88815261010060208201525f6122f061010083018a612161565b6040830198909852506060810195909552608085019390935260a084019190915260c0830152151560e09091015292915050565b5f805f60608486031215612336575f80fd5b61233f8461212d565b95602085013595506040909401359392505050565b5f805f8060808587031215612367575f80fd5b6123708561212d565b935061237e6020860161212d565b93969395505050506040820135916060013590565b5f805f606084860312156123a5575f80fd5b833592506020840135915060408401356123be816121d4565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612405576124056123c9565b604052919050565b5f805f805f8060c08789031215612422575f80fd5b86356001600160401b03811115612437575f80fd5b8701601f81018913612447575f80fd5b80356001600160401b03811115612460576124606123c9565b612473601f8201601f19166020016123dd565b8181528a6020838501011115612487575f80fd5b816020840160208301375f60209282018301529a908901359950604089013598606081013598506080810135975060a0013595509350505050565b5f6001600160401b038211156124da576124da6123c9565b5060051b60200190565b5f82601f8301126124f3575f80fd5b8135612506612501826124c2565b6123dd565b8082825260208201915060208360051b860101925085831115612527575f80fd5b602085015b8381101561254457803583526020928301920161252c565b5095945050505050565b5f806040838503121561255f575f80fd5b82356001600160401b03811115612574575f80fd5b612580858286016124e4565b92505060208301356001600160401b0381111561259b575f80fd5b6125a7858286016124e4565b9150509250929050565b5f82601f8301126125c0575f80fd5b81356125ce612501826124c2565b8082825260208201915060208360051b8601019250858311156125ef575f80fd5b602085015b83811015612544578035612607816121d4565b8352602092830192016125f4565b5f8060408385031215612626575f80fd5b82356001600160401b0381111561263b575f80fd5b8301601f8101851361264b575f80fd5b8035612659612501826124c2565b8082825260208201915060208360051b85010192508783111561267a575f80fd5b6020840193505b828410156126a3576126928461212d565b825260209384019390910190612681565b945050505060208301356001600160401b038111156126c0575f80fd5b6125a7858286016125b1565b6020808252600b908201526a139bdd08185b1b1bddd95960aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061273a57607f821691505b60208210810361275857634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252601690820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b604082015260600190565b5f6020828403121561279e575f80fd5b5051919050565b5f805f805f8060c087890312156127ba575f80fd5b50508451602086015160408701516060880151608089015160a090990151939a929950909790965094509092509050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201612810576128106127eb565b5060010190565b5f60208284031215612827575f80fd5b815161123a816121d4565b80820180821115611265576112656127eb565b6020808252600a9082015269139bc819195c1bdcda5d60b21b604082015260600190565b602080825260139082015272151a5b59481a185cc81b9bdd081c185cdcd959606a1b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b81810381811115611265576112656127eb565b634e487b7160e01b5f52603160045260245ffd5b6001600160a01b03929092168252602082015260400190565b601f821115611f0657805f5260205f20601f840160051c8101602085101561290f5750805b601f840160051c820191505b8181101561292e575f815560010161291b565b5050505050565b81516001600160401b0381111561294e5761294e6123c9565b6129628161295c8454612726565b846128ea565b6020601f821160018114612994575f831561297d5750848201515b5f19600385901b1c1916600184901b17845561292e565b5f84815260208120601f198516915b828110156129c357878501518255602094850194600190920191016129a3565b50848210156129e057868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fea264697066735822122020833207ce8934b0710b7f65ed5e92a9f205ccd5b60becb667160bf7bdb6fd3364736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ff22c94ffb6bb5d1df18beb5fd1dfe7583d3b214000000000000000000000000b2f7243b6c5f3a3660941bb77bf82d274e6645870000000000000000000000000000000000000000000000000000000000015180
-----Decoded View---------------
Arg [0] : _ipmbAddress (address): 0xFF22c94FFb6bB5d1DF18bEb5fd1dFE7583D3B214
Arg [1] : _priceFeedAddress (address): 0xB2F7243b6C5f3A3660941BB77bf82D274E664587
Arg [2] : _blackPeriod (uint256): 86400
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000ff22c94ffb6bb5d1df18beb5fd1dfe7583d3b214
Arg [1] : 000000000000000000000000b2f7243b6c5f3a3660941bb77bf82d274e664587
Arg [2] : 0000000000000000000000000000000000000000000000000000000000015180
Deployed Bytecode Sourcemap
266:15049:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12735:128;;;;;;:::i;:::-;12795:7;12823:22;;;:13;:22;;;;;;;;:31;;;12735:128;;;;391:25:5;;;379:2;364:18;12735:128:2;;;;;;;;9465:158;;;;;;:::i;:::-;;:::i;:::-;;9051:123;;;;;;:::i;:::-;;:::i;11995:378::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;8650:173::-;;;;;;:::i;:::-;;:::i;15185:125::-;;;;;;:::i;:::-;-1:-1:-1;;;;;15282:19:2;15257:4;15282:19;;;:9;:19;;;;;;;;;15185:125;;;;2364:14:5;;2357:22;2339:41;;2327:2;2312:18;15185:125:2;2199:187:5;9679:168:2;;;;;;:::i;:::-;;:::i;4094:1371::-;;;;;;:::i;:::-;;:::i;1009:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11531:427;;;;;;:::i;:::-;;:::i;14983:158::-;;;;;;:::i;:::-;;:::i;13134:431::-;;;;;;:::i;:::-;-1:-1:-1;;;;;13298:24:2;;;;13234:7;13298:24;;;:14;:24;;;;;;;;:33;;;;;;;;;:41;;;;;;;;:48;;13348:53;;;;13403:47;;;;13452:51;;;;13505;;;;;13298:48;;13348:53;;13403:47;;13452:51;;13134:431;;;;;3380:25:5;;;3436:2;3421:18;;3414:34;;;;3464:18;;;3457:34;;;;3522:2;3507:18;;3500:34;3565:3;3550:19;;3543:35;3367:3;3352:19;13134:431:2;3121:463:5;5923:1327:2;;;;;;:::i;:::-;;:::i;14764:163::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1508:26::-;;;;;;1468:33;;;;;-1:-1:-1;;;;;1468:33:2;;;;;;-1:-1:-1;;;;;4720:32:5;;;4702:51;;4690:2;4675:18;1468:33:2;4556:203:5;953:49:2;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;810:38::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7606:549;;;;;;:::i;:::-;;:::i;10510:985::-;;;;;;:::i;:::-;;:::i;855:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1816:148:4;;;:::i;9233:144:2:-;;;;;;:::i;:::-;;:::i;1137:71::-;;;;;;:::i;:::-;;:::i;14345:185::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14474:24:2;;;;14446:7;14474:24;;;:14;:24;;;;;;;;:33;;;;;;;;;:41;;;;;;;;:47;;;;14345:185;1165:87:4;;;:::i;1357:30:2:-;;;;;;9937:142;;;;;;:::i;:::-;;:::i;7297:233::-;;;;;;:::i;:::-;;:::i;1059:71::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1541:26;;;;;;8205:157;;;;;;:::i;:::-;;:::i;3190:860::-;;;;;;:::i;:::-;;:::i;13856:193::-;;;;;;:::i;:::-;-1:-1:-1;;;;;13989:24:2;;;;13961:7;13989:24;;;:14;:24;;;;;;;;:33;;;;;;;;;:41;;;;;;;;:51;;;;13856:193;14103;;;;;;:::i;:::-;-1:-1:-1;;;;;14236:24:2;;;;14208:7;14236:24;;;:14;:24;;;;;;;;:33;;;;;;;;;:41;;;;;;;;:51;;;;14103:193;1574:26;;;;;;14576:120;;;;;;:::i;:::-;-1:-1:-1;;;;;14667:20:2;14642:4;14667:20;;;:10;:20;;;;;;;;;14576:120;8878:114;;;;;;:::i;:::-;;:::i;13605:197::-;;;;;;:::i;:::-;-1:-1:-1;;;;;13740:24:2;;;;13712:7;13740:24;;;:14;:24;;;;;;;;:33;;;;;;;;;:41;;;;;;;;:53;;;;13605:197;1215:95;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1394:26;;;;;-1:-1:-1;;;;;1394:26:2;;;12411:123;;;;;;:::i;:::-;12468:7;12496:22;;;:13;:22;;;;;:29;;;;12411:123;1427:34;;;;;-1:-1:-1;;;;;1427:34:2;;;8416:169;;;;;;:::i;:::-;;:::i;5514:353::-;;;;;;:::i;:::-;;:::i;12905:187::-;;;;;;:::i;:::-;-1:-1:-1;;;;;13035:24:2;;;;13007:7;13035:24;;;:14;:24;;;;;;;;:33;;;;;;;;;:41;;;;;;;;:48;;12905:187;2119:244:4;;;;;;:::i;:::-;;:::i;12573:121:2:-;;;;;;:::i;:::-;12631:4;12656:22;;;:13;:22;;;;;:29;;;;;;12573:121;10150:279;;;;;;:::i;:::-;;:::i;904:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9465:158;1675:10;1669:17;;;;:5;:17;;;;;;;;;;;:25;;;1661:49;;;;-1:-1:-1;;;1661:49:2;;;;;;;:::i;:::-;;;;;;;;;9542:11:::1;:26:::0;;;9584:31:::1;::::0;9556:12;;9584:31:::1;::::0;;;::::1;9465:158:::0;:::o;9051:123::-;685:10:0;1385:7:4;:5;:7::i;:::-;-1:-1:-1;;;;;1385:23:4;;1377:68;;;;-1:-1:-1;;;1377:68:4;;;;;;;:::i;:::-;9127:16:2::1;:39:::0;;-1:-1:-1;;;;;;9127:39:2::1;-1:-1:-1::0;;;;;9127:39:2;;;::::1;::::0;;;::::1;::::0;;9051:123::o;11995:378::-;12066:7;12136:22;;;:13;:22;;;;;;;12169:31;;;;12202:29;;;;12233:31;;;;12266:35;;;;12303:30;;;;12335:29;;;;12136:31;;;;12128:237;;12051:13;;12066:7;;;;;;;;;;;12169:31;;12233;;12266:35;;12303:30;12335:29;;;;;12136:31;;12128:237;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11995:378;;;;;;;;;:::o;8650:173::-;1788:10;1782:17;;;;:5;:17;;;;;;;;;;;:25;;;;:58;;-1:-1:-1;1821:10:2;1811:21;;;;:9;:21;;;;;;;;:29;;:21;:29;1782:58;1774:82;;;;-1:-1:-1;;;1774:82:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;8736:19:2;::::1;;::::0;;;:9:::1;:19;::::0;;;;;:29;;-1:-1:-1;;8736:29:2::1;::::0;::::1;;::::0;;::::1;::::0;;;8781:34;;8736:29;;:19;8781:34:::1;::::0;::::1;8650:173:::0;;:::o;9679:168::-;1675:10;1669:17;;;;:5;:17;;;;;;;;;;;:25;;;1661:49;;;;-1:-1:-1;;;1661:49:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;9765:20:2;::::1;;::::0;;;:10:::1;:20;::::0;;;;;:30;;-1:-1:-1;;9765:30:2::1;::::0;::::1;;::::0;;::::1;::::0;;;9811:28;;9765:30;;:20;9811:28:::1;::::0;::::1;9679:168:::0;;:::o;4094:1371::-;4169:10;4158:22;;;;:10;:22;;;;;;;;:30;;:22;:30;4150:49;;;;-1:-1:-1;;;4150:49:2;;13619:2:5;4150:49:2;;;13601:21:5;13658:1;13638:18;;;13631:29;-1:-1:-1;;;13676:18:5;;;13669:36;13722:18;;4150:49:2;13417:329:5;4150:49:2;4228:10;4218:21;;;;:9;:21;;;;;;;;:30;4210:65;;;;-1:-1:-1;;;4210:65:2;;;;;;;:::i;:::-;4294:22;;;;:13;:22;;;;;:29;;;;;:37;;:29;:37;4286:66;;;;-1:-1:-1;;;4286:66:2;;14304:2:5;4286:66:2;;;14286:21:5;14343:2;14323:18;;;14316:30;-1:-1:-1;;;14362:18:5;;;14355:46;14418:18;;4286:66:2;14102:340:5;4286:66:2;4417:10;4404:24;;;;:12;:24;;;;;;;;:33;;;;;;;;:40;4371:13;:22;;;;;;:30;;;:73;4363:113;;;;-1:-1:-1;;;4363:113:2;;14649:2:5;4363:113:2;;;14631:21:5;14688:2;14668:18;;;14661:30;14727:29;14707:18;;;14700:57;14774:18;;4363:113:2;14447:351:5;4363:113:2;4540:22;;;;:13;:22;;;;;;;;;:29;;;4502:11;;4495:41;;-1:-1:-1;;;4495:41:2;;4525:10;4495:41;;;4702:51:5;;;;4540:29:2;-1:-1:-1;;;;;4502:11:2;;4495:29;;4675:18:5;;4495:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:74;;4487:119;;;;-1:-1:-1;;;4487:119:2;;15240:2:5;4487:119:2;;;15222:21:5;;;15259:18;;;15252:30;15318:34;15298:18;;;15291:62;15370:18;;4487:119:2;15038:356:5;4487:119:2;4618:13;4633:17;4652;4678:16;;;;;;;;;-1:-1:-1;;;;;4678:16:2;-1:-1:-1;;;;;4678:32:2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4617:95;;;;;;;;;4723:13;4739:14;:26;4754:10;-1:-1:-1;;;;;4739:26:2;-1:-1:-1;;;;;4739:26:2;;;;;;;;;;;;:35;4766:7;4739:35;;;;;;;;;;;;4723:51;;4837:13;:22;4851:7;4837:22;;;;;;;;;;;:29;;;4785:14;:26;4800:10;-1:-1:-1;;;;;4785:26:2;-1:-1:-1;;;;;4785:26:2;;;;;;;;;;;;:35;4812:7;4785:35;;;;;;;;;;;:42;4821:5;4785:42;;;;;;;;;;;:49;;:81;;;;4934:15;4877:14;:26;4892:10;-1:-1:-1;;;;;4877:26:2;-1:-1:-1;;;;;4877:26:2;;;;;;;;;;;;:35;4904:7;4877:35;;;;;;;;;;;:42;4913:5;4877:42;;;;;;;;;;;:54;;:72;;;;5011:5;4960:14;:26;4975:10;-1:-1:-1;;;;;4960:26:2;-1:-1:-1;;;;;4960:26:2;;;;;;;;;;;;:35;4987:7;4960:35;;;;;;;;;;;:42;4996:5;4960:42;;;;;;;;;;;:48;;:56;;;;5082:9;5027:14;:26;5042:10;-1:-1:-1;;;;;5027:26:2;-1:-1:-1;;;;;5027:26:2;;;;;;;;;;;;:35;5054:7;5027:35;;;;;;;;;;;:42;5063:5;5027:42;;;;;;;;;;;:52;;:64;;;;5157:9;5102:14;:26;5117:10;-1:-1:-1;;;;;5102:26:2;-1:-1:-1;;;;;5102:26:2;;;;;;;;;;;;:35;5129:7;5102:35;;;;;;;;;;;:42;5138:5;5102:42;;;;;;;;;;;:52;;:64;;;;5177:12;:24;5190:10;-1:-1:-1;;;;;5177:24:2;-1:-1:-1;;;;;5177:24:2;;;;;;;;;;;;:33;5202:7;5177:33;;;;;;;;;;;5216:5;5177:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5233:14;:26;5248:10;-1:-1:-1;;;;;5233:26:2;-1:-1:-1;;;;;5233:26:2;;;;;;;;;;;;:35;5260:7;5233:35;;;;;;;;;;;;:37;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5288:11:2;;;5341:22;;;:13;:22;;;;;;;;:29;;;5281:90;;-1:-1:-1;;;5281:90:2;;5314:10;5281:90;;;16624:51:5;;;;5334:4:2;16691:18:5;;;16684:60;16760:18;;;16753:34;5281:90:2;-1:-1:-1;;;;;5288:11:2;;;;5281:32;;16597:18:5;;;;;5281:90:2;;;;;;;5288:11;5281:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5420:5;5408:10;-1:-1:-1;;;;;5387:70:2;5399:7;5387:70;5427:13;:22;5441:7;5427:22;;;;;;;;;;;:29;;;5387:70;;;;391:25:5;;379:2;364:18;;245:177;5387:70:2;;;;;;;;4139:1326;;;;4094:1371;:::o;11531:427::-;11624:7;11701:22;;;:13;:22;;;;;;;;:29;;;-1:-1:-1;;;;;11649:24:2;;;;:14;:24;;;;;:33;;;;;;;;:41;;;;;;;;:48;:81;11648:195;;;;-1:-1:-1;11811:22:2;;;;:13;:22;;;;;;;;:31;;;-1:-1:-1;;;;;11755:24:2;;;;:14;:24;;;;;:33;;;;;;;;:41;;;;;;;;;:53;;;:87;;11811:31;11755:87;:::i;:::-;11736:15;:106;;11648:195;11644:307;;;-1:-1:-1;11867:22:2;;;;:13;:22;;;;;;;;:31;;11860:38;;11644:307;-1:-1:-1;11938:1:2;11644:307;11531:427;;;;;:::o;14983:158::-;-1:-1:-1;;;;;15101:24:2;;15073:7;15101:24;;;:14;:24;;;;;;;;:31;;;;;;;;;14983:158;;;;;:::o;5923:1327::-;6016:10;6006:21;;;;:9;:21;;;;;;;;:30;5998:65;;;;-1:-1:-1;;;5998:65:2;;;;;;;:::i;:::-;6136:22;;;;:13;:22;;;;;;;;:29;;;6097:10;6082:26;;:14;:26;;;;;:35;;;;;;;;:43;;;;;;;;;:50;:83;6074:106;;;;-1:-1:-1;;;6074:106:2;;;;;;;:::i;:::-;6276:22;;;;:13;:22;;;;;;;;:35;;;6233:10;6218:26;;:14;:26;;;;;:35;;;;;;;;:43;;;;;;;;;:55;;;:93;;6276:35;6218:93;:::i;:::-;6199:15;:112;;6191:144;;;;-1:-1:-1;;;6191:144:2;;;;;;;:::i;:::-;6378:10;6346:14;6363:26;;;:14;:26;;;;;;;;:35;;;;;;;;:43;;;;;;;;:50;;6424:54;;;-1:-1:-1;6489:55:2;;:59;;;6559:49;;;:53;;;6623;;;:57;;;6691:53;;;;:57;;;6363:50;6759:358;6796:10;6783:24;;;;:12;:24;;;;;;;;:33;;;;;;;;:40;6779:44;;6759:358;;;6872:10;6859:24;;;;:12;:24;;;;;;;;:33;;;;;;;;:36;;6893:1;;6859:36;;;;;;:::i;:::-;;;;;;;;;6849:6;:46;6845:261;;6968:10;6955:24;;;;:12;:24;;;;;;;;:33;;;;;;;;6989:40;;:42;;7030:1;;6989:42;:::i;:::-;6955:77;;;;;;;;:::i;:::-;;;;;;;;;;;;;6929:10;6916:24;;:12;:24;;;;;;:33;;;;;;;;:36;;6950:1;;6916:36;;;;;;:::i;:::-;;;;;;;;;;;;:116;;;;7064:10;7051:24;;:12;:24;;;;;;:33;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6845:261;6825:3;;6759:358;;;-1:-1:-1;7134:11:2;;7127:48;;-1:-1:-1;;;7127:48:2;;-1:-1:-1;;;;;7134:11:2;;;;7127:28;;:48;;7156:10;;7168:6;;7127:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7227:6;7215:10;-1:-1:-1;;;;;7191:51:2;7206:7;7191:51;7235:6;7191:51;;;;391:25:5;;379:2;364:18;;245:177;7191:51:2;;;;;;;;5987:1263;5923:1327;;:::o;14764:163::-;-1:-1:-1;;;;;14889:22:2;;;;;;:12;:22;;;;;;;;:29;;;;;;;;;14881:38;;;;;;;;;;;;;;;;;14852:16;;14881:38;;;14889:29;14881:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14764:163;;;;:::o;953:49::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;953:49:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;953:49:2;;-1:-1:-1;953:49:2;;;;;:::o;7606:549::-;7724:18;;-1:-1:-1;;;;;7724:18:2;7710:10;:32;7702:56;;;;-1:-1:-1;;;7702:56:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;7769:24:2;;7820:1;7769:24;;;:14;:24;;;;;;;;:33;;;;;;;;:41;;;;;;;;;:52;;;7832:53;;;:57;;;7900:47;;;:51;;;7962;;;:55;;;8028:51;;:55;;;8099:48;7769:41;;:24;:33;;8099:48;;7820:1;8099:48;7606:549;;;:::o;10510:985::-;685:10:0;1385:7:4;:5;:7::i;:::-;-1:-1:-1;;;;;1385:23:4;;1377:68;;;;-1:-1:-1;;;1377:68:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;10656:19:2;::::1;;::::0;;;:9:::1;:19;::::0;;;;;::::1;;:27;;:19:::0;:27:::1;10648:66;;;::::0;-1:-1:-1;;;10648:66:2;;18743:2:5;10648:66:2::1;::::0;::::1;18725:21:5::0;18782:2;18762:18;;;18755:30;18821:28;18801:18;;;18794:56;18867:18;;10648:66:2::1;18541:350:5::0;10648:66:2::1;10785:22;::::0;;;:13:::1;:22;::::0;;;;;;;:29:::1;;::::0;-1:-1:-1;;;;;10733:24:2;::::1;::::0;;:14:::1;:24:::0;;;;;:33;;;;;;;;:41;;;;;;;;;:48;:81:::1;10725:104;;;;-1:-1:-1::0;;;10725:104:2::1;;;;;;;:::i;:::-;10923:11;::::0;-1:-1:-1;;;;;10867:24:2;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;:33;;;;;;;;:41;;;;;;;;:53:::1;;::::0;:67:::1;::::0;10923:11;10867:67:::1;:::i;:::-;10848:15;:86;;10840:118;;;;-1:-1:-1::0;;;10840:118:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10986:24:2;;::::1;10969:14;10986:24:::0;;;:14:::1;:24;::::0;;;;;;;:33;;;;;;;;:41;;;;;;;;;:48;;11045:52;;;-1:-1:-1;11108:53:2;::::1;:57:::0;;;11176:47:::1;::::0;::::1;:51:::0;;;11238::::1;::::0;::::1;:55:::0;;;11304:51:::1;::::0;;::::1;:55:::0;;;;11377:11:::1;::::0;11370:47;;-1:-1:-1;;;11370:47:2;;10986:48;;11377:11;;;::::1;::::0;11370:28:::1;::::0;:47:::1;::::0;11399:9;;10986:48;;11370:47:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11472:6;11462:8;-1:-1:-1::0;;;;;11433:54:2::1;11453:7;11433:54;11480:6;11433:54;;;;391:25:5::0;;379:2;364:18;;245:177;1816:148:4;685:10:0;1385:7:4;:5;:7::i;:::-;-1:-1:-1;;;;;1385:23:4;;1377:68;;;;-1:-1:-1;;;1377:68:4;;;;;;;:::i;:::-;1923:1:::1;1907:6:::0;;1886:40:::1;::::0;-1:-1:-1;;;;;1907:6:4;;::::1;::::0;1886:40:::1;::::0;1923:1;;1886:40:::1;1954:1;1937:19:::0;;-1:-1:-1;;;;;;1937:19:4::1;::::0;;1816:148::o;9233:144:2:-;1675:10;1669:17;;;;:5;:17;;;;;;;;;;;:25;;;1661:49;;;;-1:-1:-1;;;1661:49:2;;;;;;;:::i;:::-;9320:11:::1;::::0;9341:18:::1;::::0;9313:56:::1;::::0;-1:-1:-1;;;9313:56:2;;-1:-1:-1;;;;;9320:11:2;;::::1;::::0;9313:27:::1;::::0;:56:::1;::::0;9341:18;::::1;::::0;9361:7;;9313:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9233:144:::0;:::o;1137:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1165:87:4:-;1211:7;1238:6;-1:-1:-1;;;;;1238:6:4;;1165:87::o;9937:142:2:-;1675:10;1669:17;;;;:5;:17;;;;;;;;;;;:25;;;1661:49;;;;-1:-1:-1;;;1661:49:2;;;;;;;:::i;:::-;10024:11:::1;:18:::0;;;;10053:11:::1;:18:::0;9937:142::o;7297:233::-;1675:10;1669:17;;;;:5;:17;;;;;;;;;;;:25;;;1661:49;;;;-1:-1:-1;;;1661:49:2;;;;;;;:::i;:::-;7397:22:::1;::::0;;;:13:::1;:22;::::0;;;;;:30:::1;::::0;::::1;:41:::0;;;7449:29:::1;;:38:::0;;-1:-1:-1;;7449:38:2::1;::::0;::::1;;;::::0;;7503:19;7397:22;;7503:19:::1;::::0;::::1;7297:233:::0;;;:::o;8205:157::-;685:10:0;1385:7:4;:5;:7::i;:::-;-1:-1:-1;;;;;1385:23:4;;1377:68;;;;-1:-1:-1;;;1377:68:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;8283:15:2;::::1;;::::0;;;:5:::1;:15;::::0;;;;;:25;;-1:-1:-1;;8283:25:2::1;::::0;::::1;;::::0;;::::1;::::0;;;8324:30;;8283:25;;:15;8324:30:::1;::::0;::::1;8205:157:::0;;:::o;3190:860::-;1675:10;1669:17;;;;:5;:17;;;;;;;;;;;:25;;;1661:49;;;;-1:-1:-1;;;1661:49:2;;;;;;;:::i;:::-;3381:1:::1;3369:9;:13;:28;;;;;3396:1;3386:7;:11;3369:28;3361:45;;;::::0;-1:-1:-1;;;3361:45:2;;19098:2:5;3361:45:2::1;::::0;::::1;19080:21:5::0;19137:1;19117:18;;;19110:29;-1:-1:-1;;;19155:18:5;;;19148:33;19198:18;;3361:45:2::1;18896:326:5::0;3361:45:2::1;3438:11;;3425:9;:24;;:52;;;;;3466:11;;3453:9;:24;;3425:52;3417:80;;;::::0;-1:-1:-1;;;3417:80:2;;19429:2:5;3417:80:2::1;::::0;::::1;19411:21:5::0;19468:2;19448:18;;;19441:30;-1:-1:-1;;;19487:18:5;;;19480:45;19542:18;;3417:80:2::1;19227:339:5::0;3417:80:2::1;3525:15;::::0;3508:14:::1;3551:21:::0;;;:13:::1;:21;::::0;;;;:37;;;3599:30:::1;;:42;3632:9:::0;3599:30;:42:::1;:::i;:::-;-1:-1:-1::0;3652:21:2::1;::::0;;;:13:::1;:21;::::0;;;;;;;:30:::1;::::0;::::1;:42:::0;;;3705:28:::1;::::0;::::1;:38:::0;;;3754:30;;::::1;:42:::0;;;3807:34:::1;::::0;::::1;:50:::0;;;3868:29:::1;::::0;::::1;:40:::0;;;3919:28:::1;::::0;;::::1;:35:::0;;-1:-1:-1;;3919:35:2::1;3950:4;3919:35;::::0;;3970:24;3666:6;;3970:24:::1;::::0;::::1;4023:15;::::0;:19:::1;::::0;4041:1:::1;4023:19;:::i;:::-;4005:15;:37:::0;-1:-1:-1;;;;;;;3190:860:2:o;8878:114::-;685:10:0;1385:7:4;:5;:7::i;:::-;-1:-1:-1;;;;;1385:23:4;;1377:68;;;;-1:-1:-1;;;1377:68:4;;;;;;;:::i;:::-;8955:18:2::1;:29:::0;;-1:-1:-1;;;;;;8955:29:2::1;-1:-1:-1::0;;;;;8955:29:2;;;::::1;::::0;;;::::1;::::0;;8878:114::o;8416:169::-;685:10:0;1385:7:4;:5;:7::i;:::-;-1:-1:-1;;;;;1385:23:4;;1377:68;;;;-1:-1:-1;;;1377:68:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;8498:19:2;::::1;;::::0;;;:9:::1;:19;::::0;;;;;:29;;-1:-1:-1;;8498:29:2::1;::::0;::::1;;::::0;;::::1;::::0;;;8543:34;;8498:29;;:19;8543:34:::1;::::0;::::1;8416:169:::0;;:::o;5514:353::-;5640:9;:16;5621:8;:15;:35;5613:62;;;;-1:-1:-1;;;5613:62:2;;21897:2:5;5613:62:2;;;21879:21:5;21936:2;21916:18;;;21909:30;-1:-1:-1;;;21955:18:5;;;21948:43;22008:18;;5613:62:2;21695:337:5;5613:62:2;5691:9;5686:174;5710:8;:15;5706:1;:19;5686:174;;;5752:9;5747:102;5771:9;5781:1;5771:12;;;;;;;;:::i;:::-;;;;;;;5767:1;:16;5747:102;;;5809:24;5821:8;5830:1;5821:11;;;;;;;;:::i;:::-;;;;;;;5809;:24::i;:::-;5785:3;;5747:102;;;-1:-1:-1;5727:3:2;;5686:174;;;;5514:353;;:::o;2119:244:4:-;685:10:0;1385:7:4;:5;:7::i;:::-;-1:-1:-1;;;;;1385:23:4;;1377:68;;;;-1:-1:-1;;;1377:68:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;2208:22:4;::::1;2200:73;;;::::0;-1:-1:-1;;;2200:73:4;;22239:2:5;2200:73:4::1;::::0;::::1;22221:21:5::0;22278:2;22258:18;;;22251:30;22317:34;22297:18;;;22290:62;-1:-1:-1;;;22368:18:5;;;22361:36;22414:19;;2200:73:4::1;22037:402:5::0;2200:73:4::1;2310:6;::::0;;2289:38:::1;::::0;-1:-1:-1;;;;;2289:38:4;;::::1;::::0;2310:6;::::1;::::0;2289:38:::1;::::0;::::1;2338:6;:17:::0;;-1:-1:-1;;;;;;2338:17:4::1;-1:-1:-1::0;;;;;2338:17:4;;;::::1;::::0;;;::::1;::::0;;2119:244::o;10150:279:2:-;1675:10;1669:17;;;;:5;:17;;;;;;;;;;;:25;;;1661:49;;;;-1:-1:-1;;;1661:49:2;;;;;;;:::i;:::-;10264:9:::1;10259:163;10283:8;:15;10279:1;:19;10259:163;;;10346:7;10354:1;10346:10;;;;;;;;:::i;:::-;;;;;;;10320;:23;10331:8;10340:1;10331:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;10320:23:2::1;-1:-1:-1::0;;;;;10320:23:2::1;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;10399:7;10407:1;10399:10;;;;;;;;:::i;:::-;;;;;;;10376:34;;10386:8;10395:1;10386:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;10376:34:2::1;;;;;;;;;;;10300:3;;10259:163;;14:226:5::0;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:5;;14:226;-1:-1:-1;14:226:5:o;427:173::-;495:20;;-1:-1:-1;;;;;544:31:5;;534:42;;524:70;;590:1;587;580:12;524:70;427:173;;;:::o;605:186::-;664:6;717:2;705:9;696:7;692:23;688:32;685:52;;;733:1;730;723:12;685:52;756:29;775:9;756:29;:::i;796:289::-;838:3;876:5;870:12;903:6;898:3;891:19;959:6;952:4;945:5;941:16;934:4;929:3;925:14;919:47;1011:1;1004:4;995:6;990:3;986:16;982:27;975:38;1074:4;1067:2;1063:7;1058:2;1050:6;1046:15;1042:29;1037:3;1033:39;1029:50;1022:57;;;796:289;;;;:::o;1090:661::-;1401:3;1390:9;1383:22;1364:4;1422:46;1463:3;1452:9;1448:19;1440:6;1422:46;:::i;:::-;1499:2;1484:18;;1477:34;;;;-1:-1:-1;1542:2:5;1527:18;;1520:34;;;;1585:2;1570:18;;1563:34;;;;1628:3;1613:19;;1606:35;;;;1672:3;1657:19;;1650:35;1729:14;1722:22;1716:3;1701:19;;;1694:51;1414:54;1090:661;-1:-1:-1;1090:661:5:o;1756:118::-;1842:5;1835:13;1828:21;1821:5;1818:32;1808:60;;1864:1;1861;1854:12;1808:60;1756:118;:::o;1879:315::-;1944:6;1952;2005:2;1993:9;1984:7;1980:23;1976:32;1973:52;;;2021:1;2018;2011:12;1973:52;2044:29;2063:9;2044:29;:::i;:::-;2034:39;;2123:2;2112:9;2108:18;2095:32;2136:28;2158:5;2136:28;:::i;:::-;2183:5;2173:15;;;1879:315;;;;;:::o;2391:420::-;2468:6;2476;2484;2537:2;2525:9;2516:7;2512:23;2508:32;2505:52;;;2553:1;2550;2543:12;2505:52;2598:23;;;-1:-1:-1;2664:38:5;2698:2;2683:18;;2664:38;:::i;:::-;2391:420;;2654:48;;-1:-1:-1;;;2775:2:5;2760:18;;;;2747:32;;2391:420::o;2816:300::-;2884:6;2892;2945:2;2933:9;2924:7;2920:23;2916:32;2913:52;;;2961:1;2958;2951:12;2913:52;2984:29;3003:9;2984:29;:::i;:::-;2974:39;3082:2;3067:18;;;;3054:32;;-1:-1:-1;;;2816:300:5:o;3589:346::-;3657:6;3665;3718:2;3706:9;3697:7;3693:23;3689:32;3686:52;;;3734:1;3731;3724:12;3686:52;-1:-1:-1;;3779:23:5;;;3899:2;3884:18;;;3871:32;;-1:-1:-1;3589:346:5:o;3940:611::-;4130:2;4142:21;;;4212:13;;4115:18;;;4234:22;;;4082:4;;4313:15;;;4287:2;4272:18;;;4082:4;4356:169;4370:6;4367:1;4364:13;4356:169;;;4431:13;;4419:26;;4474:2;4500:15;;;;4465:12;;;;4392:1;4385:9;4356:169;;;-1:-1:-1;4542:3:5;;3940:611;-1:-1:-1;;;;;3940:611:5:o;4764:733::-;5103:6;5092:9;5085:25;5146:3;5141:2;5130:9;5126:18;5119:31;5066:4;5167:46;5208:3;5197:9;5193:19;5185:6;5167:46;:::i;:::-;5244:2;5229:18;;5222:34;;;;-1:-1:-1;5287:2:5;5272:18;;5265:34;;;;5330:3;5315:19;;5308:35;;;;5374:3;5359:19;;5352:35;;;;5418:3;5403:19;;5396:35;5475:14;5468:22;5462:3;5447:19;;;5440:51;5159:54;4764:733;-1:-1:-1;;4764:733:5:o;5502:420::-;5579:6;5587;5595;5648:2;5636:9;5627:7;5623:23;5619:32;5616:52;;;5664:1;5661;5654:12;5616:52;5687:29;5706:9;5687:29;:::i;:::-;5677:39;5785:2;5770:18;;5757:32;;-1:-1:-1;5886:2:5;5871:18;;;5858:32;;5502:420;-1:-1:-1;;;5502:420:5:o;5927:495::-;6013:6;6021;6029;6037;6090:3;6078:9;6069:7;6065:23;6061:33;6058:53;;;6107:1;6104;6097:12;6058:53;6130:29;6149:9;6130:29;:::i;:::-;6120:39;;6178:38;6212:2;6201:9;6197:18;6178:38;:::i;:::-;5927:495;;6168:48;;-1:-1:-1;;;;6285:2:5;6270:18;;6257:32;;6386:2;6371:18;6358:32;;5927:495::o;6427:481::-;6501:6;6509;6517;6570:2;6558:9;6549:7;6545:23;6541:32;6538:52;;;6586:1;6583;6576:12;6538:52;6631:23;;;-1:-1:-1;6751:2:5;6736:18;;6723:32;;-1:-1:-1;6833:2:5;6818:18;;6805:32;6846:30;6805:32;6846:30;:::i;:::-;6895:7;6885:17;;;6427:481;;;;;:::o;6913:127::-;6974:10;6969:3;6965:20;6962:1;6955:31;7005:4;7002:1;6995:15;7029:4;7026:1;7019:15;7045:275;7116:2;7110:9;7181:2;7162:13;;-1:-1:-1;;7158:27:5;7146:40;;-1:-1:-1;;;;;7201:34:5;;7237:22;;;7198:62;7195:88;;;7263:18;;:::i;:::-;7299:2;7292:22;7045:275;;-1:-1:-1;7045:275:5:o;7325:1375::-;7439:6;7447;7455;7463;7471;7479;7532:3;7520:9;7511:7;7507:23;7503:33;7500:53;;;7549:1;7546;7539:12;7500:53;7589:9;7576:23;-1:-1:-1;;;;;7614:6:5;7611:30;7608:50;;;7654:1;7651;7644:12;7608:50;7677:22;;7730:4;7722:13;;7718:27;-1:-1:-1;7708:55:5;;7759:1;7756;7749:12;7708:55;7799:2;7786:16;-1:-1:-1;;;;;7817:6:5;7814:30;7811:56;;;7847:18;;:::i;:::-;7889:59;7936:2;7913:17;;-1:-1:-1;;7909:31:5;7942:4;7905:42;7889:59;:::i;:::-;7971:6;7964:5;7957:21;8021:7;8014:4;8005:6;8001:2;7997:15;7993:26;7990:39;7987:59;;;8042:1;8039;8032:12;7987:59;8101:6;8094:4;8090:2;8086:13;8079:4;8072:5;8068:16;8055:53;8155:1;8148:4;8128:18;;;8124:29;;8117:40;8128:18;8235:20;;;8222:34;;-1:-1:-1;8353:2:5;8338:18;;8325:32;;8456:2;8441:18;;8428:32;;-1:-1:-1;8559:3:5;8544:19;;8531:33;;-1:-1:-1;8663:3:5;8648:19;8635:33;;-1:-1:-1;8132:5:5;-1:-1:-1;;;;7325:1375:5:o;8932:183::-;8992:4;-1:-1:-1;;;;;9017:6:5;9014:30;9011:56;;;9047:18;;:::i;:::-;-1:-1:-1;9092:1:5;9088:14;9104:4;9084:25;;8932:183::o;9120:723::-;9174:5;9227:3;9220:4;9212:6;9208:17;9204:27;9194:55;;9245:1;9242;9235:12;9194:55;9285:6;9272:20;9312:64;9328:47;9368:6;9328:47;:::i;:::-;9312:64;:::i;:::-;9400:3;9424:6;9419:3;9412:19;9456:4;9451:3;9447:14;9440:21;;9517:4;9507:6;9504:1;9500:14;9492:6;9488:27;9484:38;9470:52;;9545:3;9537:6;9534:15;9531:35;;;9562:1;9559;9552:12;9531:35;9598:4;9590:6;9586:17;9612:200;9628:6;9623:3;9620:15;9612:200;;;9720:17;;9750:18;;9797:4;9788:14;;;;9645;9612:200;;;-1:-1:-1;9830:7:5;9120:723;-1:-1:-1;;;;;9120:723:5:o;9848:590::-;9966:6;9974;10027:2;10015:9;10006:7;10002:23;9998:32;9995:52;;;10043:1;10040;10033:12;9995:52;10083:9;10070:23;-1:-1:-1;;;;;10108:6:5;10105:30;10102:50;;;10148:1;10145;10138:12;10102:50;10171:61;10224:7;10215:6;10204:9;10200:22;10171:61;:::i;:::-;10161:71;;;10285:2;10274:9;10270:18;10257:32;-1:-1:-1;;;;;10304:8:5;10301:32;10298:52;;;10346:1;10343;10336:12;10298:52;10369:63;10424:7;10413:8;10402:9;10398:24;10369:63;:::i;:::-;10359:73;;;9848:590;;;;;:::o;10443:738::-;10494:5;10547:3;10540:4;10532:6;10528:17;10524:27;10514:55;;10565:1;10562;10555:12;10514:55;10605:6;10592:20;10632:64;10648:47;10688:6;10648:47;:::i;10632:64::-;10720:3;10744:6;10739:3;10732:19;10776:4;10771:3;10767:14;10760:21;;10837:4;10827:6;10824:1;10820:14;10812:6;10808:27;10804:38;10790:52;;10865:3;10857:6;10854:15;10851:35;;;10882:1;10879;10872:12;10851:35;10918:4;10910:6;10906:17;10932:218;10948:6;10943:3;10940:15;10932:218;;;11030:3;11017:17;11047:28;11069:5;11047:28;:::i;:::-;11088:18;;11135:4;11126:14;;;;10965;10932:218;;11186:1140;11301:6;11309;11362:2;11350:9;11341:7;11337:23;11333:32;11330:52;;;11378:1;11375;11368:12;11330:52;11418:9;11405:23;-1:-1:-1;;;;;11443:6:5;11440:30;11437:50;;;11483:1;11480;11473:12;11437:50;11506:22;;11559:4;11551:13;;11547:27;-1:-1:-1;11537:55:5;;11588:1;11585;11578:12;11537:55;11628:2;11615:16;11651:64;11667:47;11707:6;11667:47;:::i;11651:64::-;11737:3;11761:6;11756:3;11749:19;11793:4;11788:3;11784:14;11777:21;;11850:4;11840:6;11837:1;11833:14;11829:2;11825:23;11821:34;11807:48;;11878:7;11870:6;11867:19;11864:39;;;11899:1;11896;11889:12;11864:39;11931:4;11927:2;11923:13;11912:24;;11945:152;11961:6;11956:3;11953:15;11945:152;;;12029:23;12048:3;12029:23;:::i;:::-;12017:36;;12082:4;11978:14;;;;12073;;;;11945:152;;;12116:5;-1:-1:-1;;;;12174:4:5;12159:20;;12146:34;-1:-1:-1;;;;;12192:32:5;;12189:52;;;12237:1;12234;12227:12;12189:52;12260:60;12312:7;12301:8;12290:9;12286:24;12260:60;:::i;12331:335::-;12533:2;12515:21;;;12572:2;12552:18;;;12545:30;-1:-1:-1;;;12606:2:5;12591:18;;12584:41;12657:2;12642:18;;12331:335::o;12671:356::-;12873:2;12855:21;;;12892:18;;;12885:30;12951:34;12946:2;12931:18;;12924:62;13018:2;13003:18;;12671:356::o;13032:380::-;13111:1;13107:12;;;;13154;;;13175:61;;13229:4;13221:6;13217:17;13207:27;;13175:61;13282:2;13274:6;13271:14;13251:18;13248:38;13245:161;;13328:10;13323:3;13319:20;13316:1;13309:31;13363:4;13360:1;13353:15;13391:4;13388:1;13381:15;13245:161;;13032:380;;;:::o;13751:346::-;13953:2;13935:21;;;13992:2;13972:18;;;13965:30;-1:-1:-1;;;14026:2:5;14011:18;;14004:52;14088:2;14073:18;;13751:346::o;14803:230::-;14873:6;14926:2;14914:9;14905:7;14901:23;14897:32;14894:52;;;14942:1;14939;14932:12;14894:52;-1:-1:-1;14987:16:5;;14803:230;-1:-1:-1;14803:230:5:o;15399:746::-;15514:6;15522;15530;15538;15546;15554;15607:3;15595:9;15586:7;15582:23;15578:33;15575:53;;;15624:1;15621;15614:12;15575:53;-1:-1:-1;;15669:16:5;;15775:2;15760:18;;15754:25;15871:2;15856:18;;15850:25;15967:2;15952:18;;15946:25;16037:3;16022:19;;16016:26;16108:3;16093:19;;;16087:26;15669:16;;15754:25;;-1:-1:-1;15850:25:5;;15946;;-1:-1:-1;16016:26:5;-1:-1:-1;16087:26:5;;-1:-1:-1;15399:746:5;-1:-1:-1;15399:746:5:o;16150:127::-;16211:10;16206:3;16202:20;16199:1;16192:31;16242:4;16239:1;16232:15;16266:4;16263:1;16256:15;16282:135;16321:3;16342:17;;;16339:43;;16362:18;;:::i;:::-;-1:-1:-1;16409:1:5;16398:13;;16282:135::o;16798:245::-;16865:6;16918:2;16906:9;16897:7;16893:23;16889:32;16886:52;;;16934:1;16931;16924:12;16886:52;16966:9;16960:16;16985:28;17007:5;16985:28;:::i;17048:125::-;17113:9;;;17134:10;;;17131:36;;;17147:18;;:::i;17178:334::-;17380:2;17362:21;;;17419:2;17399:18;;;17392:30;-1:-1:-1;;;17453:2:5;17438:18;;17431:40;17503:2;17488:18;;17178:334::o;17517:343::-;17719:2;17701:21;;;17758:2;17738:18;;;17731:30;-1:-1:-1;;;17792:2:5;17777:18;;17770:49;17851:2;17836:18;;17517:343::o;17865:127::-;17926:10;17921:3;17917:20;17914:1;17907:31;17957:4;17954:1;17947:15;17981:4;17978:1;17971:15;17997:128;18064:9;;;18085:11;;;18082:37;;;18099:18;;:::i;18130:127::-;18191:10;18186:3;18182:20;18179:1;18172:31;18222:4;18219:1;18212:15;18246:4;18243:1;18236:15;18262:274;-1:-1:-1;;;;;18454:32:5;;;;18436:51;;18518:2;18503:18;;18496:34;18424:2;18409:18;;18262:274::o;19697:518::-;19799:2;19794:3;19791:11;19788:421;;;19835:5;19832:1;19825:16;19879:4;19876:1;19866:18;19949:2;19937:10;19933:19;19930:1;19926:27;19920:4;19916:38;19985:4;19973:10;19970:20;19967:47;;;-1:-1:-1;20008:4:5;19967:47;20063:2;20058:3;20054:12;20051:1;20047:20;20041:4;20037:31;20027:41;;20118:81;20136:2;20129:5;20126:13;20118:81;;;20195:1;20181:16;;20162:1;20151:13;20118:81;;;20122:3;;19697:518;;;:::o;20391:1299::-;20517:3;20511:10;-1:-1:-1;;;;;20536:6:5;20533:30;20530:56;;;20566:18;;:::i;:::-;20595:97;20685:6;20645:38;20677:4;20671:11;20645:38;:::i;:::-;20639:4;20595:97;:::i;:::-;20741:4;20772:2;20761:14;;20789:1;20784:649;;;;21477:1;21494:6;21491:89;;;-1:-1:-1;21546:19:5;;;21540:26;21491:89;-1:-1:-1;;20348:1:5;20344:11;;;20340:24;20336:29;20326:40;20372:1;20368:11;;;20323:57;21593:81;;20754:930;;20784:649;19644:1;19637:14;;;19681:4;19668:18;;-1:-1:-1;;20820:20:5;;;20938:222;20952:7;20949:1;20946:14;20938:222;;;21034:19;;;21028:26;21013:42;;21141:4;21126:20;;;;21094:1;21082:14;;;;20968:12;20938:222;;;20942:3;21188:6;21179:7;21176:19;21173:201;;;21249:19;;;21243:26;-1:-1:-1;;21332:1:5;21328:14;;;21344:3;21324:24;21320:37;21316:42;21301:58;21286:74;;21173:201;-1:-1:-1;;;;21420:1:5;21404:14;;;21400:22;21387:36;;-1:-1:-1;20391:1299:5:o
Swarm Source
ipfs://20833207ce8934b0710b7f65ed5e92a9f205ccd5b60becb667160bf7bdb6fd33
Loading...
Loading
Loading...
Loading
[ 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.