Overview
ETH Balance
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Initialize | 25402425 | 1173 days ago | IN | 0 ETH | 0.00003677 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 72077038 | 990 days ago | 0 ETH | ||||
| 72074455 | 990 days ago | 0 ETH | ||||
| 72070923 | 990 days ago | 0 ETH | ||||
| 72064243 | 990 days ago | 0 ETH | ||||
| 72060636 | 990 days ago | 0 ETH | ||||
| 72048845 | 990 days ago | 0 ETH | ||||
| 72048595 | 990 days ago | 0 ETH | ||||
| 72046373 | 990 days ago | 0 ETH | ||||
| 72045481 | 990 days ago | 0 ETH | ||||
| 72036478 | 990 days ago | 0 ETH | ||||
| 72025053 | 990 days ago | 0 ETH | ||||
| 72024209 | 990 days ago | 0 ETH | ||||
| 72023778 | 990 days ago | 0 ETH | ||||
| 72016860 | 991 days ago | 0 ETH | ||||
| 72011630 | 991 days ago | 0 ETH | ||||
| 72009892 | 991 days ago | 0 ETH | ||||
| 72009892 | 991 days ago | 0 ETH | ||||
| 72009892 | 991 days ago | 0 ETH | ||||
| 72009736 | 991 days ago | 0 ETH | ||||
| 71922369 | 991 days ago | 0 ETH | ||||
| 71922369 | 991 days ago | 0 ETH | ||||
| 71922369 | 991 days ago | 0 ETH | ||||
| 71922323 | 991 days ago | 0 ETH | ||||
| 71899487 | 991 days ago | 0 ETH | ||||
| 71894923 | 991 days ago | 0 ETH |
Cross-Chain Transactions
Contract Source Code (Solidity)
/**
*Submitted for verification at Arbiscan.io on 2022-09-20
*/
// File: @openzeppelin/upgrades/contracts/Initializable.sol
pragma solidity >=0.4.24 <0.6.0;
/**
* @title Initializable
*
* @dev Helper contract to support initializer functions. To use it, replace
* the constructor with a function that has the `initializer` modifier.
* WARNING: Unlike constructors, initializer functions must be manually
* invoked. This applies both to deploying an Initializable contract, as well
* as extending an Initializable contract via inheritance.
* WARNING: When used with inheritance, manual care must be taken to not invoke
* a parent initializer twice, or ensure that all initializers are idempotent,
* because this is not dealt with automatically as with constructors.
*/
contract Initializable {
/**
* @dev Indicates that the contract has been initialized.
*/
bool private initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool private initializing;
/**
* @dev Modifier to use in the initializer function of a contract.
*/
modifier initializer() {
require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");
bool isTopLevelCall = !initializing;
if (isTopLevelCall) {
initializing = true;
initialized = true;
}
_;
if (isTopLevelCall) {
initializing = false;
}
}
/// @dev Returns true if and only if the function is running in the constructor
function isConstructor() private view returns (bool) {
// extcodesize checks the size of the code stored in an address, and
// address returns the current address. Since the code is still not
// deployed when running a constructor, any checks on its code size will
// yield zero, making it an effective way to detect if a contract is
// under construction or not.
uint256 cs;
assembly { cs := extcodesize(address) }
return cs == 0;
}
// Reserved storage space to allow for layout changes in the future.
uint256[50] private ______gap;
}
// File: contracts/Roles/Common.sol
pragma solidity 0.5.13;
contract Common {
modifier isNotZeroAddress(address _account) {
require(_account != address(0), "this account is the zero address");
_;
}
modifier isNaturalNumber(uint256 _amount) {
require(0 < _amount, "this amount is not a natural number");
_;
}
}
// File: contracts/Roles/Pauser.sol
pragma solidity 0.5.13;
contract Pauser is Common {
address public pauser = address(0);
bool public paused = false;
event Pause(bool status, address indexed sender);
modifier onlyPauser() {
require(msg.sender == pauser, "the sender is not the pauser");
_;
}
modifier whenNotPaused() {
require(!paused, "this is a paused contract");
_;
}
modifier whenPaused() {
require(paused, "this is not a paused contract");
_;
}
function pause() public onlyPauser whenNotPaused {
paused = true;
emit Pause(paused, msg.sender);
}
function unpause() public onlyPauser whenPaused {
paused = false;
emit Pause(paused, msg.sender);
}
}
// File: contracts/Roles/Prohibiter.sol
pragma solidity 0.5.13;
contract Prohibiter is Pauser {
address public prohibiter = address(0);
mapping(address => bool) public prohibiteds;
event Prohibition(address indexed prohibited, bool status, address indexed sender);
modifier onlyProhibiter() {
require(msg.sender == prohibiter, "the sender is not the prohibiter");
_;
}
modifier onlyNotProhibited(address _account) {
require(!prohibiteds[_account], "this account is prohibited");
_;
}
modifier onlyProhibited(address _account) {
require(prohibiteds[_account], "this account is not prohibited");
_;
}
function prohibit(address _account) public onlyProhibiter whenNotPaused isNotZeroAddress(_account) onlyNotProhibited(_account) {
prohibiteds[_account] = true;
emit Prohibition(_account, prohibiteds[_account], msg.sender);
}
function unprohibit(address _account) public onlyProhibiter whenNotPaused isNotZeroAddress(_account) onlyProhibited(_account) {
prohibiteds[_account] = false;
emit Prohibition(_account, prohibiteds[_account], msg.sender);
}
}
// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.5.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see `ERC20Detailed`.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through `transferFrom`. This is
* zero by default.
*
* This value changes when `approve` or `transferFrom` are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* > Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an `Approval` event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to `approve`. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: openzeppelin-solidity/contracts/math/SafeMath.sol
pragma solidity ^0.5.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, "SafeMath: division by zero");
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, "SafeMath: modulo by zero");
return a % b;
}
}
// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol
pragma solidity ^0.5.0;
/**
* @dev Implementation of the `IERC20` interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using `_mint`.
* For a generic mechanism see `ERC20Mintable`.
*
* *For a detailed writeup see our guide [How to implement supply
* mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an `Approval` event is emitted on calls to `transferFrom`.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
* functions have been added to mitigate the well-known issues around setting
* allowances. See `IERC20.approve`.
*/
contract ERC20 is IERC20 {
using SafeMath for uint256;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
/**
* @dev See `IERC20.totalSupply`.
*/
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
/**
* @dev See `IERC20.balanceOf`.
*/
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
/**
* @dev See `IERC20.transfer`.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
/**
* @dev See `IERC20.allowance`.
*/
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See `IERC20.approve`.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public returns (bool) {
_approve(msg.sender, spender, value);
return true;
}
/**
* @dev See `IERC20.transferFrom`.
*
* Emits an `Approval` event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of `ERC20`;
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `value`.
* - the caller must have allowance for `sender`'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to `approve` that can be used as a mitigation for
* problems described in `IERC20.approve`.
*
* Emits an `Approval` event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to `approve` that can be used as a mitigation for
* problems described in `IERC20.approve`.
*
* Emits an `Approval` event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to `transfer`, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a `Transfer` event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_balances[sender] = _balances[sender].sub(amount);
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a `Transfer` event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destoys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a `Transfer` event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 value) internal {
require(account != address(0), "ERC20: burn from the zero address");
_totalSupply = _totalSupply.sub(value);
_balances[account] = _balances[account].sub(value);
emit Transfer(account, address(0), value);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
*
* This is internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an `Approval` event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 value) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = value;
emit Approval(owner, spender, value);
}
/**
* @dev Destoys `amount` tokens from `account`.`amount` is then deducted
* from the caller's allowance.
*
* See `_burn` and `_approve`.
*/
function _burnFrom(address account, uint256 amount) internal {
_burn(account, amount);
_approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));
}
}
// File: contracts/Roles/Wiper.sol
pragma solidity 0.5.13;
contract Wiper is Prohibiter, ERC20 {
address public wiper = address(0);
event Wipe(address indexed addr, uint256 amount);
modifier onlyWiper() {
require(msg.sender == wiper, "the sender is not the wiper");
_;
}
function wipe(address _account) public whenNotPaused onlyWiper onlyProhibited(_account) {
uint256 _balance = balanceOf(_account);
_burn(_account, _balance);
emit Wipe(_account, _balance);
}
}
// File: openzeppelin-solidity/contracts/utils/Address.sol
pragma solidity ^0.5.0;
/**
* @dev Collection of functions related to the address type,
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* This test is non-exhaustive, and there may be false-negatives: during the
* execution of a contract's constructor, its address will be reported as
* not containing a contract.
*
* > It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*/
function isContract(address account) internal view returns (bool) {
// This method relies in extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
}
// File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol
pragma solidity ^0.5.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: contracts/Roles/Rescuer.sol
pragma solidity 0.5.13;
contract Rescuer is Pauser {
using SafeERC20 for IERC20;
address public rescuer = address(0);
event Rescue(IERC20 indexed tokenAddr, address indexed toAddr, uint256 amount);
modifier onlyRescuer() {
require(msg.sender == rescuer, "the sender is not the rescuer");
_;
}
function rescue(IERC20 _tokenContract, address _to, uint256 _amount) public whenNotPaused onlyRescuer {
_tokenContract.safeTransfer(_to, _amount);
emit Rescue(_tokenContract, _to, _amount);
}
}
// File: contracts/Roles/Admin.sol
pragma solidity 0.5.13;
contract Admin is Rescuer, Wiper {
address public admin = address(0);
event PauserChanged(address indexed oldPauser, address indexed newPauser, address indexed sender);
event ProhibiterChanged(address indexed oldProhibiter, address indexed newProhibiter, address indexed sender);
event WiperChanged(address indexed oldWiper, address indexed newWiper, address indexed sender);
event RescuerChanged(address indexed oldRescuer, address indexed newRescuer, address indexed sender);
modifier onlyAdmin() {
require(msg.sender == admin, "the sender is not the admin");
_;
}
/**
* Change Pauser
* @dev "whenNotPaused" modifier should not be used here
*/
function changePauser(address _account) public onlyAdmin isNotZeroAddress(_account) {
address old = pauser;
pauser = _account;
emit PauserChanged(old, pauser, msg.sender);
}
function changeProhibiter(address _account) public onlyAdmin whenNotPaused isNotZeroAddress(_account) {
address old = prohibiter;
prohibiter = _account;
emit ProhibiterChanged(old, prohibiter, msg.sender);
}
function changeWiper(address _account) public onlyAdmin whenNotPaused isNotZeroAddress(_account) {
address old = wiper;
wiper = _account;
emit WiperChanged(old, wiper, msg.sender);
}
function changeRescuer(address _account) public onlyAdmin whenNotPaused isNotZeroAddress(_account) {
address old = rescuer;
rescuer = _account;
emit RescuerChanged(old, rescuer, msg.sender);
}
}
// File: contracts/Roles/Owner.sol
pragma solidity 0.5.13;
contract Owner is Admin {
address public owner = address(0);
event OwnerChanged(address indexed oldOwner, address indexed newOwner, address indexed sender);
event AdminChanged(address indexed oldAdmin, address indexed newAdmin, address indexed sender);
modifier onlyOwner() {
require(msg.sender == owner, "the sender is not the owner");
_;
}
function changeOwner(address _account) public onlyOwner whenNotPaused isNotZeroAddress(_account) {
address old = owner;
owner = _account;
emit OwnerChanged(old, owner, msg.sender);
}
/**
* Change Admin
* @dev "whenNotPaused" modifier should not be used here
*/
function changeAdmin(address _account) public onlyOwner isNotZeroAddress(_account) {
address old = admin;
admin = _account;
emit AdminChanged(old, admin, msg.sender);
}
}
// File: contracts/ArbToken_v1.sol
pragma solidity 0.5.13;
contract ArbToken_v1 is Initializable, Owner {
string public name;
string public symbol;
uint8 public decimals;
address public l1Address;
address public l2Gateway;
bytes32 private _DOMAIN_SEPARATOR;
uint256 public deploymentChainId;
mapping (address => uint256) public nonces;
string public constant version = "1";
bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
event Mint(address indexed mintee, uint256 amount, address indexed sender);
event Burn(address indexed burnee, uint256 amount, address indexed sender);
modifier onlyGateway {
require(msg.sender == l2Gateway, "ONLY_GATEWAY");
_;
}
function initialize(
string memory _name,
string memory _symbol,
uint8 _decimals,
address _owner,
address _admin,
address _prohibiter,
address _pauser,
address _wiper,
address _rescuer,
address _l1Address,
address _l2Gateway
) public initializer {
require(_owner != address(0), "_owner is the zero address");
require(_admin != address(0), "_admin is the zero address");
require(_prohibiter != address(0), "_prohibiter is the zero address");
require(_pauser != address(0), "_pauser is the zero address");
require(_wiper != address(0), "_wiper is the zero address");
require(_rescuer != address(0), "_rescuer is the zero address");
require(_l1Address != address(0), "_l1Address is the zero address");
require(_l2Gateway != address(0), "_l2Gateway is the zero address");
name = _name;
symbol = _symbol;
decimals = _decimals;
owner = _owner;
admin = _admin;
prohibiter = _prohibiter;
pauser = _pauser;
wiper = _wiper;
rescuer = _rescuer;
l1Address = _l1Address;
l2Gateway = _l2Gateway;
uint256 id;
assembly {id := chainid()}
deploymentChainId = id;
_DOMAIN_SEPARATOR = _calculateDomainSeparator(id);
}
function transfer(address _recipient, uint256 _amount) public whenNotPaused onlyNotProhibited(msg.sender) onlyNotProhibited(_recipient) isNaturalNumber(_amount) returns (bool) {
_transfer(msg.sender, _recipient, _amount);
return true;
}
function transferFrom(address _sender, address _recipient, uint256 _amount) public whenNotPaused onlyNotProhibited(_sender) onlyNotProhibited(_recipient) isNaturalNumber(_amount) returns (bool) {
return super.transferFrom(_sender, _recipient, _amount);
}
/**
* @notice Mint tokens on L2. Callable path is L1Gateway depositToken (which handles L1 escrow), which triggers L2Gateway, which calls this
* @param account recipient of tokens
* @param amount amount of tokens minted
*/
function bridgeMint(address account, uint256 amount) external onlyGateway {
_mint(account, amount);
emit Mint(account, amount, msg.sender);
}
/**
* @notice Burn tokens on L2.
* @dev only the token bridge can call this
* @param account owner of tokens
* @param amount amount of tokens burnt
*/
function bridgeBurn(address account, uint256 amount) external onlyGateway {
_burn(account, amount);
emit Burn(account, amount, msg.sender);
}
function _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) {
return keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256(bytes(version)),
chainId,
address(this)
)
);
}
function DOMAIN_SEPARATOR() external view returns (bytes32) {
uint256 id;
assembly {id := chainid()}
return id == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(id);
}
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external {
require(block.timestamp <= deadline, "permit expired");
uint256 id;
assembly {id := chainid()}
bytes32 digest =
keccak256(abi.encodePacked(
"\x19\x01",
id == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(id),
keccak256(abi.encode(
PERMIT_TYPEHASH,
owner,
spender,
value,
nonces[owner]++,
deadline
))
));
require(owner != address(0) && owner == ecrecover(digest, v, r, s), "invalid permit");
_approve(owner, spender, value);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burnee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"mintee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldPauser","type":"address"},{"indexed":true,"internalType":"address","name":"newPauser","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"PauserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldProhibiter","type":"address"},{"indexed":true,"internalType":"address","name":"newProhibiter","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"ProhibiterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prohibited","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"Prohibition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"tokenAddr","type":"address"},{"indexed":true,"internalType":"address","name":"toAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Rescue","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRescuer","type":"address"},{"indexed":true,"internalType":"address","name":"newRescuer","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RescuerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Wipe","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldWiper","type":"address"},{"indexed":true,"internalType":"address","name":"newWiper","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"WiperChanged","type":"event"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeBurn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeProhibiter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeRescuer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeWiper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_prohibiter","type":"address"},{"internalType":"address","name":"_pauser","type":"address"},{"internalType":"address","name":"_wiper","type":"address"},{"internalType":"address","name":"_rescuer","type":"address"},{"internalType":"address","name":"_l1Address","type":"address"},{"internalType":"address","name":"_l2Gateway","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"l1Address","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"l2Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pauser","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"prohibit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"prohibiteds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"prohibiter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rescuer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"unprohibit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"wipe","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wiper","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052603380546001600160a81b0319169055603480546001600160a01b03199081169091556035805482169055603a805482169055603b805482169055603c8054909116905534801561005457600080fd5b5061313f806100646000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80637ecebe0011610146578063a6f9dae1116100c3578063cffdd46c11610087578063cffdd46c14610841578063d505accf14610867578063dcb413c8146108b8578063dd62ed3e146108c0578063dd75049b146108ee578063f851a440146108f65761025e565b8063a6f9dae1146107b9578063a9059cbb146107df578063c2eeeebd1461080b578063c4e1ccf214610813578063cd0d0096146108395761025e565b80638fa74a0e1161010a5780638fa74a0e1461074f57806395d89b4114610757578063988749d11461075f5780639fd0506d14610785578063a457c2d71461078d5761025e565b80637ecebe00146106c75780638456cb59146106ed5780638c2a993e146106f55780638da5cb5b146107215780638f283970146107295761025e565b8063313ce567116101df57806354fd4d50116101a357806354fd4d501461061957806359763628146106215780635c975abb14610647578063664dc7241461064f57806370a082311461067557806374f4f5471461069b5761025e565b8063313ce5671461059b5780633644e515146105b957806338a63183146105c157806339509351146105e55780633f4ba83a146106115761025e565b806323b872dd1161022657806323b872dd146104eb5780632ad3ed6d146105215780632cd271e7146105475780632fee80d01461056d57806330adf81f146105935761025e565b806306fdde0314610263578063095ea7b3146102e057806318160ddd14610320578063189179561461033a57806320ff430b146104b5575b600080fd5b61026b6108fe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a557818101518382015260200161028d565b50505050905090810190601f1680156102d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61030c600480360360408110156102f657600080fd5b506001600160a01b03813516906020013561098c565b604080519115158252519081900360200190f35b6103286109a2565b60408051918252519081900360200190f35b6104b3600480360361016081101561035157600080fd5b81019060208101813564010000000081111561036c57600080fd5b82018360208201111561037e57600080fd5b803590602001918460018302840111640100000000831117156103a057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156103f357600080fd5b82018360208201111561040557600080fd5b8035906020019184600183028401116401000000008311171561042757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff1692505060208101356001600160a01b039081169160408101358216916060820135811691608081013582169160a082013581169160c081013582169160e08201358116916101000135166109a9565b005b6104b3600480360360608110156104cb57600080fd5b506001600160a01b03813581169160208101359091169060400135610ec2565b61030c6004803603606081101561050157600080fd5b506001600160a01b03813581169160208101359091169060400135610fd8565b61030c6004803603602081101561053757600080fd5b50356001600160a01b031661113a565b6104b36004803603602081101561055d57600080fd5b50356001600160a01b031661114f565b6104b36004803603602081101561058357600080fd5b50356001600160a01b031661123e565b61032861137a565b6105a3611395565b6040805160ff9092168252519081900360200190f35b61032861139e565b6105c96113c4565b604080516001600160a01b039092168252519081900360200190f35b61030c600480360360408110156105fb57600080fd5b506001600160a01b0381351690602001356113d3565b6104b3611414565b61026b611523565b6104b36004803603602081101561063757600080fd5b50356001600160a01b0316611540565b61030c61167c565b6104b36004803603602081101561066557600080fd5b50356001600160a01b031661168c565b6103286004803603602081101561068b57600080fd5b50356001600160a01b031661184b565b6104b3600480360360408110156106b157600080fd5b506001600160a01b038135169060200135611866565b610328600480360360208110156106dd57600080fd5b50356001600160a01b0316611902565b6104b3611914565b6104b36004803603604081101561070b57600080fd5b506001600160a01b038135169060200135611a17565b6105c9611ab3565b6104b36004803603602081101561073f57600080fd5b50356001600160a01b0316611ac2565b6105c9611bc3565b61026b611bd2565b6104b36004803603602081101561077557600080fd5b50356001600160a01b0316611c2d565b6105c9611da3565b61030c600480360360408110156107a357600080fd5b506001600160a01b038135169060200135611db2565b6104b3600480360360208110156107cf57600080fd5b50356001600160a01b0316611dee565b61030c600480360360408110156107f557600080fd5b506001600160a01b038135169060200135611f3c565b6105c9612094565b6104b36004803603602081101561082957600080fd5b50356001600160a01b03166120a8565b610328612264565b6104b36004803603602081101561085757600080fd5b50356001600160a01b031661226a565b6104b3600480360360e081101561087d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356123a6565b6105c96125a0565b610328600480360360408110156108d657600080fd5b506001600160a01b03813581169160200135166125af565b6105c96125da565b6105c96125e9565b603d805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109845780601f1061095957610100808354040283529160200191610984565b820191906000526020600020905b81548152906001019060200180831161096757829003601f168201915b505050505081565b60006109993384846125f8565b50600192915050565b6039545b90565b600054610100900460ff16806109c257506109c26126e4565b806109d0575060005460ff16155b610a0b5760405162461bcd60e51b815260040180806020018281038252602e815260200180613026602e913960400191505060405180910390fd5b600054610100900460ff16158015610a36576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038916610a91576040805162461bcd60e51b815260206004820152601a60248201527f5f6f776e657220697320746865207a65726f2061646472657373000000000000604482015290519081900360640190fd5b6001600160a01b038816610aec576040805162461bcd60e51b815260206004820152601a60248201527f5f61646d696e20697320746865207a65726f2061646472657373000000000000604482015290519081900360640190fd5b6001600160a01b038716610b47576040805162461bcd60e51b815260206004820152601f60248201527f5f70726f6869626974657220697320746865207a65726f206164647265737300604482015290519081900360640190fd5b6001600160a01b038616610ba2576040805162461bcd60e51b815260206004820152601b60248201527f5f70617573657220697320746865207a65726f20616464726573730000000000604482015290519081900360640190fd5b6001600160a01b038516610bfd576040805162461bcd60e51b815260206004820152601a60248201527f5f776970657220697320746865207a65726f2061646472657373000000000000604482015290519081900360640190fd5b6001600160a01b038416610c58576040805162461bcd60e51b815260206004820152601c60248201527f5f7265736375657220697320746865207a65726f206164647265737300000000604482015290519081900360640190fd5b6001600160a01b038316610cb3576040805162461bcd60e51b815260206004820152601e60248201527f5f6c314164647265737320697320746865207a65726f20616464726573730000604482015290519081900360640190fd5b6001600160a01b038216610d0e576040805162461bcd60e51b815260206004820152601e60248201527f5f6c324761746577617920697320746865207a65726f20616464726573730000604482015290519081900360640190fd5b8b51610d2190603d9060208f0190612e24565b508a51610d3590603e9060208e0190612e24565b5089603f60006101000a81548160ff021916908360ff16021790555088603c60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087603b60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555086603560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555085603360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555084603a60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083603460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082603f60016101000a8154816001600160a01b0302191690836001600160a01b0316021790555081604060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600046905080604281905550610e9e816126ea565b604155508015610eb4576000805461ff00191690555b505050505050505050505050565b603354600160a01b900460ff1615610f0f576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b6034546001600160a01b03163314610f6e576040805162461bcd60e51b815260206004820152601d60248201527f7468652073656e646572206973206e6f74207468652072657363756572000000604482015290519081900360640190fd5b610f886001600160a01b038416838363ffffffff6127e816565b816001600160a01b0316836001600160a01b03167fe01920728668d89f092ef9cb92036bad90964bb622eec508d2c3ffe1d582efb2836040518082815260200191505060405180910390a3505050565b603354600090600160a01b900460ff1615611028576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260366020526040902054849060ff1615611086576040805162461bcd60e51b815260206004820152601a6024820152600080516020612f42833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260366020526040902054849060ff16156110e4576040805162461bcd60e51b815260206004820152601a6024820152600080516020612f42833981519152604482015290519081900360640190fd5b83806000106111245760405162461bcd60e51b81526004018080602001828103825260238152602001806130546023913960400191505060405180910390fd5b61112f87878761283f565b979650505050505050565b60366020526000908152604090205460ff1681565b603b546001600160a01b0316331461119c576040805162461bcd60e51b815260206004820152601b6024820152600080516020612ee0833981519152604482015290519081900360640190fd5b806001600160a01b0381166111e6576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603380546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907f8b1ee37fa817a066fe12c7c9bf109c0c9f8f03ef0a5cfe0c03d5196e8c2e465790600090a4505050565b603b546001600160a01b0316331461128b576040805162461bcd60e51b815260206004820152601b6024820152600080516020612ee0833981519152604482015290519081900360640190fd5b603354600160a01b900460ff16156112d8576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b038116611322576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603a80546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907fd8d09cf07cabd1c0519931ab387ce1b6e580584a26fb2787b8ed7f446c34603f90600090a4505050565b604051806052612f8282396052019050604051809103902081565b603f5460ff1681565b604254600090469081146113ba576113b5816126ea565b6113be565b6041545b91505090565b6034546001600160a01b031681565b3360008181526038602090815260408083206001600160a01b0387168452909152812054909161099991859061140f908663ffffffff61289116565b6125f8565b6033546001600160a01b03163314611473576040805162461bcd60e51b815260206004820152601c60248201527f7468652073656e646572206973206e6f74207468652070617573657200000000604482015290519081900360640190fd5b603354600160a01b900460ff166114d1576040805162461bcd60e51b815260206004820152601d60248201527f74686973206973206e6f7420612070617573656420636f6e7472616374000000604482015290519081900360640190fd5b6033805460ff60a01b19169081905560408051600160a01b90920460ff16151582525133917f5a9dfee0981174e5203ccf9368a8cabb254f9dea6ca43f96b4bbd10c69415d8a919081900360200190a2565b604051806040016040528060018152602001603160f81b81525081565b603b546001600160a01b0316331461158d576040805162461bcd60e51b815260206004820152601b6024820152600080516020612ee0833981519152604482015290519081900360640190fd5b603354600160a01b900460ff16156115da576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b038116611624576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603480546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907f4e26e78832abd61f25bef51e06a1c7575a525edb4d215e56d6c4fbbe363cc03390600090a4505050565b603354600160a01b900460ff1681565b6035546001600160a01b031633146116eb576040805162461bcd60e51b815260206004820181905260248201527f7468652073656e646572206973206e6f74207468652070726f68696269746572604482015290519081900360640190fd5b603354600160a01b900460ff1615611738576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b038116611782576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b6001600160a01b038216600090815260366020526040902054829060ff166117f1576040805162461bcd60e51b815260206004820152601e60248201527f74686973206163636f756e74206973206e6f742070726f686962697465640000604482015290519081900360640190fd5b6001600160a01b0383166000818152603660209081526040808320805460ff191690558051928352513393927fab0ab2fa6ff81b10c5afab4726a665d4379f2d0acaaafbe4c4d737ade05a8e4692908290030190a3505050565b6001600160a01b031660009081526037602052604090205490565b6040546001600160a01b031633146118b4576040805162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015290519081900360640190fd5b6118be82826128f2565b60408051828152905133916001600160a01b038516917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a35050565b60436020526000908152604090205481565b6033546001600160a01b03163314611973576040805162461bcd60e51b815260206004820152601c60248201527f7468652073656e646572206973206e6f74207468652070617573657200000000604482015290519081900360640190fd5b603354600160a01b900460ff16156119c0576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b6033805460ff60a01b1916600160a01b90811791829055604080519190920460ff1615158152905133917f5a9dfee0981174e5203ccf9368a8cabb254f9dea6ca43f96b4bbd10c69415d8a919081900360200190a2565b6040546001600160a01b03163314611a65576040805162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015290519081900360640190fd5b611a6f82826129cd565b60408051828152905133916001600160a01b038516917fbcad3d7d3dfccb90d49c6063bf70f828901fefc88937d90af74e58e6e55bc39d9181900360200190a35050565b603c546001600160a01b031681565b603c546001600160a01b03163314611b21576040805162461bcd60e51b815260206004820152601b60248201527f7468652073656e646572206973206e6f7420746865206f776e65720000000000604482015290519081900360640190fd5b806001600160a01b038116611b6b576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603b80546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907f4eb572e99196bed0270fbd5b17a948e19c3f50a97838cb0d2a75a823ff8e6c5090600090a4505050565b6040546001600160a01b031681565b603e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109845780601f1061095957610100808354040283529160200191610984565b603354600160a01b900460ff1615611c7a576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b603a546001600160a01b03163314611cd9576040805162461bcd60e51b815260206004820152601b60248201527f7468652073656e646572206973206e6f74207468652077697065720000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260366020526040902054819060ff16611d48576040805162461bcd60e51b815260206004820152601e60248201527f74686973206163636f756e74206973206e6f742070726f686962697465640000604482015290519081900360640190fd5b6000611d538361184b565b9050611d5f83826128f2565b6040805182815290516001600160a01b038516917f2d2c7da251295f4d722a8ddaf337627952c957ce21b2757c852e47fe81b3a2af919081900360200190a2505050565b6033546001600160a01b031681565b3360008181526038602090815260408083206001600160a01b0387168452909152812054909161099991859061140f908663ffffffff612abf16565b603c546001600160a01b03163314611e4d576040805162461bcd60e51b815260206004820152601b60248201527f7468652073656e646572206973206e6f7420746865206f776e65720000000000604482015290519081900360640190fd5b603354600160a01b900460ff1615611e9a576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b038116611ee4576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603c80546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a53970533190600090a4505050565b603354600090600160a01b900460ff1615611f8c576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b3360008181526036602052604090205460ff1615611fdf576040805162461bcd60e51b815260206004820152601a6024820152600080516020612f42833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260366020526040902054849060ff161561203d576040805162461bcd60e51b815260206004820152601a6024820152600080516020612f42833981519152604482015290519081900360640190fd5b838060001061207d5760405162461bcd60e51b81526004018080602001828103825260238152602001806130546023913960400191505060405180910390fd5b612088338787612b1c565b50600195945050505050565b603f5461010090046001600160a01b031681565b6035546001600160a01b03163314612107576040805162461bcd60e51b815260206004820181905260248201527f7468652073656e646572206973206e6f74207468652070726f68696269746572604482015290519081900360640190fd5b603354600160a01b900460ff1615612154576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b03811661219e576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b6001600160a01b038216600090815260366020526040902054829060ff16156121fc576040805162461bcd60e51b815260206004820152601a6024820152600080516020612f42833981519152604482015290519081900360640190fd5b6001600160a01b038316600081815260366020908152604091829020805460ff191660011790819055825160ff919091161515815291513393927fab0ab2fa6ff81b10c5afab4726a665d4379f2d0acaaafbe4c4d737ade05a8e4692908290030190a3505050565b60425481565b603b546001600160a01b031633146122b7576040805162461bcd60e51b815260206004820152601b6024820152600080516020612ee0833981519152604482015290519081900360640190fd5b603354600160a01b900460ff1615612304576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b03811661234e576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603580546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907f85ae865187b1d7c0069f5fab638cbfcb8f3f9d23bc090e1084abc0dc42def0d290600090a4505050565b834211156123ec576040805162461bcd60e51b815260206004820152600e60248201526d1c195c9b5a5d08195e1c1a5c995960921b604482015290519081900360640190fd5b6042544690600090821461240857612403826126ea565b61240c565b6041545b604051806052612f828239604080519182900360520182206001600160a01b03808f166000818152604360209081529085902080546001810190915581870194909452858501829052918f166060860152608085018e905260a085019290925260c08085018d90528351808603909101815260e08501845280519082012061190160f01b6101008601526101028501969096526101228085019690965282518085039096018652610142909301909152835193909101929092209250501580159061254857506040805160008152602080820180845284905260ff8816828401526060820187905260808201869052915160019260a0808401939192601f1981019281900390910190855afa158015612529573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b0316145b61258a576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a59081c195c9b5a5d60921b604482015290519081900360640190fd5b6125958989896125f8565b505050505050505050565b603a546001600160a01b031681565b6001600160a01b03918216600090815260386020908152604080832093909416825291909152205490565b6035546001600160a01b031681565b603b546001600160a01b031681565b6001600160a01b03831661263d5760405162461bcd60e51b81526004018080602001828103825260248152602001806130bd6024913960400191505060405180910390fd5b6001600160a01b0382166126825760405162461bcd60e51b8152600401808060200182810382526022815260200180612f006022913960400191505060405180910390fd5b6001600160a01b03808416600081815260386020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b303b1590565b60006040518080612fd46052913960520190506040518091039020603d60405180828054600181600116156101000203166002900480156127625780601f10612740576101008083540402835291820191612762565b820191906000526020600020905b81548152906001019060200180831161274e575b505060408051918290038220828201825260018352603160f81b602093840152815180840196909652858201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060860152608085018790523060a0808701919091528151808703909101815260c09095019052835193019290922092505050919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261283a908490612c60565b505050565b600061284c848484612b1c565b6001600160a01b03841660009081526038602090815260408083203380855292529091205461288791869161140f908663ffffffff612abf16565b5060019392505050565b6000828201838110156128eb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166129375760405162461bcd60e51b81526004018080602001828103825260218152602001806130776021913960400191505060405180910390fd5b60395461294a908263ffffffff612abf16565b6039556001600160a01b038216600090815260376020526040902054612976908263ffffffff612abf16565b6001600160a01b0383166000818152603760209081526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b6001600160a01b038216612a28576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b603954612a3b908263ffffffff61289116565b6039556001600160a01b038216600090815260376020526040902054612a67908263ffffffff61289116565b6001600160a01b03831660008181526037602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600082821115612b16576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b038316612b615760405162461bcd60e51b81526004018080602001828103825260258152602001806130986025913960400191505060405180910390fd5b6001600160a01b038216612ba65760405162461bcd60e51b8152600401808060200182810382526023815260200180612ebd6023913960400191505060405180910390fd5b6001600160a01b038316600090815260376020526040902054612bcf908263ffffffff612abf16565b6001600160a01b038085166000908152603760205260408082209390935590841681522054612c04908263ffffffff61289116565b6001600160a01b0380841660008181526037602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b612c72826001600160a01b0316612e1e565b612cc3576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310612d015780518252601f199092019160209182019101612ce2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d63576040519150601f19603f3d011682016040523d82523d6000602084013e612d68565b606091505b509150915081612dbf576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115612e1857808060200190516020811015612ddb57600080fd5b5051612e185760405162461bcd60e51b815260040180806020018281038252602a8152602001806130e1602a913960400191505060405180910390fd5b50505050565b3b151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612e6557805160ff1916838001178555612e92565b82800160010185558215612e92579182015b82811115612e92578251825591602001919060010190612e77565b50612e9e929150612ea2565b5090565b6109a691905b80821115612e9e5760008155600101612ea856fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573737468652073656e646572206973206e6f74207468652061646d696e000000000045524332303a20617070726f766520746f20746865207a65726f206164647265737374686973206163636f756e7420697320746865207a65726f206164647265737374686973206163636f756e742069732070726f686962697465640000000000007468697320697320612070617573656420636f6e7472616374000000000000005065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65647468697320616d6f756e74206973206e6f742061206e61747572616c206e756d62657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820fd1cfaebff778e3ee345eb05da575fd9788a7df4cf602444b1ee3038367832b264736f6c634300050d0032
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80637ecebe0011610146578063a6f9dae1116100c3578063cffdd46c11610087578063cffdd46c14610841578063d505accf14610867578063dcb413c8146108b8578063dd62ed3e146108c0578063dd75049b146108ee578063f851a440146108f65761025e565b8063a6f9dae1146107b9578063a9059cbb146107df578063c2eeeebd1461080b578063c4e1ccf214610813578063cd0d0096146108395761025e565b80638fa74a0e1161010a5780638fa74a0e1461074f57806395d89b4114610757578063988749d11461075f5780639fd0506d14610785578063a457c2d71461078d5761025e565b80637ecebe00146106c75780638456cb59146106ed5780638c2a993e146106f55780638da5cb5b146107215780638f283970146107295761025e565b8063313ce567116101df57806354fd4d50116101a357806354fd4d501461061957806359763628146106215780635c975abb14610647578063664dc7241461064f57806370a082311461067557806374f4f5471461069b5761025e565b8063313ce5671461059b5780633644e515146105b957806338a63183146105c157806339509351146105e55780633f4ba83a146106115761025e565b806323b872dd1161022657806323b872dd146104eb5780632ad3ed6d146105215780632cd271e7146105475780632fee80d01461056d57806330adf81f146105935761025e565b806306fdde0314610263578063095ea7b3146102e057806318160ddd14610320578063189179561461033a57806320ff430b146104b5575b600080fd5b61026b6108fe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a557818101518382015260200161028d565b50505050905090810190601f1680156102d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61030c600480360360408110156102f657600080fd5b506001600160a01b03813516906020013561098c565b604080519115158252519081900360200190f35b6103286109a2565b60408051918252519081900360200190f35b6104b3600480360361016081101561035157600080fd5b81019060208101813564010000000081111561036c57600080fd5b82018360208201111561037e57600080fd5b803590602001918460018302840111640100000000831117156103a057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156103f357600080fd5b82018360208201111561040557600080fd5b8035906020019184600183028401116401000000008311171561042757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff1692505060208101356001600160a01b039081169160408101358216916060820135811691608081013582169160a082013581169160c081013582169160e08201358116916101000135166109a9565b005b6104b3600480360360608110156104cb57600080fd5b506001600160a01b03813581169160208101359091169060400135610ec2565b61030c6004803603606081101561050157600080fd5b506001600160a01b03813581169160208101359091169060400135610fd8565b61030c6004803603602081101561053757600080fd5b50356001600160a01b031661113a565b6104b36004803603602081101561055d57600080fd5b50356001600160a01b031661114f565b6104b36004803603602081101561058357600080fd5b50356001600160a01b031661123e565b61032861137a565b6105a3611395565b6040805160ff9092168252519081900360200190f35b61032861139e565b6105c96113c4565b604080516001600160a01b039092168252519081900360200190f35b61030c600480360360408110156105fb57600080fd5b506001600160a01b0381351690602001356113d3565b6104b3611414565b61026b611523565b6104b36004803603602081101561063757600080fd5b50356001600160a01b0316611540565b61030c61167c565b6104b36004803603602081101561066557600080fd5b50356001600160a01b031661168c565b6103286004803603602081101561068b57600080fd5b50356001600160a01b031661184b565b6104b3600480360360408110156106b157600080fd5b506001600160a01b038135169060200135611866565b610328600480360360208110156106dd57600080fd5b50356001600160a01b0316611902565b6104b3611914565b6104b36004803603604081101561070b57600080fd5b506001600160a01b038135169060200135611a17565b6105c9611ab3565b6104b36004803603602081101561073f57600080fd5b50356001600160a01b0316611ac2565b6105c9611bc3565b61026b611bd2565b6104b36004803603602081101561077557600080fd5b50356001600160a01b0316611c2d565b6105c9611da3565b61030c600480360360408110156107a357600080fd5b506001600160a01b038135169060200135611db2565b6104b3600480360360208110156107cf57600080fd5b50356001600160a01b0316611dee565b61030c600480360360408110156107f557600080fd5b506001600160a01b038135169060200135611f3c565b6105c9612094565b6104b36004803603602081101561082957600080fd5b50356001600160a01b03166120a8565b610328612264565b6104b36004803603602081101561085757600080fd5b50356001600160a01b031661226a565b6104b3600480360360e081101561087d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356123a6565b6105c96125a0565b610328600480360360408110156108d657600080fd5b506001600160a01b03813581169160200135166125af565b6105c96125da565b6105c96125e9565b603d805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109845780601f1061095957610100808354040283529160200191610984565b820191906000526020600020905b81548152906001019060200180831161096757829003601f168201915b505050505081565b60006109993384846125f8565b50600192915050565b6039545b90565b600054610100900460ff16806109c257506109c26126e4565b806109d0575060005460ff16155b610a0b5760405162461bcd60e51b815260040180806020018281038252602e815260200180613026602e913960400191505060405180910390fd5b600054610100900460ff16158015610a36576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038916610a91576040805162461bcd60e51b815260206004820152601a60248201527f5f6f776e657220697320746865207a65726f2061646472657373000000000000604482015290519081900360640190fd5b6001600160a01b038816610aec576040805162461bcd60e51b815260206004820152601a60248201527f5f61646d696e20697320746865207a65726f2061646472657373000000000000604482015290519081900360640190fd5b6001600160a01b038716610b47576040805162461bcd60e51b815260206004820152601f60248201527f5f70726f6869626974657220697320746865207a65726f206164647265737300604482015290519081900360640190fd5b6001600160a01b038616610ba2576040805162461bcd60e51b815260206004820152601b60248201527f5f70617573657220697320746865207a65726f20616464726573730000000000604482015290519081900360640190fd5b6001600160a01b038516610bfd576040805162461bcd60e51b815260206004820152601a60248201527f5f776970657220697320746865207a65726f2061646472657373000000000000604482015290519081900360640190fd5b6001600160a01b038416610c58576040805162461bcd60e51b815260206004820152601c60248201527f5f7265736375657220697320746865207a65726f206164647265737300000000604482015290519081900360640190fd5b6001600160a01b038316610cb3576040805162461bcd60e51b815260206004820152601e60248201527f5f6c314164647265737320697320746865207a65726f20616464726573730000604482015290519081900360640190fd5b6001600160a01b038216610d0e576040805162461bcd60e51b815260206004820152601e60248201527f5f6c324761746577617920697320746865207a65726f20616464726573730000604482015290519081900360640190fd5b8b51610d2190603d9060208f0190612e24565b508a51610d3590603e9060208e0190612e24565b5089603f60006101000a81548160ff021916908360ff16021790555088603c60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087603b60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555086603560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555085603360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555084603a60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083603460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082603f60016101000a8154816001600160a01b0302191690836001600160a01b0316021790555081604060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600046905080604281905550610e9e816126ea565b604155508015610eb4576000805461ff00191690555b505050505050505050505050565b603354600160a01b900460ff1615610f0f576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b6034546001600160a01b03163314610f6e576040805162461bcd60e51b815260206004820152601d60248201527f7468652073656e646572206973206e6f74207468652072657363756572000000604482015290519081900360640190fd5b610f886001600160a01b038416838363ffffffff6127e816565b816001600160a01b0316836001600160a01b03167fe01920728668d89f092ef9cb92036bad90964bb622eec508d2c3ffe1d582efb2836040518082815260200191505060405180910390a3505050565b603354600090600160a01b900460ff1615611028576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260366020526040902054849060ff1615611086576040805162461bcd60e51b815260206004820152601a6024820152600080516020612f42833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260366020526040902054849060ff16156110e4576040805162461bcd60e51b815260206004820152601a6024820152600080516020612f42833981519152604482015290519081900360640190fd5b83806000106111245760405162461bcd60e51b81526004018080602001828103825260238152602001806130546023913960400191505060405180910390fd5b61112f87878761283f565b979650505050505050565b60366020526000908152604090205460ff1681565b603b546001600160a01b0316331461119c576040805162461bcd60e51b815260206004820152601b6024820152600080516020612ee0833981519152604482015290519081900360640190fd5b806001600160a01b0381166111e6576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603380546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907f8b1ee37fa817a066fe12c7c9bf109c0c9f8f03ef0a5cfe0c03d5196e8c2e465790600090a4505050565b603b546001600160a01b0316331461128b576040805162461bcd60e51b815260206004820152601b6024820152600080516020612ee0833981519152604482015290519081900360640190fd5b603354600160a01b900460ff16156112d8576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b038116611322576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603a80546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907fd8d09cf07cabd1c0519931ab387ce1b6e580584a26fb2787b8ed7f446c34603f90600090a4505050565b604051806052612f8282396052019050604051809103902081565b603f5460ff1681565b604254600090469081146113ba576113b5816126ea565b6113be565b6041545b91505090565b6034546001600160a01b031681565b3360008181526038602090815260408083206001600160a01b0387168452909152812054909161099991859061140f908663ffffffff61289116565b6125f8565b6033546001600160a01b03163314611473576040805162461bcd60e51b815260206004820152601c60248201527f7468652073656e646572206973206e6f74207468652070617573657200000000604482015290519081900360640190fd5b603354600160a01b900460ff166114d1576040805162461bcd60e51b815260206004820152601d60248201527f74686973206973206e6f7420612070617573656420636f6e7472616374000000604482015290519081900360640190fd5b6033805460ff60a01b19169081905560408051600160a01b90920460ff16151582525133917f5a9dfee0981174e5203ccf9368a8cabb254f9dea6ca43f96b4bbd10c69415d8a919081900360200190a2565b604051806040016040528060018152602001603160f81b81525081565b603b546001600160a01b0316331461158d576040805162461bcd60e51b815260206004820152601b6024820152600080516020612ee0833981519152604482015290519081900360640190fd5b603354600160a01b900460ff16156115da576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b038116611624576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603480546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907f4e26e78832abd61f25bef51e06a1c7575a525edb4d215e56d6c4fbbe363cc03390600090a4505050565b603354600160a01b900460ff1681565b6035546001600160a01b031633146116eb576040805162461bcd60e51b815260206004820181905260248201527f7468652073656e646572206973206e6f74207468652070726f68696269746572604482015290519081900360640190fd5b603354600160a01b900460ff1615611738576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b038116611782576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b6001600160a01b038216600090815260366020526040902054829060ff166117f1576040805162461bcd60e51b815260206004820152601e60248201527f74686973206163636f756e74206973206e6f742070726f686962697465640000604482015290519081900360640190fd5b6001600160a01b0383166000818152603660209081526040808320805460ff191690558051928352513393927fab0ab2fa6ff81b10c5afab4726a665d4379f2d0acaaafbe4c4d737ade05a8e4692908290030190a3505050565b6001600160a01b031660009081526037602052604090205490565b6040546001600160a01b031633146118b4576040805162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015290519081900360640190fd5b6118be82826128f2565b60408051828152905133916001600160a01b038516917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a35050565b60436020526000908152604090205481565b6033546001600160a01b03163314611973576040805162461bcd60e51b815260206004820152601c60248201527f7468652073656e646572206973206e6f74207468652070617573657200000000604482015290519081900360640190fd5b603354600160a01b900460ff16156119c0576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b6033805460ff60a01b1916600160a01b90811791829055604080519190920460ff1615158152905133917f5a9dfee0981174e5203ccf9368a8cabb254f9dea6ca43f96b4bbd10c69415d8a919081900360200190a2565b6040546001600160a01b03163314611a65576040805162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015290519081900360640190fd5b611a6f82826129cd565b60408051828152905133916001600160a01b038516917fbcad3d7d3dfccb90d49c6063bf70f828901fefc88937d90af74e58e6e55bc39d9181900360200190a35050565b603c546001600160a01b031681565b603c546001600160a01b03163314611b21576040805162461bcd60e51b815260206004820152601b60248201527f7468652073656e646572206973206e6f7420746865206f776e65720000000000604482015290519081900360640190fd5b806001600160a01b038116611b6b576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603b80546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907f4eb572e99196bed0270fbd5b17a948e19c3f50a97838cb0d2a75a823ff8e6c5090600090a4505050565b6040546001600160a01b031681565b603e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109845780601f1061095957610100808354040283529160200191610984565b603354600160a01b900460ff1615611c7a576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b603a546001600160a01b03163314611cd9576040805162461bcd60e51b815260206004820152601b60248201527f7468652073656e646572206973206e6f74207468652077697065720000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260366020526040902054819060ff16611d48576040805162461bcd60e51b815260206004820152601e60248201527f74686973206163636f756e74206973206e6f742070726f686962697465640000604482015290519081900360640190fd5b6000611d538361184b565b9050611d5f83826128f2565b6040805182815290516001600160a01b038516917f2d2c7da251295f4d722a8ddaf337627952c957ce21b2757c852e47fe81b3a2af919081900360200190a2505050565b6033546001600160a01b031681565b3360008181526038602090815260408083206001600160a01b0387168452909152812054909161099991859061140f908663ffffffff612abf16565b603c546001600160a01b03163314611e4d576040805162461bcd60e51b815260206004820152601b60248201527f7468652073656e646572206973206e6f7420746865206f776e65720000000000604482015290519081900360640190fd5b603354600160a01b900460ff1615611e9a576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b038116611ee4576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603c80546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a53970533190600090a4505050565b603354600090600160a01b900460ff1615611f8c576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b3360008181526036602052604090205460ff1615611fdf576040805162461bcd60e51b815260206004820152601a6024820152600080516020612f42833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260366020526040902054849060ff161561203d576040805162461bcd60e51b815260206004820152601a6024820152600080516020612f42833981519152604482015290519081900360640190fd5b838060001061207d5760405162461bcd60e51b81526004018080602001828103825260238152602001806130546023913960400191505060405180910390fd5b612088338787612b1c565b50600195945050505050565b603f5461010090046001600160a01b031681565b6035546001600160a01b03163314612107576040805162461bcd60e51b815260206004820181905260248201527f7468652073656e646572206973206e6f74207468652070726f68696269746572604482015290519081900360640190fd5b603354600160a01b900460ff1615612154576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b03811661219e576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b6001600160a01b038216600090815260366020526040902054829060ff16156121fc576040805162461bcd60e51b815260206004820152601a6024820152600080516020612f42833981519152604482015290519081900360640190fd5b6001600160a01b038316600081815260366020908152604091829020805460ff191660011790819055825160ff919091161515815291513393927fab0ab2fa6ff81b10c5afab4726a665d4379f2d0acaaafbe4c4d737ade05a8e4692908290030190a3505050565b60425481565b603b546001600160a01b031633146122b7576040805162461bcd60e51b815260206004820152601b6024820152600080516020612ee0833981519152604482015290519081900360640190fd5b603354600160a01b900460ff1615612304576040805162461bcd60e51b81526020600482015260196024820152600080516020612f62833981519152604482015290519081900360640190fd5b806001600160a01b03811661234e576040805162461bcd60e51b81526020600482018190526024820152600080516020612f22833981519152604482015290519081900360640190fd5b603580546001600160a01b038481166001600160a01b03198316179283905560405191811692339291169083907f85ae865187b1d7c0069f5fab638cbfcb8f3f9d23bc090e1084abc0dc42def0d290600090a4505050565b834211156123ec576040805162461bcd60e51b815260206004820152600e60248201526d1c195c9b5a5d08195e1c1a5c995960921b604482015290519081900360640190fd5b6042544690600090821461240857612403826126ea565b61240c565b6041545b604051806052612f828239604080519182900360520182206001600160a01b03808f166000818152604360209081529085902080546001810190915581870194909452858501829052918f166060860152608085018e905260a085019290925260c08085018d90528351808603909101815260e08501845280519082012061190160f01b6101008601526101028501969096526101228085019690965282518085039096018652610142909301909152835193909101929092209250501580159061254857506040805160008152602080820180845284905260ff8816828401526060820187905260808201869052915160019260a0808401939192601f1981019281900390910190855afa158015612529573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b0316145b61258a576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a59081c195c9b5a5d60921b604482015290519081900360640190fd5b6125958989896125f8565b505050505050505050565b603a546001600160a01b031681565b6001600160a01b03918216600090815260386020908152604080832093909416825291909152205490565b6035546001600160a01b031681565b603b546001600160a01b031681565b6001600160a01b03831661263d5760405162461bcd60e51b81526004018080602001828103825260248152602001806130bd6024913960400191505060405180910390fd5b6001600160a01b0382166126825760405162461bcd60e51b8152600401808060200182810382526022815260200180612f006022913960400191505060405180910390fd5b6001600160a01b03808416600081815260386020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b303b1590565b60006040518080612fd46052913960520190506040518091039020603d60405180828054600181600116156101000203166002900480156127625780601f10612740576101008083540402835291820191612762565b820191906000526020600020905b81548152906001019060200180831161274e575b505060408051918290038220828201825260018352603160f81b602093840152815180840196909652858201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060860152608085018790523060a0808701919091528151808703909101815260c09095019052835193019290922092505050919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261283a908490612c60565b505050565b600061284c848484612b1c565b6001600160a01b03841660009081526038602090815260408083203380855292529091205461288791869161140f908663ffffffff612abf16565b5060019392505050565b6000828201838110156128eb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166129375760405162461bcd60e51b81526004018080602001828103825260218152602001806130776021913960400191505060405180910390fd5b60395461294a908263ffffffff612abf16565b6039556001600160a01b038216600090815260376020526040902054612976908263ffffffff612abf16565b6001600160a01b0383166000818152603760209081526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b6001600160a01b038216612a28576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b603954612a3b908263ffffffff61289116565b6039556001600160a01b038216600090815260376020526040902054612a67908263ffffffff61289116565b6001600160a01b03831660008181526037602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600082821115612b16576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b038316612b615760405162461bcd60e51b81526004018080602001828103825260258152602001806130986025913960400191505060405180910390fd5b6001600160a01b038216612ba65760405162461bcd60e51b8152600401808060200182810382526023815260200180612ebd6023913960400191505060405180910390fd5b6001600160a01b038316600090815260376020526040902054612bcf908263ffffffff612abf16565b6001600160a01b038085166000908152603760205260408082209390935590841681522054612c04908263ffffffff61289116565b6001600160a01b0380841660008181526037602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b612c72826001600160a01b0316612e1e565b612cc3576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310612d015780518252601f199092019160209182019101612ce2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d63576040519150601f19603f3d011682016040523d82523d6000602084013e612d68565b606091505b509150915081612dbf576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115612e1857808060200190516020811015612ddb57600080fd5b5051612e185760405162461bcd60e51b815260040180806020018281038252602a8152602001806130e1602a913960400191505060405180910390fd5b50505050565b3b151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612e6557805160ff1916838001178555612e92565b82800160010185558215612e92579182015b82811115612e92578251825591602001919060010190612e77565b50612e9e929150612ea2565b5090565b6109a691905b80821115612e9e5760008155600101612ea856fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573737468652073656e646572206973206e6f74207468652061646d696e000000000045524332303a20617070726f766520746f20746865207a65726f206164647265737374686973206163636f756e7420697320746865207a65726f206164647265737374686973206163636f756e742069732070726f686962697465640000000000007468697320697320612070617573656420636f6e7472616374000000000000005065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65647468697320616d6f756e74206973206e6f742061206e61747572616c206e756d62657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820fd1cfaebff778e3ee345eb05da575fd9788a7df4cf602444b1ee3038367832b264736f6c634300050d0032
Deployed Bytecode Sourcemap
27952:5097:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27952:5097:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28006:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28006:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13667:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13667:148:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12690:91;;;:::i;:::-;;;;;;;;;;;;;;;;28740:1511;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;28740:1511:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;28740:1511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28740:1511:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28740:1511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28740:1511:0;;;;;;;;-1:-1:-1;28740:1511:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;28740:1511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28740:1511:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28740:1511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28740:1511:0;;-1:-1:-1;;;28740:1511:0;;;;;-1:-1:-1;;28740:1511:0;;;;-1:-1:-1;;;;;28740:1511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24954:214;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24954:214:0;;;;;;;;;;;;;;;;;:::i;30526:268::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;30526:268:0;;;;;;;;;;;;;;;;;:::i;3475:43::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3475:43:0;-1:-1:-1;;;;;3475:43:0;;:::i;25977:205::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25977:205:0;-1:-1:-1;;;;;25977:205:0;;:::i;26437:214::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26437:214:0;-1:-1:-1;;;;;26437:214:0;;:::i;28322:137::-;;;:::i;28058:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31989:218;;;:::i;24700:35::-;;;:::i;:::-;;;;-1:-1:-1;;;;;24700:35:0;;;;;;;;;;;;;;14951:206;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14951:206:0;;;;;;;;:::i;3192:122::-;;;:::i;28278:37::-;;;:::i;26659:224::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26659:224:0;-1:-1:-1;;;;;26659:224:0;;:::i;2630:26::-;;;:::i;4296:246::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4296:246:0;-1:-1:-1;;;;;4296:246:0;;:::i;12844:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12844:110:0;-1:-1:-1;;;;;12844:110:0;;:::i;31403:164::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;31403:164:0;;;;;;;;:::i;28227:42::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28227:42:0;-1:-1:-1;;;;;28227:42:0;;:::i;3062:122::-;;;:::i;31050:164::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;31050:164:0;;;;;;;;:::i;26988:33::-;;;:::i;27676:200::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27676:200:0;-1:-1:-1;;;;;27676:200:0;;:::i;28117:24::-;;;:::i;28031:20::-;;;:::i;19506:221::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19506:221:0;-1:-1:-1;;;;;19506:221:0;;:::i;2589:34::-;;;:::i;15660:216::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15660:216:0;;;;;;;;:::i;27353:214::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27353:214:0;-1:-1:-1;;;;;27353:214:0;;:::i;30259:259::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;30259:259:0;;;;;;;;:::i;28086:24::-;;;:::i;4042:246::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4042:246:0;-1:-1:-1;;;;;4042:246:0;;:::i;28188:32::-;;;:::i;26190:239::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26190:239:0;-1:-1:-1;;;;;26190:239:0;;:::i;32215:831::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;32215:831:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19290:33::-;;;:::i;13386:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13386:134:0;;;;;;;;;;:::i;3430:38::-;;;:::i;25284:33::-;;;:::i;28006:18::-;;;;;;;;;;;;;;;-1:-1:-1;;28006:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13667:148::-;13732:4;13749:36;13758:10;13770:7;13779:5;13749:8;:36::i;:::-;-1:-1:-1;13803:4:0;13667:148;;;;:::o;12690:91::-;12761:12;;12690:91;;:::o;28740:1511::-;1118:12;;;;;;;;:31;;;1134:15;:13;:15::i;:::-;1118:47;;;-1:-1:-1;1154:11:0;;;;1153:12;1118:47;1110:106;;;;-1:-1:-1;;;1110:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1225:19;1248:12;;;;;;1247:13;1267:83;;;;1296:12;:19;;-1:-1:-1;;;;1296:19:0;;;;;1324:18;1311:4;1324:18;;;1267:83;-1:-1:-1;;;;;29117:20:0;;29109:59;;;;;-1:-1:-1;;;29109:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29191:20:0;;29183:59;;;;;-1:-1:-1;;;29183:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29265:25:0;;29257:69;;;;;-1:-1:-1;;;29257:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29349:21:0;;29341:61;;;;;-1:-1:-1;;;29341:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29425:20:0;;29417:59;;;;;-1:-1:-1;;;29417:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29499:22:0;;29491:63;;;;;-1:-1:-1;;;29491:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29577:24:0;;29569:67;;;;;-1:-1:-1;;;29569:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29659:24:0;;29651:67;;;;;-1:-1:-1;;;29651:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29733:12;;;;:4;;:12;;;;;:::i;:::-;-1:-1:-1;29760:16:0;;;;:6;;:16;;;;;:::i;:::-;;29802:9;29791:8;;:20;;;;;;;;;;;;;;;;;;29834:6;29826:5;;:14;;;;;-1:-1:-1;;;;;29826:14:0;;;;;-1:-1:-1;;;;;29826:14:0;;;;;;29863:6;29855:5;;:14;;;;;-1:-1:-1;;;;;29855:14:0;;;;;-1:-1:-1;;;;;29855:14:0;;;;;;29897:11;29884:10;;:24;;;;;-1:-1:-1;;;;;29884:24:0;;;;;-1:-1:-1;;;;;29884:24:0;;;;;;29932:7;29923:6;;:16;;;;;-1:-1:-1;;;;;29923:16:0;;;;;-1:-1:-1;;;;;29923:16:0;;;;;;29962:6;29954:5;;:14;;;;;-1:-1:-1;;;;;29954:14:0;;;;;-1:-1:-1;;;;;29954:14:0;;;;;;29993:8;29983:7;;:18;;;;;-1:-1:-1;;;;;29983:18:0;;;;;-1:-1:-1;;;;;29983:18:0;;;;;;30028:10;30016:9;;:22;;;;;-1:-1:-1;;;;;30016:22:0;;;;;-1:-1:-1;;;;;30016:22:0;;;;;;30065:10;30053:9;;:22;;;;;-1:-1:-1;;;;;30053:22:0;;;;;-1:-1:-1;;;;;30053:22:0;;;;;;30092:10;30133:9;30127:15;;30177:2;30157:17;:22;;;;30214:29;30240:2;30214:25;:29::i;:::-;30194:17;:49;-1:-1:-1;1368:57:0;;;;1412:5;1397:20;;-1:-1:-1;;1397:20:0;;;1368:57;28740:1511;;;;;;;;;;;;:::o;24954:214::-;2889:6;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;24885:7;;-1:-1:-1;;;;;24885:7:0;24871:10;:21;24863:63;;;;;-1:-1:-1;;;24863:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25067:41;-1:-1:-1;;;;;25067:27:0;;25095:3;25100:7;25067:41;:27;:41;:::i;:::-;25147:3;-1:-1:-1;;;;;25124:36:0;25131:14;-1:-1:-1;;;;;25124:36:0;;25152:7;25124:36;;;;;;;;;;;;;;;;;;24954:214;;;:::o;30526:268::-;2889:6;;30714:4;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3817:21:0;;;;;;:11;:21;;;;;;30641:7;;3817:21;;3816:22;3808:61;;;;;-1:-1:-1;;;3808:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3808:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3817:21:0;;;;;;:11;:21;;;;;;30668:10;;3817:21;;3816:22;3808:61;;;;;-1:-1:-1;;;3808:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3808:61:0;;;;;;;;;;;;;;;30696:7;2414;2410:1;:11;2402:59;;;;-1:-1:-1;;;2402:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30738:48;30757:7;30766:10;30778:7;30738:18;:48::i;:::-;30731:55;30526:268;-1:-1:-1;;;;;;;30526:268:0:o;3475:43::-;;;;;;;;;;;;;;;:::o;25977:205::-;25810:5;;-1:-1:-1;;;;;25810:5:0;25796:10;:19;25788:59;;;;;-1:-1:-1;;;25788:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25788:59:0;;;;;;;;;;;;;;;26051:8;-1:-1:-1;;;;;2262:22:0;;2254:67;;;;;-1:-1:-1;;;2254:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2254:67:0;;;;;;;;;;;;;;;26086:6;;;-1:-1:-1;;;;;26103:17:0;;;-1:-1:-1;;;;;;26103:17:0;;;;;;;26136:38;;26086:6;;;;26163:10;;26155:6;;;26086;;26136:38;;26072:11;;26136:38;2332:1;25858;25977:205;:::o;26437:214::-;25810:5;;-1:-1:-1;;;;;25810:5:0;25796:10;:19;25788:59;;;;;-1:-1:-1;;;25788:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25788:59:0;;;;;;;;;;;;;;;2889:6;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;26524:8;-1:-1:-1;;;;;2262:22:0;;2254:67;;;;;-1:-1:-1;;;2254:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2254:67:0;;;;;;;;;;;;;;;26559:5;;;-1:-1:-1;;;;;26575:16:0;;;-1:-1:-1;;;;;;26575:16:0;;;;;;;26607:36;;26559:5;;;;26632:10;;26625:5;;;26559;;26607:36;;26545:11;;26607:36;2332:1;2936;26437:214;:::o;28322:137::-;28364:95;;;;;;;;;;;;;;;;;;28322:137;:::o;28058:21::-;;;;;;:::o;31989:218::-;32130:17;;32040:7;;32097:9;;32124:23;;:75;;32170:29;32196:2;32170:25;:29::i;:::-;32124:75;;;32150:17;;32124:75;32117:82;;;31989:218;:::o;24700:35::-;;;-1:-1:-1;;;;;24700:35:0;;:::o;14951:206::-;15057:10;15031:4;15078:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15078:32:0;;;;;;;;;;15031:4;;15048:79;;15069:7;;15078:48;;15115:10;15078:48;:36;:48;:::i;:::-;15048:8;:79::i;3192:122::-;2777:6;;-1:-1:-1;;;;;2777:6:0;2763:10;:20;2755:61;;;;;-1:-1:-1;;;2755:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2994:6;;-1:-1:-1;;;2994:6:0;;;;2986:48;;;;;-1:-1:-1;;;2986:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3251:6;:14;;-1:-1:-1;;;;3251:14:0;;;;;3281:25;;;-1:-1:-1;;;3287:6:0;;;3251:14;3287:6;3281:25;;;;;3295:10;;3281:25;;;;;;;;;;3192:122::o;28278:37::-;;;;;;;;;;;;;;-1:-1:-1;;;28278:37:0;;;;:::o;26659:224::-;25810:5;;-1:-1:-1;;;;;25810:5:0;25796:10;:19;25788:59;;;;;-1:-1:-1;;;25788:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25788:59:0;;;;;;;;;;;;;;;2889:6;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;26748:8;-1:-1:-1;;;;;2262:22:0;;2254:67;;;;;-1:-1:-1;;;2254:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2254:67:0;;;;;;;;;;;;;;;26783:7;;;-1:-1:-1;;;;;26801:18:0;;;-1:-1:-1;;;;;;26801:18:0;;;;;;;26835:40;;26783:7;;;;26864:10;;26855:7;;;26783;;26835:40;;26769:11;;26835:40;2332:1;2936;26659:224;:::o;2630:26::-;;;-1:-1:-1;;;2630:26:0;;;;;:::o;4296:246::-;3677:10;;-1:-1:-1;;;;;3677:10:0;3663;:24;3655:69;;;;;-1:-1:-1;;;3655:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2889:6;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;4387:8;-1:-1:-1;;;;;2262:22:0;;2254:67;;;;;-1:-1:-1;;;2254:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2254:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3958:21:0;;;;;;:11;:21;;;;;;4412:8;;3958:21;;3950:64;;;;;-1:-1:-1;;;3950:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4433:21:0;;4457:5;4433:21;;;:11;:21;;;;;;;;:29;;-1:-1:-1;;4433:29:0;;;4478:56;;;;;;4523:10;;4433:21;4478:56;;;;;;;;;2332:1;2936;4296:246;:::o;12844:110::-;-1:-1:-1;;;;;12928:18:0;12901:7;12928:18;;;:9;:18;;;;;;;12844:110::o;31403:164::-;28686:9;;-1:-1:-1;;;;;28686:9:0;28672:10;:23;28664:48;;;;;-1:-1:-1;;;28664:48:0;;;;;;;;;;;;-1:-1:-1;;;28664:48:0;;;;;;;;;;;;;;;31488:22;31494:7;31503:6;31488:5;:22::i;:::-;31526:33;;;;;;;;31548:10;;-1:-1:-1;;;;;31526:33:0;;;;;;;;;;;;31403:164;;:::o;28227:42::-;;;;;;;;;;;;;:::o;3062:122::-;2777:6;;-1:-1:-1;;;;;2777:6:0;2763:10;:20;2755:61;;;;;-1:-1:-1;;;2755:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2889:6;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;3122:6;:13;;-1:-1:-1;;;;3122:13:0;-1:-1:-1;;;3122:13:0;;;;;;;3151:25;;;3157:6;;;;3122:13;3157:6;3151:25;;;;;;3165:10;;3151:25;;;;;;;;;;3062:122::o;31050:164::-;28686:9;;-1:-1:-1;;;;;28686:9:0;28672:10;:23;28664:48;;;;;-1:-1:-1;;;28664:48:0;;;;;;;;;;;;-1:-1:-1;;;28664:48:0;;;;;;;;;;;;;;;31135:22;31141:7;31150:6;31135:5;:22::i;:::-;31173:33;;;;;;;;31195:10;;-1:-1:-1;;;;;31173:33:0;;;;;;;;;;;;31050:164;;:::o;26988:33::-;;;-1:-1:-1;;;;;26988:33:0;;:::o;27676:200::-;27288:5;;-1:-1:-1;;;;;27288:5:0;27274:10;:19;27266:59;;;;;-1:-1:-1;;;27266:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27749:8;-1:-1:-1;;;;;2262:22:0;;2254:67;;;;;-1:-1:-1;;;2254:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2254:67:0;;;;;;;;;;;;;;;27784:5;;;-1:-1:-1;;;;;27800:16:0;;;-1:-1:-1;;;;;;27800:16:0;;;;;;;27832:36;;27784:5;;;;27857:10;;27850:5;;;27784;;27832:36;;27770:11;;27832:36;2332:1;27336;27676:200;:::o;28117:24::-;;;-1:-1:-1;;;;;28117:24:0;;:::o;28031:20::-;;;;;;;;;;;;;;;-1:-1:-1;;28031:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19506:221;2889:6;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;19441:5;;-1:-1:-1;;;;;19441:5:0;19427:10;:19;19419:59;;;;;-1:-1:-1;;;19419:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3958:21:0;;;;;;:11;:21;;;;;;19584:8;;3958:21;;3950:64;;;;;-1:-1:-1;;;3950:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19605:16;19624:19;19634:8;19624:9;:19::i;:::-;19605:38;;19654:25;19660:8;19670;19654:5;:25::i;:::-;19695:24;;;;;;;;-1:-1:-1;;;;;19695:24:0;;;;;;;;;;;;;4025:1;19489;19506:221;:::o;2589:34::-;;;-1:-1:-1;;;;;2589:34:0;;:::o;15660:216::-;15771:10;15745:4;15792:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15792:32:0;;;;;;;;;;15745:4;;15762:84;;15783:7;;15792:53;;15829:15;15792:53;:36;:53;:::i;27353:214::-;27288:5;;-1:-1:-1;;;;;27288:5:0;27274:10;:19;27266:59;;;;;-1:-1:-1;;;27266:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2889:6;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;27440:8;-1:-1:-1;;;;;2262:22:0;;2254:67;;;;;-1:-1:-1;;;2254:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2254:67:0;;;;;;;;;;;;;;;27475:5;;;-1:-1:-1;;;;;27491:16:0;;;-1:-1:-1;;;;;;27491:16:0;;;;;;;27523:36;;27475:5;;;;27548:10;;27541:5;;;27475;;27523:36;;27461:11;;27523:36;2332:1;2936;27353:214;:::o;30259:259::-;2889:6;;30429:4;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;30353:10;3817:21;;;;:11;:21;;;;;;;;3816:22;3808:61;;;;;-1:-1:-1;;;3808:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3808:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3817:21:0;;;;;;:11;:21;;;;;;30383:10;;3817:21;;3816:22;3808:61;;;;;-1:-1:-1;;;3808:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3808:61:0;;;;;;;;;;;;;;;30411:7;2414;2410:1;:11;2402:59;;;;-1:-1:-1;;;2402:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30446:42;30456:10;30468;30480:7;30446:9;:42::i;:::-;-1:-1:-1;30506:4:0;;30259:259;-1:-1:-1;;;;;30259:259:0:o;28086:24::-;;;;;;-1:-1:-1;;;;;28086:24:0;;:::o;4042:246::-;3677:10;;-1:-1:-1;;;;;3677:10:0;3663;:24;3655:69;;;;;-1:-1:-1;;;3655:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2889:6;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;4131:8;-1:-1:-1;;;;;2262:22:0;;2254:67;;;;;-1:-1:-1;;;2254:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2254:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3817:21:0;;;;;;:11;:21;;;;;;4159:8;;3817:21;;3816:22;3808:61;;;;;-1:-1:-1;;;3808:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3808:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4180:21:0;;;;;;:11;:21;;;;;;;;;:28;;-1:-1:-1;;4180:28:0;4204:4;4180:28;;;;;4224:56;;4180:28;4246:21;;;;4224:56;;;;;;4269:10;;4180:21;4224:56;;;;;;;;;2332:1;2936;4042:246;:::o;28188:32::-;;;;:::o;26190:239::-;25810:5;;-1:-1:-1;;;;;25810:5:0;25796:10;:19;25788:59;;;;;-1:-1:-1;;;25788:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25788:59:0;;;;;;;;;;;;;;;2889:6;;-1:-1:-1;;;2889:6:0;;;;2888:7;2880:45;;;;;-1:-1:-1;;;2880:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2880:45:0;;;;;;;;;;;;;;;26282:8;-1:-1:-1;;;;;2262:22:0;;2254:67;;;;;-1:-1:-1;;;2254:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2254:67:0;;;;;;;;;;;;;;;26317:10;;;-1:-1:-1;;;;;26338:21:0;;;-1:-1:-1;;;;;;26338:21:0;;;;;;;26375:46;;26317:10;;;;26410;;26398;;;26317;;26375:46;;26303:11;;26375:46;2332:1;2936;26190:239;:::o;32215:831::-;32374:8;32355:15;:27;;32347:54;;;;;-1:-1:-1;;;32347:54:0;;;;;;;;;;;;-1:-1:-1;;;32347:54:0;;;;;;;;;;;;;;;32583:17;;32451:9;;32414:10;;32577:23;;:75;;32623:29;32649:2;32623:25;:29::i;:::-;32577:75;;;32603:17;;32577:75;28364:95;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32818:13:0;;;;;;;:6;:13;;;;;;;;:15;;;;;;;;32681:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;32681:198:0;;;;;32671:209;;;;;;-1:-1:-1;;;32513:382:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;32513:382:0;;;;;;;32503:393;;;;;;;;;;;-1:-1:-1;;32917:19:0;;;;:58;;-1:-1:-1;32949:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32949:26:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32949:26:0;;;;;;;;-1:-1:-1;;;;;32940:35:0;:5;-1:-1:-1;;;;;32940:35:0;;32917:58;32909:85;;;;;-1:-1:-1;;;32909:85:0;;;;;;;;;;;;-1:-1:-1;;;32909:85:0;;;;;;;;;;;;;;;33007:31;33016:5;33023:7;33032:5;33007:8;:31::i;:::-;32215:831;;;;;;;;;:::o;19290:33::-;;;-1:-1:-1;;;;;19290:33:0;;:::o;13386:134::-;-1:-1:-1;;;;;13485:18:0;;;13458:7;13485:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13386:134::o;3430:38::-;;;-1:-1:-1;;;;;3430:38:0;;:::o;25284:33::-;;;-1:-1:-1;;;;;25284:33:0;;:::o;18462:335::-;-1:-1:-1;;;;;18555:19:0;;18547:68;;;;-1:-1:-1;;;18547:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18634:21:0;;18626:68;;;;-1:-1:-1;;;18626:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18707:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;18758:31;;;;;;;;;;;;;;;;;18462:335;;;:::o;1519:476::-;1959:7;1947:20;1982:7;1519:476;:::o;31575:406::-;31649:7;31725:95;;;;;;;;;;;;;;;;;;;31851:4;31835:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31835:22:0;;;;;;;;;31888:7;;;;;;;;-1:-1:-1;;;31888:7:0;;;;;31700:262;;;;;;;;;;;;;31872:25;31700:262;;;;;;;;;;31942:4;31700:262;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;31700:262:0;;;;;;31676:297;;;;;;;;;-1:-1:-1;;;31575:406:0;;;:::o;21444:176::-;21553:58;;;-1:-1:-1;;;;;21553:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21553:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21527:85:0;;21546:5;;21527:18;:85::i;:::-;21444:176;;;:::o;14286:256::-;14375:4;14392:36;14402:6;14410:9;14421:6;14392:9;:36::i;:::-;-1:-1:-1;;;;;14468:19:0;;;;;;:11;:19;;;;;;;;14456:10;14468:31;;;;;;;;;14439:73;;14448:6;;14468:43;;14504:6;14468:43;:35;:43;:::i;14439:73::-;-1:-1:-1;14530:4:0;14286:256;;;;;:::o;8349:181::-;8407:7;8439:5;;;8463:6;;;;8455:46;;;;;-1:-1:-1;;;8455:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8521:1;8349:181;-1:-1:-1;;;8349:181:0:o;17716:306::-;-1:-1:-1;;;;;17791:21:0;;17783:67;;;;-1:-1:-1;;;17783:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17878:12;;:23;;17895:5;17878:23;:16;:23;:::i;:::-;17863:12;:38;-1:-1:-1;;;;;17933:18:0;;;;;;:9;:18;;;;;;:29;;17956:5;17933:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;17912:18:0;;;;;;:9;:18;;;;;;;;:50;;;;17978:36;;;;;;;17912:18;;17978:36;;;;;;;;;;;17716:306;;:::o;17076:308::-;-1:-1:-1;;;;;17152:21:0;;17144:65;;;;;-1:-1:-1;;;17144:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17237:12;;:24;;17254:6;17237:24;:16;:24;:::i;:::-;17222:12;:39;-1:-1:-1;;;;;17293:18:0;;;;;;:9;:18;;;;;;:30;;17316:6;17293:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;17272:18:0;;;;;;:9;:18;;;;;;;;:51;;;;17339:37;;;;;;;17272:18;;;;17339:37;;;;;;;;;;17076:308;;:::o;8805:184::-;8863:7;8896:1;8891;:6;;8883:49;;;;;-1:-1:-1;;;8883:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8955:5:0;;;8805:184::o;16366:429::-;-1:-1:-1;;;;;16464:20:0;;16456:70;;;;-1:-1:-1;;;16456:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16545:23:0;;16537:71;;;;-1:-1:-1;;;16537:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16641:17:0;;;;;;:9;:17;;;;;;:29;;16663:6;16641:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;16621:17:0;;;;;;;:9;:17;;;;;;:49;;;;16704:20;;;;;;;:32;;16729:6;16704:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;16681:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;16752:35;;;;;;;16681:20;;16752:35;;;;;;;;;;;;;16366:429;;;:::o;23438:1114::-;24042:27;24050:5;-1:-1:-1;;;;;24042:25:0;;:27::i;:::-;24034:71;;;;;-1:-1:-1;;;24034:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24179:12;24193:23;24228:5;-1:-1:-1;;;;;24220:19:0;24240:4;24220:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;24220:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;24178:67:0;;;;24264:7;24256:52;;;;;-1:-1:-1;;;24256:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24325:17;;:21;24321:224;;24467:10;24456:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24456:30:0;24448:85;;;;-1:-1:-1;;;24448:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23438:1114;;;;:::o;20354:422::-;20721:20;20760:8;;;20354:422::o;27952:5097::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27952:5097:0;;;-1:-1:-1;27952:5097:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://fd1cfaebff778e3ee345eb05da575fd9788a7df4cf602444b1ee3038367832b2
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.