ETH Price: $2,640.35 (+0.83%)

Token

PayPal USD (PYUSD)
 

Overview

Max Total Supply

0 PYUSD

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PYUSDImplementation

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-07
*/

// File: contracts/zeppelin/SafeMath.sol

pragma solidity ^0.4.24;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    /**
    * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two numbers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }
}

// File: contracts/PYUSDImplementation.sol

pragma solidity ^0.4.24;
pragma experimental "v0.5.0";



/**
 * @title PYUSDImplementation
 * @dev this contract is a Pausable ERC20 token with Burn and Mint
 * controlled by a central SupplyController. By implementing PYUSDImplementation
 * this contract also includes external methods for setting
 * a new implementation contract for the Proxy.
 * NOTE: The storage defined here will actually be held in the Proxy
 * contract and all calls to this contract should be made through
 * the proxy, including admin actions done as owner or supplyController.
 * Any call to transfer against this contract should fail
 * with insufficient funds since no tokens will be issued there.
 */
contract PYUSDImplementation {

    /**
     * MATH
     */

    using SafeMath for uint256;

    /**
     * DATA
     */

    // INITIALIZATION DATA
    bool private initialized;

    // ERC20 BASIC DATA
    mapping(address => uint256) internal balances;
    uint256 internal totalSupply_;
    string public constant name = "PayPal USD"; // solium-disable-line
    string public constant symbol = "PYUSD"; // solium-disable-line uppercase
    uint8 public constant decimals = 6; // solium-disable-line uppercase

    // ERC20 DATA
    mapping(address => mapping(address => uint256)) internal allowed;

    // OWNER DATA PART 1
    address public owner;

    // PAUSABILITY DATA
    bool public paused;

    // ASSET PROTECTION DATA
    address public assetProtectionRole;
    mapping(address => bool) internal frozen;

    // SUPPLY CONTROL DATA
    address public supplyController;

    // OWNER DATA PART 2
    address public proposedOwner;

    // DELEGATED TRANSFER DATA
    address public betaDelegateWhitelister;
    mapping(address => bool) internal betaDelegateWhitelist;
    mapping(address => uint256) internal nextSeqs;
    // EIP191 header for EIP712 prefix
    string constant internal EIP191_HEADER = "\x19\x01";
    // Hash of the EIP712 Domain Separator Schema
    bytes32 constant internal EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(
        "EIP712Domain(string name,address verifyingContract)"
    );
    bytes32 constant internal EIP712_DELEGATED_TRANSFER_SCHEMA_HASH = keccak256(
        "BetaDelegatedTransfer(address to,uint256 value,uint256 fee,uint256 seq,uint256 deadline)"
    );
    // Hash of the EIP712 Domain Separator data
    // solhint-disable-next-line var-name-mixedcase
    bytes32 public EIP712_DOMAIN_HASH;

    /**
     * EVENTS
     */

    // ERC20 BASIC EVENTS
    event Transfer(address indexed from, address indexed to, uint256 value);

    // ERC20 EVENTS
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    // OWNABLE EVENTS
    event OwnershipTransferProposed(
        address indexed currentOwner,
        address indexed proposedOwner
    );
    event OwnershipTransferDisregarded(
        address indexed oldProposedOwner
    );
    event OwnershipTransferred(
        address indexed oldOwner,
        address indexed newOwner
    );

    // PAUSABLE EVENTS
    event Pause();
    event Unpause();

    // ASSET PROTECTION EVENTS
    event AddressFrozen(address indexed addr);
    event AddressUnfrozen(address indexed addr);
    event FrozenAddressWiped(address indexed addr);
    event AssetProtectionRoleSet (
        address indexed oldAssetProtectionRole,
        address indexed newAssetProtectionRole
    );

    // SUPPLY CONTROL EVENTS
    event SupplyIncreased(address indexed to, uint256 value);
    event SupplyDecreased(address indexed from, uint256 value);
    event SupplyControllerSet(
        address indexed oldSupplyController,
        address indexed newSupplyController
    );

    // DELEGATED TRANSFER EVENTS
    event BetaDelegatedTransfer(
        address indexed from, address indexed to, uint256 value, uint256 seq, uint256 fee
    );
    event BetaDelegateWhitelisterSet(
        address indexed oldWhitelister,
        address indexed newWhitelister
    );
    event BetaDelegateWhitelisted(address indexed newDelegate);
    event BetaDelegateUnwhitelisted(address indexed oldDelegate);

    /**
     * FUNCTIONALITY
     */

    // INITIALIZATION FUNCTIONALITY

    /**
     * @dev sets 0 initials tokens, the owner, and the supplyController.
     * this serves as the constructor for the proxy but compiles to the
     * memory model of the Implementation contract.
     */
    function initialize() public {
        require(!initialized, "MANDATORY VERIFICATION REQUIRED: The proxy has already been initialized, verify the owner and supply controller addresses.");
        owner = msg.sender;
        assetProtectionRole = address(0);
        totalSupply_ = 0;
        supplyController = msg.sender;
        initializeDomainSeparator();
        initialized = true;
    }

    /**
     * The constructor is used here to ensure that the implementation
     * contract is initialized. An uncontrolled implementation
     * contract might lead to misleading state
     * for users who accidentally interact with it.
     */
    constructor() public {
        initialize();
        pause();
    }

    /**
     * @dev To be called when upgrading the contract using upgradeAndCall to add delegated transfers
     */
    function initializeDomainSeparator() private {
        // hash the name context with the contract address
        EIP712_DOMAIN_HASH = keccak256(abi.encodePacked(// solium-disable-line
                EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,
                keccak256(bytes(name)),
                bytes32(address(this))
            ));
    }

    // ERC20 BASIC FUNCTIONALITY

    /**
    * @dev Total number of tokens in existence
    */
    function totalSupply() public view returns (uint256) {
        return totalSupply_;
    }

    /**
    * @dev Transfer token to a specified address from msg.sender
    * Note: the use of Safemath ensures that _value is nonnegative.
    * @param _to The address to transfer to.
    * @param _value The amount to be transferred.
    */
    function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
        require(_to != address(0), "cannot transfer to address zero");
        require(!frozen[_to] && !frozen[msg.sender], "address frozen");
        require(_value <= balances[msg.sender], "insufficient funds");

        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    /**
    * @dev Gets the balance of the specified address.
    * @param _addr The address to query the the balance of.
    * @return An uint256 representing the amount owned by the passed address.
    */
    function balanceOf(address _addr) public view returns (uint256) {
        return balances[_addr];
    }

    // ERC20 FUNCTIONALITY

    /**
     * @dev Transfer tokens from one address to another
     * @param _from address The address which you want to send tokens from
     * @param _to address The address which you want to transfer to
     * @param _value uint256 the amount of tokens to be transferred
     */
    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    )
    public
    whenNotPaused
    returns (bool)
    {
        require(_to != address(0), "cannot transfer to address zero");
        require(!frozen[_to] && !frozen[_from] && !frozen[msg.sender], "address frozen");
        require(_value <= balances[_from], "insufficient funds");
        require(_value <= allowed[_from][msg.sender], "insufficient allowance");

        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        emit Transfer(_from, _to, _value);
        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * 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
     * @param _spender The address which will spend the funds.
     * @param _value The amount of tokens to be spent.
     */
    function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) {
        require(!frozen[_spender] && !frozen[msg.sender], "address frozen");
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     *
     * To increment allowed value is better to use this function to avoid 2 calls (and wait until the first transaction
     * is mined) instead of approve.
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     */
    function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool) {
        require(!frozen[_spender] && !frozen[msg.sender], "address frozen");
        allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     *
     * To decrement allowed value is better to use this function to avoid 2 calls (and wait until the first transaction
     * is mined) instead of approve.
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool) {
        require(!frozen[_spender] && !frozen[msg.sender], "address frozen");
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param _owner address The address which owns the funds.
     * @param _spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(
        address _owner,
        address _spender
    )
    public
    view
    returns (uint256)
    {
        return allowed[_owner][_spender];
    }

    // OWNER FUNCTIONALITY

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner, "onlyOwner");
        _;
    }

    /**
         * @dev Allows the current owner to begin transferring control of the contract to a proposedOwner
         * @param _proposedOwner The address to transfer ownership to.
         */
    function proposeOwner(address _proposedOwner) public onlyOwner {
        require(_proposedOwner != address(0), "cannot transfer ownership to address zero");
        require(msg.sender != _proposedOwner, "caller already is owner");
        proposedOwner = _proposedOwner;
        emit OwnershipTransferProposed(owner, proposedOwner);
    }
    /**
     * @dev Allows the current owner or proposed owner to cancel transferring control of the contract to a proposedOwner
     */
    function disregardProposeOwner() public {
        require(msg.sender == proposedOwner || msg.sender == owner, "only proposedOwner or owner");
        require(proposedOwner != address(0), "can only disregard a proposed owner that was previously set");
        address _oldProposedOwner = proposedOwner;
        proposedOwner = address(0);
        emit OwnershipTransferDisregarded(_oldProposedOwner);
    }
    /**
     * @dev Allows the proposed owner to complete transferring control of the contract to the proposedOwner.
     */
    function claimOwnership() public {
        require(msg.sender == proposedOwner, "onlyProposedOwner");
        address _oldOwner = owner;
        owner = proposedOwner;
        proposedOwner = address(0);
        emit OwnershipTransferred(_oldOwner, owner);
    }

    /**
     * @dev Reclaim all PYUSD at the contract address.
     * This sends the PYUSD tokens that this contract add holding to the owner.
     * Note: this is not affected by freeze constraints.
     */
    function reclaimPYUSD() external onlyOwner {
        uint256 _balance = balances[this];
        balances[this] = 0;
        balances[owner] = balances[owner].add(_balance);
        emit Transfer(this, owner, _balance);
    }

    // PAUSABILITY FUNCTIONALITY

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!paused, "whenNotPaused");
        _;
    }

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() public onlyOwner {
        require(!paused, "already paused");
        paused = true;
        emit Pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() public onlyOwner {
        require(paused, "already unpaused");
        paused = false;
        emit Unpause();
    }

    // ASSET PROTECTION FUNCTIONALITY

    /**
     * @dev Sets a new asset protection role address.
     * @param _newAssetProtectionRole The new address allowed to freeze/unfreeze addresses and seize their tokens.
     */
    function setAssetProtectionRole(address _newAssetProtectionRole) public {
        require(msg.sender == assetProtectionRole || msg.sender == owner, "only assetProtectionRole or Owner");
        require(assetProtectionRole != _newAssetProtectionRole, "new address is same as a current one");
        emit AssetProtectionRoleSet(assetProtectionRole, _newAssetProtectionRole);
        assetProtectionRole = _newAssetProtectionRole;
    }

    modifier onlyAssetProtectionRole() {
        require(msg.sender == assetProtectionRole, "onlyAssetProtectionRole");
        _;
    }

    /**
     * @dev Freezes an address balance from being transferred.
     * @param _addr The new address to freeze.
     */
    function freeze(address _addr) public onlyAssetProtectionRole {
        require(!frozen[_addr], "address already frozen");
        frozen[_addr] = true;
        emit AddressFrozen(_addr);
    }

    /**
     * @dev Unfreezes an address balance allowing transfer.
     * @param _addr The new address to unfreeze.
     */
    function unfreeze(address _addr) public onlyAssetProtectionRole {
        require(frozen[_addr], "address already unfrozen");
        frozen[_addr] = false;
        emit AddressUnfrozen(_addr);
    }

    /**
     * @dev Wipes the balance of a frozen address, and burns the tokens.
     * @param _addr The new frozen address to wipe.
     */
    function wipeFrozenAddress(address _addr) public onlyAssetProtectionRole {
        require(frozen[_addr], "address is not frozen");
        uint256 _balance = balances[_addr];
        balances[_addr] = 0;
        totalSupply_ = totalSupply_.sub(_balance);
        emit FrozenAddressWiped(_addr);
        emit SupplyDecreased(_addr, _balance);
        emit Transfer(_addr, address(0), _balance);
    }

    /**
    * @dev Gets whether the address is currently frozen.
    * @param _addr The address to check if frozen.
    * @return A bool representing whether the given address is frozen.
    */
    function isFrozen(address _addr) public view returns (bool) {
        return frozen[_addr];
    }

    // SUPPLY CONTROL FUNCTIONALITY

    /**
     * @dev Sets a new supply controller address.
     * @param _newSupplyController The address allowed to burn/mint tokens to control supply.
     */
    function setSupplyController(address _newSupplyController) public {
        require(msg.sender == supplyController || msg.sender == owner, "only SupplyController or Owner");
        require(_newSupplyController != address(0), "cannot set supply controller to address zero");
        require(supplyController != _newSupplyController, "new address is same as a current one");
        emit SupplyControllerSet(supplyController, _newSupplyController);
        supplyController = _newSupplyController;
    }

    modifier onlySupplyController() {
        require(msg.sender == supplyController, "onlySupplyController");
        _;
    }

    /**
     * @dev Increases the total supply by minting the specified number of tokens to the supply controller account.
     * @param _value The number of tokens to add.
     * @return A boolean that indicates if the operation was successful.
     */
    function increaseSupply(uint256 _value) public onlySupplyController returns (bool success) {
        totalSupply_ = totalSupply_.add(_value);
        balances[supplyController] = balances[supplyController].add(_value);
        emit SupplyIncreased(supplyController, _value);
        emit Transfer(address(0), supplyController, _value);
        return true;
    }

    /**
     * @dev Decreases the total supply by burning the specified number of tokens from the supply controller account.
     * @param _value The number of tokens to remove.
     * @return A boolean that indicates if the operation was successful.
     */
    function decreaseSupply(uint256 _value) public onlySupplyController returns (bool success) {
        require(_value <= balances[supplyController], "not enough supply");
        balances[supplyController] = balances[supplyController].sub(_value);
        totalSupply_ = totalSupply_.sub(_value);
        emit SupplyDecreased(supplyController, _value);
        emit Transfer(supplyController, address(0), _value);
        return true;
    }

    // DELEGATED TRANSFER FUNCTIONALITY

    /**
     * @dev returns the next seq for a target address.
     * The transactor must submit nextSeqOf(transactor) in the next transaction for it to be valid.
     * Note: that the seq context is specific to this smart contract.
     * @param target The target address.
     * @return the seq.
     */
    //
    function nextSeqOf(address target) public view returns (uint256) {
        return nextSeqs[target];
    }

    /**
     * @dev Performs a transfer on behalf of the from address, identified by its signature on the delegatedTransfer msg.
     * Splits a signature byte array into r,s,v for convenience.
     * @param sig the signature of the delgatedTransfer msg.
     * @param to The address to transfer to.
     * @param value The amount to be transferred.
     * @param fee an optional ERC20 fee paid to the executor of betaDelegatedTransfer by the from address.
     * @param seq a sequencing number included by the from address specific to this contract to protect from replays.
     * @param deadline a block number after which the pre-signed transaction has expired.
     * @return A boolean that indicates if the operation was successful.
     */
    function betaDelegatedTransfer(
        bytes sig, address to, uint256 value, uint256 fee, uint256 seq, uint256 deadline
    ) public returns (bool) {
        require(sig.length == 65, "signature should have length 65");
        bytes32 r;
        bytes32 s;
        uint8 v;
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            v := byte(0, mload(add(sig, 96)))
        }
        _betaDelegatedTransfer(r, s, v, to, value, fee, seq, deadline);
        return true;
    }

    /**
     * @dev Performs a transfer on behalf of the from address, identified by its signature on the betaDelegatedTransfer msg.
     * Note: both the delegate and transactor sign in the fees. The transactor, however,
     * has no control over the gas price, and therefore no control over the transaction time.
     * Beta prefix chosen to avoid a name clash with an emerging standard in ERC865 or elsewhere.
     * Internal to the contract - see betaDelegatedTransfer and betaDelegatedTransferBatch.
     * @param r the r signature of the delgatedTransfer msg.
     * @param s the s signature of the delgatedTransfer msg.
     * @param v the v signature of the delgatedTransfer msg.
     * @param to The address to transfer to.
     * @param value The amount to be transferred.
     * @param fee an optional ERC20 fee paid to the delegate of betaDelegatedTransfer by the from address.
     * @param seq a sequencing number included by the from address specific to this contract to protect from replays.
     * @param deadline a block number after which the pre-signed transaction has expired.
     * @return A boolean that indicates if the operation was successful.
     */
    function _betaDelegatedTransfer(
        bytes32 r, bytes32 s, uint8 v, address to, uint256 value, uint256 fee, uint256 seq, uint256 deadline
    ) internal whenNotPaused returns (bool) {
        require(betaDelegateWhitelist[msg.sender], "Beta feature only accepts whitelisted delegates");
        require(value > 0 || fee > 0, "cannot transfer zero tokens with zero fee");
        require(block.number <= deadline, "transaction expired");
        // prevent sig malleability from ecrecover()
        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "signature incorrect");
        require(v == 27 || v == 28, "signature incorrect");

        // EIP712 scheme: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md
        bytes32 delegatedTransferHash = keccak256(abi.encodePacked(// solium-disable-line
                EIP712_DELEGATED_TRANSFER_SCHEMA_HASH, bytes32(to), value, fee, seq, deadline
            ));
        bytes32 hash = keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, delegatedTransferHash));
        address _from = ecrecover(hash, v, r, s);

        require(_from != address(0), "error determining from address from signature");
        require(to != address(0), "canno use address zero");
        require(!frozen[to] && !frozen[_from] && !frozen[msg.sender], "address frozen");
        require(value.add(fee) <= balances[_from], "insufficient fund");
        require(nextSeqs[_from] == seq, "incorrect seq");

        nextSeqs[_from] = nextSeqs[_from].add(1);
        balances[_from] = balances[_from].sub(value.add(fee));
        if (fee != 0) {
            balances[msg.sender] = balances[msg.sender].add(fee);
            emit Transfer(_from, msg.sender, fee);
        }
        balances[to] = balances[to].add(value);
        emit Transfer(_from, to, value);

        emit BetaDelegatedTransfer(_from, to, value, seq, fee);
        return true;
    }

    /**
     * @dev Performs an atomic batch of transfers on behalf of the from addresses, identified by their signatures.
     * Lack of nested array support in arguments requires all arguments to be passed as equal size arrays where
     * delegated transfer number i is the combination of all arguments at index i
     * @param r the r signatures of the delgatedTransfer msg.
     * @param s the s signatures of the delgatedTransfer msg.
     * @param v the v signatures of the delgatedTransfer msg.
     * @param to The addresses to transfer to.
     * @param value The amounts to be transferred.
     * @param fee optional ERC20 fees paid to the delegate of betaDelegatedTransfer by the from address.
     * @param seq sequencing numbers included by the from address specific to this contract to protect from replays.
     * @param deadline block numbers after which the pre-signed transactions have expired.
     * @return A boolean that indicates if the operation was successful.
     */
    function betaDelegatedTransferBatch(
        bytes32[] r, bytes32[] s, uint8[] v, address[] to, uint256[] value, uint256[] fee, uint256[] seq, uint256[] deadline
    ) public returns (bool) {
        require(r.length == s.length && r.length == v.length && r.length == to.length && r.length == value.length, "length mismatch");
        require(r.length == fee.length && r.length == seq.length && r.length == deadline.length, "length mismatch");

        for (uint i = 0; i < r.length; i++) {
            _betaDelegatedTransfer(r[i], s[i], v[i], to[i], value[i], fee[i], seq[i], deadline[i]);
        }
        return true;
    }

    /**
    * @dev Gets whether the address is currently whitelisted for betaDelegateTransfer.
    * @param _addr The address to check if whitelisted.
    * @return A bool representing whether the given address is whitelisted.
    */
    function isWhitelistedBetaDelegate(address _addr) public view returns (bool) {
        return betaDelegateWhitelist[_addr];
    }

    /**
     * @dev Sets a new betaDelegate whitelister.
     * @param _newWhitelister The address allowed to whitelist betaDelegates.
     */
    function setBetaDelegateWhitelister(address _newWhitelister) public {
        require(msg.sender == betaDelegateWhitelister || msg.sender == owner, "only Whitelister or Owner");
        require(betaDelegateWhitelister != _newWhitelister, "new address is same as a current one");
        betaDelegateWhitelister = _newWhitelister;
        emit BetaDelegateWhitelisterSet(betaDelegateWhitelister, _newWhitelister);
    }

    modifier onlyBetaDelegateWhitelister() {
        require(msg.sender == betaDelegateWhitelister, "onlyBetaDelegateWhitelister");
        _;
    }

    /**
     * @dev Whitelists an address to allow calling BetaDelegatedTransfer.
     * @param _addr The new address to whitelist.
     */
    function whitelistBetaDelegate(address _addr) public onlyBetaDelegateWhitelister {
        require(!betaDelegateWhitelist[_addr], "delegate already whitelisted");
        betaDelegateWhitelist[_addr] = true;
        emit BetaDelegateWhitelisted(_addr);
    }

    /**
     * @dev Unwhitelists an address to disallow calling BetaDelegatedTransfer.
     * @param _addr The new address to whitelist.
     */
    function unwhitelistBetaDelegate(address _addr) public onlyBetaDelegateWhitelister {
        require(betaDelegateWhitelist[_addr], "delegate not whitelisted");
        betaDelegateWhitelist[_addr] = false;
        emit BetaDelegateUnwhitelisted(_addr);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"disregardProposeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"assetProtectionRole","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"r","type":"bytes32[]"},{"name":"s","type":"bytes32[]"},{"name":"v","type":"uint8[]"},{"name":"to","type":"address[]"},{"name":"value","type":"uint256[]"},{"name":"fee","type":"uint256[]"},{"name":"seq","type":"uint256[]"},{"name":"deadline","type":"uint256[]"}],"name":"betaDelegatedTransferBatch","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"sig","type":"bytes"},{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"seq","type":"uint256"},{"name":"deadline","type":"uint256"}],"name":"betaDelegatedTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"unfreeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newSupplyController","type":"address"}],"name":"setSupplyController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"target","type":"address"}],"name":"nextSeqOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAssetProtectionRole","type":"address"}],"name":"setAssetProtectionRole","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"freeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newWhitelister","type":"address"}],"name":"setBetaDelegateWhitelister","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"decreaseSupply","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isWhitelistedBetaDelegate","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"whitelistBetaDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reclaimPYUSD","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_proposedOwner","type":"address"}],"name":"proposeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"increaseSupply","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"betaDelegateWhitelister","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"unwhitelistBetaDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"wipeFrozenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"EIP712_DOMAIN_HASH","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isFrozen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"supplyController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"currentOwner","type":"address"},{"indexed":true,"name":"proposedOwner","type":"address"}],"name":"OwnershipTransferProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldProposedOwner","type":"address"}],"name":"OwnershipTransferDisregarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"}],"name":"AddressFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"}],"name":"AddressUnfrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"}],"name":"FrozenAddressWiped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAssetProtectionRole","type":"address"},{"indexed":true,"name":"newAssetProtectionRole","type":"address"}],"name":"AssetProtectionRoleSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"SupplyIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"SupplyDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldSupplyController","type":"address"},{"indexed":true,"name":"newSupplyController","type":"address"}],"name":"SupplyControllerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"seq","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"BetaDelegatedTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldWhitelister","type":"address"},{"indexed":true,"name":"newWhitelister","type":"address"}],"name":"BetaDelegateWhitelisterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newDelegate","type":"address"}],"name":"BetaDelegateWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldDelegate","type":"address"}],"name":"BetaDelegateUnwhitelisted","type":"event"}]

60806040523480156200001157600080fd5b50620000256401000000006200003e810204565b6200003864010000000062000174810204565b6200043d565b60005460ff16156200012357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152607a60248201527f4d414e4441544f525920564552494649434154494f4e2052455155495245443a60448201527f205468652070726f78792068617320616c7265616479206265656e20696e697460648201527f69616c697a65642c2076657269667920746865206f776e657220616e6420737560848201527f70706c7920636f6e74726f6c6c6572206164647265737365732e00000000000060a482015290519081900360c40190fd5b6004805433600160a060020a031991821681179092556005805482169055600060025560078054909116909117905562000165640100000000620002cb810204565b6000805460ff19166001179055565b600454600160a060020a03163314620001ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6f6e6c794f776e65720000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60045474010000000000000000000000000000000000000000900460ff16156200027957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f616c726561647920706175736564000000000000000000000000000000000000604482015290519081900360640190fd5b6004805460a060020a60ff021916740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b604080517f454950373132446f6d61696e28737472696e67206e616d652c6164647265737381527f20766572696679696e67436f6e7472616374290000000000000000000000000060208083019190915282519182900360330182208284018452600a8084527f50617950616c205553440000000000000000000000000000000000000000000092840192835293519093909182918083835b60208310620003855780518252601f19909201916020918201910162000364565b51815160209384036101000a60001901801990921691161790526040805192909401829003822082820197909752818401969096523060608083019190915283518083039091018152608090910192839052805190959294508493509185019190508083835b602083106200040c5780518252601f199092019160209182019101620003eb565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600c55505050565b613843806200044d6000396000f3006080604052600436106101ed5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166303acb44881146101f257806306fdde0314610209578063095ea7b3146102935780630a91b601146102cb57806318160ddd146102fc5780631b6705611461032357806321ab11f71461050757806323b872dd14610580578063313ce567146105aa5780633f4ba83a146105d557806345c8b1a6146105ea5780634e71e0c81461060b57806352875bc3146106205780635c975abb14610641578063661884631461065657806370a082311461067a5780638129fc1c1461069b5780638456cb59146106b057806389f72c21146106c55780638ceed9cb146106e65780638d1fdf2f146107075780638da5cb5b1461072857806395d89b411461073d57806397d60d561461075257806398e52f9a14610773578063a7d87ed01461078b578063a9059cbb146107ac578063ac69275c146107d0578063b35ae5be146107f1578063b5ed298a14610806578063b921e16314610827578063c4f62fee1461083f578063d153b60c14610854578063d73dd62314610869578063d990c6181461088d578063dd62ed3e146108ae578063e2f72f03146108d5578063e306f779146108f6578063e58398361461090b578063e7ba10121461092c575b600080fd5b3480156101fe57600080fd5b50610207610941565b005b34801561021557600080fd5b5061021e610a92565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610258578181015183820152602001610240565b50505050905090810190601f1680156102855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029f57600080fd5b506102b7600160a060020a0360043516602435610ac9565b604080519115158252519081900360200190f35b3480156102d757600080fd5b506102e0610c00565b60408051600160a060020a039092168252519081900360200190f35b34801561030857600080fd5b50610311610c0f565b60408051918252519081900360200190f35b34801561032f57600080fd5b50604080516020600480358082013583810280860185019096528085526102b795369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750610c159650505050505050565b34801561051357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102b794369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050602083013592604081013592506060810135915060800135610dfd565b34801561058c57600080fd5b506102b7600160a060020a0360043581169060243516604435610e94565b3480156105b657600080fd5b506105bf6111cf565b6040805160ff9092168252519081900360200190f35b3480156105e157600080fd5b506102076111d4565b3480156105f657600080fd5b50610207600160a060020a03600435166112d0565b34801561061757600080fd5b506102076113ed565b34801561062c57600080fd5b50610207600160a060020a03600435166114b3565b34801561064d57600080fd5b506102b7611699565b34801561066257600080fd5b506102b7600160a060020a03600435166024356116a9565b34801561068657600080fd5b50610311600160a060020a036004351661186c565b3480156106a757600080fd5b50610207611887565b3480156106bc57600080fd5b5061020761199a565b3480156106d157600080fd5b50610311600160a060020a0360043516611a9b565b3480156106f257600080fd5b50610207600160a060020a0360043516611ab6565b34801561071357600080fd5b50610207600160a060020a0360043516611c3c565b34801561073457600080fd5b506102e0611d5b565b34801561074957600080fd5b5061021e611d6a565b34801561075e57600080fd5b50610207600160a060020a0360043516611da1565b34801561077f57600080fd5b506102b7600435611ef5565b34801561079757600080fd5b506102b7600160a060020a03600435166120a4565b3480156107b857600080fd5b506102b7600160a060020a03600435166024356120c2565b3480156107dc57600080fd5b50610207600160a060020a03600435166122f7565b3480156107fd57600080fd5b50610207612416565b34801561081257600080fd5b50610207600160a060020a03600435166124f0565b34801561083357600080fd5b506102b760043561267e565b34801561084b57600080fd5b506102e06127b9565b34801561086057600080fd5b506102e06127c8565b34801561087557600080fd5b506102b7600160a060020a03600435166024356127d7565b34801561089957600080fd5b50610207600160a060020a0360043516612940565b3480156108ba57600080fd5b50610311600160a060020a0360043581169060243516612a5d565b3480156108e157600080fd5b50610207600160a060020a0360043516612a88565b34801561090257600080fd5b50610311612c39565b34801561091757600080fd5b506102b7600160a060020a0360043516612c3f565b34801561093857600080fd5b506102e0612c5d565b600854600090600160a060020a03163314806109675750600454600160a060020a031633145b15156109bd576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c792070726f706f7365644f776e6572206f72206f776e65720000000000604482015290519081900360640190fd5b600854600160a060020a03161515610a45576040805160e560020a62461bcd02815260206004820152603b60248201527f63616e206f6e6c792064697372656761726420612070726f706f736564206f7760448201527f6e65722074686174207761732070726576696f75736c79207365740000000000606482015290519081900360840190fd5b5060088054600160a060020a03198116909155604051600160a060020a039091169081907f24f4590b0077912a4db89e7430de7986175c27bede1b47ee039e3b421c2e798e90600090a250565b60408051808201909152600a81527f50617950616c2055534400000000000000000000000000000000000000000000602082015281565b60045460009060a060020a900460ff1615610b1c576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526006602052604090205460ff16158015610b5557503360009081526006602052604090205460ff16155b1515610b99576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b336000818152600360209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600554600160a060020a031681565b60025490565b60008088518a51148015610c2a575087518a51145b8015610c37575086518a51145b8015610c44575085518a51145b1515610c9a576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206d69736d617463680000000000000000000000000000000000604482015290519081900360640190fd5b84518a51148015610cac575083518a51145b8015610cb9575082518a51145b1515610d0f576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206d69736d617463680000000000000000000000000000000000604482015290519081900360640190fd5b5060005b8951811015610ded57610de48a82815181101515610d2d57fe5b906020019060200201518a83815181101515610d4557fe5b906020019060200201518a84815181101515610d5d57fe5b906020019060200201518a85815181101515610d7557fe5b906020019060200201518a86815181101515610d8d57fe5b906020019060200201518a87815181101515610da557fe5b906020019060200201518a88815181101515610dbd57fe5b906020019060200201518a89815181101515610dd557fe5b90602001906020020151612c6c565b50600101610d13565b5060019998505050505050505050565b60008060008089516041141515610e5e576040805160e560020a62461bcd02815260206004820152601f60248201527f7369676e61747572652073686f756c642068617665206c656e67746820363500604482015290519081900360640190fd5b50505060208701516040880151606089015160001a610e838383838c8c8c8c8c612c6c565b5060019a9950505050505050505050565b60045460009060a060020a900460ff1615610ee7576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b600160a060020a0383161515610f47576040805160e560020a62461bcd02815260206004820152601f60248201527f63616e6e6f74207472616e7366657220746f2061646472657373207a65726f00604482015290519081900360640190fd5b600160a060020a03831660009081526006602052604090205460ff16158015610f895750600160a060020a03841660009081526006602052604090205460ff16155b8015610fa557503360009081526006602052604090205460ff16155b1515610fe9576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b600160a060020a038416600090815260016020526040902054821115611059576040805160e560020a62461bcd02815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03841660009081526003602090815260408083203384529091529020548211156110d4576040805160e560020a62461bcd02815260206004820152601660248201527f696e73756666696369656e7420616c6c6f77616e636500000000000000000000604482015290519081900360640190fd5b600160a060020a0384166000908152600160205260409020546110fd908363ffffffff6135f916565b600160a060020a038086166000908152600160205260408082209390935590851681522054611132908363ffffffff61361016565b600160a060020a038085166000908152600160209081526040808320949094559187168152600382528281203382529091522054611176908363ffffffff6135f916565b600160a060020a03808616600081815260036020908152604080832033845282529182902094909455805186815290519287169391926000805160206137d8833981519152929181900390910190a35060019392505050565b600681565b600454600160a060020a03163314611224576040805160e560020a62461bcd02815260206004820152600960248201526000805160206137f8833981519152604482015290519081900360640190fd5b60045460a060020a900460ff161515611287576040805160e560020a62461bcd02815260206004820152601060248201527f616c726561647920756e70617573656400000000000000000000000000000000604482015290519081900360640190fd5b6004805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600554600160a060020a03163314611332576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03811660009081526006602052604090205460ff1615156113a4576040805160e560020a62461bcd02815260206004820152601860248201527f6164647265737320616c726561647920756e66726f7a656e0000000000000000604482015290519081900360640190fd5b600160a060020a038116600081815260066020526040808220805460ff19169055517fc3776b472ebf54114339eec9e4dc924e7ce307a97f5c1ee72b6d474e6e5e8b7c9190a250565b600854600090600160a060020a03163314611452576040805160e560020a62461bcd02815260206004820152601160248201527f6f6e6c7950726f706f7365644f776e6572000000000000000000000000000000604482015290519081900360640190fd5b506004805460088054600160a060020a0319808416600160a060020a038381169190911795869055911690915560405191811692169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600754600160a060020a03163314806114d65750600454600160a060020a031633145b151561152c576040805160e560020a62461bcd02815260206004820152601e60248201527f6f6e6c7920537570706c79436f6e74726f6c6c6572206f72204f776e65720000604482015290519081900360640190fd5b600160a060020a03811615156115b2576040805160e560020a62461bcd02815260206004820152602c60248201527f63616e6e6f742073657420737570706c7920636f6e74726f6c6c657220746f2060448201527f61646472657373207a65726f0000000000000000000000000000000000000000606482015290519081900360840190fd5b600754600160a060020a038281169116141561163d576040805160e560020a62461bcd028152602060048201526024808201527f6e657720616464726573732069732073616d6520617320612063757272656e7460448201527f206f6e6500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600754604051600160a060020a038084169216907f40d53b0b666e4424f29d55244e7e171a1dc332acc11d04ed4abd884629d8cc9790600090a360078054600160a060020a031916600160a060020a0392909216919091179055565b60045460a060020a900460ff1681565b600454600090819060a060020a900460ff16156116fe576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b600160a060020a03841660009081526006602052604090205460ff1615801561173757503360009081526006602052604090205460ff16155b151561177b576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b50336000908152600360209081526040808320600160a060020a0387168452909152902054808311156117d157336000908152600360209081526040808320600160a060020a0388168452909152812055611806565b6117e1818463ffffffff6135f916565b336000908152600360209081526040808320600160a060020a03891684529091529020555b336000818152600360209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a031660009081526001602052604090205490565b60005460ff1615611954576040805160e560020a62461bcd02815260206004820152607a60248201527f4d414e4441544f525920564552494649434154494f4e2052455155495245443a60448201527f205468652070726f78792068617320616c7265616479206265656e20696e697460648201527f69616c697a65642c2076657269667920746865206f776e657220616e6420737560848201527f70706c7920636f6e74726f6c6c6572206164647265737365732e00000000000060a482015290519081900360c40190fd5b6004805433600160a060020a031991821681179092556005805482169055600060025560078054909116909117905561198b613629565b6000805460ff19166001179055565b600454600160a060020a031633146119ea576040805160e560020a62461bcd02815260206004820152600960248201526000805160206137f8833981519152604482015290519081900360640190fd5b60045460a060020a900460ff1615611a4c576040805160e560020a62461bcd02815260206004820152600e60248201527f616c726561647920706175736564000000000000000000000000000000000000604482015290519081900360640190fd5b6004805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600160a060020a03166000908152600b602052604090205490565b600554600160a060020a0316331480611ad95750600454600160a060020a031633145b1515611b55576040805160e560020a62461bcd02815260206004820152602160248201527f6f6e6c7920617373657450726f74656374696f6e526f6c65206f72204f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600554600160a060020a0382811691161415611be0576040805160e560020a62461bcd028152602060048201526024808201527f6e657720616464726573732069732073616d6520617320612063757272656e7460448201527f206f6e6500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600554604051600160a060020a038084169216907fd0c36a0ac0fe0d375386bd568fa2947a2dae7523a0a0cfdab20b7532a105bd1b90600090a360058054600160a060020a031916600160a060020a0392909216919091179055565b600554600160a060020a03163314611c9e576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03811660009081526006602052604090205460ff1615611d0f576040805160e560020a62461bcd02815260206004820152601660248201527f6164647265737320616c72656164792066726f7a656e00000000000000000000604482015290519081900360640190fd5b600160a060020a038116600081815260066020526040808220805460ff19166001179055517f90811a8edd3b3c17eeaefffc17f639cc69145d41a359c9843994dc25382036909190a250565b600454600160a060020a031681565b60408051808201909152600581527f5059555344000000000000000000000000000000000000000000000000000000602082015281565b600954600160a060020a0316331480611dc45750600454600160a060020a031633145b1515611e1a576040805160e560020a62461bcd02815260206004820152601960248201527f6f6e6c792057686974656c6973746572206f72204f776e657200000000000000604482015290519081900360640190fd5b600954600160a060020a0382811691161415611ea5576040805160e560020a62461bcd028152602060048201526024808201527f6e657720616464726573732069732073616d6520617320612063757272656e7460448201527f206f6e6500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60098054600160a060020a031916600160a060020a0383811691821792839055604051919216907f54e20b07412504aee4d17519747ae2f01b9924f7f30059793fe5576c4220a0c390600090a350565b600754600090600160a060020a03163314611f5a576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79537570706c79436f6e74726f6c6c6572000000000000000000000000604482015290519081900360640190fd5b600754600160a060020a0316600090815260016020526040902054821115611fcc576040805160e560020a62461bcd02815260206004820152601160248201527f6e6f7420656e6f75676820737570706c79000000000000000000000000000000604482015290519081900360640190fd5b600754600160a060020a0316600090815260016020526040902054611ff7908363ffffffff6135f916565b600754600160a060020a0316600090815260016020526040902055600254612025908363ffffffff6135f916565b600255600754604080518481529051600160a060020a03909216917f1b7e18241beced0d7f41fbab1ea8ed468732edbcb74ec4420151654ca71c8a639181900360200190a2600754604080518481529051600092600160a060020a0316916000805160206137d8833981519152919081900360200190a3506001919050565b600160a060020a03166000908152600a602052604090205460ff1690565b60045460009060a060020a900460ff1615612115576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b600160a060020a0383161515612175576040805160e560020a62461bcd02815260206004820152601f60248201527f63616e6e6f74207472616e7366657220746f2061646472657373207a65726f00604482015290519081900360640190fd5b600160a060020a03831660009081526006602052604090205460ff161580156121ae57503360009081526006602052604090205460ff16155b15156121f2576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b33600090815260016020526040902054821115612259576040805160e560020a62461bcd02815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b33600090815260016020526040902054612279908363ffffffff6135f916565b3360009081526001602052604080822092909255600160a060020a038516815220546122ab908363ffffffff61361016565b600160a060020a0384166000818152600160209081526040918290209390935580518581529051919233926000805160206137d88339815191529281900390910190a350600192915050565b600954600160a060020a03163314612359576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c794265746144656c656761746557686974656c69737465720000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff16156123ca576040805160e560020a62461bcd02815260206004820152601c60248201527f64656c656761746520616c72656164792077686974656c697374656400000000604482015290519081900360640190fd5b600160a060020a0381166000818152600a6020526040808220805460ff19166001179055517f8a22e0d8ecb02260464e9a55b7d82b17482735ae1f765de59dee573dfec5b36d9190a250565b600454600090600160a060020a03163314612469576040805160e560020a62461bcd02815260206004820152600960248201526000805160206137f8833981519152604482015290519081900360640190fd5b5030600090815260016020526040808220805490839055600454600160a060020a031683529120546124a1908263ffffffff61361016565b60048054600160a060020a039081166000908152600160209081526040918290209490945591548251858152925191169230926000805160206137d8833981519152929081900390910190a350565b600454600160a060020a03163314612540576040805160e560020a62461bcd02815260206004820152600960248201526000805160206137f8833981519152604482015290519081900360640190fd5b600160a060020a03811615156125c6576040805160e560020a62461bcd02815260206004820152602960248201527f63616e6e6f74207472616e73666572206f776e65727368697020746f2061646460448201527f72657373207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a0382161415612627576040805160e560020a62461bcd02815260206004820152601760248201527f63616c6c657220616c7265616479206973206f776e6572000000000000000000604482015290519081900360640190fd5b60088054600160a060020a031916600160a060020a038381169190911791829055600454604051928216929116907ff4e75b79500ab730f8a026ed3cba6d55331bcb64c9e9f60c548e371356e5e3c090600090a350565b600754600090600160a060020a031633146126e3576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79537570706c79436f6e74726f6c6c6572000000000000000000000000604482015290519081900360640190fd5b6002546126f6908363ffffffff61361016565b600255600754600160a060020a0316600090815260016020526040902054612724908363ffffffff61361016565b60078054600160a060020a03908116600090815260016020908152604091829020949094559154825186815292519116927ff5c174d57843e57fea3c649fdde37f015ef08750759cbee88060390566a98797928290030190a2600754604080518481529051600160a060020a03909216916000916000805160206137d8833981519152919081900360200190a3506001919050565b600954600160a060020a031681565b600854600160a060020a031681565b60045460009060a060020a900460ff161561282a576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526006602052604090205460ff1615801561286357503360009081526006602052604090205460ff16155b15156128a7576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b336000908152600360209081526040808320600160a060020a03871684529091529020546128db908363ffffffff61361016565b336000818152600360209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600954600160a060020a031633146129a2576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c794265746144656c656761746557686974656c69737465720000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff161515612a14576040805160e560020a62461bcd02815260206004820152601860248201527f64656c6567617465206e6f742077686974656c69737465640000000000000000604482015290519081900360640190fd5b600160a060020a0381166000818152600a6020526040808220805460ff19169055517f12acb305bec2ecc1e4568decc9c8e0423749ceb6ae249eaef4ef375ec174a49c9190a250565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600554600090600160a060020a03163314612aed576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526006602052604090205460ff161515612b5f576040805160e560020a62461bcd02815260206004820152601560248201527f61646472657373206973206e6f742066726f7a656e0000000000000000000000604482015290519081900360640190fd5b50600160a060020a03811660009081526001602052604081208054919055600254612b90908263ffffffff6135f916565b600255604051600160a060020a038316907ffc5960f1c5a5d2b60f031bf534af053b1bf7d9881989afaeb8b1d164db23aede90600090a2604080518281529051600160a060020a038416917f1b7e18241beced0d7f41fbab1ea8ed468732edbcb74ec4420151654ca71c8a63919081900360200190a2604080518281529051600091600160a060020a038516916000805160206137d88339815191529181900360200190a35050565b600c5481565b600160a060020a031660009081526006602052604090205460ff1690565b600754600160a060020a031681565b60045460009081908190819060a060020a900460ff1615612cc5576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b336000908152600a602052604090205460ff161515612d54576040805160e560020a62461bcd02815260206004820152602f60248201527f426574612066656174757265206f6e6c7920616363657074732077686974656c60448201527f69737465642064656c6567617465730000000000000000000000000000000000606482015290519081900360840190fd5b6000881180612d635750600087115b1515612ddf576040805160e560020a62461bcd02815260206004820152602960248201527f63616e6e6f74207472616e73666572207a65726f20746f6b656e73207769746860448201527f207a65726f206665650000000000000000000000000000000000000000000000606482015290519081900360840190fd5b43851015612e37576040805160e560020a62461bcd02815260206004820152601360248201527f7472616e73616374696f6e206578706972656400000000000000000000000000604482015290519081900360640190fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08b1115612eaf576040805160e560020a62461bcd02815260206004820152601360248201527f7369676e617475726520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b8960ff16601b1480612ec457508960ff16601c145b1515612f1a576040805160e560020a62461bcd02815260206004820152601360248201527f7369676e617475726520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b604080517f4265746144656c6567617465645472616e73666572286164647265737320746f81527f2c75696e743235362076616c75652c75696e74323536206665652c75696e74326020808301919091527f3536207365712c75696e7432353620646561646c696e6529000000000000000082840152825191829003605801822082820152600160a060020a038c1682840152606082018b9052608082018a905260a0820189905260c08083018990528351808403909101815260e090920192839052815191929182918401908083835b6020831061300a5780518252601f199092019160209182019101612feb565b51815160209384036101000a600019018019909216911617905260408051929094018290038220828501855260028084527f1901000000000000000000000000000000000000000000000000000000000000848401908152600c549651929b509397509495508994910192508291908083835b6020831061309c5780518252601f19909201916020918201910161307d565b51815160209384036101000a6000190180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b602083106131045780518252601f1990920191602091820191016130e5565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091506001828b8e8e604051600081526020016040526040518085600019166000191681526020018460ff1660ff168152602001836000191660001916815260200182600019166000191681526020019450505050506020604051602081039080840390855afa1580156131a8573d6000803e3d6000fd5b5050604051601f190151915050600160a060020a038116151561323b576040805160e560020a62461bcd02815260206004820152602d60248201527f6572726f722064657465726d696e696e672066726f6d2061646472657373206660448201527f726f6d207369676e617475726500000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038916151561329b576040805160e560020a62461bcd02815260206004820152601660248201527f63616e6e6f207573652061646472657373207a65726f00000000000000000000604482015290519081900360640190fd5b600160a060020a03891660009081526006602052604090205460ff161580156132dd5750600160a060020a03811660009081526006602052604090205460ff16155b80156132f957503360009081526006602052604090205460ff16155b151561333d576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b600160a060020a038116600090815260016020526040902054613366898963ffffffff61361016565b11156133bc576040805160e560020a62461bcd02815260206004820152601160248201527f696e73756666696369656e742066756e64000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600b6020526040902054861461342b576040805160e560020a62461bcd02815260206004820152600d60248201527f696e636f72726563742073657100000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600b602052604090205461345590600163ffffffff61361016565b600160a060020a0382166000908152600b60205260409020556134a6613481898963ffffffff61361016565b600160a060020a0383166000908152600160205260409020549063ffffffff6135f916565b600160a060020a038216600090815260016020526040902055861561352957336000908152600160205260409020546134e5908863ffffffff61361016565b336000818152600160209081526040918290209390935580518a815290519192600160a060020a038516926000805160206137d88339815191529281900390910190a35b600160a060020a038916600090815260016020526040902054613552908963ffffffff61361016565b600160a060020a03808b166000818152600160209081526040918290209490945580518c815290519193928516926000805160206137d883398151915292918290030190a360408051898152602081018890528082018990529051600160a060020a03808c1692908416917fe526c2818be85606ab8e0ea3f317c198ef15baabbb4430bcf2d836eed3c7769b9181900360600190a35060019b9a5050505050505050505050565b6000808383111561360957600080fd5b5050900390565b60008282018381101561362257600080fd5b9392505050565b604080517f454950373132446f6d61696e28737472696e67206e616d652c6164647265737381527f20766572696679696e67436f6e7472616374290000000000000000000000000060208083019190915282519182900360330182208284018452600a8084527f50617950616c205553440000000000000000000000000000000000000000000092840192835293519093909182918083835b602083106136e15780518252601f1990920191602091820191016136c2565b51815160209384036101000a60001901801990921691161790526040805192909401829003822082820197909752818401969096523060608083019190915283518083039091018152608090910192839052805190959294508493509185019190508083835b602083106137665780518252601f199092019160209182019101613747565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600c555050505600616464726573732066726f7a656e0000000000000000000000000000000000007768656e4e6f7450617573656400000000000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6f6e6c794f776e65720000000000000000000000000000000000000000000000a165627a7a723058205da888f6ad88e6d9a8336855c72151368b2a1cddc74123faad4345dca0966fc50029

Deployed Bytecode

0x6080604052600436106101ed5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166303acb44881146101f257806306fdde0314610209578063095ea7b3146102935780630a91b601146102cb57806318160ddd146102fc5780631b6705611461032357806321ab11f71461050757806323b872dd14610580578063313ce567146105aa5780633f4ba83a146105d557806345c8b1a6146105ea5780634e71e0c81461060b57806352875bc3146106205780635c975abb14610641578063661884631461065657806370a082311461067a5780638129fc1c1461069b5780638456cb59146106b057806389f72c21146106c55780638ceed9cb146106e65780638d1fdf2f146107075780638da5cb5b1461072857806395d89b411461073d57806397d60d561461075257806398e52f9a14610773578063a7d87ed01461078b578063a9059cbb146107ac578063ac69275c146107d0578063b35ae5be146107f1578063b5ed298a14610806578063b921e16314610827578063c4f62fee1461083f578063d153b60c14610854578063d73dd62314610869578063d990c6181461088d578063dd62ed3e146108ae578063e2f72f03146108d5578063e306f779146108f6578063e58398361461090b578063e7ba10121461092c575b600080fd5b3480156101fe57600080fd5b50610207610941565b005b34801561021557600080fd5b5061021e610a92565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610258578181015183820152602001610240565b50505050905090810190601f1680156102855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029f57600080fd5b506102b7600160a060020a0360043516602435610ac9565b604080519115158252519081900360200190f35b3480156102d757600080fd5b506102e0610c00565b60408051600160a060020a039092168252519081900360200190f35b34801561030857600080fd5b50610311610c0f565b60408051918252519081900360200190f35b34801561032f57600080fd5b50604080516020600480358082013583810280860185019096528085526102b795369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750610c159650505050505050565b34801561051357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102b794369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050602083013592604081013592506060810135915060800135610dfd565b34801561058c57600080fd5b506102b7600160a060020a0360043581169060243516604435610e94565b3480156105b657600080fd5b506105bf6111cf565b6040805160ff9092168252519081900360200190f35b3480156105e157600080fd5b506102076111d4565b3480156105f657600080fd5b50610207600160a060020a03600435166112d0565b34801561061757600080fd5b506102076113ed565b34801561062c57600080fd5b50610207600160a060020a03600435166114b3565b34801561064d57600080fd5b506102b7611699565b34801561066257600080fd5b506102b7600160a060020a03600435166024356116a9565b34801561068657600080fd5b50610311600160a060020a036004351661186c565b3480156106a757600080fd5b50610207611887565b3480156106bc57600080fd5b5061020761199a565b3480156106d157600080fd5b50610311600160a060020a0360043516611a9b565b3480156106f257600080fd5b50610207600160a060020a0360043516611ab6565b34801561071357600080fd5b50610207600160a060020a0360043516611c3c565b34801561073457600080fd5b506102e0611d5b565b34801561074957600080fd5b5061021e611d6a565b34801561075e57600080fd5b50610207600160a060020a0360043516611da1565b34801561077f57600080fd5b506102b7600435611ef5565b34801561079757600080fd5b506102b7600160a060020a03600435166120a4565b3480156107b857600080fd5b506102b7600160a060020a03600435166024356120c2565b3480156107dc57600080fd5b50610207600160a060020a03600435166122f7565b3480156107fd57600080fd5b50610207612416565b34801561081257600080fd5b50610207600160a060020a03600435166124f0565b34801561083357600080fd5b506102b760043561267e565b34801561084b57600080fd5b506102e06127b9565b34801561086057600080fd5b506102e06127c8565b34801561087557600080fd5b506102b7600160a060020a03600435166024356127d7565b34801561089957600080fd5b50610207600160a060020a0360043516612940565b3480156108ba57600080fd5b50610311600160a060020a0360043581169060243516612a5d565b3480156108e157600080fd5b50610207600160a060020a0360043516612a88565b34801561090257600080fd5b50610311612c39565b34801561091757600080fd5b506102b7600160a060020a0360043516612c3f565b34801561093857600080fd5b506102e0612c5d565b600854600090600160a060020a03163314806109675750600454600160a060020a031633145b15156109bd576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c792070726f706f7365644f776e6572206f72206f776e65720000000000604482015290519081900360640190fd5b600854600160a060020a03161515610a45576040805160e560020a62461bcd02815260206004820152603b60248201527f63616e206f6e6c792064697372656761726420612070726f706f736564206f7760448201527f6e65722074686174207761732070726576696f75736c79207365740000000000606482015290519081900360840190fd5b5060088054600160a060020a03198116909155604051600160a060020a039091169081907f24f4590b0077912a4db89e7430de7986175c27bede1b47ee039e3b421c2e798e90600090a250565b60408051808201909152600a81527f50617950616c2055534400000000000000000000000000000000000000000000602082015281565b60045460009060a060020a900460ff1615610b1c576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526006602052604090205460ff16158015610b5557503360009081526006602052604090205460ff16155b1515610b99576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b336000818152600360209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600554600160a060020a031681565b60025490565b60008088518a51148015610c2a575087518a51145b8015610c37575086518a51145b8015610c44575085518a51145b1515610c9a576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206d69736d617463680000000000000000000000000000000000604482015290519081900360640190fd5b84518a51148015610cac575083518a51145b8015610cb9575082518a51145b1515610d0f576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206d69736d617463680000000000000000000000000000000000604482015290519081900360640190fd5b5060005b8951811015610ded57610de48a82815181101515610d2d57fe5b906020019060200201518a83815181101515610d4557fe5b906020019060200201518a84815181101515610d5d57fe5b906020019060200201518a85815181101515610d7557fe5b906020019060200201518a86815181101515610d8d57fe5b906020019060200201518a87815181101515610da557fe5b906020019060200201518a88815181101515610dbd57fe5b906020019060200201518a89815181101515610dd557fe5b90602001906020020151612c6c565b50600101610d13565b5060019998505050505050505050565b60008060008089516041141515610e5e576040805160e560020a62461bcd02815260206004820152601f60248201527f7369676e61747572652073686f756c642068617665206c656e67746820363500604482015290519081900360640190fd5b50505060208701516040880151606089015160001a610e838383838c8c8c8c8c612c6c565b5060019a9950505050505050505050565b60045460009060a060020a900460ff1615610ee7576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b600160a060020a0383161515610f47576040805160e560020a62461bcd02815260206004820152601f60248201527f63616e6e6f74207472616e7366657220746f2061646472657373207a65726f00604482015290519081900360640190fd5b600160a060020a03831660009081526006602052604090205460ff16158015610f895750600160a060020a03841660009081526006602052604090205460ff16155b8015610fa557503360009081526006602052604090205460ff16155b1515610fe9576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b600160a060020a038416600090815260016020526040902054821115611059576040805160e560020a62461bcd02815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03841660009081526003602090815260408083203384529091529020548211156110d4576040805160e560020a62461bcd02815260206004820152601660248201527f696e73756666696369656e7420616c6c6f77616e636500000000000000000000604482015290519081900360640190fd5b600160a060020a0384166000908152600160205260409020546110fd908363ffffffff6135f916565b600160a060020a038086166000908152600160205260408082209390935590851681522054611132908363ffffffff61361016565b600160a060020a038085166000908152600160209081526040808320949094559187168152600382528281203382529091522054611176908363ffffffff6135f916565b600160a060020a03808616600081815260036020908152604080832033845282529182902094909455805186815290519287169391926000805160206137d8833981519152929181900390910190a35060019392505050565b600681565b600454600160a060020a03163314611224576040805160e560020a62461bcd02815260206004820152600960248201526000805160206137f8833981519152604482015290519081900360640190fd5b60045460a060020a900460ff161515611287576040805160e560020a62461bcd02815260206004820152601060248201527f616c726561647920756e70617573656400000000000000000000000000000000604482015290519081900360640190fd5b6004805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600554600160a060020a03163314611332576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03811660009081526006602052604090205460ff1615156113a4576040805160e560020a62461bcd02815260206004820152601860248201527f6164647265737320616c726561647920756e66726f7a656e0000000000000000604482015290519081900360640190fd5b600160a060020a038116600081815260066020526040808220805460ff19169055517fc3776b472ebf54114339eec9e4dc924e7ce307a97f5c1ee72b6d474e6e5e8b7c9190a250565b600854600090600160a060020a03163314611452576040805160e560020a62461bcd02815260206004820152601160248201527f6f6e6c7950726f706f7365644f776e6572000000000000000000000000000000604482015290519081900360640190fd5b506004805460088054600160a060020a0319808416600160a060020a038381169190911795869055911690915560405191811692169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600754600160a060020a03163314806114d65750600454600160a060020a031633145b151561152c576040805160e560020a62461bcd02815260206004820152601e60248201527f6f6e6c7920537570706c79436f6e74726f6c6c6572206f72204f776e65720000604482015290519081900360640190fd5b600160a060020a03811615156115b2576040805160e560020a62461bcd02815260206004820152602c60248201527f63616e6e6f742073657420737570706c7920636f6e74726f6c6c657220746f2060448201527f61646472657373207a65726f0000000000000000000000000000000000000000606482015290519081900360840190fd5b600754600160a060020a038281169116141561163d576040805160e560020a62461bcd028152602060048201526024808201527f6e657720616464726573732069732073616d6520617320612063757272656e7460448201527f206f6e6500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600754604051600160a060020a038084169216907f40d53b0b666e4424f29d55244e7e171a1dc332acc11d04ed4abd884629d8cc9790600090a360078054600160a060020a031916600160a060020a0392909216919091179055565b60045460a060020a900460ff1681565b600454600090819060a060020a900460ff16156116fe576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b600160a060020a03841660009081526006602052604090205460ff1615801561173757503360009081526006602052604090205460ff16155b151561177b576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b50336000908152600360209081526040808320600160a060020a0387168452909152902054808311156117d157336000908152600360209081526040808320600160a060020a0388168452909152812055611806565b6117e1818463ffffffff6135f916565b336000908152600360209081526040808320600160a060020a03891684529091529020555b336000818152600360209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a031660009081526001602052604090205490565b60005460ff1615611954576040805160e560020a62461bcd02815260206004820152607a60248201527f4d414e4441544f525920564552494649434154494f4e2052455155495245443a60448201527f205468652070726f78792068617320616c7265616479206265656e20696e697460648201527f69616c697a65642c2076657269667920746865206f776e657220616e6420737560848201527f70706c7920636f6e74726f6c6c6572206164647265737365732e00000000000060a482015290519081900360c40190fd5b6004805433600160a060020a031991821681179092556005805482169055600060025560078054909116909117905561198b613629565b6000805460ff19166001179055565b600454600160a060020a031633146119ea576040805160e560020a62461bcd02815260206004820152600960248201526000805160206137f8833981519152604482015290519081900360640190fd5b60045460a060020a900460ff1615611a4c576040805160e560020a62461bcd02815260206004820152600e60248201527f616c726561647920706175736564000000000000000000000000000000000000604482015290519081900360640190fd5b6004805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600160a060020a03166000908152600b602052604090205490565b600554600160a060020a0316331480611ad95750600454600160a060020a031633145b1515611b55576040805160e560020a62461bcd02815260206004820152602160248201527f6f6e6c7920617373657450726f74656374696f6e526f6c65206f72204f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600554600160a060020a0382811691161415611be0576040805160e560020a62461bcd028152602060048201526024808201527f6e657720616464726573732069732073616d6520617320612063757272656e7460448201527f206f6e6500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600554604051600160a060020a038084169216907fd0c36a0ac0fe0d375386bd568fa2947a2dae7523a0a0cfdab20b7532a105bd1b90600090a360058054600160a060020a031916600160a060020a0392909216919091179055565b600554600160a060020a03163314611c9e576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03811660009081526006602052604090205460ff1615611d0f576040805160e560020a62461bcd02815260206004820152601660248201527f6164647265737320616c72656164792066726f7a656e00000000000000000000604482015290519081900360640190fd5b600160a060020a038116600081815260066020526040808220805460ff19166001179055517f90811a8edd3b3c17eeaefffc17f639cc69145d41a359c9843994dc25382036909190a250565b600454600160a060020a031681565b60408051808201909152600581527f5059555344000000000000000000000000000000000000000000000000000000602082015281565b600954600160a060020a0316331480611dc45750600454600160a060020a031633145b1515611e1a576040805160e560020a62461bcd02815260206004820152601960248201527f6f6e6c792057686974656c6973746572206f72204f776e657200000000000000604482015290519081900360640190fd5b600954600160a060020a0382811691161415611ea5576040805160e560020a62461bcd028152602060048201526024808201527f6e657720616464726573732069732073616d6520617320612063757272656e7460448201527f206f6e6500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60098054600160a060020a031916600160a060020a0383811691821792839055604051919216907f54e20b07412504aee4d17519747ae2f01b9924f7f30059793fe5576c4220a0c390600090a350565b600754600090600160a060020a03163314611f5a576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79537570706c79436f6e74726f6c6c6572000000000000000000000000604482015290519081900360640190fd5b600754600160a060020a0316600090815260016020526040902054821115611fcc576040805160e560020a62461bcd02815260206004820152601160248201527f6e6f7420656e6f75676820737570706c79000000000000000000000000000000604482015290519081900360640190fd5b600754600160a060020a0316600090815260016020526040902054611ff7908363ffffffff6135f916565b600754600160a060020a0316600090815260016020526040902055600254612025908363ffffffff6135f916565b600255600754604080518481529051600160a060020a03909216917f1b7e18241beced0d7f41fbab1ea8ed468732edbcb74ec4420151654ca71c8a639181900360200190a2600754604080518481529051600092600160a060020a0316916000805160206137d8833981519152919081900360200190a3506001919050565b600160a060020a03166000908152600a602052604090205460ff1690565b60045460009060a060020a900460ff1615612115576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b600160a060020a0383161515612175576040805160e560020a62461bcd02815260206004820152601f60248201527f63616e6e6f74207472616e7366657220746f2061646472657373207a65726f00604482015290519081900360640190fd5b600160a060020a03831660009081526006602052604090205460ff161580156121ae57503360009081526006602052604090205460ff16155b15156121f2576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b33600090815260016020526040902054821115612259576040805160e560020a62461bcd02815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b33600090815260016020526040902054612279908363ffffffff6135f916565b3360009081526001602052604080822092909255600160a060020a038516815220546122ab908363ffffffff61361016565b600160a060020a0384166000818152600160209081526040918290209390935580518581529051919233926000805160206137d88339815191529281900390910190a350600192915050565b600954600160a060020a03163314612359576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c794265746144656c656761746557686974656c69737465720000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff16156123ca576040805160e560020a62461bcd02815260206004820152601c60248201527f64656c656761746520616c72656164792077686974656c697374656400000000604482015290519081900360640190fd5b600160a060020a0381166000818152600a6020526040808220805460ff19166001179055517f8a22e0d8ecb02260464e9a55b7d82b17482735ae1f765de59dee573dfec5b36d9190a250565b600454600090600160a060020a03163314612469576040805160e560020a62461bcd02815260206004820152600960248201526000805160206137f8833981519152604482015290519081900360640190fd5b5030600090815260016020526040808220805490839055600454600160a060020a031683529120546124a1908263ffffffff61361016565b60048054600160a060020a039081166000908152600160209081526040918290209490945591548251858152925191169230926000805160206137d8833981519152929081900390910190a350565b600454600160a060020a03163314612540576040805160e560020a62461bcd02815260206004820152600960248201526000805160206137f8833981519152604482015290519081900360640190fd5b600160a060020a03811615156125c6576040805160e560020a62461bcd02815260206004820152602960248201527f63616e6e6f74207472616e73666572206f776e65727368697020746f2061646460448201527f72657373207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a0382161415612627576040805160e560020a62461bcd02815260206004820152601760248201527f63616c6c657220616c7265616479206973206f776e6572000000000000000000604482015290519081900360640190fd5b60088054600160a060020a031916600160a060020a038381169190911791829055600454604051928216929116907ff4e75b79500ab730f8a026ed3cba6d55331bcb64c9e9f60c548e371356e5e3c090600090a350565b600754600090600160a060020a031633146126e3576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79537570706c79436f6e74726f6c6c6572000000000000000000000000604482015290519081900360640190fd5b6002546126f6908363ffffffff61361016565b600255600754600160a060020a0316600090815260016020526040902054612724908363ffffffff61361016565b60078054600160a060020a03908116600090815260016020908152604091829020949094559154825186815292519116927ff5c174d57843e57fea3c649fdde37f015ef08750759cbee88060390566a98797928290030190a2600754604080518481529051600160a060020a03909216916000916000805160206137d8833981519152919081900360200190a3506001919050565b600954600160a060020a031681565b600854600160a060020a031681565b60045460009060a060020a900460ff161561282a576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526006602052604090205460ff1615801561286357503360009081526006602052604090205460ff16155b15156128a7576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b336000908152600360209081526040808320600160a060020a03871684529091529020546128db908363ffffffff61361016565b336000818152600360209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600954600160a060020a031633146129a2576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c794265746144656c656761746557686974656c69737465720000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff161515612a14576040805160e560020a62461bcd02815260206004820152601860248201527f64656c6567617465206e6f742077686974656c69737465640000000000000000604482015290519081900360640190fd5b600160a060020a0381166000818152600a6020526040808220805460ff19169055517f12acb305bec2ecc1e4568decc9c8e0423749ceb6ae249eaef4ef375ec174a49c9190a250565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600554600090600160a060020a03163314612aed576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526006602052604090205460ff161515612b5f576040805160e560020a62461bcd02815260206004820152601560248201527f61646472657373206973206e6f742066726f7a656e0000000000000000000000604482015290519081900360640190fd5b50600160a060020a03811660009081526001602052604081208054919055600254612b90908263ffffffff6135f916565b600255604051600160a060020a038316907ffc5960f1c5a5d2b60f031bf534af053b1bf7d9881989afaeb8b1d164db23aede90600090a2604080518281529051600160a060020a038416917f1b7e18241beced0d7f41fbab1ea8ed468732edbcb74ec4420151654ca71c8a63919081900360200190a2604080518281529051600091600160a060020a038516916000805160206137d88339815191529181900360200190a35050565b600c5481565b600160a060020a031660009081526006602052604090205460ff1690565b600754600160a060020a031681565b60045460009081908190819060a060020a900460ff1615612cc5576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206137b8833981519152604482015290519081900360640190fd5b336000908152600a602052604090205460ff161515612d54576040805160e560020a62461bcd02815260206004820152602f60248201527f426574612066656174757265206f6e6c7920616363657074732077686974656c60448201527f69737465642064656c6567617465730000000000000000000000000000000000606482015290519081900360840190fd5b6000881180612d635750600087115b1515612ddf576040805160e560020a62461bcd02815260206004820152602960248201527f63616e6e6f74207472616e73666572207a65726f20746f6b656e73207769746860448201527f207a65726f206665650000000000000000000000000000000000000000000000606482015290519081900360840190fd5b43851015612e37576040805160e560020a62461bcd02815260206004820152601360248201527f7472616e73616374696f6e206578706972656400000000000000000000000000604482015290519081900360640190fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08b1115612eaf576040805160e560020a62461bcd02815260206004820152601360248201527f7369676e617475726520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b8960ff16601b1480612ec457508960ff16601c145b1515612f1a576040805160e560020a62461bcd02815260206004820152601360248201527f7369676e617475726520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b604080517f4265746144656c6567617465645472616e73666572286164647265737320746f81527f2c75696e743235362076616c75652c75696e74323536206665652c75696e74326020808301919091527f3536207365712c75696e7432353620646561646c696e6529000000000000000082840152825191829003605801822082820152600160a060020a038c1682840152606082018b9052608082018a905260a0820189905260c08083018990528351808403909101815260e090920192839052815191929182918401908083835b6020831061300a5780518252601f199092019160209182019101612feb565b51815160209384036101000a600019018019909216911617905260408051929094018290038220828501855260028084527f1901000000000000000000000000000000000000000000000000000000000000848401908152600c549651929b509397509495508994910192508291908083835b6020831061309c5780518252601f19909201916020918201910161307d565b51815160209384036101000a6000190180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b602083106131045780518252601f1990920191602091820191016130e5565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091506001828b8e8e604051600081526020016040526040518085600019166000191681526020018460ff1660ff168152602001836000191660001916815260200182600019166000191681526020019450505050506020604051602081039080840390855afa1580156131a8573d6000803e3d6000fd5b5050604051601f190151915050600160a060020a038116151561323b576040805160e560020a62461bcd02815260206004820152602d60248201527f6572726f722064657465726d696e696e672066726f6d2061646472657373206660448201527f726f6d207369676e617475726500000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038916151561329b576040805160e560020a62461bcd02815260206004820152601660248201527f63616e6e6f207573652061646472657373207a65726f00000000000000000000604482015290519081900360640190fd5b600160a060020a03891660009081526006602052604090205460ff161580156132dd5750600160a060020a03811660009081526006602052604090205460ff16155b80156132f957503360009081526006602052604090205460ff16155b151561333d576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020613798833981519152604482015290519081900360640190fd5b600160a060020a038116600090815260016020526040902054613366898963ffffffff61361016565b11156133bc576040805160e560020a62461bcd02815260206004820152601160248201527f696e73756666696369656e742066756e64000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600b6020526040902054861461342b576040805160e560020a62461bcd02815260206004820152600d60248201527f696e636f72726563742073657100000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600b602052604090205461345590600163ffffffff61361016565b600160a060020a0382166000908152600b60205260409020556134a6613481898963ffffffff61361016565b600160a060020a0383166000908152600160205260409020549063ffffffff6135f916565b600160a060020a038216600090815260016020526040902055861561352957336000908152600160205260409020546134e5908863ffffffff61361016565b336000818152600160209081526040918290209390935580518a815290519192600160a060020a038516926000805160206137d88339815191529281900390910190a35b600160a060020a038916600090815260016020526040902054613552908963ffffffff61361016565b600160a060020a03808b166000818152600160209081526040918290209490945580518c815290519193928516926000805160206137d883398151915292918290030190a360408051898152602081018890528082018990529051600160a060020a03808c1692908416917fe526c2818be85606ab8e0ea3f317c198ef15baabbb4430bcf2d836eed3c7769b9181900360600190a35060019b9a5050505050505050505050565b6000808383111561360957600080fd5b5050900390565b60008282018381101561362257600080fd5b9392505050565b604080517f454950373132446f6d61696e28737472696e67206e616d652c6164647265737381527f20766572696679696e67436f6e7472616374290000000000000000000000000060208083019190915282519182900360330182208284018452600a8084527f50617950616c205553440000000000000000000000000000000000000000000092840192835293519093909182918083835b602083106136e15780518252601f1990920191602091820191016136c2565b51815160209384036101000a60001901801990921691161790526040805192909401829003822082820197909752818401969096523060608083019190915283518083039091018152608090910192839052805190959294508493509185019190508083835b602083106137665780518252601f199092019160209182019101613747565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600c555050505600616464726573732066726f7a656e0000000000000000000000000000000000007768656e4e6f7450617573656400000000000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6f6e6c794f776e65720000000000000000000000000000000000000000000000a165627a7a723058205da888f6ad88e6d9a8336855c72151368b2a1cddc74123faad4345dca0966fc50029

Deployed Bytecode Sourcemap

1439:26621:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12972:411;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12972:411:0;;;;;;1752:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1752:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1752:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9493:298;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9493:298:0;-1:-1:-1;;;;;9493:298:0;;;;;;;;;;;;;;;;;;;;;;;;;2208:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2208:34:0;;;;;;;;-1:-1:-1;;;;;2208:34:0;;;;;;;;;;;;;;6615:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6615:91:0;;;;;;;;;;;;;;;;;;;;25476:637;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25476:637:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25476:637:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25476:637:0;;;;-1:-1:-1;25476:637:0;-1:-1:-1;25476:637:0;;-1:-1:-1;25476:637:0;;;;;;;;;-1:-1:-1;;25476:637:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25476:637:0;;;;-1:-1:-1;25476:637:0;-1:-1:-1;25476:637:0;;-1:-1:-1;25476:637:0;;;;;;;;;-1:-1:-1;;25476:637:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25476:637:0;;;;-1:-1:-1;25476:637:0;-1:-1:-1;25476:637:0;;-1:-1:-1;25476:637:0;;;;;;;;;-1:-1:-1;;25476:637:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25476:637:0;;;;-1:-1:-1;25476:637:0;-1:-1:-1;25476:637:0;;-1:-1:-1;25476:637:0;;;;;;;;;-1:-1:-1;;25476:637:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25476:637:0;;;;-1:-1:-1;25476:637:0;-1:-1:-1;25476:637:0;;-1:-1:-1;25476:637:0;;;;;;;;;-1:-1:-1;;25476:637:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25476:637:0;;;;-1:-1:-1;25476:637:0;-1:-1:-1;25476:637:0;;-1:-1:-1;25476:637:0;;;;;;;;;-1:-1:-1;;25476:637:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25476:637:0;;;;-1:-1:-1;25476:637:0;-1:-1:-1;25476:637:0;;-1:-1:-1;25476:637:0;;;;;;;;;-1:-1:-1;25476:637:0;;-1:-1:-1;25476:637:0;;-1:-1:-1;;;;;;;25476:637:0;20746:537;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20746:537:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20746:537:0;;-1:-1:-1;;;;;;;20746:537:0;;;;-1:-1:-1;;;20746:537:0;;;;;;;;;;-1:-1:-1;20746:537:0;;;;;-1:-1:-1;20746:537:0;;;;;8114:730;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8114:730:0;-1:-1:-1;;;;;8114:730:0;;;;;;;;;;;;1903:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1903:34:0;;;;;;;;;;;;;;;;;;;;;;;14795:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14795:140:0;;;;16227:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16227:203:0;-1:-1:-1;;;;;16227:203:0;;;;;13517:268;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13517:268:0;;;;17508:508;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17508:508:0;-1:-1:-1;;;;;17508:508:0;;;;;2151:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2151:18:0;;;;10996:542;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10996:542:0;-1:-1:-1;;;;;10996:542:0;;;;;;;7682:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7682:105:0;-1:-1:-1;;;;;7682:105:0;;;;;5300:401;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5300:401:0;;;;14566:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14566:134:0;;;;19874:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19874:107:0;-1:-1:-1;;;;;19874:107:0;;;;;15173:439;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15173:439:0;-1:-1:-1;;;;;15173:439:0;;;;;15893:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15893:197:0;-1:-1:-1;;;;;15893:197:0;;;;;2097:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2097:20:0;;;;1824:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1824:39:0;;;;26646:423;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26646:423:0;-1:-1:-1;;;;;26646:423:0;;;;;19057:445;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19057:445:0;;;;;26360:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26360:131:0;-1:-1:-1;;;;;26360:131:0;;;;;6963:499;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6963:499:0;-1:-1:-1;;;;;6963:499:0;;;;;;;27376:262;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27376:262:0;-1:-1:-1;;;;;27376:262:0;;;;;14006:229;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14006:229:0;;;;12483:343;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12483:343:0;-1:-1:-1;;;;;12483:343:0;;;;;18417:368;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18417:368:0;;;;;2461:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2461:38:0;;;;2392:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2392:28:0;;;;10205:372;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10205:372:0;-1:-1:-1;;;;;10205:372:0;;;;;;;27795:262;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27795:262:0;-1:-1:-1;;;;;27795:262:0;;;;;11879:179;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11879:179:0;-1:-1:-1;;;;;11879:179:0;;;;;;;;;;16583:408;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16583:408:0;-1:-1:-1;;;;;16583:408:0;;;;;3212:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3212:33:0;;;;17198:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17198:99:0;-1:-1:-1;;;;;17198:99:0;;;;;2326:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2326:31:0;;;;12972:411;13045:13;;13234:25;;-1:-1:-1;;;;;13045:13:0;13031:10;:27;;:50;;-1:-1:-1;13076:5:0;;-1:-1:-1;;;;;13076:5:0;13062:10;:19;13031:50;13023:90;;;;;;;-1:-1:-1;;;;;13023:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13132:13;;-1:-1:-1;;;;;13132:13:0;:27;;13124:99;;;;;-1:-1:-1;;;;;13124:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13262:13:0;;;-1:-1:-1;;;;;;13286:26:0;;;;;13328:47;;-1:-1:-1;;;;;13262:13:0;;;;;;13328:47;;13262:13;;13328:47;12972:411;:::o;1752:42::-;;;;;;;;;;;;;;;;;;;:::o;9493:298::-;14430:6;;9574:4;;-1:-1:-1;;;14430:6:0;;;;14429:7;14421:33;;;;;-1:-1:-1;;;;;14421:33:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14421:33:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9600:16:0;;;;;;:6;:16;;;;;;;;9599:17;:40;;;;-1:-1:-1;9628:10:0;9621:18;;;;:6;:18;;;;;;;;9620:19;9599:40;9591:67;;;;;;;-1:-1:-1;;;;;9591:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9591:67:0;;;;;;;;;;;;;;;9677:10;9669:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;9669:29:0;;;;;;;;;;;;:38;;;9723;;;;;;;9669:29;;9677:10;9723:38;;;;;;;;;;;-1:-1:-1;9779:4:0;9493:298;;;;:::o;2208:34::-;;;-1:-1:-1;;;;;2208:34:0;;:::o;6615:91::-;6686:12;;6615:91;:::o;25476:637::-;25662:4;25940:6;25699:1;:8;25687:1;:8;:20;:44;;;;;25723:1;:8;25711:1;:8;:20;25687:44;:69;;;;;25747:2;:9;25735:1;:8;:21;25687:69;:97;;;;;25772:5;:12;25760:1;:8;:24;25687:97;25679:125;;;;;;;-1:-1:-1;;;;;25679:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25835:3;:10;25823:1;:8;:22;:48;;;;;25861:3;:10;25849:1;:8;:22;25823:48;:79;;;;;25887:8;:15;25875:1;:8;:27;25823:79;25815:107;;;;;;;-1:-1:-1;;;;;25815:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25949:1:0;25935:149;25956:1;:8;25952:1;:12;25935:149;;;25986:86;26009:1;26011;26009:4;;;;;;;;;;;;;;;;;;26015:1;26017;26015:4;;;;;;;;;;;;;;;;;;26021:1;26023;26021:4;;;;;;;;;;;;;;;;;;26027:2;26030:1;26027:5;;;;;;;;;;;;;;;;;;26034;26040:1;26034:8;;;;;;;;;;;;;;;;;;26044:3;26048:1;26044:6;;;;;;;;;;;;;;;;;;26052:3;26056:1;26052:6;;;;;;;;;;;;;;;;;;26060:8;26069:1;26060:11;;;;;;;;;;;;;;;;;;25986:22;:86::i;:::-;-1:-1:-1;25966:3:0;;25935:149;;;-1:-1:-1;26101:4:0;;25476:637;-1:-1:-1;;;;;;;;;25476:637:0:o;20746:537::-;20891:4;20979:9;20999;21019:7;20916:3;:10;20930:2;20916:16;20908:60;;;;;;;-1:-1:-1;;;;;20908:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21081:2:0;21072:12;;21066:19;21119:2;21110:12;;21104:19;21165:2;21156:12;;21150:19;21147:1;21142:28;21191:62;21066:19;21104;21142:28;21223:2;21227:5;21234:3;21239;21244:8;21191:22;:62::i;:::-;-1:-1:-1;21271:4:0;;20746:537;-1:-1:-1;;;;;;;;;;20746:537:0:o;8114:730::-;14430:6;;8259:4;;-1:-1:-1;;;14430:6:0;;;;14429:7;14421:33;;;;;-1:-1:-1;;;;;14421:33:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14421:33:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;8289:17:0;;;;8281:61;;;;;-1:-1:-1;;;;;8281:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8362:11:0;;;;;;:6;:11;;;;;;;;8361:12;:30;;;;-1:-1:-1;;;;;;8378:13:0;;;;;;:6;:13;;;;;;;;8377:14;8361:30;:53;;;;-1:-1:-1;8403:10:0;8396:18;;;;:6;:18;;;;;;;;8395:19;8361:53;8353:80;;;;;;;-1:-1:-1;;;;;8353:80:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8353:80:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;8462:15:0;;;;;;:8;:15;;;;;;8452:25;;;8444:56;;;;;-1:-1:-1;;;;;8444:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8529:14:0;;;;;;:7;:14;;;;;;;;8544:10;8529:26;;;;;;;;8519:36;;;8511:71;;;;;-1:-1:-1;;;;;8511:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8613:15:0;;;;;;:8;:15;;;;;;:27;;8633:6;8613:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;8595:15:0;;;;;;;:8;:15;;;;;;:45;;;;8667:13;;;;;;;:25;;8685:6;8667:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;8651:13:0;;;;;;;:8;:13;;;;;;;;:41;;;;8732:14;;;;;:7;:14;;;;;8747:10;8732:26;;;;;;;:38;;8763:6;8732:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;8703:14:0;;;;;;;:7;:14;;;;;;;;8718:10;8703:26;;;;;;;;:67;;;;8786:28;;;;;;;;;;;8703:14;;-1:-1:-1;;;;;;;;;;;8786:28:0;;;;;;;;;;-1:-1:-1;8832:4:0;8114:730;;;;;:::o;1903:34::-;1936:1;1903:34;:::o;14795:140::-;12235:5;;-1:-1:-1;;;;;12235:5:0;12221:10;:19;12213:41;;;;;-1:-1:-1;;;;;12213:41:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12213:41:0;;;;;;;;;;;;;;;14850:6;;-1:-1:-1;;;14850:6:0;;;;14842:35;;;;;;;-1:-1:-1;;;;;14842:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14888:6;:14;;-1:-1:-1;;14888:14:0;;;14918:9;;;;14897:5;;14918:9;14795:140::o;16227:203::-;15688:19;;-1:-1:-1;;;;;15688:19:0;15674:10;:33;15666:69;;;;;-1:-1:-1;;;;;15666:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16310:13:0;;;;;;:6;:13;;;;;;;;16302:50;;;;;;;-1:-1:-1;;;;;16302:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16363:13:0;;16379:5;16363:13;;;:6;:13;;;;;;:21;;-1:-1:-1;;16363:21:0;;;16400:22;;;16379:5;16400:22;16227:203;:::o;13517:268::-;13583:13;;13629:17;;-1:-1:-1;;;;;13583:13:0;13569:10;:27;13561:57;;;;;-1:-1:-1;;;;;13561:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13649:5:0;;;13673:13;;;-1:-1:-1;;;;;;13665:21:0;;;-1:-1:-1;;;;;13673:13:0;;;13665:21;;;;;;;;13697:26;;;;;13739:38;;13649:5;;;;13771;;13649;;13739:38;;13649:5;;13739:38;13517:268;:::o;17508:508::-;17607:16;;-1:-1:-1;;;;;17607:16:0;17593:10;:30;;:53;;-1:-1:-1;17641:5:0;;-1:-1:-1;;;;;17641:5:0;17627:10;:19;17593:53;17585:96;;;;;;;-1:-1:-1;;;;;17585:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17700:34:0;;;;17692:91;;;;;-1:-1:-1;;;;;17692:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17802:16;;-1:-1:-1;;;;;17802:40:0;;;:16;;:40;;17794:89;;;;;-1:-1:-1;;;;;17794:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17919:16;;17899:59;;-1:-1:-1;;;;;17899:59:0;;;;17919:16;;17899:59;;17919:16;;17899:59;17969:16;:39;;-1:-1:-1;;;;;;17969:39:0;-1:-1:-1;;;;;17969:39:0;;;;;;;;;;17508:508::o;2151:18::-;;;-1:-1:-1;;;2151:18:0;;;;;:::o;10996:542::-;14430:6;;11093:4;;;;-1:-1:-1;;;14430:6:0;;;;14429:7;14421:33;;;;;-1:-1:-1;;;;;14421:33:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14421:33:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11119:16:0;;;;;;:6;:16;;;;;;;;11118:17;:40;;;;-1:-1:-1;11147:10:0;11140:18;;;;:6;:18;;;;;;;;11139:19;11118:40;11110:67;;;;;;;-1:-1:-1;;;;;11110:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11110:67:0;;;;;;;;;;;;;;;-1:-1:-1;11212:10:0;11204:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11204:29:0;;;;;;;;;;11248:27;;;11244:188;;;11300:10;11324:1;11292:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11292:29:0;;;;;;;;;:33;11244:188;;;11390:30;:8;11403:16;11390:30;:12;:30;:::i;:::-;11366:10;11358:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11358:29:0;;;;;;;;;:62;11244:188;11456:10;11478:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11447:61:0;;11478:29;;;;;;;;;;;11447:61;;;;;;;;;11456:10;11447:61;;;;;;;;;;;-1:-1:-1;11526:4:0;;10996:542;-1:-1:-1;;;10996:542:0:o;7682:105::-;-1:-1:-1;;;;;7764:15:0;7737:7;7764:15;;;:8;:15;;;;;;;7682:105::o;5300:401::-;5349:11;;;;5348:12;5340:147;;;;;-1:-1:-1;;;;;5340:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5498:5;:18;;5506:10;-1:-1:-1;;;;;;5498:18:0;;;;;;;;5527:19;:32;;;;;;-1:-1:-1;5570:12:0;:16;5597;:29;;;;;;;;;;5637:27;:25;:27::i;:::-;5675:11;:18;;-1:-1:-1;;5675:18:0;5689:4;5675:18;;;5300:401::o;14566:134::-;12235:5;;-1:-1:-1;;;;;12235:5:0;12221:10;:19;12213:41;;;;;-1:-1:-1;;;;;12213:41:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12213:41:0;;;;;;;;;;;;;;;14620:6;;-1:-1:-1;;;14620:6:0;;;;14619:7;14611:34;;;;;-1:-1:-1;;;;;14611:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14656:6;:13;;-1:-1:-1;;14656:13:0;-1:-1:-1;;;14656:13:0;;;14685:7;;;;14656:13;;14685:7;14566:134::o;19874:107::-;-1:-1:-1;;;;;19957:16:0;19930:7;19957:16;;;:8;:16;;;;;;;19874:107::o;15173:439::-;15278:19;;-1:-1:-1;;;;;15278:19:0;15264:10;:33;;:56;;-1:-1:-1;15315:5:0;;-1:-1:-1;;;;;15315:5:0;15301:10;:19;15264:56;15256:102;;;;;;;-1:-1:-1;;;;;15256:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15377:19;;-1:-1:-1;;;;;15377:46:0;;;:19;;:46;;15369:95;;;;;-1:-1:-1;;;;;15369:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15503:19;;15480:68;;-1:-1:-1;;;;;15480:68:0;;;;15503:19;;15480:68;;15503:19;;15480:68;15559:19;:45;;-1:-1:-1;;;;;;15559:45:0;-1:-1:-1;;;;;15559:45:0;;;;;;;;;;15173:439::o;15893:197::-;15688:19;;-1:-1:-1;;;;;15688:19:0;15674:10;:33;15666:69;;;;;-1:-1:-1;;;;;15666:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15975:13:0;;;;;;:6;:13;;;;;;;;15974:14;15966:49;;;;;-1:-1:-1;;;;;15966:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16026:13:0;;;;;;:6;:13;;;;;;:20;;-1:-1:-1;;16026:20:0;16042:4;16026:20;;;16062;;;16026:13;16062:20;15893:197;:::o;2097:20::-;;;-1:-1:-1;;;;;2097:20:0;;:::o;1824:39::-;;;;;;;;;;;;;;;;;;;:::o;26646:423::-;26747:23;;-1:-1:-1;;;;;26747:23:0;26733:10;:37;;:60;;-1:-1:-1;26788:5:0;;-1:-1:-1;;;;;26788:5:0;26774:10;:19;26733:60;26725:98;;;;;;;-1:-1:-1;;;;;26725:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26842:23;;-1:-1:-1;;;;;26842:42:0;;;:23;;:42;;26834:91;;;;;-1:-1:-1;;;;;26834:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26936:23;:41;;-1:-1:-1;;;;;;26936:41:0;-1:-1:-1;;;;;26936:41:0;;;;;;;;;;26993:68;;26936:41;;27020:23;;26993:68;;-1:-1:-1;;26993:68:0;26646:423;:::o;19057:445::-;18089:16;;19134:12;;-1:-1:-1;;;;;18089:16:0;18075:10;:30;18067:63;;;;;-1:-1:-1;;;;;18067:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19186:16;;-1:-1:-1;;;;;19186:16:0;19177:26;;;;:8;:26;;;;;;19167:36;;;19159:66;;;;;-1:-1:-1;;;;;19159:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19274:16;;-1:-1:-1;;;;;19274:16:0;19265:26;;;;:8;:26;;;;;;:38;;19296:6;19265:38;:30;:38;:::i;:::-;19245:16;;-1:-1:-1;;;;;19245:16:0;19236:26;;;;:8;:26;;;;;:67;19329:12;;:24;;19346:6;19329:24;:16;:24;:::i;:::-;19314:12;:39;19385:16;;19369:41;;;;;;;;-1:-1:-1;;;;;19385:16:0;;;;19369:41;;;;;;;;;19435:16;;19426:46;;;;;;;;19461:1;;-1:-1:-1;;;;;19435:16:0;;-1:-1:-1;;;;;;;;;;;19426:46:0;;;;;;;;;-1:-1:-1;19490:4:0;19057:445;;;:::o;26360:131::-;-1:-1:-1;;;;;26455:28:0;26431:4;26455:28;;;:21;:28;;;;;;;;;26360:131::o;6963:499::-;14430:6;;7040:4;;-1:-1:-1;;;14430:6:0;;;;14429:7;14421:33;;;;;-1:-1:-1;;;;;14421:33:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14421:33:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7065:17:0;;;;7057:61;;;;;-1:-1:-1;;;;;7057:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7138:11:0;;;;;;:6;:11;;;;;;;;7137:12;:35;;;;-1:-1:-1;7161:10:0;7154:18;;;;:6;:18;;;;;;;;7153:19;7137:35;7129:62;;;;;;;-1:-1:-1;;;;;7129:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7129:62:0;;;;;;;;;;;;;;;7229:10;7220:20;;;;:8;:20;;;;;;7210:30;;;7202:61;;;;;-1:-1:-1;;;;;7202:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7308:10;7299:20;;;;:8;:20;;;;;;:32;;7324:6;7299:32;:24;:32;:::i;:::-;7285:10;7276:20;;;;:8;:20;;;;;;:55;;;;-1:-1:-1;;;;;7358:13:0;;;;;;:25;;7376:6;7358:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;7342:13:0;;;;;;:8;:13;;;;;;;;;:41;;;;7399:33;;;;;;;7342:13;;7408:10;;-1:-1:-1;;;;;;;;;;;7399:33:0;;;;;;;;;-1:-1:-1;7450:4:0;6963:499;;;;:::o;27376:262::-;27149:23;;-1:-1:-1;;;;;27149:23:0;27135:10;:37;27127:77;;;;;-1:-1:-1;;;;;27127:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27477:28:0;;;;;;:21;:28;;;;;;;;27476:29;27468:70;;;;;-1:-1:-1;;;;;27468:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27549:28:0;;;;;;:21;:28;;;;;;:35;;-1:-1:-1;;27549:35:0;27580:4;27549:35;;;27600:30;;;27549:28;27600:30;27376:262;:::o;14006:229::-;12235:5;;14060:16;;-1:-1:-1;;;;;12235:5:0;12221:10;:19;12213:41;;;;;-1:-1:-1;;;;;12213:41:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12213:41:0;;;;;;;;;;;;;;;-1:-1:-1;14088:4:0;14079:14;;;;:8;:14;;;;;;;;14104:18;;;;14160:5;;-1:-1:-1;;;;;14160:5:0;14151:15;;;;;:29;;14079:14;14151:29;:19;:29;:::i;:::-;14142:5;;;-1:-1:-1;;;;;14142:5:0;;;14133:15;;;;:8;:15;;;;;;;;;:47;;;;14211:5;;14196:31;;;;;;;14211:5;;;14205:4;;-1:-1:-1;;;;;;;;;;;14196:31:0;;;;;;;;;;14006:229;:::o;12483:343::-;12235:5;;-1:-1:-1;;;;;12235:5:0;12221:10;:19;12213:41;;;;;-1:-1:-1;;;;;12213:41:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12213:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;12565:28:0;;;;12557:82;;;;;-1:-1:-1;;;;;12557:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12658:10;-1:-1:-1;;;;;12658:28:0;;;;12650:64;;;;;-1:-1:-1;;;;;12650:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12725:13;:30;;-1:-1:-1;;;;;;12725:30:0;-1:-1:-1;;;;;12725:30:0;;;;;;;;;;;12797:5;;12771:47;;12804:13;;;;12797:5;;;12771:47;;-1:-1:-1;;12771:47:0;12483:343;:::o;18417:368::-;18089:16;;18494:12;;-1:-1:-1;;;;;18089:16:0;18075:10;:30;18067:63;;;;;-1:-1:-1;;;;;18067:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18534:12;;:24;;18551:6;18534:24;:16;:24;:::i;:::-;18519:12;:39;18607:16;;-1:-1:-1;;;;;18607:16:0;18598:26;;;;:8;:26;;;;;;:38;;18629:6;18598:38;:30;:38;:::i;:::-;18578:16;;;-1:-1:-1;;;;;18578:16:0;;;18569:26;;;;:8;:26;;;;;;;;;:67;;;;18668:16;;18652:41;;;;;;;18668:16;;;18652:41;;;;;;;;18730:16;;18709:46;;;;;;;;-1:-1:-1;;;;;18730:16:0;;;;;;-1:-1:-1;;;;;;;;;;;18709:46:0;;;;;;;;;-1:-1:-1;18773:4:0;18417:368;;;:::o;2461:38::-;;;-1:-1:-1;;;;;2461:38:0;;:::o;2392:28::-;;;-1:-1:-1;;;;;2392:28:0;;:::o;10205:372::-;14430:6;;10297:4;;-1:-1:-1;;;14430:6:0;;;;14429:7;14421:33;;;;;-1:-1:-1;;;;;14421:33:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14421:33:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10323:16:0;;;;;;:6;:16;;;;;;;;10322:17;:40;;;;-1:-1:-1;10351:10:0;10344:18;;;;:6;:18;;;;;;;;10343:19;10322:40;10314:67;;;;;;;-1:-1:-1;;;;;10314:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10314:67:0;;;;;;;;;;;;;;;10432:10;10424:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10424:29:0;;;;;;;;;;:46;;10458:11;10424:46;:33;:46;:::i;:::-;10400:10;10392:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10392:29:0;;;;;;;;;;;;:78;;;10486:61;;;;;;10392:29;;10486:61;;;;;;;;;;;-1:-1:-1;10565:4:0;10205:372;;;;:::o;27795:262::-;27149:23;;-1:-1:-1;;;;;27149:23:0;27135:10;:37;27127:77;;;;;-1:-1:-1;;;;;27127:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27897:28:0;;;;;;:21;:28;;;;;;;;27889:65;;;;;;;-1:-1:-1;;;;;27889:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27965:28:0;;27996:5;27965:28;;;:21;:28;;;;;;:36;;-1:-1:-1;;27965:36:0;;;28017:32;;;27996:5;28017:32;27795:262;:::o;11879:179::-;-1:-1:-1;;;;;12025:15:0;;;11993:7;12025:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;11879:179::o;16583:408::-;15688:19;;16725:16;;-1:-1:-1;;;;;15688:19:0;15674:10;:33;15666:69;;;;;-1:-1:-1;;;;;15666:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16675:13:0;;;;;;:6;:13;;;;;;;;16667:47;;;;;;;-1:-1:-1;;;;;16667:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16744:15:0;;;;;;:8;:15;;;;;;;16770:19;;;16815:12;;:26;;16744:15;16815:26;:16;:26;:::i;:::-;16800:12;:41;16857:25;;-1:-1:-1;;;;;16857:25:0;;;;;;;;16898:32;;;;;;;;-1:-1:-1;;;;;16898:32:0;;;;;;;;;;;;;16946:37;;;;;;;;16970:1;;-1:-1:-1;;;;;16946:37:0;;;-1:-1:-1;;;;;;;;;;;16946:37:0;;;;;;;;16583:408;;:::o;3212:33::-;;;;:::o;17198:99::-;-1:-1:-1;;;;;17276:13:0;17252:4;17276:13;;;:6;:13;;;;;;;;;17198:99::o;2326:31::-;;;-1:-1:-1;;;;;2326:31:0;;:::o;22487:1972::-;14430:6;;22669:4;;;;;;;;-1:-1:-1;;;14430:6:0;;;;14429:7;14421:33;;;;;-1:-1:-1;;;;;14421:33:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14421:33:0;;;;;;;;;;;;;;;22716:10;22694:33;;;;:21;:33;;;;;;;;22686:93;;;;;;;-1:-1:-1;;;;;22686:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22806:1;22798:5;:9;:20;;;;22817:1;22811:3;:7;22798:20;22790:74;;;;;;;-1:-1:-1;;;;;22790:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22883:12;:24;-1:-1:-1;22883:24:0;22875:56;;;;;-1:-1:-1;;;;;22875:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23018:66;23004:80;;;22996:112;;;;;-1:-1:-1;;;;;22996:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23127:1;:7;;23132:2;23127:7;:18;;;;23138:1;:7;;23143:2;23138:7;23127:18;23119:50;;;;;;;-1:-1:-1;;;;;23119:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2986:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23312:149;;;;-1:-1:-1;;;;;23408:11:0;;23312:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;23312:149:0;;;;;;;;23302:160;;23312:149;;;;;23302:160;;;;23312:149;23302:160;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;23302:160:0;;;;;;;;;;;;23515:13;;;;;;;;;;;;;;;;23530:18;;23498:74;;23302:160;;-1:-1:-1;23302:160:0;;-1:-1:-1;23530:18:0;;-1:-1:-1;23302:160:0;;23498:74;;;-1:-1:-1;23498:74:0;;23515:13;;23498:74;23515:13;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;23498:74:0;;;;;-1:-1:-1;23498:74:0;;;;;;;-1:-1:-1;23498:74:0;;;26:21:-1;;;22:32;;6:49;;23498:74:0;;;;;;;23488:85;;23498:74;;-1:-1:-1;23498:74:0;;;23488:85;;;;23498:74;23488:85;36:153:-1;66:2;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;;;23488:85:0;;;;;;;;;;;;;;;;23473:100;;23600:24;23610:4;23616:1;23619;23622;23600:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23600:24:0;;-1:-1:-1;;23600:24:0;;;-1:-1:-1;;;;;;;23645:19:0;;;;23637:77;;;;;-1:-1:-1;;;;;23637:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23733:16:0;;;;23725:51;;;;;-1:-1:-1;;;;;23725:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23796:10:0;;;;;;:6;:10;;;;;;;;23795:11;:29;;;;-1:-1:-1;;;;;;23811:13:0;;;;;;:6;:13;;;;;;;;23810:14;23795:29;:52;;;;-1:-1:-1;23836:10:0;23829:18;;;;:6;:18;;;;;;;;23828:19;23795:52;23787:79;;;;;;;-1:-1:-1;;;;;23787:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23787:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23903:15:0;;;;;;:8;:15;;;;;;23885:14;:5;23895:3;23885:14;:9;:14;:::i;:::-;:33;;23877:63;;;;;-1:-1:-1;;;;;23877:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23959:15:0;;;;;;:8;:15;;;;;;:22;;23951:48;;;;;-1:-1:-1;;;;;23951:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24030:15:0;;;;;;:8;:15;;;;;;:22;;24050:1;24030:22;:19;:22;:::i;:::-;-1:-1:-1;;;;;24012:15:0;;;;;;:8;:15;;;;;:40;24081:35;24101:14;:5;24111:3;24101:14;:9;:14;:::i;:::-;-1:-1:-1;;;;;24081:15:0;;;;;;:8;:15;;;;;;;:35;:19;:35;:::i;:::-;-1:-1:-1;;;;;24063:15:0;;;;;;:8;:15;;;;;:53;24131:8;;24127:145;;24188:10;24179:20;;;;:8;:20;;;;;;:29;;24204:3;24179:29;:24;:29;:::i;:::-;24165:10;24156:20;;;;:8;:20;;;;;;;;;:52;;;;24228:32;;;;;;;24165:10;;-1:-1:-1;;;;;24228:32:0;;;-1:-1:-1;;;;;;;;;;;24228:32:0;;;;;;;;;24127:145;-1:-1:-1;;;;;24297:12:0;;;;;;:8;:12;;;;;;:23;;24314:5;24297:23;:16;:23;:::i;:::-;-1:-1:-1;;;;;24282:12:0;;;;;;;:8;:12;;;;;;;;;:38;;;;24336:26;;;;;;;24282:12;;24336:26;;;;-1:-1:-1;;;;;;;;;;;24336:26:0;;;;;;;;24380:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24380:49:0;;;;;;;;;;;;;;;;;-1:-1:-1;24447:4:0;;22487:1972;-1:-1:-1;;;;;;;;;;;22487:1972:0:o;310:150::-;368:7;;396:6;;;;388:15;;;;;;-1:-1:-1;;426:5:0;;;310:150::o;536:::-;594:7;626:5;;;650:6;;;;642:15;;;;;;677:1;536:150;-1:-1:-1;;;536:150:0:o;6161:345::-;2833:80;;;;;;;;;;;;;;;;;;;;;;;;;6435:4;;;;;;;;;;;;;;;;6419:22;;2833:80;;6419:22;;;;6435:4;6419:22;6435:4;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;6419:22:0;;;;;;;;;;;;6308:189;;;;;;;;;;;;;;6476:4;6308:189;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;6308:189:0;;;;;;;;6298:200;;6308:189;;;;-1:-1:-1;6308:189:0;;-1:-1:-1;6298:200:0;;;;;-1:-1:-1;6298:200:0;6308:189;6298:200;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;6298:200:0;;;;;;;;;;6277:18;:221;-1:-1:-1;;;6161:345:0:o

Swarm Source

bzzr://5da888f6ad88e6d9a8336855c72151368b2a1cddc74123faad4345dca0966fc5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.