FTM Price: $0.67 (-3.94%)
Gas: 13 GWei

Contract

0xe2fb177009FF39F52C0134E8007FA0e4BaAcBd07
 

More Info

Private Name Tags

TokenTracker

SoulPower (SOUL) (@$0.0017)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve795116062024-04-17 9:42:3015 hrs ago1713346950IN
Soul: SOUL Token
0 FTM0.0006193812.84864775
Approve794603332024-04-16 9:53:4738 hrs ago1713261227IN
Soul: SOUL Token
0 FTM0.0006086923
Approve794289172024-04-15 19:28:542 days ago1713209334IN
Soul: SOUL Token
0 FTM0.002499151.84220018
Transfer793942852024-04-15 9:10:192 days ago1713172219IN
Soul: SOUL Token
0 FTM0.0044199487.58602496
Approve793788252024-04-15 2:23:162 days ago1713147796IN
Soul: SOUL Token
0 FTM0.0012293326.15779431
Approve793451582024-04-14 13:38:493 days ago1713101929IN
Soul: SOUL Token
0 FTM0.0010321339
Approve793401272024-04-14 11:55:493 days ago1713095749IN
Soul: SOUL Token
0 FTM0.0020787543.12242437
Transfer793355692024-04-14 10:27:013 days ago1713090421IN
Soul: SOUL Token
0 FTM0.0025167245.57146282
Approve792978502024-04-13 21:48:354 days ago1713044915IN
Soul: SOUL Token
0 FTM0.02003499423.92233025
Approve792911432024-04-13 20:08:484 days ago1713038928IN
Soul: SOUL Token
0 FTM0.07086381,507.83685377
Approve792168282024-04-12 15:42:575 days ago1712936577IN
Soul: SOUL Token
0 FTM0.0019631440.72400702
Approve791582242024-04-11 15:02:236 days ago1712847743IN
Soul: SOUL Token
0 FTM0.0056637339.79015871
Approve791270472024-04-10 21:52:367 days ago1712785956IN
Soul: SOUL Token
0 FTM0.0016234234.56083917
Approve791270142024-04-10 21:51:597 days ago1712785919IN
Soul: SOUL Token
0 FTM0.0016235434.56347101
Approve791183972024-04-10 19:11:117 days ago1712776271IN
Soul: SOUL Token
0 FTM0.0030369763
Approve790830812024-04-10 9:24:037 days ago1712741043IN
Soul: SOUL Token
0 FTM0.0021436681
Approve790650482024-04-10 4:27:207 days ago1712723240IN
Soul: SOUL Token
0 FTM0.0063798135.74928119
Approve790515952024-04-10 0:57:477 days ago1712710667IN
Soul: SOUL Token
0 FTM0.00888505187.9996335
Approve790317612024-04-09 20:19:438 days ago1712693983IN
Soul: SOUL Token
0 FTM0.0025204292.10385207
Approve790317542024-04-09 20:19:388 days ago1712693978IN
Soul: SOUL Token
0 FTM0.0027525292.10385207
Transfer790272652024-04-09 19:05:578 days ago1712689557IN
Soul: SOUL Token
0 FTM0.00338121110.0191027
Transfer790272392024-04-09 19:05:348 days ago1712689534IN
Soul: SOUL Token
0 FTM0.00389776109.76841553
Approve790240352024-04-09 18:14:328 days ago1712686472IN
Soul: SOUL Token
0 FTM0.00577813119.86348992
Approve790233502024-04-09 18:04:078 days ago1712685847IN
Soul: SOUL Token
0 FTM0.00556062118.3488876
Approve790232182024-04-09 18:02:068 days ago1712685726IN
Soul: SOUL Token
0 FTM0.00356162117.56079941
View all transactions

Latest 1 internal transaction

Parent Txn Hash Block From To Value
139408692021-08-06 14:42:42985 days ago1628260962  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SoulPower

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at ftmscan.com on 2021-08-06
*/

/*--------------------------------------------------------------------------------------------------
====================================================================================================
*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~
~~~*~~~*~~~* SoulPower.sol |*||*| SPDX-License-Identifier: MIT |*||*| 0xBuns + DeGatchi ~~~*~~~*~~~*
*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~
====================================================================================================
----------------------------------------------------------------------------------------------------
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy//yNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNs-..-yNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNs-.oo.-sNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmo..sNNs..sNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmo.-sNMMNs-.omMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd+.:yNMMMMNy:`+dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh+`:yMMMMMMMMy:`+dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh/`/hMMMMMMMMMMh\`/hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy:./hMMMMMMMMMMMMd\.:hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy:.+dMMMMMMMMMMMMMMd+.:yNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNs-.omMMMMMMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMms-.omMMMMMMMMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMMMMMMNs-.omMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMMMMMMMMNs-.omMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd+.:yNMMMMMMMMMMMMMMMMMMMMMMMMNy:.+dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd/.:hMMMMMNMMMMMMMMMNNMMMMMMMMMMMh:`/dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh/`/hMMNdho/:-..--::::-..--:+shmMMMh\`/hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMy:`/dNho:-```-/shdmNNNmmdy+:.``.-/ydMd\`:hMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMNy:`/yy\.-/:.-odNMMMMMMMMMMMMNh/./y+../yy\`:yMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMNs-./:.-yhs:`+dMMMMMNdhyhhmNMMMMNs-.yhs:.-/\.-sNMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMsm.`:.:sdNd:`+dMMMdo.s.p.e.l.l.dMMMdo-.sNNh+-.:`msNMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMmo.`/.ymMMNo`:hMMMM-y.-sdmmds-.y-MMMMh`:hMMMdo:\`.omMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMd+../hMMMMMs.`yMMMMMm+/d(soul)b\+sMMMMMy`.sMMMMMh\-`+dmMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMd+..-+dMMMd/`+`uMMMMM.`/6\/.6.\/6\`.MOMMMy`-.dMMMd/`-.+dMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMh/./:`.ooyMMMy`-MOMMM`..`XOXOXOXO`..`MMMOM-`yMMMyoo.`:\.\hMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMh/./hNmy/.-ohNMy-.oNMMMNy/--:/:\:--\odMMMMh:`+mMNms\hNmy\.\hMhMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMNy:.+dMMMMmy+--/who-.omMMMMN.fantom.NMMMNmo.-who\--+yMMMMmd+.:yNMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMNy:.+dMMMMMMMNds/--/+:./yNMMMMMMMMMMMMMNdo-.//:--+ymMMMMMMMMb+.:yNMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMNs-.omMMMMMMMMMMMNdo/--.`.:shmNNNMMNNNdy+-``--:+ymNMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMms-.omMMMMMMMMMMMMMMMNmyo/-...-:/++++/:-..-:+shmNMMMMMMMMMMMMMMMmo.-smMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMMMMMMNmdhso++////++sydmNMMMMMMMMMMMMMMMMMMMMMNs-.omMMMMMMMMMMMMMM
MMMMMMMMMMMMMm+.-yNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy-.+mMMMMMMMMMMMMM
MMMMMMMMMMMMd+`:yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy:`+dMMMMMMMMMMMM
MMMMMMMMMMMh/`/hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh\`/hMMMMMMMMMMM
MMMMMMMMMMh:`/dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd\`:hMMMMMMMMMM
MMMMMMMMNy:.+dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd+.:yNMMMMMMMM
MMMMMMNy-`:+seancessssssoooooooooooooooooooooooooooooooooooooooooooooooooooooooosscircle+:`-yNMMMMMM
MMMMMMMNs::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::sNMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
====================================================================================================
~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*
====================================================================================================
--------------------------------------------------------------------------------------------------*/

pragma solidity ^0.8.0;

interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) { return msg.sender; }
    function _msgData() internal view virtual returns (bytes calldata) { return msg.data; }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint) private _balances;
    mapping(address => mapping(address => uint)) private _allowances;
    uint private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) { return _name; }
    function symbol() public view virtual override returns (string memory) { return _symbol; }
    function decimals() public view virtual override returns (uint8) { return 18; }
    function totalSupply() public view virtual override returns (uint) { return _totalSupply; }
    function balanceOf(address account) public view virtual override returns (uint) { return _balances[account]; }
    function transfer(address recipient, uint amount) public virtual override returns (bool) { 
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, 'ERC20: transfer amount exceeds allowance');
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

    function increaseAllowance(address spender, uint addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint subtractedValue) public virtual returns (bool) {
        uint currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, 'ERC20: decreased allowance below zero');
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        return true;
    }

    function _transfer(address sender, address recipient, uint amount) internal virtual {
        require(sender != address(0), 'ERC20: transfer from the zero address');
        require(recipient != address(0), 'ERC20: transfer to the zero address');
        _beforeTokenTransfer(sender, recipient, amount);
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, 'ERC20: transfer amount exceeds balance');
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;
        
        emit Transfer(sender, recipient, amount);
        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint amount) internal virtual {
        require(account != address(0), 'ERC20: mint to the zero address');
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        _balances[account] += amount;
        
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint amount) internal virtual {
        require(account != address(0), 'ERC20: burn from the zero address');
        _beforeTokenTransfer(account, address(0), amount);
        uint accountBalance = _balances[account];
        require(accountBalance >= amount, 'ERC20: burn amount exceeds balance');
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;
        
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint amount) internal virtual {
        require(owner != address(0), 'ERC20: approve from the zero address');
        require(spender != address(0), 'ERC20: approve to the zero address');
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(address from, address to, uint amount) internal virtual {}
    function _afterTokenTransfer(address from, address to, uint amount) internal virtual {}
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = '0123456789abcdef';

    function toString(uint value) internal pure returns (string memory) {
        if (value == 0) { return '0'; }
        uint temp = value;
        uint digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint value) internal pure returns (string memory) {
        if (value == 0) { return '0x00'; }
        uint temp = value;
        uint length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint value, uint length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = '0';
        buffer[1] = 'x';
        for (uint i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, 'Strings: hex length insufficient');
        return string(buffer);
    }
}

interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); }

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {  mapping(address => bool) members; bytes32 adminRole; }
    mapping(bytes32 => RoleData) private _roles;
    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(string(abi.encodePacked(
                'AccessControl: account ', Strings.toHexString(uint160(account), 20),
                ' is missing role ', Strings.toHexString(uint(role), 32)))
            );
        }
    }

    function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; }

    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), 'AccessControl: can only renounce roles for self');
        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

// ----------------------------------------------
//       SoulPower 2021 | 0xBuns + DeGatchi
// ----------------------------------------------

contract SoulPower is ERC20('SoulPower', 'SOUL'), AccessControl {

    address public supreme;     // supreme divine
    bytes32 public anunnaki;   // admin role
    bytes32 public thoth;     // minter role

    bytes32 public constant DOMAIN_TYPEHASH = // EIP-712 typehash for the contract's domain
        keccak256('EIP712Domain(string name,uint chainId,address verifyingContract)');
    bytes32 public constant DELEGATION_TYPEHASH = // EIP-712 typehash for the delegation struct used by the contract
        keccak256('Delegation(address delegatee,uint nonce,uint expiry)'); 

    // mappings for user accounts (address)
    mapping(address => mapping(uint => Checkpoint)) public checkpoints;     // vote checkpoints
    mapping(address => uint) public numCheckpoints;                       // checkpoint count
    mapping(address => uint) public nonces;                             // signing / validating states
    mapping(address => address) internal _delegates;                  // each accounts' delegate

    struct Checkpoint {  // checkpoint for marking number of votes from a given timestamp
        uint fromTime;
        uint votes;
    }

    event NewSupreme(address supreme);
    event Rethroned(bytes32 role, address oldAccount, address newAccount);
    event DelegateChanged( // emitted when an account changes its delegate
        address indexed delegator,
        address indexed fromDelegate,
        address indexed toDelegate
    );
    event DelegateVotesChanged( // emitted when a delegate account's vote balance changes
        address indexed delegate,
        uint previousBalance,
        uint newBalance
    );

    // restricted to the house of the role passed as an object to obey
    modifier obey(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    // channels the authority vested in anunnaki and thoth to the supreme
    constructor(address _supreme) {
        supreme = _supreme;
        anunnaki = keccak256('anunnaki'); // alpha supreme
        thoth = keccak256('thoth');      // god of wisdom and magic

        _divinationRitual(DEFAULT_ADMIN_ROLE, DEFAULT_ADMIN_ROLE, supreme); // supreme as root admin
        _divinationRitual(anunnaki, anunnaki, supreme);                    // anunnaki as admin of anunnaki
        _divinationRitual(thoth, anunnaki, supreme);                      // anunnaki as admin of thoth
    }

    // solidifies roles (internal)
    function _divinationRitual(bytes32 _role, bytes32 _adminRole, address _account) internal {
        _setupRole(_role, _account);
        _setRoleAdmin(_role, _adminRole);
    }

    // grants `role` to `newAccount` && renounces `role` from `oldAccount` (public role)
    function rethroneRitual(bytes32 role, address oldAccount, address newAccount) public obey(role) {
        require(oldAccount != newAccount, 'must be a new address');
        grantRole(role, newAccount);     // grants new account
        renounceRole(role, oldAccount); //  removes old account of role

        emit Rethroned(role, oldAccount, newAccount);
    }

    // updates supreme address (public anunnaki)
    function newSupreme(address _supreme) public obey(anunnaki) {
        require(supreme != _supreme, 'make a change, be the change');  //  prevents self-destruct
        rethroneRitual(DEFAULT_ADMIN_ROLE, supreme, _supreme);        //   empowers new supreme
        supreme = _supreme;

        emit NewSupreme(supreme);
    }

    // checks whether sender has divine role (public view)
    function hasDivineRole(bytes32 role) public view returns (bool) {
        return hasRole(role, msg.sender);
    }

    // mints soul power as the house of thoth so wills (public thoth)
    function mint(address _to, uint _amount) public obey(thoth) {
        _mint(_to, _amount);
        _moveDelegates(address(0), _delegates[_to], _amount);
    }

    // destroys `amount` tokens from the caller (public)
    function burn(uint amount) public {
        _burn(_msgSender(), amount);
        _moveDelegates(_delegates[_msgSender()], address(0), amount);
    }

    // destroys `amount` tokens from the `account` (public)
    function burnFrom(address account, uint amount) public {
        uint currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, 'burn amount exceeds allowance');

        _approve(account, _msgSender(), currentAllowance - amount);
        _burn(account, amount);
        _moveDelegates(_delegates[account], address(0), amount);
    }

    // returns the address delegated by a given delegator (external view)
    function delegates(address delegator) external view returns (address) {
        return _delegates[delegator];
    }

    // delegates to the `delegatee` (external)
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    // delegates votes from signatory to `delegatee` (external)
    function delegateBySig(
        address delegatee,
        uint nonce,
        uint expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        bytes32 domainSeparator = keccak256(
            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this))
        );

        bytes32 structHash = keccak256(
            abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry)
        );

        bytes32 digest = keccak256(
            abi.encodePacked('\x19\x01', domainSeparator, structHash)
        );

        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), 'delegateBySig: invalid signature');
        require(nonce == nonces[signatory]++, 'delegateBySig: invalid nonce');
        require(block.timestamp <= expiry, 'delegateBySig: signature expired');
        return _delegate(signatory, delegatee);
    }

    // returns current votes balance for `account` (external view)
    function getCurrentVotes(address account) external view returns (uint) {
        uint nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    // returns an account's prior vote count as of a given timestamp (external view)
    function getPriorVotes(address account, uint blockTimestamp) external view returns (uint) {
        require(blockTimestamp < block.timestamp, 'getPriorVotes: not yet determined');
        
        uint nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) { return 0; }

        // checks most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromTime <= blockTimestamp) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // checks implicit zero balance
        if (checkpoints[account][0].fromTime > blockTimestamp) {
            return 0;
        }

        uint lower = 0;
        uint upper = nCheckpoints - 1;
        while (upper > lower) {
            uint center = upper - (upper - lower) / 2; // avoids overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromTime == blockTimestamp) {
                return cp.votes;
            } else if (cp.fromTime < blockTimestamp) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }

        return checkpoints[account][lower].votes;
    }

    function safe256(uint n, string memory errorMessage) internal pure returns (uint) {
        require(n < type(uint).max, errorMessage);
        return uint(n);
    }

    function getChainId() internal view returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = _delegates[delegator];
        uint delegatorBalance = balanceOf(delegator); // balance of underlying SOUL (not scaled)
        _delegates[delegator] = delegatee;
        emit DelegateChanged(delegator, currentDelegate, delegatee);
        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(address srcRep, address dstRep, uint amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decreases old representative
                uint srcRepNum = numCheckpoints[srcRep];
                uint srcRepOld = srcRepNum > 0
                    ? checkpoints[srcRep][srcRepNum - 1].votes
                    : 0;
                uint srcRepNew = srcRepOld - amount;
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increases new representative
                uint dstRepNum = numCheckpoints[dstRep];
                uint dstRepOld = dstRepNum > 0
                    ? checkpoints[dstRep][dstRepNum - 1].votes
                    : 0;
                uint dstRepNew = dstRepOld + amount;
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(
        address delegatee,
        uint nCheckpoints,
        uint oldVotes,
        uint newVotes
    ) internal {
        uint blockTimestamp = safe256(block.timestamp, 'block timestamp exceeds 256 bits');

        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromTime == blockTimestamp) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else { 
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockTimestamp, newVotes);
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_supreme","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"supreme","type":"address"}],"name":"NewSupreme","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":false,"internalType":"address","name":"oldAccount","type":"address"},{"indexed":false,"internalType":"address","name":"newAccount","type":"address"}],"name":"Rethroned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"anunnaki","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"checkpoints","outputs":[{"internalType":"uint256","name":"fromTime","type":"uint256"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockTimestamp","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"hasDivineRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_supreme","type":"address"}],"name":"newSupreme","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"oldAccount","type":"address"},{"internalType":"address","name":"newAccount","type":"address"}],"name":"rethroneRitual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supreme","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thoth","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620048f5380380620048f5833981810160405281019062000037919062000503565b6040518060400160405280600981526020017f536f756c506f77657200000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534f554c000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb9291906200043c565b508060049080519060200190620000d49291906200043c565b50505080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f45552d869603260d0572333b5da740bb4eaf623685d53936ee462b64a9a771826007819055507fdffb0b033b8033405f5fb07b08f48c89fa1b4a3d5d5a475c3e2b8df5fbd4da0d600881905550620001a16000801b6000801b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200021a60201b60201c565b620001da600754600754600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200021a60201b60201c565b62000213600854600754600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200021a60201b60201c565b50620005e2565b6200022c83826200024360201b60201c565b6200023e83836200025960201b60201c565b505050565b620002558282620002b760201b60201c565b5050565b806200026b83620003a960201b60201c565b837fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a48060056000848152602001908152602001600020600101819055505050565b620002c98282620003c960201b60201c565b620003a55760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200034a6200043460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600060056000838152602001908152602001600020600101549050919050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b8280546200044a9062000563565b90600052602060002090601f0160209004810192826200046e5760008555620004ba565b82601f106200048957805160ff1916838001178555620004ba565b82800160010185558215620004ba579182015b82811115620004b95782518255916020019190600101906200049c565b5b509050620004c99190620004cd565b5090565b5b80821115620004e8576000816000905550600101620004ce565b5090565b600081519050620004fd81620005c8565b92915050565b6000602082840312156200051657600080fd5b60006200052684828501620004ec565b91505092915050565b60006200053c8262000543565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200057c57607f821691505b6020821081141562000593576200059262000599565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620005d3816200052f565b8114620005df57600080fd5b50565b61430380620005f26000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80636fcfff4511610130578063a217fddf116100b8578063c3cda5201161007c578063c3cda520146106eb578063d547741f14610707578063dbaef9b014610723578063dd62ed3e14610753578063e7a324dc1461078357610227565b8063a217fddf1461061f578063a457c2d71461063d578063a6ed77ee1461066d578063a9059cbb1461068b578063b4b5ea57146106bb57610227565b806379cc6790116100ff57806379cc6790146105695780637ecebe001461058557806391d14854146105b557806395d89b41146105e55780639aeb37271461060357610227565b80636fcfff45146104bd57806370a08231146104ed578063743d507c1461051d578063782d6fe11461053957610227565b80632f2ff15d116101b357806340c10f191161018257806340c10f191461041b57806342966c681461043757806348f8bfea14610453578063587cde1e146104715780635c19a95c146104a157610227565b80632f2ff15d14610395578063313ce567146103b157806336568abe146103cf57806339509351146103eb57610227565b8063155dfb50116101fa578063155dfb50146102db57806318160ddd146102f957806320606b701461031757806323b872dd14610335578063248a9ca31461036557610227565b806301ffc9a71461022c57806306fdde031461025c578063095ea7b31461027a5780630cdfebfa146102aa575b600080fd5b61024660048036038101906102419190613122565b6107a1565b60405161025391906135ce565b60405180910390f35b61026461081b565b604051610271919061370a565b60405180910390f35b610294600480360381019061028f9190612fa9565b6108ad565b6040516102a191906135ce565b60405180910390f35b6102c460048036038101906102bf9190612fa9565b6108cb565b6040516102d29291906139a7565b60405180910390f35b6102e36108fc565b6040516102f091906135e9565b60405180910390f35b610301610902565b60405161030e919061398c565b60405180910390f35b61031f61090c565b60405161032c91906135e9565b60405180910390f35b61034f600480360381019061034a9190612f5a565b610930565b60405161035c91906135ce565b60405180910390f35b61037f600480360381019061037a919061306e565b610a31565b60405161038c91906135e9565b60405180910390f35b6103af60048036038101906103aa9190613097565b610a51565b005b6103b9610a7a565b6040516103c691906139d0565b60405180910390f35b6103e960048036038101906103e49190613097565b610a83565b005b61040560048036038101906104009190612fa9565b610b06565b60405161041291906135ce565b60405180910390f35b61043560048036038101906104309190612fa9565b610bb2565b005b610451600480360381019061044c919061314b565b610c40565b005b61045b610cc6565b60405161046891906135b3565b60405180910390f35b61048b60048036038101906104869190612ef5565b610cec565b60405161049891906135b3565b60405180910390f35b6104bb60048036038101906104b69190612ef5565b610d55565b005b6104d760048036038101906104d29190612ef5565b610d62565b6040516104e4919061398c565b60405180910390f35b61050760048036038101906105029190612ef5565b610d7a565b604051610514919061398c565b60405180910390f35b610537600480360381019061053291906130d3565b610dc2565b005b610553600480360381019061054e9190612fa9565b610e98565b604051610560919061398c565b60405180910390f35b610583600480360381019061057e9190612fa9565b6111c3565b005b61059f600480360381019061059a9190612ef5565b6112b2565b6040516105ac919061398c565b60405180910390f35b6105cf60048036038101906105ca9190613097565b6112ca565b6040516105dc91906135ce565b60405180910390f35b6105ed611335565b6040516105fa919061370a565b60405180910390f35b61061d60048036038101906106189190612ef5565b6113c7565b005b61062761153a565b60405161063491906135e9565b60405180910390f35b61065760048036038101906106529190612fa9565b611541565b60405161066491906135ce565b60405180910390f35b610675611635565b60405161068291906135e9565b60405180910390f35b6106a560048036038101906106a09190612fa9565b61163b565b6040516106b291906135ce565b60405180910390f35b6106d560048036038101906106d09190612ef5565b611659565b6040516106e2919061398c565b60405180910390f35b61070560048036038101906107009190612fe5565b611716565b005b610721600480360381019061071c9190613097565b6119ab565b005b61073d6004803603810190610738919061306e565b6119d4565b60405161074a91906135ce565b60405180910390f35b61076d60048036038101906107689190612f1e565b6119e7565b60405161077a919061398c565b60405180910390f35b61078b611a6e565b60405161079891906135e9565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610814575061081382611a92565b5b9050919050565b60606003805461082a90613c0f565b80601f016020809104026020016040519081016040528092919081815260200182805461085690613c0f565b80156108a35780601f10610878576101008083540402835291602001916108a3565b820191906000526020600020905b81548152906001019060200180831161088657829003601f168201915b5050505050905090565b60006108c16108ba611afc565b8484611b04565b6001905092915050565b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b60075481565b6000600254905090565b7f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3581565b600061093d848484611ccf565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610988611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff9061382c565b60405180910390fd5b610a2585610a14611afc565b8584610a209190613af3565b611b04565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b610a5a82610a31565b610a6b81610a66611afc565b611f59565b610a758383611ff6565b505050565b60006012905090565b610a8b611afc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef9061394c565b60405180910390fd5b610b0282826120d7565b5050565b6000610ba8610b13611afc565b848460016000610b21611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ba39190613a12565b611b04565b6001905092915050565b600854610bc681610bc1611afc565b611f59565b610bd083836121b9565b610c3b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612319565b505050565b610c51610c4b611afc565b82612576565b610cc3600c6000610c60611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600083612319565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d5f3382612756565b50565b600a6020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82610dd481610dcf611afc565b611f59565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a9061384c565b60405180910390fd5b610e4d8483610a51565b610e578484610a83565b7f61d8718e0a8cd948a81621b18092fb2d08d9c1d961369cbf16aab6dc46e3e4b1848484604051610e8a93929190613604565b60405180910390a150505050565b6000428210610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed39061372c565b60405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610f335760009150506111bd565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610f829190613af3565b8152602001908152602001600020600001541161100157600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610fe79190613af3565b8152602001908152602001600020600101549150506111bd565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008081526020019081526020016000206000015411156110665760009150506111bd565b6000806001836110769190613af3565b90505b81811115611163576000600283836110919190613af3565b61109b9190613a68565b826110a69190613af3565b90506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090508681600001511415611138578060200151955050505050506111bd565b868160000151101561114c5781935061115c565b6001826111599190613af3565b92505b5050611079565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206001015493505050505b92915050565b60006111d6836111d1611afc565b6119e7565b90508181101561121b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112129061390c565b60405180910390fd5b61123883611227611afc565b84846112339190613af3565b611b04565b6112428383612576565b6112ad600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600084612319565b505050565b600b6020528060005260406000206000915090505481565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805461134490613c0f565b80601f016020809104026020016040519081016040528092919081815260200182805461137090613c0f565b80156113bd5780601f10611392576101008083540402835291602001916113bd565b820191906000526020600020905b8154815290600101906020018083116113a057829003601f168201915b5050505050905090565b6007546113db816113d6611afc565b611f59565b8173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561146c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611463906138cc565b60405180910390fd5b61149c6000801b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610dc2565b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1c881cf11671f3ab7e97a339a15f6a1d287b427944d2d36d393c0846b1d35757600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161152e91906135b3565b60405180910390a15050565b6000801b81565b60008060016000611550611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561160d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116049061392c565b60405180910390fd5b61162a611618611afc565b8585846116259190613af3565b611b04565b600191505092915050565b60085481565b600061164f611648611afc565b8484611ccf565b6001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116116ad57600061170e565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836116fb9190613af3565b8152602001908152602001600020600101545b915050919050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3561174161081b565b805190602001206117506128c7565b306040516020016117649493929190613680565b60405160208183030381529060405280519060200120905060007f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc8888886040516020016117b5949392919061363b565b604051602081830303815290604052805190602001209050600082826040516020016117e2929190613542565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161181f94939291906136c5565b6020604051602081039080840390855afa158015611841573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b4906137cc565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061190d90613c41565b919050558914611952576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119499061386c565b60405180910390fd5b87421115611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c9061380c565b60405180910390fd5b61199f818b612756565b50505050505050505050565b6119b482610a31565b6119c5816119c0611afc565b611f59565b6119cf83836120d7565b505050565b60006119e082336112ca565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b906138ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb906137ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cc2919061398c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906138ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da69061376c565b60405180910390fd5b611dba8383836128d4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e37906137ec565b60405180910390fd5b8181611e4c9190613af3565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611edc9190613a12565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f40919061398c565b60405180910390a3611f538484846128d9565b50505050565b611f6382826112ca565b611ff257611f888173ffffffffffffffffffffffffffffffffffffffff1660146128de565b611f968360001c60206128de565b604051602001611fa7929190613579565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe9919061370a565b60405180910390fd5b5050565b61200082826112ca565b6120d35760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612078611afc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6120e182826112ca565b156121b55760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061215a611afc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122209061396c565b60405180910390fd5b612235600083836128d4565b80600260008282546122479190613a12565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461229c9190613a12565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612301919061398c565b60405180910390a3612315600083836128d9565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123555750600081115b1561257157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612465576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116123e2576000612443565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846124309190613af3565b8152602001908152602001600020600101545b9050600083826124539190613af3565b905061246186848484612bd8565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612570576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116124ed57600061254e565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461253b9190613af3565b8152602001908152602001600020600101545b90506000838261255e9190613a12565b905061256c85848484612bd8565b5050505b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125dd9061388c565b60405180910390fd5b6125f2826000836128d4565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f9061378c565b60405180910390fd5b81816126849190613af3565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546126d89190613af3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161273d919061398c565b60405180910390a3612751836000846128d9565b505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006127c584610d7a565b905082600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46128c1828483612319565b50505050565b6000804690508091505090565b505050565b505050565b6060600060028360026128f19190613a99565b6128fb9190613a12565b67ffffffffffffffff81111561293a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561296c5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106129ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612a54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612a949190613a99565b612a9e9190613a12565b90505b6001811115612b8a577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612b06577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612b43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612b8390613be5565b9050612aa1565b5060008414612bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc59061374c565b60405180910390fd5b8091505092915050565b6000612c19426040518060400160405280602081526020017f626c6f636b2074696d657374616d702065786365656473203235362062697473815250612e1b565b9050600084118015612c89575080600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612c759190613af3565b815260200190815260200160002060000154145b15612cf75781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612cdd9190613af3565b815260200190815260200160002060010181905550612dc4565b604051806040016040528082815260200183815250600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000820151816000015560208201518160010155905050600184612d809190613a12565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612e0c9291906139a7565b60405180910390a25050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83108290612e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e79919061370a565b60405180910390fd5b5082905092915050565b600081359050612e9b8161425a565b92915050565b600081359050612eb081614271565b92915050565b600081359050612ec581614288565b92915050565b600081359050612eda8161429f565b92915050565b600081359050612eef816142b6565b92915050565b600060208284031215612f0757600080fd5b6000612f1584828501612e8c565b91505092915050565b60008060408385031215612f3157600080fd5b6000612f3f85828601612e8c565b9250506020612f5085828601612e8c565b9150509250929050565b600080600060608486031215612f6f57600080fd5b6000612f7d86828701612e8c565b9350506020612f8e86828701612e8c565b9250506040612f9f86828701612ecb565b9150509250925092565b60008060408385031215612fbc57600080fd5b6000612fca85828601612e8c565b9250506020612fdb85828601612ecb565b9150509250929050565b60008060008060008060c08789031215612ffe57600080fd5b600061300c89828a01612e8c565b965050602061301d89828a01612ecb565b955050604061302e89828a01612ecb565b945050606061303f89828a01612ee0565b935050608061305089828a01612ea1565b92505060a061306189828a01612ea1565b9150509295509295509295565b60006020828403121561308057600080fd5b600061308e84828501612ea1565b91505092915050565b600080604083850312156130aa57600080fd5b60006130b885828601612ea1565b92505060206130c985828601612e8c565b9150509250929050565b6000806000606084860312156130e857600080fd5b60006130f686828701612ea1565b935050602061310786828701612e8c565b925050604061311886828701612e8c565b9150509250925092565b60006020828403121561313457600080fd5b600061314284828501612eb6565b91505092915050565b60006020828403121561315d57600080fd5b600061316b84828501612ecb565b91505092915050565b61317d81613b27565b82525050565b61318c81613b39565b82525050565b61319b81613b45565b82525050565b6131b26131ad82613b45565b613c8a565b82525050565b60006131c3826139eb565b6131cd81856139f6565b93506131dd818560208601613bb2565b6131e681613d21565b840191505092915050565b60006131fc826139eb565b6132068185613a07565b9350613216818560208601613bb2565b80840191505092915050565b600061322f6021836139f6565b915061323a82613d32565b604082019050919050565b60006132526020836139f6565b915061325d82613d81565b602082019050919050565b60006132756023836139f6565b915061328082613daa565b604082019050919050565b60006132986022836139f6565b91506132a382613df9565b604082019050919050565b60006132bb6022836139f6565b91506132c682613e48565b604082019050919050565b60006132de600283613a07565b91506132e982613e97565b600282019050919050565b60006133016020836139f6565b915061330c82613ec0565b602082019050919050565b60006133246026836139f6565b915061332f82613ee9565b604082019050919050565b60006133476020836139f6565b915061335282613f38565b602082019050919050565b600061336a6028836139f6565b915061337582613f61565b604082019050919050565b600061338d6015836139f6565b915061339882613fb0565b602082019050919050565b60006133b0601c836139f6565b91506133bb82613fd9565b602082019050919050565b60006133d36021836139f6565b91506133de82614002565b604082019050919050565b60006133f66025836139f6565b915061340182614051565b604082019050919050565b6000613419601c836139f6565b9150613424826140a0565b602082019050919050565b600061343c6024836139f6565b9150613447826140c9565b604082019050919050565b600061345f601d836139f6565b915061346a82614118565b602082019050919050565b6000613482601783613a07565b915061348d82614141565b601782019050919050565b60006134a56025836139f6565b91506134b08261416a565b604082019050919050565b60006134c8601183613a07565b91506134d3826141b9565b601182019050919050565b60006134eb602f836139f6565b91506134f6826141e2565b604082019050919050565b600061350e601f836139f6565b915061351982614231565b602082019050919050565b61352d81613b9b565b82525050565b61353c81613ba5565b82525050565b600061354d826132d1565b915061355982856131a1565b60208201915061356982846131a1565b6020820191508190509392505050565b600061358482613475565b915061359082856131f1565b915061359b826134bb565b91506135a782846131f1565b91508190509392505050565b60006020820190506135c86000830184613174565b92915050565b60006020820190506135e36000830184613183565b92915050565b60006020820190506135fe6000830184613192565b92915050565b60006060820190506136196000830186613192565b6136266020830185613174565b6136336040830184613174565b949350505050565b60006080820190506136506000830187613192565b61365d6020830186613174565b61366a6040830185613524565b6136776060830184613524565b95945050505050565b60006080820190506136956000830187613192565b6136a26020830186613192565b6136af6040830185613524565b6136bc6060830184613174565b95945050505050565b60006080820190506136da6000830187613192565b6136e76020830186613533565b6136f46040830185613192565b6137016060830184613192565b95945050505050565b6000602082019050818103600083015261372481846131b8565b905092915050565b6000602082019050818103600083015261374581613222565b9050919050565b6000602082019050818103600083015261376581613245565b9050919050565b6000602082019050818103600083015261378581613268565b9050919050565b600060208201905081810360008301526137a58161328b565b9050919050565b600060208201905081810360008301526137c5816132ae565b9050919050565b600060208201905081810360008301526137e5816132f4565b9050919050565b6000602082019050818103600083015261380581613317565b9050919050565b600060208201905081810360008301526138258161333a565b9050919050565b600060208201905081810360008301526138458161335d565b9050919050565b6000602082019050818103600083015261386581613380565b9050919050565b60006020820190508181036000830152613885816133a3565b9050919050565b600060208201905081810360008301526138a5816133c6565b9050919050565b600060208201905081810360008301526138c5816133e9565b9050919050565b600060208201905081810360008301526138e58161340c565b9050919050565b600060208201905081810360008301526139058161342f565b9050919050565b6000602082019050818103600083015261392581613452565b9050919050565b6000602082019050818103600083015261394581613498565b9050919050565b60006020820190508181036000830152613965816134de565b9050919050565b6000602082019050818103600083015261398581613501565b9050919050565b60006020820190506139a16000830184613524565b92915050565b60006040820190506139bc6000830185613524565b6139c96020830184613524565b9392505050565b60006020820190506139e56000830184613533565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613a1d82613b9b565b9150613a2883613b9b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a5d57613a5c613c94565b5b828201905092915050565b6000613a7382613b9b565b9150613a7e83613b9b565b925082613a8e57613a8d613cc3565b5b828204905092915050565b6000613aa482613b9b565b9150613aaf83613b9b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ae857613ae7613c94565b5b828202905092915050565b6000613afe82613b9b565b9150613b0983613b9b565b925082821015613b1c57613b1b613c94565b5b828203905092915050565b6000613b3282613b7b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613bd0578082015181840152602081019050613bb5565b83811115613bdf576000848401525b50505050565b6000613bf082613b9b565b91506000821415613c0457613c03613c94565b5b600182039050919050565b60006002820490506001821680613c2757607f821691505b60208210811415613c3b57613c3a613cf2565b5b50919050565b6000613c4c82613b9b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c7f57613c7e613c94565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f6d7573742062652061206e657720616464726573730000000000000000000000600082015250565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6d616b652061206368616e67652c20626520746865206368616e676500000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6275726e20616d6f756e74206578636565647320616c6c6f77616e6365000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61426381613b27565b811461426e57600080fd5b50565b61427a81613b45565b811461428557600080fd5b50565b61429181613b4f565b811461429c57600080fd5b50565b6142a881613b9b565b81146142b357600080fd5b50565b6142bf81613ba5565b81146142ca57600080fd5b5056fea2646970667358221220821d296d9e083956047e769287e96f6b44d9183d3a145161fde297a69d49e3ab64736f6c6343000804003300000000000000000000000081dd37687c74df8f957a370a9a4435d873f5e5a9

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102275760003560e01c80636fcfff4511610130578063a217fddf116100b8578063c3cda5201161007c578063c3cda520146106eb578063d547741f14610707578063dbaef9b014610723578063dd62ed3e14610753578063e7a324dc1461078357610227565b8063a217fddf1461061f578063a457c2d71461063d578063a6ed77ee1461066d578063a9059cbb1461068b578063b4b5ea57146106bb57610227565b806379cc6790116100ff57806379cc6790146105695780637ecebe001461058557806391d14854146105b557806395d89b41146105e55780639aeb37271461060357610227565b80636fcfff45146104bd57806370a08231146104ed578063743d507c1461051d578063782d6fe11461053957610227565b80632f2ff15d116101b357806340c10f191161018257806340c10f191461041b57806342966c681461043757806348f8bfea14610453578063587cde1e146104715780635c19a95c146104a157610227565b80632f2ff15d14610395578063313ce567146103b157806336568abe146103cf57806339509351146103eb57610227565b8063155dfb50116101fa578063155dfb50146102db57806318160ddd146102f957806320606b701461031757806323b872dd14610335578063248a9ca31461036557610227565b806301ffc9a71461022c57806306fdde031461025c578063095ea7b31461027a5780630cdfebfa146102aa575b600080fd5b61024660048036038101906102419190613122565b6107a1565b60405161025391906135ce565b60405180910390f35b61026461081b565b604051610271919061370a565b60405180910390f35b610294600480360381019061028f9190612fa9565b6108ad565b6040516102a191906135ce565b60405180910390f35b6102c460048036038101906102bf9190612fa9565b6108cb565b6040516102d29291906139a7565b60405180910390f35b6102e36108fc565b6040516102f091906135e9565b60405180910390f35b610301610902565b60405161030e919061398c565b60405180910390f35b61031f61090c565b60405161032c91906135e9565b60405180910390f35b61034f600480360381019061034a9190612f5a565b610930565b60405161035c91906135ce565b60405180910390f35b61037f600480360381019061037a919061306e565b610a31565b60405161038c91906135e9565b60405180910390f35b6103af60048036038101906103aa9190613097565b610a51565b005b6103b9610a7a565b6040516103c691906139d0565b60405180910390f35b6103e960048036038101906103e49190613097565b610a83565b005b61040560048036038101906104009190612fa9565b610b06565b60405161041291906135ce565b60405180910390f35b61043560048036038101906104309190612fa9565b610bb2565b005b610451600480360381019061044c919061314b565b610c40565b005b61045b610cc6565b60405161046891906135b3565b60405180910390f35b61048b60048036038101906104869190612ef5565b610cec565b60405161049891906135b3565b60405180910390f35b6104bb60048036038101906104b69190612ef5565b610d55565b005b6104d760048036038101906104d29190612ef5565b610d62565b6040516104e4919061398c565b60405180910390f35b61050760048036038101906105029190612ef5565b610d7a565b604051610514919061398c565b60405180910390f35b610537600480360381019061053291906130d3565b610dc2565b005b610553600480360381019061054e9190612fa9565b610e98565b604051610560919061398c565b60405180910390f35b610583600480360381019061057e9190612fa9565b6111c3565b005b61059f600480360381019061059a9190612ef5565b6112b2565b6040516105ac919061398c565b60405180910390f35b6105cf60048036038101906105ca9190613097565b6112ca565b6040516105dc91906135ce565b60405180910390f35b6105ed611335565b6040516105fa919061370a565b60405180910390f35b61061d60048036038101906106189190612ef5565b6113c7565b005b61062761153a565b60405161063491906135e9565b60405180910390f35b61065760048036038101906106529190612fa9565b611541565b60405161066491906135ce565b60405180910390f35b610675611635565b60405161068291906135e9565b60405180910390f35b6106a560048036038101906106a09190612fa9565b61163b565b6040516106b291906135ce565b60405180910390f35b6106d560048036038101906106d09190612ef5565b611659565b6040516106e2919061398c565b60405180910390f35b61070560048036038101906107009190612fe5565b611716565b005b610721600480360381019061071c9190613097565b6119ab565b005b61073d6004803603810190610738919061306e565b6119d4565b60405161074a91906135ce565b60405180910390f35b61076d60048036038101906107689190612f1e565b6119e7565b60405161077a919061398c565b60405180910390f35b61078b611a6e565b60405161079891906135e9565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610814575061081382611a92565b5b9050919050565b60606003805461082a90613c0f565b80601f016020809104026020016040519081016040528092919081815260200182805461085690613c0f565b80156108a35780601f10610878576101008083540402835291602001916108a3565b820191906000526020600020905b81548152906001019060200180831161088657829003601f168201915b5050505050905090565b60006108c16108ba611afc565b8484611b04565b6001905092915050565b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b60075481565b6000600254905090565b7f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3581565b600061093d848484611ccf565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610988611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff9061382c565b60405180910390fd5b610a2585610a14611afc565b8584610a209190613af3565b611b04565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b610a5a82610a31565b610a6b81610a66611afc565b611f59565b610a758383611ff6565b505050565b60006012905090565b610a8b611afc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef9061394c565b60405180910390fd5b610b0282826120d7565b5050565b6000610ba8610b13611afc565b848460016000610b21611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ba39190613a12565b611b04565b6001905092915050565b600854610bc681610bc1611afc565b611f59565b610bd083836121b9565b610c3b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612319565b505050565b610c51610c4b611afc565b82612576565b610cc3600c6000610c60611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600083612319565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d5f3382612756565b50565b600a6020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82610dd481610dcf611afc565b611f59565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a9061384c565b60405180910390fd5b610e4d8483610a51565b610e578484610a83565b7f61d8718e0a8cd948a81621b18092fb2d08d9c1d961369cbf16aab6dc46e3e4b1848484604051610e8a93929190613604565b60405180910390a150505050565b6000428210610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed39061372c565b60405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610f335760009150506111bd565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610f829190613af3565b8152602001908152602001600020600001541161100157600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610fe79190613af3565b8152602001908152602001600020600101549150506111bd565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008081526020019081526020016000206000015411156110665760009150506111bd565b6000806001836110769190613af3565b90505b81811115611163576000600283836110919190613af3565b61109b9190613a68565b826110a69190613af3565b90506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090508681600001511415611138578060200151955050505050506111bd565b868160000151101561114c5781935061115c565b6001826111599190613af3565b92505b5050611079565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206001015493505050505b92915050565b60006111d6836111d1611afc565b6119e7565b90508181101561121b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112129061390c565b60405180910390fd5b61123883611227611afc565b84846112339190613af3565b611b04565b6112428383612576565b6112ad600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600084612319565b505050565b600b6020528060005260406000206000915090505481565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805461134490613c0f565b80601f016020809104026020016040519081016040528092919081815260200182805461137090613c0f565b80156113bd5780601f10611392576101008083540402835291602001916113bd565b820191906000526020600020905b8154815290600101906020018083116113a057829003601f168201915b5050505050905090565b6007546113db816113d6611afc565b611f59565b8173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561146c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611463906138cc565b60405180910390fd5b61149c6000801b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610dc2565b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1c881cf11671f3ab7e97a339a15f6a1d287b427944d2d36d393c0846b1d35757600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161152e91906135b3565b60405180910390a15050565b6000801b81565b60008060016000611550611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561160d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116049061392c565b60405180910390fd5b61162a611618611afc565b8585846116259190613af3565b611b04565b600191505092915050565b60085481565b600061164f611648611afc565b8484611ccf565b6001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116116ad57600061170e565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836116fb9190613af3565b8152602001908152602001600020600101545b915050919050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3561174161081b565b805190602001206117506128c7565b306040516020016117649493929190613680565b60405160208183030381529060405280519060200120905060007f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc8888886040516020016117b5949392919061363b565b604051602081830303815290604052805190602001209050600082826040516020016117e2929190613542565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161181f94939291906136c5565b6020604051602081039080840390855afa158015611841573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b4906137cc565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061190d90613c41565b919050558914611952576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119499061386c565b60405180910390fd5b87421115611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c9061380c565b60405180910390fd5b61199f818b612756565b50505050505050505050565b6119b482610a31565b6119c5816119c0611afc565b611f59565b6119cf83836120d7565b505050565b60006119e082336112ca565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b906138ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb906137ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cc2919061398c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906138ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da69061376c565b60405180910390fd5b611dba8383836128d4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e37906137ec565b60405180910390fd5b8181611e4c9190613af3565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611edc9190613a12565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f40919061398c565b60405180910390a3611f538484846128d9565b50505050565b611f6382826112ca565b611ff257611f888173ffffffffffffffffffffffffffffffffffffffff1660146128de565b611f968360001c60206128de565b604051602001611fa7929190613579565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe9919061370a565b60405180910390fd5b5050565b61200082826112ca565b6120d35760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612078611afc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6120e182826112ca565b156121b55760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061215a611afc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122209061396c565b60405180910390fd5b612235600083836128d4565b80600260008282546122479190613a12565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461229c9190613a12565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612301919061398c565b60405180910390a3612315600083836128d9565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123555750600081115b1561257157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612465576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116123e2576000612443565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846124309190613af3565b8152602001908152602001600020600101545b9050600083826124539190613af3565b905061246186848484612bd8565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612570576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116124ed57600061254e565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461253b9190613af3565b8152602001908152602001600020600101545b90506000838261255e9190613a12565b905061256c85848484612bd8565b5050505b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125dd9061388c565b60405180910390fd5b6125f2826000836128d4565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f9061378c565b60405180910390fd5b81816126849190613af3565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546126d89190613af3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161273d919061398c565b60405180910390a3612751836000846128d9565b505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006127c584610d7a565b905082600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46128c1828483612319565b50505050565b6000804690508091505090565b505050565b505050565b6060600060028360026128f19190613a99565b6128fb9190613a12565b67ffffffffffffffff81111561293a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561296c5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106129ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612a54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612a949190613a99565b612a9e9190613a12565b90505b6001811115612b8a577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612b06577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612b43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612b8390613be5565b9050612aa1565b5060008414612bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc59061374c565b60405180910390fd5b8091505092915050565b6000612c19426040518060400160405280602081526020017f626c6f636b2074696d657374616d702065786365656473203235362062697473815250612e1b565b9050600084118015612c89575080600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612c759190613af3565b815260200190815260200160002060000154145b15612cf75781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612cdd9190613af3565b815260200190815260200160002060010181905550612dc4565b604051806040016040528082815260200183815250600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000820151816000015560208201518160010155905050600184612d809190613a12565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612e0c9291906139a7565b60405180910390a25050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83108290612e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e79919061370a565b60405180910390fd5b5082905092915050565b600081359050612e9b8161425a565b92915050565b600081359050612eb081614271565b92915050565b600081359050612ec581614288565b92915050565b600081359050612eda8161429f565b92915050565b600081359050612eef816142b6565b92915050565b600060208284031215612f0757600080fd5b6000612f1584828501612e8c565b91505092915050565b60008060408385031215612f3157600080fd5b6000612f3f85828601612e8c565b9250506020612f5085828601612e8c565b9150509250929050565b600080600060608486031215612f6f57600080fd5b6000612f7d86828701612e8c565b9350506020612f8e86828701612e8c565b9250506040612f9f86828701612ecb565b9150509250925092565b60008060408385031215612fbc57600080fd5b6000612fca85828601612e8c565b9250506020612fdb85828601612ecb565b9150509250929050565b60008060008060008060c08789031215612ffe57600080fd5b600061300c89828a01612e8c565b965050602061301d89828a01612ecb565b955050604061302e89828a01612ecb565b945050606061303f89828a01612ee0565b935050608061305089828a01612ea1565b92505060a061306189828a01612ea1565b9150509295509295509295565b60006020828403121561308057600080fd5b600061308e84828501612ea1565b91505092915050565b600080604083850312156130aa57600080fd5b60006130b885828601612ea1565b92505060206130c985828601612e8c565b9150509250929050565b6000806000606084860312156130e857600080fd5b60006130f686828701612ea1565b935050602061310786828701612e8c565b925050604061311886828701612e8c565b9150509250925092565b60006020828403121561313457600080fd5b600061314284828501612eb6565b91505092915050565b60006020828403121561315d57600080fd5b600061316b84828501612ecb565b91505092915050565b61317d81613b27565b82525050565b61318c81613b39565b82525050565b61319b81613b45565b82525050565b6131b26131ad82613b45565b613c8a565b82525050565b60006131c3826139eb565b6131cd81856139f6565b93506131dd818560208601613bb2565b6131e681613d21565b840191505092915050565b60006131fc826139eb565b6132068185613a07565b9350613216818560208601613bb2565b80840191505092915050565b600061322f6021836139f6565b915061323a82613d32565b604082019050919050565b60006132526020836139f6565b915061325d82613d81565b602082019050919050565b60006132756023836139f6565b915061328082613daa565b604082019050919050565b60006132986022836139f6565b91506132a382613df9565b604082019050919050565b60006132bb6022836139f6565b91506132c682613e48565b604082019050919050565b60006132de600283613a07565b91506132e982613e97565b600282019050919050565b60006133016020836139f6565b915061330c82613ec0565b602082019050919050565b60006133246026836139f6565b915061332f82613ee9565b604082019050919050565b60006133476020836139f6565b915061335282613f38565b602082019050919050565b600061336a6028836139f6565b915061337582613f61565b604082019050919050565b600061338d6015836139f6565b915061339882613fb0565b602082019050919050565b60006133b0601c836139f6565b91506133bb82613fd9565b602082019050919050565b60006133d36021836139f6565b91506133de82614002565b604082019050919050565b60006133f66025836139f6565b915061340182614051565b604082019050919050565b6000613419601c836139f6565b9150613424826140a0565b602082019050919050565b600061343c6024836139f6565b9150613447826140c9565b604082019050919050565b600061345f601d836139f6565b915061346a82614118565b602082019050919050565b6000613482601783613a07565b915061348d82614141565b601782019050919050565b60006134a56025836139f6565b91506134b08261416a565b604082019050919050565b60006134c8601183613a07565b91506134d3826141b9565b601182019050919050565b60006134eb602f836139f6565b91506134f6826141e2565b604082019050919050565b600061350e601f836139f6565b915061351982614231565b602082019050919050565b61352d81613b9b565b82525050565b61353c81613ba5565b82525050565b600061354d826132d1565b915061355982856131a1565b60208201915061356982846131a1565b6020820191508190509392505050565b600061358482613475565b915061359082856131f1565b915061359b826134bb565b91506135a782846131f1565b91508190509392505050565b60006020820190506135c86000830184613174565b92915050565b60006020820190506135e36000830184613183565b92915050565b60006020820190506135fe6000830184613192565b92915050565b60006060820190506136196000830186613192565b6136266020830185613174565b6136336040830184613174565b949350505050565b60006080820190506136506000830187613192565b61365d6020830186613174565b61366a6040830185613524565b6136776060830184613524565b95945050505050565b60006080820190506136956000830187613192565b6136a26020830186613192565b6136af6040830185613524565b6136bc6060830184613174565b95945050505050565b60006080820190506136da6000830187613192565b6136e76020830186613533565b6136f46040830185613192565b6137016060830184613192565b95945050505050565b6000602082019050818103600083015261372481846131b8565b905092915050565b6000602082019050818103600083015261374581613222565b9050919050565b6000602082019050818103600083015261376581613245565b9050919050565b6000602082019050818103600083015261378581613268565b9050919050565b600060208201905081810360008301526137a58161328b565b9050919050565b600060208201905081810360008301526137c5816132ae565b9050919050565b600060208201905081810360008301526137e5816132f4565b9050919050565b6000602082019050818103600083015261380581613317565b9050919050565b600060208201905081810360008301526138258161333a565b9050919050565b600060208201905081810360008301526138458161335d565b9050919050565b6000602082019050818103600083015261386581613380565b9050919050565b60006020820190508181036000830152613885816133a3565b9050919050565b600060208201905081810360008301526138a5816133c6565b9050919050565b600060208201905081810360008301526138c5816133e9565b9050919050565b600060208201905081810360008301526138e58161340c565b9050919050565b600060208201905081810360008301526139058161342f565b9050919050565b6000602082019050818103600083015261392581613452565b9050919050565b6000602082019050818103600083015261394581613498565b9050919050565b60006020820190508181036000830152613965816134de565b9050919050565b6000602082019050818103600083015261398581613501565b9050919050565b60006020820190506139a16000830184613524565b92915050565b60006040820190506139bc6000830185613524565b6139c96020830184613524565b9392505050565b60006020820190506139e56000830184613533565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613a1d82613b9b565b9150613a2883613b9b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a5d57613a5c613c94565b5b828201905092915050565b6000613a7382613b9b565b9150613a7e83613b9b565b925082613a8e57613a8d613cc3565b5b828204905092915050565b6000613aa482613b9b565b9150613aaf83613b9b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ae857613ae7613c94565b5b828202905092915050565b6000613afe82613b9b565b9150613b0983613b9b565b925082821015613b1c57613b1b613c94565b5b828203905092915050565b6000613b3282613b7b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613bd0578082015181840152602081019050613bb5565b83811115613bdf576000848401525b50505050565b6000613bf082613b9b565b91506000821415613c0457613c03613c94565b5b600182039050919050565b60006002820490506001821680613c2757607f821691505b60208210811415613c3b57613c3a613cf2565b5b50919050565b6000613c4c82613b9b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c7f57613c7e613c94565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f6d7573742062652061206e657720616464726573730000000000000000000000600082015250565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6d616b652061206368616e67652c20626520746865206368616e676500000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6275726e20616d6f756e74206578636565647320616c6c6f77616e6365000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61426381613b27565b811461426e57600080fd5b50565b61427a81613b45565b811461428557600080fd5b50565b61429181613b4f565b811461429c57600080fd5b50565b6142a881613b9b565b81146142b357600080fd5b50565b6142bf81613ba5565b81146142ca57600080fd5b5056fea2646970667358221220821d296d9e083956047e769287e96f6b44d9183d3a145161fde297a69d49e3ab64736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000081dd37687c74df8f957a370a9a4435d873f5e5a9

-----Decoded View---------------
Arg [0] : _supreme (address): 0x81Dd37687c74Df8F957a370A9A4435D873F5e5A9

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000081dd37687c74df8f957a370a9a4435d873f5e5a9


Deployed Bytecode Sourcemap

16142:10001:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13828:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6917:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7740:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16783:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;16266:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7190:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16360:174;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7914:412;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14543:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14660:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7105:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14972:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8334:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19922:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20149:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16215:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20831:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21004:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16880:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7287:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18905:367;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22495:1192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20369:379;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16975:38;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14040:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7009:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19330:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13365:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8554:369;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16312:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7403:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22183:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21181:926;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14815:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19728:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7584:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16541:187;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13828:204;13913:4;13952:32;13937:47;;;:11;:47;;;;:87;;;;13988:36;14012:11;13988:23;:36::i;:::-;13937:87;13930:94;;13828:204;;;:::o;6917:86::-;6971:13;6995:5;6988:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6917:86;:::o;7740:166::-;7820:4;7837:39;7846:12;:10;:12::i;:::-;7860:7;7869:6;7837:8;:39::i;:::-;7894:4;7887:11;;7740:166;;;;:::o;16783:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16266:23::-;;;;:::o;7190:91::-;7251:4;7266:12;;7259:19;;7190:91;:::o;16360:174::-;16457:77;16360:174;:::o;7914:412::-;8017:4;8034:36;8044:6;8052:9;8063:6;8034:9;:36::i;:::-;8081:21;8105:11;:19;8117:6;8105:19;;;;;;;;;;;;;;;:33;8125:12;:10;:12::i;:::-;8105:33;;;;;;;;;;;;;;;;8081:57;;8177:6;8157:16;:26;;8149:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8239:57;8248:6;8256:12;:10;:12::i;:::-;8289:6;8270:16;:25;;;;:::i;:::-;8239:8;:57::i;:::-;8314:4;8307:11;;;7914:412;;;;;:::o;14543:109::-;14609:7;14627:6;:12;14634:4;14627:12;;;;;;;;;;;:22;;;14620:29;;14543:109;;;:::o;14660:147::-;14743:18;14756:4;14743:12;:18::i;:::-;13770:30;13781:4;13787:12;:10;:12::i;:::-;13770:10;:30::i;:::-;14774:25:::1;14785:4;14791:7;14774:10;:25::i;:::-;14660:147:::0;;;:::o;7105:79::-;7163:5;7179:2;7172:9;;7105:79;:::o;14972:216::-;15079:12;:10;:12::i;:::-;15068:23;;:7;:23;;;15060:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;15154:26;15166:4;15172:7;15154:11;:26::i;:::-;14972:216;;:::o;8334:212::-;8419:4;8436:80;8445:12;:10;:12::i;:::-;8459:7;8505:10;8468:11;:25;8480:12;:10;:12::i;:::-;8468:25;;;;;;;;;;;;;;;:34;8494:7;8468:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8436:8;:80::i;:::-;8534:4;8527:11;;8334:212;;;;:::o;19922:161::-;19975:5;;17938:30;17949:4;17955:12;:10;:12::i;:::-;17938:10;:30::i;:::-;19993:19:::1;19999:3;20004:7;19993:5;:19::i;:::-;20023:52;20046:1;20050:10;:15;20061:3;20050:15;;;;;;;;;;;;;;;;;;;;;;;;;20067:7;20023:14;:52::i;:::-;19922:161:::0;;;:::o;20149:151::-;20194:27;20200:12;:10;:12::i;:::-;20214:6;20194:5;:27::i;:::-;20232:60;20247:10;:24;20258:12;:10;:12::i;:::-;20247:24;;;;;;;;;;;;;;;;;;;;;;;;;20281:1;20285:6;20232:14;:60::i;:::-;20149:151;:::o;16215:22::-;;;;;;;;;;;;;:::o;20831:117::-;20892:7;20919:10;:21;20930:9;20919:21;;;;;;;;;;;;;;;;;;;;;;;;;20912:28;;20831:117;;;:::o;21004:104::-;21068:32;21078:10;21090:9;21068;:32::i;:::-;21004:104;:::o;16880:46::-;;;;;;;;;;;;;;;;;:::o;7287:110::-;7361:4;7376:9;:18;7386:7;7376:18;;;;;;;;;;;;;;;;7369:25;;7287:110;;;:::o;18905:367::-;18995:4;17938:30;17949:4;17955:12;:10;:12::i;:::-;17938:10;:30::i;:::-;19034:10:::1;19020:24;;:10;:24;;;;19012:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;19081:27;19091:4;19097:10;19081:9;:27::i;:::-;19145:30;19158:4;19164:10;19145:12;:30::i;:::-;19225:39;19235:4;19241:10;19253;19225:39;;;;;;;;:::i;:::-;;;;;;;;18905:367:::0;;;;:::o;22495:1192::-;22579:4;22621:15;22604:14;:32;22596:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22695:17;22715:14;:23;22730:7;22715:23;;;;;;;;;;;;;;;;22695:43;;22769:1;22753:12;:17;22749:36;;;22781:1;22774:8;;;;;22749:36;22891:14;22840:11;:20;22852:7;22840:20;;;;;;;;;;;;;;;:38;22876:1;22861:12;:16;;;;:::i;:::-;22840:38;;;;;;;;;;;:47;;;:65;22836:149;;22929:11;:20;22941:7;22929:20;;;;;;;;;;;;;;;:38;22965:1;22950:12;:16;;;;:::i;:::-;22929:38;;;;;;;;;;;:44;;;22922:51;;;;;22836:149;23077:14;23042:11;:20;23054:7;23042:20;;;;;;;;;;;;;;;:23;23063:1;23042:23;;;;;;;;;;;:32;;;:49;23038:90;;;23115:1;23108:8;;;;;23038:90;23140:10;23165;23193:1;23178:12;:16;;;;:::i;:::-;23165:29;;23205:422;23220:5;23212;:13;23205:422;;;23242:11;23282:1;23273:5;23265;:13;;;;:::i;:::-;23264:19;;;;:::i;:::-;23256:5;:27;;;;:::i;:::-;23242:41;;23317:20;23340:11;:20;23352:7;23340:20;;;;;;;;;;;;;;;:28;23361:6;23340:28;;;;;;;;;;;23317:51;;;;;;;;;;;;;;;;;;;;;;;;;;;23402:14;23387:2;:11;;;:29;23383:233;;;23444:2;:8;;;23437:15;;;;;;;;;23383:233;23492:14;23478:2;:11;;;:28;23474:142;;;23535:6;23527:14;;23474:142;;;23599:1;23590:6;:10;;;;:::i;:::-;23582:18;;23474:142;23205:422;;;;;23646:11;:20;23658:7;23646:20;;;;;;;;;;;;;;;:27;23667:5;23646:27;;;;;;;;;;;:33;;;23639:40;;;;;22495:1192;;;;;:::o;20369:379::-;20435:21;20459:32;20469:7;20478:12;:10;:12::i;:::-;20459:9;:32::i;:::-;20435:56;;20530:6;20510:16;:26;;20502:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20583:58;20592:7;20601:12;:10;:12::i;:::-;20634:6;20615:16;:25;;;;:::i;:::-;20583:8;:58::i;:::-;20652:22;20658:7;20667:6;20652:5;:22::i;:::-;20685:55;20700:10;:19;20711:7;20700:19;;;;;;;;;;;;;;;;;;;;;;;;;20729:1;20733:6;20685:14;:55::i;:::-;20369:379;;;:::o;16975:38::-;;;;;;;;;;;;;;;;;:::o;14040:139::-;14118:4;14142:6;:12;14149:4;14142:12;;;;;;;;;;;:20;;:29;14163:7;14142:29;;;;;;;;;;;;;;;;;;;;;;;;;14135:36;;14040:139;;;;:::o;7009:90::-;7065:13;7089:7;7082:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7009:90;:::o;19330:330::-;19380:8;;17938:30;17949:4;17955:12;:10;:12::i;:::-;17938:10;:30::i;:::-;19420:8:::1;19409:19;;:7;;;;;;;;;;;:19;;;;19401:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19500:53;13410:4;19515:18:::0;::::1;19535:7;;;;;;;;;;;19544:8;19500:14;:53::i;:::-;19607:8;19597:7;;:18;;;;;;;;;;;;;;;;;;19633:19;19644:7;;;;;;;;;;;19633:19;;;;;;:::i;:::-;;;;;;;;19330:330:::0;;:::o;13365:49::-;13410:4;13365:49;;;:::o;8554:369::-;8644:4;8661:21;8685:11;:25;8697:12;:10;:12::i;:::-;8685:25;;;;;;;;;;;;;;;:34;8711:7;8685:34;;;;;;;;;;;;;;;;8661:58;;8758:15;8738:16;:35;;8730:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8826:67;8835:12;:10;:12::i;:::-;8849:7;8877:15;8858:16;:34;;;;:::i;:::-;8826:8;:67::i;:::-;8911:4;8904:11;;;8554:369;;;;:::o;16312:20::-;;;;:::o;7403:173::-;7486:4;7504:42;7514:12;:10;:12::i;:::-;7528:9;7539:6;7504:9;:42::i;:::-;7564:4;7557:11;;7403:173;;;;:::o;22183:218::-;22248:4;22265:17;22285:14;:23;22300:7;22285:23;;;;;;;;;;;;;;;;22265:43;;22341:1;22326:12;:16;:67;;22392:1;22326:67;;;22345:11;:20;22357:7;22345:20;;;;;;;;;;;;;;;:38;22381:1;22366:12;:16;;;;:::i;:::-;22345:38;;;;;;;;;;;:44;;;22326:67;22319:74;;;22183:218;;;:::o;21181:926::-;21360:23;16457:77;21454:6;:4;:6::i;:::-;21438:24;;;;;;21464:12;:10;:12::i;:::-;21486:4;21410:82;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21386:117;;;;;;21360:143;;21516:18;16663:65;21593:9;21604:5;21611:6;21561:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21537:92;;;;;;21516:113;;21642:14;21712:15;21729:10;21683:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21659:92;;;;;;21642:109;;21764:17;21784:26;21794:6;21802:1;21805;21808;21784:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21764:46;;21850:1;21829:23;;:9;:23;;;;21821:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21917:6;:17;21924:9;21917:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;21908:5;:28;21900:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22007:6;21988:15;:25;;21980:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22068:31;22078:9;22089;22068;:31::i;:::-;22061:38;;;;21181:926;;;;;;:::o;14815:149::-;14899:18;14912:4;14899:12;:18::i;:::-;13770:30;13781:4;13787:12;:10;:12::i;:::-;13770:10;:30::i;:::-;14930:26:::1;14942:4;14948:7;14930:11;:26::i;:::-;14815:149:::0;;;:::o;19728:115::-;19786:4;19810:25;19818:4;19824:10;19810:7;:25::i;:::-;19803:32;;19728:115;;;:::o;7584:148::-;7673:4;7697:11;:18;7709:5;7697:18;;;;;;;;;;;;;;;:27;7716:7;7697:27;;;;;;;;;;;;;;;;7690:34;;7584:148;;;;:::o;16541:187::-;16663:65;16541:187;:::o;12609:157::-;12694:4;12733:25;12718:40;;;:11;:40;;;;12711:47;;12609:157;;;:::o;6342:84::-;6395:7;6413:10;6406:17;;6342:84;:::o;10565:341::-;10681:1;10664:19;;:5;:19;;;;10656:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10762:1;10743:21;;:7;:21;;;;10735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10844:6;10814:11;:18;10826:5;10814:18;;;;;;;;;;;;;;;:27;10833:7;10814:27;;;;;;;;;;;;;;;:36;;;;10882:7;10866:32;;10875:5;10866:32;;;10891:6;10866:32;;;;;;:::i;:::-;;;;;;;;10565:341;;;:::o;8931:659::-;9052:1;9034:20;;:6;:20;;;;9026:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9136:1;9115:23;;:9;:23;;;;9107:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9189:47;9210:6;9218:9;9229:6;9189:20;:47::i;:::-;9247:18;9268:9;:17;9278:6;9268:17;;;;;;;;;;;;;;;;9247:38;;9321:6;9304:13;:23;;9296:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9417:6;9401:13;:22;;;;:::i;:::-;9381:9;:17;9391:6;9381:17;;;;;;;;;;;;;;;:42;;;;9458:6;9434:9;:20;9444:9;9434:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9507:9;9490:35;;9499:6;9490:35;;;9518:6;9490:35;;;;;;:::i;:::-;;;;;;;;9536:46;9556:6;9564:9;9575:6;9536:19;:46::i;:::-;8931:659;;;;:::o;14187:348::-;14268:22;14276:4;14282:7;14268;:22::i;:::-;14263:265;;14383:41;14411:7;14383:41;;14421:2;14383:19;:41::i;:::-;14464:35;14489:4;14484:10;;14496:2;14464:19;:35::i;:::-;14321:179;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14307:209;;;;;;;;;;;:::i;:::-;;;;;;;;14263:265;14187:348;;:::o;15519:229::-;15594:22;15602:4;15608:7;15594;:22::i;:::-;15589:152;;15665:4;15633:6;:12;15640:4;15633:12;;;;;;;;;;;:20;;:29;15654:7;15633:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;15716:12;:10;:12::i;:::-;15689:40;;15707:7;15689:40;;15701:4;15689:40;;;;;;;;;;15589:152;15519:229;;:::o;15756:230::-;15831:22;15839:4;15845:7;15831;:22::i;:::-;15827:152;;;15902:5;15870:6;:12;15877:4;15870:12;;;;;;;;;;;:20;;:29;15891:7;15870:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;15954:12;:10;:12::i;:::-;15927:40;;15945:7;15927:40;;15939:4;15927:40;;;;;;;;;;15827:152;15756:230;;:::o;9598:400::-;9698:1;9679:21;;:7;:21;;;;9671:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;9747:49;9776:1;9780:7;9789:6;9747:20;:49::i;:::-;9823:6;9807:12;;:22;;;;;;;:::i;:::-;;;;;;;;9862:6;9840:9;:18;9850:7;9840:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;9915:7;9894:37;;9911:1;9894:37;;;9924:6;9894:37;;;;;;:::i;:::-;;;;;;;;9942:48;9970:1;9974:7;9983:6;9942:19;:48::i;:::-;9598:400;;:::o;24451:1008::-;24554:6;24544:16;;:6;:16;;;;:30;;;;;24573:1;24564:6;:10;24544:30;24540:912;;;24613:1;24595:20;;:6;:20;;;24591:417;;24685:14;24702;:22;24717:6;24702:22;;;;;;;;;;;;;;;;24685:39;;24743:14;24772:1;24760:9;:13;:102;;24861:1;24760:102;;;24797:11;:19;24809:6;24797:19;;;;;;;;;;;;;;;:34;24829:1;24817:9;:13;;;;:::i;:::-;24797:34;;;;;;;;;;;:40;;;24760:102;24743:119;;24881:14;24910:6;24898:9;:18;;;;:::i;:::-;24881:35;;24935:57;24952:6;24960:9;24971;24982;24935:16;:57::i;:::-;24591:417;;;;25046:1;25028:20;;:6;:20;;;25024:417;;25118:14;25135;:22;25150:6;25135:22;;;;;;;;;;;;;;;;25118:39;;25176:14;25205:1;25193:9;:13;:102;;25294:1;25193:102;;;25230:11;:19;25242:6;25230:19;;;;;;;;;;;;;;;:34;25262:1;25250:9;:13;;;;:::i;:::-;25230:34;;;;;;;;;;;:40;;;25193:102;25176:119;;25314:14;25343:6;25331:9;:18;;;;:::i;:::-;25314:35;;25368:57;25385:6;25393:9;25404;25415;25368:16;:57::i;:::-;25024:417;;;;24540:912;24451:1008;;;:::o;10006:551::-;10106:1;10087:21;;:7;:21;;;;10079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10157:49;10178:7;10195:1;10199:6;10157:20;:49::i;:::-;10217:19;10239:9;:18;10249:7;10239:18;;;;;;;;;;;;;;;;10217:40;;10294:6;10276:14;:24;;10268:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10388:6;10371:14;:23;;;;:::i;:::-;10350:9;:18;10360:7;10350:18;;;;;;;;;;;;;;;:44;;;;10421:6;10405:12;;:22;;;;;;;:::i;:::-;;;;;;;;10479:1;10453:37;;10462:7;10453:37;;;10483:6;10453:37;;;;;;:::i;:::-;;;;;;;;10501:48;10521:7;10538:1;10542:6;10501:19;:48::i;:::-;10006:551;;;:::o;24028:415::-;24105:23;24131:10;:21;24142:9;24131:21;;;;;;;;;;;;;;;;;;;;;;;;;24105:47;;24163:21;24187:20;24197:9;24187;:20::i;:::-;24163:44;;24285:9;24261:10;:21;24272:9;24261:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;24354:9;24310:54;;24337:15;24310:54;;24326:9;24310:54;;;;;;;;;;;;24375:60;24390:15;24407:9;24418:16;24375:14;:60::i;:::-;24028:415;;;;:::o;23870:150::-;23915:4;23932:12;23977:9;23966:20;;24005:7;23998:14;;;23870:150;:::o;10914:88::-;;;;:::o;11008:87::-;;;;:::o;12015:442::-;12084:13;12110:19;12155:1;12146:6;12142:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;12132:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12110:47;;12168:15;:6;12175:1;12168:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;12194;:6;12201:1;12194:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;12225:6;12247:1;12238:6;12234:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;12225:23;;12220:132;12254:1;12250;:5;12220:132;;;12289:12;12310:3;12302:5;:11;12289:25;;;;;;;;;;;;;;;;;;12277:6;12284:1;12277:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;12339:1;12329:11;;;;;12257:3;;;;:::i;:::-;;;12220:132;;;;12379:1;12370:5;:10;12362:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;12442:6;12428:21;;;12015:442;;;;:::o;25467:673::-;25624:19;25646:60;25654:15;25646:60;;;;;;;;;;;;;;;;;:7;:60::i;:::-;25624:82;;25738:1;25723:12;:16;:87;;;;;25796:14;25743:11;:22;25755:9;25743:22;;;;;;;;;;;;;;;:40;25781:1;25766:12;:16;;;;:::i;:::-;25743:40;;;;;;;;;;;:49;;;:67;25723:87;25719:345;;;25876:8;25827:11;:22;25839:9;25827:22;;;;;;;;;;;;;;;:40;25865:1;25850:12;:16;;;;:::i;:::-;25827:40;;;;;;;;;;;:46;;:57;;;;25719:345;;;25957:36;;;;;;;;25968:14;25957:36;;;;25984:8;25957:36;;;25918:11;:22;25930:9;25918:22;;;;;;;;;;;;;;;:36;25941:12;25918:36;;;;;;;;;;;:75;;;;;;;;;;;;;;;;;;;26051:1;26036:12;:16;;;;:::i;:::-;26008:14;:25;26023:9;26008:25;;;;;;;;;;;;;;;:44;;;;25719:345;26102:9;26081:51;;;26113:8;26123;26081:51;;;;;;;:::i;:::-;;;;;;;;25467:673;;;;;:::o;23695:167::-;23771:4;23800:14;23796:1;:18;23816:12;23788:41;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23852:1;23840:14;;23695:167;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;342:5;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:135::-;629:5;667:6;654:20;645:29;;683:31;708:5;683:31;:::i;:::-;635:85;;;;:::o;726:262::-;785:6;834:2;822:9;813:7;809:23;805:32;802:2;;;850:1;847;840:12;802:2;893:1;918:53;963:7;954:6;943:9;939:22;918:53;:::i;:::-;908:63;;864:117;792:196;;;;:::o;994:407::-;1062:6;1070;1119:2;1107:9;1098:7;1094:23;1090:32;1087:2;;;1135:1;1132;1125:12;1087:2;1178:1;1203:53;1248:7;1239:6;1228:9;1224:22;1203:53;:::i;:::-;1193:63;;1149:117;1305:2;1331:53;1376:7;1367:6;1356:9;1352:22;1331:53;:::i;:::-;1321:63;;1276:118;1077:324;;;;;:::o;1407:552::-;1484:6;1492;1500;1549:2;1537:9;1528:7;1524:23;1520:32;1517:2;;;1565:1;1562;1555:12;1517:2;1608:1;1633:53;1678:7;1669:6;1658:9;1654:22;1633:53;:::i;:::-;1623:63;;1579:117;1735:2;1761:53;1806:7;1797:6;1786:9;1782:22;1761:53;:::i;:::-;1751:63;;1706:118;1863:2;1889:53;1934:7;1925:6;1914:9;1910:22;1889:53;:::i;:::-;1879:63;;1834:118;1507:452;;;;;:::o;1965:407::-;2033:6;2041;2090:2;2078:9;2069:7;2065:23;2061:32;2058:2;;;2106:1;2103;2096:12;2058:2;2149:1;2174:53;2219:7;2210:6;2199:9;2195:22;2174:53;:::i;:::-;2164:63;;2120:117;2276:2;2302:53;2347:7;2338:6;2327:9;2323:22;2302:53;:::i;:::-;2292:63;;2247:118;2048:324;;;;;:::o;2378:986::-;2480:6;2488;2496;2504;2512;2520;2569:3;2557:9;2548:7;2544:23;2540:33;2537:2;;;2586:1;2583;2576:12;2537:2;2629:1;2654:53;2699:7;2690:6;2679:9;2675:22;2654:53;:::i;:::-;2644:63;;2600:117;2756:2;2782:53;2827:7;2818:6;2807:9;2803:22;2782:53;:::i;:::-;2772:63;;2727:118;2884:2;2910:53;2955:7;2946:6;2935:9;2931:22;2910:53;:::i;:::-;2900:63;;2855:118;3012:2;3038:51;3081:7;3072:6;3061:9;3057:22;3038:51;:::i;:::-;3028:61;;2983:116;3138:3;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3109:119;3267:3;3294:53;3339:7;3330:6;3319:9;3315:22;3294:53;:::i;:::-;3284:63;;3238:119;2527:837;;;;;;;;:::o;3370:262::-;3429:6;3478:2;3466:9;3457:7;3453:23;3449:32;3446:2;;;3494:1;3491;3484:12;3446:2;3537:1;3562:53;3607:7;3598:6;3587:9;3583:22;3562:53;:::i;:::-;3552:63;;3508:117;3436:196;;;;:::o;3638:407::-;3706:6;3714;3763:2;3751:9;3742:7;3738:23;3734:32;3731:2;;;3779:1;3776;3769:12;3731:2;3822:1;3847:53;3892:7;3883:6;3872:9;3868:22;3847:53;:::i;:::-;3837:63;;3793:117;3949:2;3975:53;4020:7;4011:6;4000:9;3996:22;3975:53;:::i;:::-;3965:63;;3920:118;3721:324;;;;;:::o;4051:552::-;4128:6;4136;4144;4193:2;4181:9;4172:7;4168:23;4164:32;4161:2;;;4209:1;4206;4199:12;4161:2;4252:1;4277:53;4322:7;4313:6;4302:9;4298:22;4277:53;:::i;:::-;4267:63;;4223:117;4379:2;4405:53;4450:7;4441:6;4430:9;4426:22;4405:53;:::i;:::-;4395:63;;4350:118;4507:2;4533:53;4578:7;4569:6;4558:9;4554:22;4533:53;:::i;:::-;4523:63;;4478:118;4151:452;;;;;:::o;4609:260::-;4667:6;4716:2;4704:9;4695:7;4691:23;4687:32;4684:2;;;4732:1;4729;4722:12;4684:2;4775:1;4800:52;4844:7;4835:6;4824:9;4820:22;4800:52;:::i;:::-;4790:62;;4746:116;4674:195;;;;:::o;4875:262::-;4934:6;4983:2;4971:9;4962:7;4958:23;4954:32;4951:2;;;4999:1;4996;4989:12;4951:2;5042:1;5067:53;5112:7;5103:6;5092:9;5088:22;5067:53;:::i;:::-;5057:63;;5013:117;4941:196;;;;:::o;5143:118::-;5230:24;5248:5;5230:24;:::i;:::-;5225:3;5218:37;5208:53;;:::o;5267:109::-;5348:21;5363:5;5348:21;:::i;:::-;5343:3;5336:34;5326:50;;:::o;5382:118::-;5469:24;5487:5;5469:24;:::i;:::-;5464:3;5457:37;5447:53;;:::o;5506:157::-;5611:45;5631:24;5649:5;5631:24;:::i;:::-;5611:45;:::i;:::-;5606:3;5599:58;5589:74;;:::o;5669:364::-;5757:3;5785:39;5818:5;5785:39;:::i;:::-;5840:71;5904:6;5899:3;5840:71;:::i;:::-;5833:78;;5920:52;5965:6;5960:3;5953:4;5946:5;5942:16;5920:52;:::i;:::-;5997:29;6019:6;5997:29;:::i;:::-;5992:3;5988:39;5981:46;;5761:272;;;;;:::o;6039:377::-;6145:3;6173:39;6206:5;6173:39;:::i;:::-;6228:89;6310:6;6305:3;6228:89;:::i;:::-;6221:96;;6326:52;6371:6;6366:3;6359:4;6352:5;6348:16;6326:52;:::i;:::-;6403:6;6398:3;6394:16;6387:23;;6149:267;;;;;:::o;6422:366::-;6564:3;6585:67;6649:2;6644:3;6585:67;:::i;:::-;6578:74;;6661:93;6750:3;6661:93;:::i;:::-;6779:2;6774:3;6770:12;6763:19;;6568:220;;;:::o;6794:366::-;6936:3;6957:67;7021:2;7016:3;6957:67;:::i;:::-;6950:74;;7033:93;7122:3;7033:93;:::i;:::-;7151:2;7146:3;7142:12;7135:19;;6940:220;;;:::o;7166:366::-;7308:3;7329:67;7393:2;7388:3;7329:67;:::i;:::-;7322:74;;7405:93;7494:3;7405:93;:::i;:::-;7523:2;7518:3;7514:12;7507:19;;7312:220;;;:::o;7538:366::-;7680:3;7701:67;7765:2;7760:3;7701:67;:::i;:::-;7694:74;;7777:93;7866:3;7777:93;:::i;:::-;7895:2;7890:3;7886:12;7879:19;;7684:220;;;:::o;7910:366::-;8052:3;8073:67;8137:2;8132:3;8073:67;:::i;:::-;8066:74;;8149:93;8238:3;8149:93;:::i;:::-;8267:2;8262:3;8258:12;8251:19;;8056:220;;;:::o;8282:400::-;8442:3;8463:84;8545:1;8540:3;8463:84;:::i;:::-;8456:91;;8556:93;8645:3;8556:93;:::i;:::-;8674:1;8669:3;8665:11;8658:18;;8446:236;;;:::o;8688:366::-;8830:3;8851:67;8915:2;8910:3;8851:67;:::i;:::-;8844:74;;8927:93;9016:3;8927:93;:::i;:::-;9045:2;9040:3;9036:12;9029:19;;8834:220;;;:::o;9060:366::-;9202:3;9223:67;9287:2;9282:3;9223:67;:::i;:::-;9216:74;;9299:93;9388:3;9299:93;:::i;:::-;9417:2;9412:3;9408:12;9401:19;;9206:220;;;:::o;9432:366::-;9574:3;9595:67;9659:2;9654:3;9595:67;:::i;:::-;9588:74;;9671:93;9760:3;9671:93;:::i;:::-;9789:2;9784:3;9780:12;9773:19;;9578:220;;;:::o;9804:366::-;9946:3;9967:67;10031:2;10026:3;9967:67;:::i;:::-;9960:74;;10043:93;10132:3;10043:93;:::i;:::-;10161:2;10156:3;10152:12;10145:19;;9950:220;;;:::o;10176:366::-;10318:3;10339:67;10403:2;10398:3;10339:67;:::i;:::-;10332:74;;10415:93;10504:3;10415:93;:::i;:::-;10533:2;10528:3;10524:12;10517:19;;10322:220;;;:::o;10548:366::-;10690:3;10711:67;10775:2;10770:3;10711:67;:::i;:::-;10704:74;;10787:93;10876:3;10787:93;:::i;:::-;10905:2;10900:3;10896:12;10889:19;;10694:220;;;:::o;10920:366::-;11062:3;11083:67;11147:2;11142:3;11083:67;:::i;:::-;11076:74;;11159:93;11248:3;11159:93;:::i;:::-;11277:2;11272:3;11268:12;11261:19;;11066:220;;;:::o;11292:366::-;11434:3;11455:67;11519:2;11514:3;11455:67;:::i;:::-;11448:74;;11531:93;11620:3;11531:93;:::i;:::-;11649:2;11644:3;11640:12;11633:19;;11438:220;;;:::o;11664:366::-;11806:3;11827:67;11891:2;11886:3;11827:67;:::i;:::-;11820:74;;11903:93;11992:3;11903:93;:::i;:::-;12021:2;12016:3;12012:12;12005:19;;11810:220;;;:::o;12036:366::-;12178:3;12199:67;12263:2;12258:3;12199:67;:::i;:::-;12192:74;;12275:93;12364:3;12275:93;:::i;:::-;12393:2;12388:3;12384:12;12377:19;;12182:220;;;:::o;12408:366::-;12550:3;12571:67;12635:2;12630:3;12571:67;:::i;:::-;12564:74;;12647:93;12736:3;12647:93;:::i;:::-;12765:2;12760:3;12756:12;12749:19;;12554:220;;;:::o;12780:402::-;12940:3;12961:85;13043:2;13038:3;12961:85;:::i;:::-;12954:92;;13055:93;13144:3;13055:93;:::i;:::-;13173:2;13168:3;13164:12;13157:19;;12944:238;;;:::o;13188:366::-;13330:3;13351:67;13415:2;13410:3;13351:67;:::i;:::-;13344:74;;13427:93;13516:3;13427:93;:::i;:::-;13545:2;13540:3;13536:12;13529:19;;13334:220;;;:::o;13560:402::-;13720:3;13741:85;13823:2;13818:3;13741:85;:::i;:::-;13734:92;;13835:93;13924:3;13835:93;:::i;:::-;13953:2;13948:3;13944:12;13937:19;;13724:238;;;:::o;13968:366::-;14110:3;14131:67;14195:2;14190:3;14131:67;:::i;:::-;14124:74;;14207:93;14296:3;14207:93;:::i;:::-;14325:2;14320:3;14316:12;14309:19;;14114:220;;;:::o;14340:366::-;14482:3;14503:67;14567:2;14562:3;14503:67;:::i;:::-;14496:74;;14579:93;14668:3;14579:93;:::i;:::-;14697:2;14692:3;14688:12;14681:19;;14486:220;;;:::o;14712:118::-;14799:24;14817:5;14799:24;:::i;:::-;14794:3;14787:37;14777:53;;:::o;14836:112::-;14919:22;14935:5;14919:22;:::i;:::-;14914:3;14907:35;14897:51;;:::o;14954:663::-;15195:3;15217:148;15361:3;15217:148;:::i;:::-;15210:155;;15375:75;15446:3;15437:6;15375:75;:::i;:::-;15475:2;15470:3;15466:12;15459:19;;15488:75;15559:3;15550:6;15488:75;:::i;:::-;15588:2;15583:3;15579:12;15572:19;;15608:3;15601:10;;15199:418;;;;;:::o;15623:967::-;16005:3;16027:148;16171:3;16027:148;:::i;:::-;16020:155;;16192:95;16283:3;16274:6;16192:95;:::i;:::-;16185:102;;16304:148;16448:3;16304:148;:::i;:::-;16297:155;;16469:95;16560:3;16551:6;16469:95;:::i;:::-;16462:102;;16581:3;16574:10;;16009:581;;;;;:::o;16596:222::-;16689:4;16727:2;16716:9;16712:18;16704:26;;16740:71;16808:1;16797:9;16793:17;16784:6;16740:71;:::i;:::-;16694:124;;;;:::o;16824:210::-;16911:4;16949:2;16938:9;16934:18;16926:26;;16962:65;17024:1;17013:9;17009:17;17000:6;16962:65;:::i;:::-;16916:118;;;;:::o;17040:222::-;17133:4;17171:2;17160:9;17156:18;17148:26;;17184:71;17252:1;17241:9;17237:17;17228:6;17184:71;:::i;:::-;17138:124;;;;:::o;17268:442::-;17417:4;17455:2;17444:9;17440:18;17432:26;;17468:71;17536:1;17525:9;17521:17;17512:6;17468:71;:::i;:::-;17549:72;17617:2;17606:9;17602:18;17593:6;17549:72;:::i;:::-;17631;17699:2;17688:9;17684:18;17675:6;17631:72;:::i;:::-;17422:288;;;;;;:::o;17716:553::-;17893:4;17931:3;17920:9;17916:19;17908:27;;17945:71;18013:1;18002:9;17998:17;17989:6;17945:71;:::i;:::-;18026:72;18094:2;18083:9;18079:18;18070:6;18026:72;:::i;:::-;18108;18176:2;18165:9;18161:18;18152:6;18108:72;:::i;:::-;18190;18258:2;18247:9;18243:18;18234:6;18190:72;:::i;:::-;17898:371;;;;;;;:::o;18275:553::-;18452:4;18490:3;18479:9;18475:19;18467:27;;18504:71;18572:1;18561:9;18557:17;18548:6;18504:71;:::i;:::-;18585:72;18653:2;18642:9;18638:18;18629:6;18585:72;:::i;:::-;18667;18735:2;18724:9;18720:18;18711:6;18667:72;:::i;:::-;18749;18817:2;18806:9;18802:18;18793:6;18749:72;:::i;:::-;18457:371;;;;;;;:::o;18834:545::-;19007:4;19045:3;19034:9;19030:19;19022:27;;19059:71;19127:1;19116:9;19112:17;19103:6;19059:71;:::i;:::-;19140:68;19204:2;19193:9;19189:18;19180:6;19140:68;:::i;:::-;19218:72;19286:2;19275:9;19271:18;19262:6;19218:72;:::i;:::-;19300;19368:2;19357:9;19353:18;19344:6;19300:72;:::i;:::-;19012:367;;;;;;;:::o;19385:313::-;19498:4;19536:2;19525:9;19521:18;19513:26;;19585:9;19579:4;19575:20;19571:1;19560:9;19556:17;19549:47;19613:78;19686:4;19677:6;19613:78;:::i;:::-;19605:86;;19503:195;;;;:::o;19704:419::-;19870:4;19908:2;19897:9;19893:18;19885:26;;19957:9;19951:4;19947:20;19943:1;19932:9;19928:17;19921:47;19985:131;20111:4;19985:131;:::i;:::-;19977:139;;19875:248;;;:::o;20129:419::-;20295:4;20333:2;20322:9;20318:18;20310:26;;20382:9;20376:4;20372:20;20368:1;20357:9;20353:17;20346:47;20410:131;20536:4;20410:131;:::i;:::-;20402:139;;20300:248;;;:::o;20554:419::-;20720:4;20758:2;20747:9;20743:18;20735:26;;20807:9;20801:4;20797:20;20793:1;20782:9;20778:17;20771:47;20835:131;20961:4;20835:131;:::i;:::-;20827:139;;20725:248;;;:::o;20979:419::-;21145:4;21183:2;21172:9;21168:18;21160:26;;21232:9;21226:4;21222:20;21218:1;21207:9;21203:17;21196:47;21260:131;21386:4;21260:131;:::i;:::-;21252:139;;21150:248;;;:::o;21404:419::-;21570:4;21608:2;21597:9;21593:18;21585:26;;21657:9;21651:4;21647:20;21643:1;21632:9;21628:17;21621:47;21685:131;21811:4;21685:131;:::i;:::-;21677:139;;21575:248;;;:::o;21829:419::-;21995:4;22033:2;22022:9;22018:18;22010:26;;22082:9;22076:4;22072:20;22068:1;22057:9;22053:17;22046:47;22110:131;22236:4;22110:131;:::i;:::-;22102:139;;22000:248;;;:::o;22254:419::-;22420:4;22458:2;22447:9;22443:18;22435:26;;22507:9;22501:4;22497:20;22493:1;22482:9;22478:17;22471:47;22535:131;22661:4;22535:131;:::i;:::-;22527:139;;22425:248;;;:::o;22679:419::-;22845:4;22883:2;22872:9;22868:18;22860:26;;22932:9;22926:4;22922:20;22918:1;22907:9;22903:17;22896:47;22960:131;23086:4;22960:131;:::i;:::-;22952:139;;22850:248;;;:::o;23104:419::-;23270:4;23308:2;23297:9;23293:18;23285:26;;23357:9;23351:4;23347:20;23343:1;23332:9;23328:17;23321:47;23385:131;23511:4;23385:131;:::i;:::-;23377:139;;23275:248;;;:::o;23529:419::-;23695:4;23733:2;23722:9;23718:18;23710:26;;23782:9;23776:4;23772:20;23768:1;23757:9;23753:17;23746:47;23810:131;23936:4;23810:131;:::i;:::-;23802:139;;23700:248;;;:::o;23954:419::-;24120:4;24158:2;24147:9;24143:18;24135:26;;24207:9;24201:4;24197:20;24193:1;24182:9;24178:17;24171:47;24235:131;24361:4;24235:131;:::i;:::-;24227:139;;24125:248;;;:::o;24379:419::-;24545:4;24583:2;24572:9;24568:18;24560:26;;24632:9;24626:4;24622:20;24618:1;24607:9;24603:17;24596:47;24660:131;24786:4;24660:131;:::i;:::-;24652:139;;24550:248;;;:::o;24804:419::-;24970:4;25008:2;24997:9;24993:18;24985:26;;25057:9;25051:4;25047:20;25043:1;25032:9;25028:17;25021:47;25085:131;25211:4;25085:131;:::i;:::-;25077:139;;24975:248;;;:::o;25229:419::-;25395:4;25433:2;25422:9;25418:18;25410:26;;25482:9;25476:4;25472:20;25468:1;25457:9;25453:17;25446:47;25510:131;25636:4;25510:131;:::i;:::-;25502:139;;25400:248;;;:::o;25654:419::-;25820:4;25858:2;25847:9;25843:18;25835:26;;25907:9;25901:4;25897:20;25893:1;25882:9;25878:17;25871:47;25935:131;26061:4;25935:131;:::i;:::-;25927:139;;25825:248;;;:::o;26079:419::-;26245:4;26283:2;26272:9;26268:18;26260:26;;26332:9;26326:4;26322:20;26318:1;26307:9;26303:17;26296:47;26360:131;26486:4;26360:131;:::i;:::-;26352:139;;26250:248;;;:::o;26504:419::-;26670:4;26708:2;26697:9;26693:18;26685:26;;26757:9;26751:4;26747:20;26743:1;26732:9;26728:17;26721:47;26785:131;26911:4;26785:131;:::i;:::-;26777:139;;26675:248;;;:::o;26929:419::-;27095:4;27133:2;27122:9;27118:18;27110:26;;27182:9;27176:4;27172:20;27168:1;27157:9;27153:17;27146:47;27210:131;27336:4;27210:131;:::i;:::-;27202:139;;27100:248;;;:::o;27354:419::-;27520:4;27558:2;27547:9;27543:18;27535:26;;27607:9;27601:4;27597:20;27593:1;27582:9;27578:17;27571:47;27635:131;27761:4;27635:131;:::i;:::-;27627:139;;27525:248;;;:::o;27779:222::-;27872:4;27910:2;27899:9;27895:18;27887:26;;27923:71;27991:1;27980:9;27976:17;27967:6;27923:71;:::i;:::-;27877:124;;;;:::o;28007:332::-;28128:4;28166:2;28155:9;28151:18;28143:26;;28179:71;28247:1;28236:9;28232:17;28223:6;28179:71;:::i;:::-;28260:72;28328:2;28317:9;28313:18;28304:6;28260:72;:::i;:::-;28133:206;;;;;:::o;28345:214::-;28434:4;28472:2;28461:9;28457:18;28449:26;;28485:67;28549:1;28538:9;28534:17;28525:6;28485:67;:::i;:::-;28439:120;;;;:::o;28565:99::-;28617:6;28651:5;28645:12;28635:22;;28624:40;;;:::o;28670:169::-;28754:11;28788:6;28783:3;28776:19;28828:4;28823:3;28819:14;28804:29;;28766:73;;;;:::o;28845:148::-;28947:11;28984:3;28969:18;;28959:34;;;;:::o;28999:305::-;29039:3;29058:20;29076:1;29058:20;:::i;:::-;29053:25;;29092:20;29110:1;29092:20;:::i;:::-;29087:25;;29246:1;29178:66;29174:74;29171:1;29168:81;29165:2;;;29252:18;;:::i;:::-;29165:2;29296:1;29293;29289:9;29282:16;;29043:261;;;;:::o;29310:185::-;29350:1;29367:20;29385:1;29367:20;:::i;:::-;29362:25;;29401:20;29419:1;29401:20;:::i;:::-;29396:25;;29440:1;29430:2;;29445:18;;:::i;:::-;29430:2;29487:1;29484;29480:9;29475:14;;29352:143;;;;:::o;29501:348::-;29541:7;29564:20;29582:1;29564:20;:::i;:::-;29559:25;;29598:20;29616:1;29598:20;:::i;:::-;29593:25;;29786:1;29718:66;29714:74;29711:1;29708:81;29703:1;29696:9;29689:17;29685:105;29682:2;;;29793:18;;:::i;:::-;29682:2;29841:1;29838;29834:9;29823:20;;29549:300;;;;:::o;29855:191::-;29895:4;29915:20;29933:1;29915:20;:::i;:::-;29910:25;;29949:20;29967:1;29949:20;:::i;:::-;29944:25;;29988:1;29985;29982:8;29979:2;;;29993:18;;:::i;:::-;29979:2;30038:1;30035;30031:9;30023:17;;29900:146;;;;:::o;30052:96::-;30089:7;30118:24;30136:5;30118:24;:::i;:::-;30107:35;;30097:51;;;:::o;30154:90::-;30188:7;30231:5;30224:13;30217:21;30206:32;;30196:48;;;:::o;30250:77::-;30287:7;30316:5;30305:16;;30295:32;;;:::o;30333:149::-;30369:7;30409:66;30402:5;30398:78;30387:89;;30377:105;;;:::o;30488:126::-;30525:7;30565:42;30558:5;30554:54;30543:65;;30533:81;;;:::o;30620:77::-;30657:7;30686:5;30675:16;;30665:32;;;:::o;30703:86::-;30738:7;30778:4;30771:5;30767:16;30756:27;;30746:43;;;:::o;30795:307::-;30863:1;30873:113;30887:6;30884:1;30881:13;30873:113;;;30972:1;30967:3;30963:11;30957:18;30953:1;30948:3;30944:11;30937:39;30909:2;30906:1;30902:10;30897:15;;30873:113;;;31004:6;31001:1;30998:13;30995:2;;;31084:1;31075:6;31070:3;31066:16;31059:27;30995:2;30844:258;;;;:::o;31108:171::-;31147:3;31170:24;31188:5;31170:24;:::i;:::-;31161:33;;31216:4;31209:5;31206:15;31203:2;;;31224:18;;:::i;:::-;31203:2;31271:1;31264:5;31260:13;31253:20;;31151:128;;;:::o;31285:320::-;31329:6;31366:1;31360:4;31356:12;31346:22;;31413:1;31407:4;31403:12;31434:18;31424:2;;31490:4;31482:6;31478:17;31468:27;;31424:2;31552;31544:6;31541:14;31521:18;31518:38;31515:2;;;31571:18;;:::i;:::-;31515:2;31336:269;;;;:::o;31611:233::-;31650:3;31673:24;31691:5;31673:24;:::i;:::-;31664:33;;31719:66;31712:5;31709:77;31706:2;;;31789:18;;:::i;:::-;31706:2;31836:1;31829:5;31825:13;31818:20;;31654:190;;;:::o;31850:79::-;31889:7;31918:5;31907:16;;31897:32;;;:::o;31935:180::-;31983:77;31980:1;31973:88;32080:4;32077:1;32070:15;32104:4;32101:1;32094:15;32121:180;32169:77;32166:1;32159:88;32266:4;32263:1;32256:15;32290:4;32287:1;32280:15;32307:180;32355:77;32352:1;32345:88;32452:4;32449:1;32442:15;32476:4;32473:1;32466:15;32493:102;32534:6;32585:2;32581:7;32576:2;32569:5;32565:14;32561:28;32551:38;;32541:54;;;:::o;32601:220::-;32741:34;32737:1;32729:6;32725:14;32718:58;32810:3;32805:2;32797:6;32793:15;32786:28;32707:114;:::o;32827:182::-;32967:34;32963:1;32955:6;32951:14;32944:58;32933:76;:::o;33015:222::-;33155:34;33151:1;33143:6;33139:14;33132:58;33224:5;33219:2;33211:6;33207:15;33200:30;33121:116;:::o;33243:221::-;33383:34;33379:1;33371:6;33367:14;33360:58;33452:4;33447:2;33439:6;33435:15;33428:29;33349:115;:::o;33470:221::-;33610:34;33606:1;33598:6;33594:14;33587:58;33679:4;33674:2;33666:6;33662:15;33655:29;33576:115;:::o;33697:214::-;33837:66;33833:1;33825:6;33821:14;33814:90;33803:108;:::o;33917:182::-;34057:34;34053:1;34045:6;34041:14;34034:58;34023:76;:::o;34105:225::-;34245:34;34241:1;34233:6;34229:14;34222:58;34314:8;34309:2;34301:6;34297:15;34290:33;34211:119;:::o;34336:182::-;34476:34;34472:1;34464:6;34460:14;34453:58;34442:76;:::o;34524:227::-;34664:34;34660:1;34652:6;34648:14;34641:58;34733:10;34728:2;34720:6;34716:15;34709:35;34630:121;:::o;34757:171::-;34897:23;34893:1;34885:6;34881:14;34874:47;34863:65;:::o;34934:178::-;35074:30;35070:1;35062:6;35058:14;35051:54;35040:72;:::o;35118:220::-;35258:34;35254:1;35246:6;35242:14;35235:58;35327:3;35322:2;35314:6;35310:15;35303:28;35224:114;:::o;35344:224::-;35484:34;35480:1;35472:6;35468:14;35461:58;35553:7;35548:2;35540:6;35536:15;35529:32;35450:118;:::o;35574:178::-;35714:30;35710:1;35702:6;35698:14;35691:54;35680:72;:::o;35758:223::-;35898:34;35894:1;35886:6;35882:14;35875:58;35967:6;35962:2;35954:6;35950:15;35943:31;35864:117;:::o;35987:179::-;36127:31;36123:1;36115:6;36111:14;36104:55;36093:73;:::o;36172:173::-;36312:25;36308:1;36300:6;36296:14;36289:49;36278:67;:::o;36351:224::-;36491:34;36487:1;36479:6;36475:14;36468:58;36560:7;36555:2;36547:6;36543:15;36536:32;36457:118;:::o;36581:167::-;36721:19;36717:1;36709:6;36705:14;36698:43;36687:61;:::o;36754:234::-;36894:34;36890:1;36882:6;36878:14;36871:58;36963:17;36958:2;36950:6;36946:15;36939:42;36860:128;:::o;36994:181::-;37134:33;37130:1;37122:6;37118:14;37111:57;37100:75;:::o;37181:122::-;37254:24;37272:5;37254:24;:::i;:::-;37247:5;37244:35;37234:2;;37293:1;37290;37283:12;37234:2;37224:79;:::o;37309:122::-;37382:24;37400:5;37382:24;:::i;:::-;37375:5;37372:35;37362:2;;37421:1;37418;37411:12;37362:2;37352:79;:::o;37437:120::-;37509:23;37526:5;37509:23;:::i;:::-;37502:5;37499:34;37489:2;;37547:1;37544;37537:12;37489:2;37479:78;:::o;37563:122::-;37636:24;37654:5;37636:24;:::i;:::-;37629:5;37626:35;37616:2;;37675:1;37672;37665:12;37616:2;37606:79;:::o;37691:118::-;37762:22;37778:5;37762:22;:::i;:::-;37755:5;37752:33;37742:2;;37799:1;37796;37789:12;37742:2;37732:77;:::o

Swarm Source

ipfs://821d296d9e083956047e769287e96f6b44d9183d3a145161fde297a69d49e3ab

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Soul is an algorithmic, cross-chain AMM and P2P lending protocol (on Fantom) built for traders, investors, developers, and visionaries seeking to unlock a universe of open financial applications.

Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.