Contract 0x5EA29eEe799aA7cC379FdE5cf370BC24f2Ea7c81

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xa85a6702ad4fede83f263b980ce22209f52abf4559091f1034287cb71be7c85e51634292021-02-24 17:31:413 mins ago0x958410d4f40fa564c5e9e809ff81a03b6c71f887 IN  Keep3rb Network: KP3RB Token0 BNB0.0002277709
0xb3afafbbaa55952a4a78bddb3fb8f0e1860a1dcece7e1e14ef2c55b040b9c3f751631862021-02-24 17:19:3215 mins ago0xeba0265fc6908fb77e7420b0f7b3ece27acbddc6 IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0xd234d4e919f016295f3b0f311967c19868f06f728349409400416deb11bd6beb51620122021-02-24 16:20:491 hr 13 mins ago0xc48945884ff3fb133203388bd60216e30da116e3 IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0x5ea09e13aa3a76445e49db6e63d571b0c6549df6f840eca6966a1326fb63cebd51615172021-02-24 15:56:021 hr 38 mins ago0xe601fa901514c98109504e8fa51c0ab50b03b545 IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0x2954ad756d1d42cca040b0dc491db47f94f567f6e35da734137d53b0c7254faf51614672021-02-24 15:53:321 hr 41 mins ago0xc2fbb2d21af6ef81393baaec34c9dbe1a316bae3 IN  Keep3rb Network: KP3RB Token0 BNB0.00036287
0x1fcd76042d1313c07090c8a0ddcd4f9a815443aa7429da486eec4bc1b8b0c70751614042021-02-24 15:50:231 hr 44 mins ago0x9591ecc0ed118cd97183e4a048d47e009ef8be22 IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0x0fe508f1f72a468d0704b2f6be349486c45750719a59cc15b177531763a8b57f51613652021-02-24 15:48:261 hr 46 mins ago0xd49c9065c26ece23e12ed4cd7f440ef55de51cb3 IN  Keep3rb Network: KP3RB Token0 BNB0.00021263
0x84e0952add66b4a8955be5943d40898556d3910e95fe1aa5f019be57986e528a51610882021-02-24 15:34:352 hrs ago0x12065cf707fc197d2f600fb0817f1699ae30c11d IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0x929cc2aaf6a5e9bd81063caea699188c0ada8aeba84dd6d96af67b8ab1c91bee51604982021-02-24 15:05:052 hrs 29 mins ago0x23270d3c66298d52266fd9e6692528dd0307d400 IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0x9659c2870b8021aa74fa35a70a0c3cb86a29de701698100d7e8a4d4fb7858b4e51604852021-02-24 15:04:252 hrs 30 mins ago0xa50018d18cb7d056796fd56ce0a993d39ca2efc4 IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0xda449ec72540b70e29b38e0461076bc450ace4fa8e1cb381f332bc0d122ada7051604192021-02-24 15:01:072 hrs 33 mins ago0x6f198f157246a596acd5766814cc4d5a74234d19 IN  Keep3rb Network: KP3RB Token0 BNB0.00051263
0xe250281a8ec8c8e83f00337e0be4fc92d1c8b2cba3e96e64e18f3c80e44b5b9f51600142021-02-24 14:40:512 hrs 53 mins ago0xf38182a3d001f1d842b7cf46296632ce1d2a2b1c IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0xde8cff1d843fe050dce4c43d9ea7610c345eddf10dac5f561696f10e58fbbfeb51597952021-02-24 14:29:373 hrs 5 mins ago0x57c4adbdd883b1cf5ada1d18ef221583b636018d IN  Keep3rb Network: KP3RB Token0 BNB0.00036299
0xa3e3d54d1e82f56c892ed1688b95fe152e9fda93622316ebd0b2a9fa43fe27dc51596522021-02-24 14:22:003 hrs 12 mins ago0x47333a2320aa9d806ad2c1c8a2a8dd4e4001b935 IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0x89e8989f8387b608b8f1b13e67831637023ddaed16907938847cc1f153e28a0051593832021-02-24 14:08:193 hrs 26 mins ago0x88149ba6d35e39ea3036ad52d2e39d0d88ec095c IN  Keep3rb Network: KP3RB Token0 BNB0.008173224
0xfc69ffef5763c9061a695c1ac25695405bcf56afac6cbad14820e3c66e3c3b9551590862021-02-24 13:53:283 hrs 41 mins ago0x78d5080fa04aafd15745c378cd2b3dae805e1278 IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0x7f605d4e027cc04830acb61bb2987233e96a787e96fd63118ae3f6924d43912751587332021-02-24 13:35:493 hrs 58 mins ago0x09229738a85d695c7df5ebd1516aabc7b6b2e9dd IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0x1f1b7c4bc1e3e766e2841bf4159ace06f2ff74fc931957548c9bc81469321ad151583392021-02-24 13:16:074 hrs 18 mins ago0xd4bc999d33ad9410e720430deb5b617c83b5bf26 IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0x9f815618ec013322190b05c178c2ff638c5fa43f9667cb0522ae6f9bc14284ff51581602021-02-24 13:07:104 hrs 27 mins ago0x0a52acf07ef23c12dcd6c1fd319ebaa0c35536bd IN  Keep3rb Network: KP3RB Token0 BNB0.00598239
0x521a8af2df3a8a8ba58dfdae37bc252532b432d2c3bde2574ea474ffa782a48d51580742021-02-24 13:02:524 hrs 31 mins ago0xcc6162f76e9f8026f2eddf2ec30c032514abd048 IN  Keep3rb Network: KP3RB Token0 BNB0.008157996
0x5621cf5d1bc26a9221c17aa5198f3617c48fe1eecd2004146b50b61c557d401251580452021-02-24 13:01:254 hrs 33 mins ago0xcc6162f76e9f8026f2eddf2ec30c032514abd048 IN  Keep3rb Network: KP3RB Token0 BNB0.006355314
0x9d6bf445c8a1855d9b6ef03ae98b78701c1fc0ae443608af8663be437ab6d5d451575252021-02-24 12:35:044 hrs 59 mins ago0x29d2d78c1c373d15f4cc4a4eaa368f20c0df469a IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0xee540ea736dff7b440d8ffb12c796601d360d229c3b6031608ebd17a25af00b751574032021-02-24 12:28:585 hrs 5 mins ago0x2f3b869c9cbaf526847d848e9883be3f740e384d IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0xcdecffdb6ca56a84cdfc405635e283ae11638f58710a0766d5beafbda339d99651569932021-02-24 12:08:275 hrs 26 mins ago0x6547f39f0e1498812e0dcb85f43daf66128d6fbb IN  Keep3rb Network: KP3RB Token0 BNB0.00044314
0x09e5c25a73fdc87393d98022348811be5bc20f29f497e89761b4e1b8a847dbd051558702021-02-24 11:12:166 hrs 22 mins ago0xe6d19e22f0589e88e65ba1df9ca891653b396573 IN  Keep3rb Network: KP3RB Token0 BNB0.01993467
[ Download CSV Export 

OVERVIEW

KP3RB token is a Keep3r fork project on Binance Smart Chain.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb036b20e578f8c837ba6c07f42be40fffe3b5544098a28a4b8704b531547867251633872021-02-24 17:29:355 mins ago PizzaFinance: SmartChef KP3RB Keep3rb Network: KP3RB Token0 BNB
0xb036b20e578f8c837ba6c07f42be40fffe3b5544098a28a4b8704b531547867251633872021-02-24 17:29:355 mins ago PizzaFinance: SmartChef KP3RB Keep3rb Network: KP3RB Token0 BNB
0x45c794ed7f6cdbffb7a0a38683a693753acf94ad5bb5992ff96b6786a729efa051633522021-02-24 17:27:506 mins ago CheeseSwap: KP3RB-BUSD Keep3rb Network: KP3RB Token0 BNB
0x45c794ed7f6cdbffb7a0a38683a693753acf94ad5bb5992ff96b6786a729efa051633522021-02-24 17:27:506 mins ago CheeseSwap: KP3RB-BUSD Keep3rb Network: KP3RB Token0 BNB
0xc2f48e6211a6268a200c608c912f77637a77a670e585561bcb7df01ac0bf502851632342021-02-24 17:21:5612 mins ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xc2f48e6211a6268a200c608c912f77637a77a670e585561bcb7df01ac0bf502851632342021-02-24 17:21:5612 mins ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xc2f48e6211a6268a200c608c912f77637a77a670e585561bcb7df01ac0bf502851632342021-02-24 17:21:5612 mins ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0xc2f48e6211a6268a200c608c912f77637a77a670e585561bcb7df01ac0bf502851632342021-02-24 17:21:5612 mins ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xc2f48e6211a6268a200c608c912f77637a77a670e585561bcb7df01ac0bf502851632342021-02-24 17:21:5612 mins ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xc2f48e6211a6268a200c608c912f77637a77a670e585561bcb7df01ac0bf502851632342021-02-24 17:21:5612 mins ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0xc2f48e6211a6268a200c608c912f77637a77a670e585561bcb7df01ac0bf502851632342021-02-24 17:21:5612 mins ago Keep3rb Network: KP3RB/CHS Oracle Keep3rb Network: KP3RB Token0 BNB
0xc2f48e6211a6268a200c608c912f77637a77a670e585561bcb7df01ac0bf502851632342021-02-24 17:21:5612 mins ago Keep3rb Network: KP3RB/CHS Oracle Keep3rb Network: KP3RB Token0 BNB
0x2ce53a808ac24b0e7c4466c821de02de8a202b20356a734e4db08d379079e8a751632332021-02-24 17:21:5312 mins ago PancakeSwap: KP3RB 4 Keep3rb Network: KP3RB Token0 BNB
0x2ce53a808ac24b0e7c4466c821de02de8a202b20356a734e4db08d379079e8a751632332021-02-24 17:21:5312 mins ago PancakeSwap: Router Keep3rb Network: KP3RB Token0 BNB
0x2ce53a808ac24b0e7c4466c821de02de8a202b20356a734e4db08d379079e8a751632332021-02-24 17:21:5312 mins ago Keep3rb Network: Oracle Pancake Keep3rb Network: KP3RB Token0 BNB
0x2ce53a808ac24b0e7c4466c821de02de8a202b20356a734e4db08d379079e8a751632332021-02-24 17:21:5312 mins ago Keep3rb Network: KP3RB Token Keep3rb Network: KP3RB Token0 BNB
0x2ce53a808ac24b0e7c4466c821de02de8a202b20356a734e4db08d379079e8a751632332021-02-24 17:21:5312 mins ago Keep3rb Network: Oracle Pancake Keep3rb Network: KP3RB Token0 BNB
0x2ce53a808ac24b0e7c4466c821de02de8a202b20356a734e4db08d379079e8a751632332021-02-24 17:21:5312 mins ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0x2ce53a808ac24b0e7c4466c821de02de8a202b20356a734e4db08d379079e8a751632332021-02-24 17:21:5312 mins ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0x2ce53a808ac24b0e7c4466c821de02de8a202b20356a734e4db08d379079e8a751632332021-02-24 17:21:5312 mins ago Keep3rb Network: Oracle Pancake Keep3rb Network: KP3RB Token0 BNB
0x2ce53a808ac24b0e7c4466c821de02de8a202b20356a734e4db08d379079e8a751632332021-02-24 17:21:5312 mins ago Keep3rb Network: Oracle Pancake Keep3rb Network: KP3RB Token0 BNB
0x7bfabef0de6eac517a54e38078dbe1e25271b6b72fb8aaf467ec2189f2476f3a51631972021-02-24 17:20:0514 mins ago CheeseSwap: KP3RB-WBNB Keep3rb Network: KP3RB Token0 BNB
0x7bfabef0de6eac517a54e38078dbe1e25271b6b72fb8aaf467ec2189f2476f3a51631972021-02-24 17:20:0514 mins ago CheeseSwap: KP3RB-CHS Keep3rb Network: KP3RB Token0 BNB
0x7bfabef0de6eac517a54e38078dbe1e25271b6b72fb8aaf467ec2189f2476f3a51631972021-02-24 17:20:0514 mins ago CheeseSwap: KP3RB-CHS Keep3rb Network: KP3RB Token0 BNB
0x7c25c2ea5e984d7d08703b779c0f284ca1de15046ebcd2456bfc49d78a5a0de051631932021-02-24 17:19:5314 mins ago PancakeSwap: KP3RB 4 Keep3rb Network: KP3RB Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Keep3rb

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-12-05
*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.6.12;


library SafeMath {
    function add(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "add: +");

        return c;
    }
   function add(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, errorMessage);

        return c;
    }
   function sub(uint a, uint b) internal pure returns (uint) {
        return sub(a, b, "sub: -");
    }
   function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b <= a, errorMessage);
        uint c = a - b;

        return c;
    }
  function mul(uint a, uint b) internal pure returns (uint) {
       if (a == 0) {
            return 0;
        }
        uint c = a * b;
        require(c / a == b, "mul: *");

        return c;
    }
  function mul(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
       if (a == 0) {
            return 0;
        }
        uint c = a * b;
        require(c / a == b, errorMessage);
        return c;
    }
  function div(uint a, uint b) internal pure returns (uint) {
        return div(a, b, "div: /");
    }
  function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b > 0, errorMessage);
        uint c = a / b;
        return c;
    }
   function mod(uint a, uint b) internal pure returns (uint) {
        return mod(a, b, "mod: %");
    }
  function mod(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


contract ReentrancyGuard {
   uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
       require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
       _status = _ENTERED;
       _;
       _status = _NOT_ENTERED;
    }
}


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

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }
   function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call{value:amount}("");
        require(success, "Address: reverted");
    }
}
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: < 0");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function callOptionalReturn(IERC20 token, bytes memory data) private {
           // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: !contract");
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");
     if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: !succeed");
        }
    }
}

library Keep3rbLibrary {
    function getReserve(address pair, address reserve) external view returns (uint) {
        (uint _r0, uint _r1,) = ICheeseSwapPair(pair).getReserves();
        if (ICheeseSwapPair(pair).token0() == reserve) {
            return _r0;
        } else if (ICheeseSwapPair(pair).token1() == reserve) {
            return _r1;
        } else {
            return 0;
        }
    }
}

interface ICheeseSwapPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IGovernance {
    function proposeJob(address job) external;
}

interface IKeep3rbHelper {
    function getQuoteLimit(uint gasUsed) external view returns (uint);
}

contract Keep3rb is ReentrancyGuard {
    using SafeMath for uint;
    using SafeERC20 for IERC20;

    /// @notice Keep3r Helper to set max prices for the ecosystem
    IKeep3rbHelper public KPRH;

    /// @notice EIP-20 token name for this token
    string public constant name = "Keep3r BSC Network";

    /// @notice EIP-20 token symbol for this token
    string public constant symbol = "KP3RB";

    /// @notice EIP-20 token decimals for this token
    uint8 public constant decimals = 18;

    /// @notice Total number of tokens in circulation
    uint public totalSupply = 0; // Initial 0

    /// @notice A record of each accounts delegate
    mapping (address => address) public delegates;

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    mapping (address => mapping (address => uint)) internal allowances;
    mapping (address => uint) internal balances;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint chainId,address verifyingContract)");
    bytes32 public immutable DOMAINSEPARATOR;

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint nonce,uint expiry)");

    /// @notice The EIP-712 typehash for the permit struct used by the contract
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint value,uint nonce,uint deadline)");


    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint votes;
    }

    function delegate(address delegatee) public {
        _delegate(msg.sender, delegatee);
    }

    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public {
        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: sig");
        require(nonce == nonces[signatory]++, "delegateBySig: nonce");
        require(now <= expiry, "delegateBySig: expired");
        _delegate(signatory, delegatee);
    }

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

    function getPriorVotes(address account, uint blockNumber) public view returns (uint) {
        require(blockNumber < block.number, "getPriorVotes:");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = delegates[delegator];
        uint delegatorBalance = votes[delegator].add(bonds[delegator][address(this)]);
        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)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint srcRepNew = srcRepOld.sub(amount, "_moveVotes: underflows");
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

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

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint oldVotes, uint newVotes) internal {
      uint32 blockNumber = safe32(block.number, "_writeCheckpoint: 32 bits");

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

      emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    /// @notice The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint amount);

    /// @notice The standard EIP-20 approval event
    event Approval(address indexed owner, address indexed spender, uint amount);

    /// @notice Submit a job
    event SubmitJob(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Apply credit to a job
    event ApplyCredit(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Remove credit for a job
    event RemoveJob(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Unbond credit for a job
    event UnbondJob(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Added a Job
    event JobAdded(address indexed job, uint block, address governance);

    /// @notice Removed a job
    event JobRemoved(address indexed job, uint block, address governance);

    /// @notice Worked a job
    event KeeperWorked(address indexed credit, address indexed job, address indexed keeper, uint block, uint amount);

    /// @notice Keeper bonding
    event KeeperBonding(address indexed keeper, uint block, uint active, uint bond);

    /// @notice Keeper bonded
    event KeeperBonded(address indexed keeper, uint block, uint activated, uint bond);

    /// @notice Keeper unbonding
    event KeeperUnbonding(address indexed keeper, uint block, uint deactive, uint bond);

    /// @notice Keeper unbound
    event KeeperUnbound(address indexed keeper, uint block, uint deactivated, uint bond);

    /// @notice Keeper slashed
    event KeeperSlashed(address indexed keeper, address indexed slasher, uint block, uint slash);

    /// @notice Keeper disputed
    event KeeperDispute(address indexed keeper, uint block);

    /// @notice Keeper resolved
    event KeeperResolved(address indexed keeper, uint block);

    event AddCredit(address indexed credit, address indexed job, address indexed creditor, uint block, uint amount);

    /// @notice 1 day to bond to become a keeper
    uint constant public BOND = 1 days;
    /// @notice 14 days to unbond to remove funds from being a keeper
    uint constant public UNBOND = 14 days;
    /// @notice 3 days till liquidity can be bound
    uint constant public LIQUIDITYBOND = 3 days;

    /// @notice direct liquidity fee 0.5%
    uint constant public FEE = 50;
    uint constant public BASE = 10000;

    /// @notice address used for ETH transfers
    address constant public ETH = address(0xE);

    /// @notice tracks all current bondings (time)
    mapping(address => mapping(address => uint)) public bondings;
    /// @notice tracks all current unbondings (time)
    mapping(address => mapping(address => uint)) public unbondings;
    /// @notice allows for partial unbonding
    mapping(address => mapping(address => uint)) public partialUnbonding;
    /// @notice tracks all current pending bonds (amount)
    mapping(address => mapping(address => uint)) public pendingbonds;
    /// @notice tracks how much a keeper has bonded
    mapping(address => mapping(address => uint)) public bonds;
    /// @notice tracks underlying votes (that don't have bond)
    mapping(address => uint) public votes;

    /// @notice total bonded (totalSupply for bonds)
    uint public totalBonded = 0;
    /// @notice tracks when a keeper was first registered
    mapping(address => uint) public firstSeen;

    /// @notice tracks if a keeper has a pending dispute
    mapping(address => bool) public disputes;

    /// @notice tracks last job performed for a keeper
    mapping(address => uint) public lastJob;
    /// @notice tracks the total job executions for a keeper
    mapping(address => uint) public workCompleted;
    /// @notice list of all jobs registered for the keeper system
    mapping(address => bool) public jobs;
    /// @notice the current credit available for a job
    mapping(address => mapping(address => uint)) public credits;
    /// @notice the balances for the liquidity providers
    mapping(address => mapping(address => mapping(address => uint))) public liquidityProvided;
    /// @notice liquidity unbonding days
    mapping(address => mapping(address => mapping(address => uint))) public liquidityUnbonding;
    /// @notice liquidity unbonding amounts
    mapping(address => mapping(address => mapping(address => uint))) public liquidityAmountsUnbonding;
    /// @notice job proposal delay
    mapping(address => uint) public jobProposalDelay;
    /// @notice liquidity apply date
    mapping(address => mapping(address => mapping(address => uint))) public liquidityApplied;
    /// @notice liquidity amount to apply
    mapping(address => mapping(address => mapping(address => uint))) public liquidityAmount;

    /// @notice list of all current keepers
    mapping(address => bool) public keepers;
    /// @notice blacklist of keepers not allowed to participate
    mapping(address => bool) public blacklist;

    /// @notice traversable array of keepers to make external management easier
    address[] public keeperList;
    /// @notice traversable array of jobs to make external management easier
    address[] public jobList;

    /// @notice governance address for the governance contract
    address public governance;
    address public pendingGovernance;

    /// @notice the liquidity token supplied by users paying for jobs
    mapping(address => bool) public liquidityAccepted;

    address[] public liquidityPairs;

    uint internal _gasUsed;

    constructor(address _kph) public {
        // Set governance for this token
        governance = msg.sender;
        DOMAINSEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), _getChainId(), address(this)));
        KPRH = IKeep3rbHelper(_kph);
    }

    /**
     * @notice Add ETH credit to a job to be paid out for work
     * @param job the job being credited
     */
    function addCreditETH(address job) external payable {
        require(jobs[job], "addCreditETH: !job");
        uint _fee = msg.value.mul(FEE).div(BASE);
        credits[job][ETH] = credits[job][ETH].add(msg.value.sub(_fee));
        payable(governance).transfer(_fee);

        emit AddCredit(ETH, job, msg.sender, block.number, msg.value);
    }

    function addCredit(address credit, address job, uint amount) external nonReentrant {
        require(jobs[job], "addCreditETH: !job");
        uint _before = IERC20(credit).balanceOf(address(this));
        IERC20(credit).safeTransferFrom(msg.sender, address(this), amount);
        uint _received = IERC20(credit).balanceOf(address(this)).sub(_before);
        uint _fee = _received.mul(FEE).div(BASE);
        credits[job][credit] = credits[job][credit].add(_received.sub(_fee));
        IERC20(credit).safeTransfer(governance, _fee);

        emit AddCredit(credit, job, msg.sender, block.number, _received);
    }

    function addVotes(address voter, uint amount) external {
        require(msg.sender == governance, "addVotes: !gov");
        _activate(voter, address(this));
        votes[voter] = votes[voter].add(amount);
        totalBonded = totalBonded.add(amount);
        _moveDelegates(address(0), delegates[voter], amount);
    }

 
    function removeVotes(address voter, uint amount) external {
        require(msg.sender == governance, "addVotes: !gov");
        votes[voter] = votes[voter].sub(amount);
        totalBonded = totalBonded.sub(amount);
        _moveDelegates(delegates[voter], address(0), amount);
    }

    function addKPRCredit(address job, uint amount) external {
        require(msg.sender == governance, "addKPRCredit: !gov");
        require(jobs[job], "addKPRCredit: !job");
        credits[job][address(this)] = credits[job][address(this)].add(amount);
        _mint(address(this), amount);
        emit AddCredit(address(this), job, msg.sender, block.number, amount);
    }

 
    function approveLiquidity(address liquidity) external {
        require(msg.sender == governance, "approveLiquidity: !gov");
        require(!liquidityAccepted[liquidity], "approveLiquidity: !pair");
        liquidityAccepted[liquidity] = true;
        liquidityPairs.push(liquidity);
    }

    function revokeLiquidity(address liquidity) external {
        require(msg.sender == governance, "revokeLiquidity: !gov");
        liquidityAccepted[liquidity] = false;
    }

    function pairs() external view returns (address[] memory) {
        return liquidityPairs;
    }

  
    function addLiquidityToJob(address liquidity, address job, uint amount) external nonReentrant {
        require(liquidityAccepted[liquidity], "addLiquidityToJob: !pair");
        IERC20(liquidity).safeTransferFrom(msg.sender, address(this), amount);
        liquidityProvided[msg.sender][liquidity][job] = liquidityProvided[msg.sender][liquidity][job].add(amount);

        liquidityApplied[msg.sender][liquidity][job] = now.add(LIQUIDITYBOND);
        liquidityAmount[msg.sender][liquidity][job] = liquidityAmount[msg.sender][liquidity][job].add(amount);

        if (!jobs[job] && jobProposalDelay[job] < now) {
            IGovernance(governance).proposeJob(job);
            jobProposalDelay[job] = now.add(UNBOND);
        }
        emit SubmitJob(job, liquidity, msg.sender, block.number, amount);
    }

    function applyCreditToJob(address provider, address liquidity, address job) external {
        require(liquidityAccepted[liquidity], "addLiquidityToJob: !pair");
        require(liquidityApplied[provider][liquidity][job] != 0, "credit: no bond");
        require(liquidityApplied[provider][liquidity][job] < now, "credit: bonding");
        uint _liquidity = Keep3rbLibrary.getReserve(liquidity, address(this));
        uint _credit = _liquidity.mul(liquidityAmount[provider][liquidity][job]).div(IERC20(liquidity).totalSupply());
        _mint(address(this), _credit);
        credits[job][address(this)] = credits[job][address(this)].add(_credit);
        liquidityAmount[provider][liquidity][job] = 0;

        emit ApplyCredit(job, liquidity, provider, block.number, _credit);
    }

    function unbondLiquidityFromJob(address liquidity, address job, uint amount) external {
        require(liquidityAmount[msg.sender][liquidity][job] == 0, "credit: pending credit");
        liquidityUnbonding[msg.sender][liquidity][job] = now.add(UNBOND);
        liquidityAmountsUnbonding[msg.sender][liquidity][job] = liquidityAmountsUnbonding[msg.sender][liquidity][job].add(amount);
        require(liquidityAmountsUnbonding[msg.sender][liquidity][job] <= liquidityProvided[msg.sender][liquidity][job], "unbondLiquidityFromJob: insufficient funds");

        uint _liquidity = Keep3rbLibrary.getReserve(liquidity, address(this));
        uint _credit = _liquidity.mul(amount).div(IERC20(liquidity).totalSupply());
        if (_credit > credits[job][address(this)]) {
            _burn(address(this), credits[job][address(this)]);
            credits[job][address(this)] = 0;
        } else {
            _burn(address(this), _credit);
            credits[job][address(this)] = credits[job][address(this)].sub(_credit);
        }

        emit UnbondJob(job, liquidity, msg.sender, block.number, amount);
    }

    function removeLiquidityFromJob(address liquidity, address job) external {
        require(liquidityUnbonding[msg.sender][liquidity][job] != 0, "removeJob: unbond");
        require(liquidityUnbonding[msg.sender][liquidity][job] < now, "removeJob: unbonding");
        uint _amount = liquidityAmountsUnbonding[msg.sender][liquidity][job];
        liquidityProvided[msg.sender][liquidity][job] = liquidityProvided[msg.sender][liquidity][job].sub(_amount);
        liquidityAmountsUnbonding[msg.sender][liquidity][job] = 0;
        IERC20(liquidity).safeTransfer(msg.sender, _amount);

        emit RemoveJob(job, liquidity, msg.sender, block.number, _amount);
    }

    function mint(uint amount) external {
        require(msg.sender == governance, "mint: !gov");
        _mint(governance, amount);
    }

  
    function burn(uint amount) external {
        _burn(msg.sender, amount);
    }

    function _mint(address dst, uint amount) internal {
        totalSupply = totalSupply.add(amount);
        balances[dst] = balances[dst].add(amount);
        emit Transfer(address(0), dst, amount);
    }

    function _burn(address dst, uint amount) internal {
        require(dst != address(0), "_burn: zero address");
        balances[dst] = balances[dst].sub(amount, "_burn: exceeds balance");
        totalSupply = totalSupply.sub(amount);
        emit Transfer(dst, address(0), amount);
    }

    function worked(address keeper) external {
        workReceipt(keeper, KPRH.getQuoteLimit(_gasUsed.sub(gasleft())));
    }

    function workReceipt(address keeper, uint amount) public {
        require(jobs[msg.sender], "workReceipt: !job");
        require(amount <= KPRH.getQuoteLimit(_gasUsed.sub(gasleft())), "workReceipt: max limit");
        credits[msg.sender][address(this)] = credits[msg.sender][address(this)].sub(amount, "workReceipt: insuffient funds");
        lastJob[keeper] = now;
        _reward(keeper, amount);
        workCompleted[keeper] = workCompleted[keeper].add(amount);
        emit KeeperWorked(address(this), msg.sender, keeper, block.number, amount);
    }

  
    function receipt(address credit, address keeper, uint amount) external {
        require(jobs[msg.sender], "receipt: !job");
        credits[msg.sender][credit] = credits[msg.sender][credit].sub(amount, "workReceipt: insuffient funds");
        lastJob[keeper] = now;
        IERC20(credit).safeTransfer(keeper, amount);
        emit KeeperWorked(credit, msg.sender, keeper, block.number, amount);
    }

  
    function receiptETH(address keeper, uint amount) external {
        require(jobs[msg.sender], "receipt: !job");
        credits[msg.sender][ETH] = credits[msg.sender][ETH].sub(amount, "workReceipt: insuffient funds");
        lastJob[keeper] = now;
        payable(keeper).transfer(amount);
        emit KeeperWorked(ETH, msg.sender, keeper, block.number, amount);
    }

    function _reward(address _from, uint _amount) internal {
        bonds[_from][address(this)] = bonds[_from][address(this)].add(_amount);
        totalBonded = totalBonded.add(_amount);
        _moveDelegates(address(0), delegates[_from], _amount);
        emit Transfer(msg.sender, _from, _amount);
    }

    function _bond(address bonding, address _from, uint _amount) internal {
        bonds[_from][bonding] = bonds[_from][bonding].add(_amount);
        if (bonding == address(this)) {
            totalBonded = totalBonded.add(_amount);
            _moveDelegates(address(0), delegates[_from], _amount);
        }
    }

    function _unbond(address bonding, address _from, uint _amount) internal {
        bonds[_from][bonding] = bonds[_from][bonding].sub(_amount);
        if (bonding == address(this)) {
            totalBonded = totalBonded.sub(_amount);
            _moveDelegates(delegates[_from], address(0), _amount);
        }

    }

    function addJob(address job) external {
        require(msg.sender == governance, "addJob: !gov");
        require(!jobs[job], "addJob: job known");
        jobs[job] = true;
        jobList.push(job);
        emit JobAdded(job, block.number, msg.sender);
    }

  
    function getJobs() external view returns (address[] memory) {
        return jobList;
    }

 
    function removeJob(address job) external {
        require(msg.sender == governance, "removeJob: !gov");
        jobs[job] = false;
        emit JobRemoved(job, block.number, msg.sender);
    }

    function setKeep3rHelper(IKeep3rbHelper _kprh) external {
        require(msg.sender == governance, "setKeep3rHelper: !gov");
        KPRH = _kprh;
    }

  
    function setGovernance(address _governance) external {
        require(msg.sender == governance, "setGovernance: !gov");
        pendingGovernance = _governance;
    }

    /**
     * @notice Allows pendingGovernance to accept their role as governance (protection pattern)
     */
    function acceptGovernance() external {
        require(msg.sender == pendingGovernance, "acceptGovernance: !pendingGov");
        governance = pendingGovernance;
    }

    function isKeeper(address keeper) external returns (bool) {
        _gasUsed = gasleft();
        return keepers[keeper];
    }

    function isMinKeeper(address keeper, uint minBond, uint earned, uint age) external returns (bool) {
        _gasUsed = gasleft();
        return keepers[keeper]
                && bonds[keeper][address(this)].add(votes[keeper]) >= minBond
                && workCompleted[keeper] >= earned
                && now.sub(firstSeen[keeper]) >= age;
    }

  
    function isBondedKeeper(address keeper, address bond, uint minBond, uint earned, uint age) external returns (bool) {
        _gasUsed = gasleft();
        return keepers[keeper]
                && bonds[keeper][bond] >= minBond
                && workCompleted[keeper] >= earned
                && now.sub(firstSeen[keeper]) >= age;
    }

 
    function bond(address bonding, uint amount) external nonReentrant {
        require(!blacklist[msg.sender], "bond: blacklisted");
        bondings[msg.sender][bonding] = now.add(BOND);
        if (bonding == address(this)) {
            _transferTokens(msg.sender, address(this), amount);
        } else {
            uint _before = IERC20(bonding).balanceOf(address(this));
            IERC20(bonding).safeTransferFrom(msg.sender, address(this), amount);
            amount = IERC20(bonding).balanceOf(address(this)).sub(_before);
        }
        pendingbonds[msg.sender][bonding] = pendingbonds[msg.sender][bonding].add(amount);
        emit KeeperBonding(msg.sender, block.number, bondings[msg.sender][bonding], amount);
    }

   
    function getKeepers() external view returns (address[] memory) {
        return keeperList;
    }

  
    function activate(address bonding) external {
        require(!blacklist[msg.sender], "activate: blacklisted");
        require(bondings[msg.sender][bonding] != 0 && bondings[msg.sender][bonding] < now, "activate: bonding");
        _activate(msg.sender, bonding);
    }
    
    function _activate(address keeper, address bonding) internal {
        if (firstSeen[keeper] == 0) {
          firstSeen[keeper] = now;
          keeperList.push(keeper);
          lastJob[keeper] = now;
        }
        keepers[keeper] = true;
        _bond(bonding, keeper, pendingbonds[keeper][bonding]);
        pendingbonds[keeper][bonding] = 0;
        emit KeeperBonded(keeper, block.number, block.timestamp, bonds[keeper][bonding]);
    }

  
    function unbond(address bonding, uint amount) external {
        unbondings[msg.sender][bonding] = now.add(UNBOND);
        _unbond(bonding, msg.sender, amount);
        partialUnbonding[msg.sender][bonding] = partialUnbonding[msg.sender][bonding].add(amount);
        emit KeeperUnbonding(msg.sender, block.number, unbondings[msg.sender][bonding], amount);
    }

  
    function withdraw(address bonding) external nonReentrant {
        require(unbondings[msg.sender][bonding] != 0 && unbondings[msg.sender][bonding] < now, "withdraw: unbonding");
        require(!disputes[msg.sender], "withdraw: disputes");

        if (bonding == address(this)) {
            _transferTokens(address(this), msg.sender, partialUnbonding[msg.sender][bonding]);
        } else {
            IERC20(bonding).safeTransfer(msg.sender, partialUnbonding[msg.sender][bonding]);
        }
        emit KeeperUnbound(msg.sender, block.number, block.timestamp, partialUnbonding[msg.sender][bonding]);
        partialUnbonding[msg.sender][bonding] = 0;
    }

   
    function dispute(address keeper) external {
        require(msg.sender == governance, "dispute: !gov");
        disputes[keeper] = true;
        emit KeeperDispute(keeper, block.number);
    }

  
    function slash(address bonded, address keeper, uint amount) public nonReentrant {
        require(msg.sender == governance, "slash: !gov");
        if (bonded == address(this)) {
            _transferTokens(address(this), governance, amount);
        } else {
            IERC20(bonded).safeTransfer(governance, amount);
        }
        _unbond(bonded, keeper, amount);
        disputes[keeper] = false;
        emit KeeperSlashed(keeper, msg.sender, block.number, amount);
    }

    function revoke(address keeper) external {
        require(msg.sender == governance, "slash: !gov");
        keepers[keeper] = false;
        blacklist[keeper] = true;
        slash(address(this), keeper, bonds[keeper][address(this)]);
    }

  
    function resolve(address keeper) external {
        require(msg.sender == governance, "resolve: !gov");
        disputes[keeper] = false;
        emit KeeperResolved(keeper, block.number);
    }

   
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

  
    function approve(address spender, uint amount) public returns (bool) {
        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

   
    function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "permit: signature");
        require(signatory == owner, "permit: unauthorized");
        require(now <= deadline, "permit: expired");

        allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    function balanceOf(address account) external view returns (uint) {
        return balances[account];
    }

    
    function transfer(address dst, uint amount) public returns (bool) {
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

  
    function transferFrom(address src, address dst, uint amount) external returns (bool) {
        address spender = msg.sender;
        uint spenderAllowance = allowances[src][spender];

        if (spender != src && spenderAllowance != uint(-1)) {
            uint newAllowance = spenderAllowance.sub(amount, "transferFrom: exceeds spender allowance");
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    function _transferTokens(address src, address dst, uint amount) internal {
        require(src != address(0), "_transferTokens: zero address");
        require(dst != address(0), "_transferTokens: zero address");

        balances[src] = balances[src].sub(amount, "_transferTokens: exceeds balance");
        balances[dst] = balances[dst].add(amount, "_transferTokens: overflows");
        emit Transfer(src, dst, amount);
    }

    function _getChainId() internal pure returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_kph","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"credit","type":"address"},{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"creditor","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"ApplyCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":true,"internalType":"address","name":"job","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"address","name":"governance","type":"address"}],"name":"JobAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"address","name":"governance","type":"address"}],"name":"JobRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"activated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperBonded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"active","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperBonding","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"KeeperDispute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"KeeperResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":true,"internalType":"address","name":"slasher","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"slash","type":"uint256"}],"name":"KeeperSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deactive","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperUnbonding","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deactivated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperUnbound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"credit","type":"address"},{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"KeeperWorked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"RemoveJob","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"SubmitJob","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"UnbondJob","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAINSEPARATOR","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":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KPRH","outputs":[{"internalType":"contract IKeep3rbHelper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITYBOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNBOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"}],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"credit","type":"address"},{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"}],"name":"addCreditETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"}],"name":"addJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addKPRCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addLiquidityToJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"voter","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"}],"name":"applyCreditToJob","outputs":[],"stateMutability":"nonpayable","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":"liquidity","type":"address"}],"name":"approveLiquidity","outputs":[],"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":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"bondings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"bonds","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":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"credits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"dispute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"disputes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"firstSeen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getJobs","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getKeepers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"address","name":"bond","type":"address"},{"internalType":"uint256","name":"minBond","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"age","type":"uint256"}],"name":"isBondedKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"isKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"minBond","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"age","type":"uint256"}],"name":"isMinKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"jobList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"jobProposalDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"jobs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"keeperList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"keepers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastJob","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityAmountsUnbonding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityApplied","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityProvided","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityUnbonding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairs","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"partialUnbonding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"pendingbonds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"credit","type":"address"},{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"receipt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"receiptETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"}],"name":"removeJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"}],"name":"removeLiquidityFromJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"voter","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"resolve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"}],"name":"revokeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IKeep3rbHelper","name":"_kprh","type":"address"}],"name":"setKeep3rHelper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bonded","type":"address"},{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"slash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBonded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unbond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unbondLiquidityFromJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"unbondings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"votes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"workCompleted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"workReceipt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"worked","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405260006002556000600f553480156200001b57600080fd5b506040516200615338038062006153833981810160405260208110156200004157600080fd5b50516001600055602080546001600160a01b031916331781556040805180820190915260128152714b656570337220425343204e6574776f726b60701b9101527f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f357f78c16a89c47192c864faba091fac8a0ef455312cc27e7c97824c2cf9bdd1298a620000cd62000133565b604080516020808201959095528082019390935260608301919091523060808084019190915281518084038201815260a0909301909152815191909201209052600180546001600160a01b0319166001600160a01b039290921691909117905562000137565b4690565b608051615ff76200015c60003980611c4a528061427752806147115250615ff76000f3fe6080604052600436106104f75760003560e01c8063782d6fe11161028c578063c57981b51161015a578063e74f8239116100cc578063f39c38a011610085578063f39c38a014611684578063f75f9f7b14611699578063f9d46cf2146116cc578063f9f92be41461171b578063fede70081461174e578063ffb0a4a014611793576104f7565b8063e74f82391461155b578063e7a324dc1461159e578063eb421f3b146115b3578063ec342ad0146115e6578063ec4515dd146115fb578063f1127ed814611625576104f7565b8063d8bff5a51161011e578063d8bff5a514611401578063dd62ed3e14611434578063de63298d1461146f578063deac3541146114a8578063def70844146114e3578063e326ac4314611528576104f7565b8063c57981b5146112e9578063ce6a0880146112fe578063d454019d14611337578063d505accf1461136a578063d8ae6faf146113c8576104f7565b8063a515366a116101fe578063b4b5ea57116101b7578063b4b5ea57146111a2578063b600702a146111d5578063bb49096d14611208578063c1c1d2181461124d578063c3cda52014611262578063c5198abc146112b6576104f7565b8063a515366a1461107c578063a5d059ca146110b5578063a9059cbb146110ee578063ab033ea914611127578063b0103b1a1461115a578063b105e39f1461118d576104f7565b806388b4ac831161025057806388b4ac8314610f415780638d9acd2e14610f8457806395d89b4114610fc75780639af7728414610fdc578063a0712d6814611017578063a39744b514611041576104f7565b8063782d6fe114610e485780637ecebe0014610e815780638071198914610eb45780638322fff214610ee757806383baa69314610efc576104f7565b80634395d8ba116103c9578063603c68601161033b5780636dab5dcf116102f45780636dab5dcf14610d0a5780636fcfff4514610d3057806370a0823114610d7c57806372da828a14610daf57806374a8f10314610de25780637724ff6814610e15576104f7565b8063603c686014610b8e578063637cd7f014610bc957806364bb43ee14610c0457806367da318414610c3757806368581ebd14610c725780636ba42aaa14610cd7576104f7565b806355ea6c471161038d57806355ea6c4714610a98578063587cde1e14610acb5780635aa6e67514610afe5780635c19a95c14610b135780635feeb79414610b46578063603b4d1414610b79576104f7565b80634395d8ba1461098f57806344d96e95146109d45780634b3fde21146109e957806351cff8d914610a2257806352a4de2914610a55576104f7565b80631df0de131161046d57806330adf81f1161042657806330adf81f14610884578063313ce5671461089957806337feca84146108c45780633bbd64bc146108ff5780633d1f0bb91461093257806342966c6814610965576104f7565b80631df0de13146107845780631ff5f3da1461079957806320606b70146107de5780632119a62a146107f3578063238efcbc1461082c57806323b872dd14610841576104f7565b80631778e29c116104bf5780631778e29c1461067357806318160ddd1461069a5780631992d206146106af5780631b44555e146106f45780631b7a1fb2146107275780631c5a9d9c14610751576104f7565b806306fdde03146104fc578063095ea7b31461058657806309aff02b146105d35780630c33c522146106045780631101eb411461062e575b600080fd5b34801561050857600080fd5b506105116117a8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054b578181015183820152602001610533565b50505050905090810190601f1680156105785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561059257600080fd5b506105bf600480360360408110156105a957600080fd5b506001600160a01b0381351690602001356117d6565b604080519115158252519081900360200190f35b3480156105df57600080fd5b506105e861183d565b604080516001600160a01b039092168252519081900360200190f35b34801561061057600080fd5b506105e86004803603602081101561062757600080fd5b503561184c565b34801561063a57600080fd5b506106716004803603606081101561065157600080fd5b506001600160a01b03813581169160208101359091169060400135611873565b005b34801561067f57600080fd5b50610688611c48565b60408051918252519081900360200190f35b3480156106a657600080fd5b50610688611c6c565b3480156106bb57600080fd5b50610688600480360360608110156106d257600080fd5b506001600160a01b038135811691602081013582169160409091013516611c72565b34801561070057600080fd5b506106886004803603602081101561071757600080fd5b50356001600160a01b0316611c95565b34801561073357600080fd5b506105e86004803603602081101561074a57600080fd5b5035611ca7565b34801561075d57600080fd5b506106716004803603602081101561077457600080fd5b50356001600160a01b0316611cb4565b34801561079057600080fd5b50610688611db7565b3480156107a557600080fd5b506105bf600480360360808110156107bc57600080fd5b506001600160a01b038135169060208101359060408101359060600135611dbe565b3480156107ea57600080fd5b50610688611e80565b3480156107ff57600080fd5b506106716004803603604081101561081657600080fd5b506001600160a01b038135169060200135611ea4565b34801561083857600080fd5b50610671612003565b34801561084d57600080fd5b506105bf6004803603606081101561086457600080fd5b506001600160a01b03813581169160208101359091169060400135612086565b34801561089057600080fd5b50610688612168565b3480156108a557600080fd5b506108ae61218c565b6040805160ff9092168252519081900360200190f35b3480156108d057600080fd5b50610688600480360360408110156108e757600080fd5b506001600160a01b0381358116916020013516612191565b34801561090b57600080fd5b506105bf6004803603602081101561092257600080fd5b50356001600160a01b03166121ae565b34801561093e57600080fd5b506105bf6004803603602081101561095557600080fd5b50356001600160a01b03166121c3565b34801561097157600080fd5b506106716004803603602081101561098857600080fd5b50356121d8565b34801561099b57600080fd5b50610671600480360360608110156109b257600080fd5b506001600160a01b0381358116916020810135821691604090910135166121e2565b3480156109e057600080fd5b5061068861253a565b3480156109f557600080fd5b5061067160048036036040811015610a0c57600080fd5b506001600160a01b038135169060200135612540565b348015610a2e57600080fd5b5061067160048036036020811015610a4557600080fd5b50356001600160a01b031661277b565b348015610a6157600080fd5b5061067160048036036060811015610a7857600080fd5b506001600160a01b038135811691602081013590911690604001356129bf565b348015610aa457600080fd5b5061067160048036036020811015610abb57600080fd5b50356001600160a01b0316612cbc565b348015610ad757600080fd5b506105e860048036036020811015610aee57600080fd5b50356001600160a01b0316612d63565b348015610b0a57600080fd5b506105e8612d7e565b348015610b1f57600080fd5b5061067160048036036020811015610b3657600080fd5b50356001600160a01b0316612d8d565b348015610b5257600080fd5b5061067160048036036020811015610b6957600080fd5b50356001600160a01b0316612d97565b348015610b8557600080fd5b50610688612e20565b348015610b9a57600080fd5b5061067160048036036040811015610bb157600080fd5b506001600160a01b0381358116916020013516612e27565b348015610bd557600080fd5b5061068860048036036040811015610bec57600080fd5b506001600160a01b038135811691602001351661302e565b348015610c1057600080fd5b5061067160048036036020811015610c2757600080fd5b50356001600160a01b031661304b565b348015610c4357600080fd5b5061068860048036036040811015610c5a57600080fd5b506001600160a01b03813581169160200135166130c3565b348015610c7e57600080fd5b50610c876130e0565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610cc3578181015183820152602001610cab565b505050509050019250505060405180910390f35b348015610ce357600080fd5b506105bf60048036036020811015610cfa57600080fd5b50356001600160a01b0316613142565b61067160048036036020811015610d2057600080fd5b50356001600160a01b0316613167565b348015610d3c57600080fd5b50610d6360048036036020811015610d5357600080fd5b50356001600160a01b03166132bd565b6040805163ffffffff9092168252519081900360200190f35b348015610d8857600080fd5b5061068860048036036020811015610d9f57600080fd5b50356001600160a01b03166132d5565b348015610dbb57600080fd5b5061067160048036036020811015610dd257600080fd5b50356001600160a01b03166132f0565b348015610dee57600080fd5b5061067160048036036020811015610e0557600080fd5b50356001600160a01b0316613369565b348015610e2157600080fd5b5061068860048036036020811015610e3857600080fd5b50356001600160a01b031661340a565b348015610e5457600080fd5b5061068860048036036040811015610e6b57600080fd5b506001600160a01b03813516906020013561341c565b348015610e8d57600080fd5b5061068860048036036020811015610ea457600080fd5b50356001600160a01b031661362b565b348015610ec057600080fd5b5061067160048036036020811015610ed757600080fd5b50356001600160a01b031661363d565b348015610ef357600080fd5b506105e86136ef565b348015610f0857600080fd5b5061068860048036036060811015610f1f57600080fd5b506001600160a01b0381358116916020810135821691604090910135166136f4565b348015610f4d57600080fd5b5061067160048036036060811015610f6457600080fd5b506001600160a01b03813581169160208101359091169060400135613717565b348015610f9057600080fd5b5061067160048036036060811015610fa757600080fd5b506001600160a01b038135811691602081013590911690604001356139cd565b348015610fd357600080fd5b50610511613b19565b348015610fe857600080fd5b5061068860048036036040811015610fff57600080fd5b506001600160a01b0381358116916020013516613b3a565b34801561102357600080fd5b506106716004803603602081101561103a57600080fd5b5035613b57565b34801561104d57600080fd5b506106886004803603604081101561106457600080fd5b506001600160a01b0381358116916020013516613bb9565b34801561108857600080fd5b506106716004803603604081101561109f57600080fd5b506001600160a01b038135169060200135613bd6565b3480156110c157600080fd5b50610671600480360360408110156110d857600080fd5b506001600160a01b038135169060200135613e5f565b3480156110fa57600080fd5b506105bf6004803603604081101561111157600080fd5b506001600160a01b038135169060200135613f4d565b34801561113357600080fd5b506106716004803603602081101561114a57600080fd5b50356001600160a01b0316613f63565b34801561116657600080fd5b506105bf6004803603602081101561117d57600080fd5b50356001600160a01b0316613fda565b34801561119957600080fd5b50610c87613fef565b3480156111ae57600080fd5b50610688600480360360208110156111c557600080fd5b50356001600160a01b031661404f565b3480156111e157600080fd5b50610671600480360360208110156111f857600080fd5b50356001600160a01b03166140b3565b34801561121457600080fd5b506106886004803603606081101561122b57600080fd5b506001600160a01b0381358116916020810135821691604090910135166141df565b34801561125957600080fd5b50610688614202565b34801561126e57600080fd5b50610671600480360360c081101561128557600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a00135614209565b3480156112c257600080fd5b50610671600480360360208110156112d957600080fd5b50356001600160a01b0316614447565b3480156112f557600080fd5b5061068861459d565b34801561130a57600080fd5b506106716004803603604081101561132157600080fd5b506001600160a01b0381351690602001356145a2565b34801561134357600080fd5b506106886004803603602081101561135a57600080fd5b50356001600160a01b0316614668565b34801561137657600080fd5b50610671600480360360e081101561138d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561467a565b3480156113d457600080fd5b50610671600480360360408110156113eb57600080fd5b506001600160a01b03813516906020013561491e565b34801561140d57600080fd5b506106886004803603602081101561142457600080fd5b50356001600160a01b0316614a82565b34801561144057600080fd5b506106886004803603604081101561145757600080fd5b506001600160a01b0381358116916020013516614a94565b34801561147b57600080fd5b506106716004803603604081101561149257600080fd5b506001600160a01b038135169060200135614abf565b3480156114b457600080fd5b50610688600480360360408110156114cb57600080fd5b506001600160a01b0381358116916020013516614b8a565b3480156114ef57600080fd5b506106886004803603606081101561150657600080fd5b506001600160a01b038135811691602081013582169160409091013516614ba7565b34801561153457600080fd5b506106886004803603602081101561154b57600080fd5b50356001600160a01b0316614bca565b34801561156757600080fd5b506106716004803603606081101561157e57600080fd5b506001600160a01b03813581169160208101359091169060400135614bdc565b3480156115aa57600080fd5b50610688614d2d565b3480156115bf57600080fd5b506105bf600480360360208110156115d657600080fd5b50356001600160a01b0316614d51565b3480156115f257600080fd5b50610688614d66565b34801561160757600080fd5b506105e86004803603602081101561161e57600080fd5b5035614d6c565b34801561163157600080fd5b506116646004803603604081101561164857600080fd5b5080356001600160a01b0316906020013563ffffffff16614d79565b6040805163ffffffff909316835260208301919091528051918290030190f35b34801561169057600080fd5b506105e8614da6565b3480156116a557600080fd5b50610671600480360360208110156116bc57600080fd5b50356001600160a01b0316614db5565b3480156116d857600080fd5b506105bf600480360360a08110156116ef57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135614e5f565b34801561172757600080fd5b506105bf6004803603602081101561173e57600080fd5b50356001600160a01b0316614f10565b34801561175a57600080fd5b506106886004803603606081101561177157600080fd5b506001600160a01b038135811691602081013582169160409091013516614f25565b34801561179f57600080fd5b50610c87614f48565b604051806040016040528060128152602001714b656570337220425343204e6574776f726b60701b81525081565b3360008181526006602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6001546001600160a01b031681565b601f818154811061185957fe5b6000918252602090912001546001600160a01b0316905081565b336000908152601b602090815260408083206001600160a01b0387811685529083528184209086168452909152902054156118ee576040805162461bcd60e51b815260206004820152601660248201527518dc99591a5d0e881c195b991a5b99c818dc99591a5d60521b604482015290519081900360640190fd5b6118fb4262127500614fa8565b3360008181526017602090815260408083206001600160a01b038981168086529184528285209089168086529084528285209690965593835260188252808320938352928152828220938252929092529020546119589082614fa8565b3360008181526018602090815260408083206001600160a01b03898116808652918452828520908916808652818552838620889055958552601684528285209185529083528184209484529382529091205491905210156119ea5760405162461bcd60e51b815260040180806020018281038252602a815260200180615f51602a913960400191505060405180910390fd5b6040805163cbc3ab5360e01b81526001600160a01b03851660048201523060248201529051600091733ef349d4cfff5d4e802a1f64e8e61311699132c29163cbc3ab5391604480820192602092909190829003018186803b158015611a4e57600080fd5b505af4158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b5051604080516318160ddd60e01b81529051919250600091611b01916001600160a01b038816916318160ddd91600480820192602092909190829003018186803b158015611ac557600080fd5b505afa158015611ad9573d6000803e3d6000fd5b505050506040513d6020811015611aef57600080fd5b5051611afb8486614feb565b90615043565b6001600160a01b0385166000908152601560209081526040808320308452909152902054909150811115611b87576001600160a01b038416600090815260156020908152604080832030808552925290912054611b5e919061506e565b6001600160a01b0384166000908152601560209081526040808320308452909152812055611be4565b611b91308261506e565b6001600160a01b0384166000908152601560209081526040808320308452909152902054611bbf908261516f565b6001600160a01b03851660009081526015602090815260408083203084529091529020555b336001600160a01b0316856001600160a01b0316856001600160a01b03167f6d962fe34dd0cf9a9df3e12a7b8ddfe5f790b3f11668553455d7b52db70a07be4387604051808381526020018281526020019250505060405180910390a45050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025481565b601b60209081526000938452604080852082529284528284209052825290205481565b60136020526000908152604090205481565b6023818154811061185957fe5b336000908152601d602052604090205460ff1615611d11576040805162461bcd60e51b81526020600482015260156024820152741858dd1a5d985d194e88189b1858dadb1a5cdd1959605a1b604482015290519081900360640190fd5b3360009081526009602090815260408083206001600160a01b038516845290915290205415801590611d6557503360009081526009602090815260408083206001600160a01b038516845290915290205442115b611daa576040805162461bcd60e51b815260206004820152601160248201527061637469766174653a20626f6e64696e6760781b604482015290519081900360640190fd5b611db4338261519a565b50565b6203f48081565b60005a6024556001600160a01b0385166000908152601c602052604090205460ff168015611e2357506001600160a01b0385166000908152600e6020908152604080832054600d8352818420308552909252909120548591611e209190614fa8565b10155b8015611e4757506001600160a01b0385166000908152601360205260409020548311155b8015611e7757506001600160a01b0385166000908152601060205260409020548290611e7490429061516f565b10155b95945050505050565b7f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3581565b3360009081526014602052604090205460ff16611ef8576040805162461bcd60e51b815260206004820152600d60248201526c3932b1b2b4b83a1d1010b537b160991b604482015290519081900360640190fd5b604080518082018252601d81527f776f726b526563656970743a20696e7375666669656e742066756e647300000060208083019190915233600090815260158252838120600e82529091529190912054611f539183906152e8565b336000908152601560209081526040808320600e84528252808320939093556001600160a01b0385168083526012909152828220429055915183156108fc0291849190818181858888f19350505050158015611fb3573d6000803e3d6000fd5b50604080514381526020810183905281516001600160a01b038516923392600e927f3cda93551ad083704be19fabbd7c3eb94d88f6e72ff221bdea9017e52e4144e8929181900390910190a45050565b6021546001600160a01b03163314612062576040805162461bcd60e51b815260206004820152601d60248201527f616363657074476f7665726e616e63653a202170656e64696e67476f76000000604482015290519081900360640190fd5b602154602080546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0383166000818152600660209081526040808320338085529252822054919290919082148015906120c057506000198114155b156121515760006120ec85604051806060016040528060278152602001615f9b602791398491906152e8565b6001600160a01b0380891660008181526006602090815260408083209489168084529482529182902085905581518581529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b61215c86868661537f565b50600195945050505050565b7f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e981565b601281565b600960209081526000928352604080842090915290825290205481565b601c6020526000908152604090205460ff1681565b60146020526000908152604090205460ff1681565b611db4338261506e565b6001600160a01b03821660009081526022602052604090205460ff1661224a576040805162461bcd60e51b815260206004820152601860248201527730b2322634b8bab4b234ba3caa37a537b11d1010b830b4b960411b604482015290519081900360640190fd5b6001600160a01b038084166000908152601a6020908152604080832086851684528252808320938516835292905220546122bd576040805162461bcd60e51b815260206004820152600f60248201526e18dc99591a5d0e881b9bc8189bdb99608a1b604482015290519081900360640190fd5b6001600160a01b038084166000908152601a6020908152604080832086851684528252808320938516835292905220544211612332576040805162461bcd60e51b815260206004820152600f60248201526e6372656469743a20626f6e64696e6760881b604482015290519081900360640190fd5b6040805163cbc3ab5360e01b81526001600160a01b03841660048201523060248201529051600091733ef349d4cfff5d4e802a1f64e8e61311699132c29163cbc3ab5391604480820192602092909190829003018186803b15801561239657600080fd5b505af41580156123aa573d6000803e3d6000fd5b505050506040513d60208110156123c057600080fd5b5051604080516318160ddd60e01b81529051919250600091612474916001600160a01b038716916318160ddd91600480820192602092909190829003018186803b15801561240d57600080fd5b505afa158015612421573d6000803e3d6000fd5b505050506040513d602081101561243757600080fd5b50516001600160a01b038088166000908152601b602090815260408083208a85168452825280832093891683529290522054611afb908590614feb565b9050612480308261553c565b6001600160a01b03831660009081526015602090815260408083203084529091529020546124ae9082614fa8565b6001600160a01b038085166000818152601560209081526040808320308452825280832095909555898416808352601b8252858320948a168084529482528583208484528252858320929092558451438152908101869052845191947fa90666688fb32254f45a367c38fbcd5f2664432b061a4354d9d3c9a7abcbec5b92918290030190a45050505050565b600f5481565b3360009081526014602052604090205460ff16612598576040805162461bcd60e51b81526020600482015260116024820152703bb7b935a932b1b2b4b83a1d1010b537b160791b604482015290519081900360640190fd5b6001546001600160a01b031663525ea6316125b65a6024549061516f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156125ea57600080fd5b505afa1580156125fe573d6000803e3d6000fd5b505050506040513d602081101561261457600080fd5b5051811115612663576040805162461bcd60e51b81526020600482015260166024820152751ddbdc9ad49958d95a5c1d0e881b585e081b1a5b5a5d60521b604482015290519081900360640190fd5b604080518082018252601d81527f776f726b526563656970743a20696e7375666669656e742066756e64730000006020808301919091523360009081526015825283812030825290915291909120546126bd9183906152e8565b3360009081526015602090815260408083203084528252808320939093556001600160a01b038516825260129052204290556126f982826155b5565b6001600160a01b03821660009081526013602052604090205461271c9082614fa8565b6001600160a01b03831660008181526013602090815260409182902093909355805143815292830184905280519192339230927f3cda93551ad083704be19fabbd7c3eb94d88f6e72ff221bdea9017e52e4144e8928290030190a45050565b600260005414156127c1576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b60026000908155338152600a602090815260408083206001600160a01b0385168452909152902054158015906128195750336000908152600a602090815260408083206001600160a01b038516845290915290205442115b612860576040805162461bcd60e51b815260206004820152601360248201527277697468647261773a20756e626f6e64696e6760681b604482015290519081900360640190fd5b3360009081526011602052604090205460ff16156128ba576040805162461bcd60e51b815260206004820152601260248201527177697468647261773a20646973707574657360701b604482015290519081900360640190fd5b6001600160a01b0381163014156128ff57336000818152600b602090815260408083206001600160a01b03861684529091529020546128fa91309161537f565b61292e565b336000818152600b602090815260408083206001600160a01b03861680855292529091205461292e929061566e565b336000818152600b602090815260408083206001600160a01b038616845282529182902054825143815242928101929092528183015290517f095ae150bb74a0755c30809eb8d4aa810b63b66b9ca96a1945bbb03d809df2e99181900360600190a2336000908152600b602090815260408083206001600160a01b0394909416835292905290812081905560019055565b60026000541415612a05576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b600260009081556001600160a01b03841681526022602052604090205460ff16612a71576040805162461bcd60e51b815260206004820152601860248201527730b2322634b8bab4b234ba3caa37a537b11d1010b830b4b960411b604482015290519081900360640190fd5b612a866001600160a01b0384163330846156c5565b3360009081526016602090815260408083206001600160a01b0387811685529083528184209086168452909152902054612ac09082614fa8565b3360009081526016602090815260408083206001600160a01b0388811685529083528184209087168452909152902055612afd426203f480614fa8565b336000818152601a602090815260408083206001600160a01b0389811680865291845282852090891680865290845282852096909655938352601b825280832093835292815282822093825292909252902054612b5a9082614fa8565b336000908152601b602090815260408083206001600160a01b038881168552908352818420908716845282528083209390935560149052205460ff16158015612bba57506001600160a01b03821660009081526019602052604090205442115b15612c55576020546040805163dc380cbb60e01b81526001600160a01b0385811660048301529151919092169163dc380cbb91602480830192600092919082900301818387803b158015612c0d57600080fd5b505af1158015612c21573d6000803e3d6000fd5b50505050612c3b6212750042614fa890919063ffffffff16565b6001600160a01b0383166000908152601960205260409020555b336001600160a01b0316836001600160a01b0316836001600160a01b03167fe1cb44a16adbd63a44f65c279b23b8f447b2c6e120a2bc7f004758b446e05ed14385604051808381526020018281526020019250505060405180910390a45050600160005550565b6020546001600160a01b03163314612d0b576040805162461bcd60e51b815260206004820152600d60248201526c3932b9b7b63b329d1010b3b7bb60991b604482015290519081900360640190fd5b6001600160a01b038116600081815260116020908152604091829020805460ff19169055815143815291517f7574a4a2c81b3099d59aaf15526ea966e1e2886afd21bf4a350af7af22db3a709281900390910190a250565b6003602052600090815260409020546001600160a01b031681565b6020546001600160a01b031681565b611db43382615725565b600154611db49082906001600160a01b031663525ea631612dbb5a6024549061516f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612def57600080fd5b505afa158015612e03573d6000803e3d6000fd5b505050506040513d6020811015612e1957600080fd5b5051612540565b6212750081565b3360009081526017602090815260408083206001600160a01b0386811685529083528184209085168452909152902054612e9c576040805162461bcd60e51b81526020600482015260116024820152701c995b5bdd99529bd88e881d5b989bdb99607a1b604482015290519081900360640190fd5b3360009081526017602090815260408083206001600160a01b03868116855290835281842090851684529091529020544211612f16576040805162461bcd60e51b815260206004820152601460248201527372656d6f76654a6f623a20756e626f6e64696e6760601b604482015290519081900360640190fd5b3360008181526018602090815260408083206001600160a01b038781168086529184528285209087168086529084528285205495855260168452828520918552908352818420908452909152902054612f6f908261516f565b3360008181526016602090815260408083206001600160a01b038981168086529184528285209089168086529084528285209690965584845260188352818420818552835281842095845294909152812055612fcc91908361566e565b336001600160a01b0316836001600160a01b0316836001600160a01b03167fb69fc9f6d19ed402461251491f86c736bfcbe966e9584d3fb8a0057b313b69204385604051808381526020018281526020019250505060405180910390a4505050565b601560209081526000928352604080842090915290825290205481565b6020546001600160a01b031633146130a2576040805162461bcd60e51b81526020600482015260156024820152743932bb37b5b2a634b8bab4b234ba3c9d1010b3b7bb60591b604482015290519081900360640190fd5b6001600160a01b03166000908152602260205260409020805460ff19169055565b600b60209081526000928352604080842090915290825290205481565b6060601f80548060200260200160405190810160405280929190818152602001828054801561313857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161311a575b5050505050905090565b60005a602455506001600160a01b03166000908152601c602052604090205460ff1690565b6001600160a01b03811660009081526014602052604090205460ff166131c9576040805162461bcd60e51b815260206004820152601260248201527130b23221b932b234ba22aa241d1010b537b160711b604482015290519081900360640190fd5b60006131dc612710611afb346032614feb565b90506132166131eb348361516f565b6001600160a01b0384166000908152601560209081526040808320600e845290915290205490614fa8565b6001600160a01b038084166000908152601560209081526040808320600e8452825280832094909455549251929091169183156108fc0291849190818181858888f1935050505015801561326e573d6000803e3d6000fd5b5060408051438152346020820152815133926001600160a01b03861692600e927fb97975ea9bf5ae2173b9ea765214622396032aba11cd5cc1450c760ac80d059a929181900390910190a45050565b60056020526000908152604090205463ffffffff1681565b6001600160a01b031660009081526007602052604090205490565b6020546001600160a01b03163314613347576040805162461bcd60e51b815260206004820152601560248201527439b2ba25b2b2b819b92432b63832b91d1010b3b7bb60591b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6020546001600160a01b031633146133b6576040805162461bcd60e51b815260206004820152600b60248201526a39b630b9b41d1010b3b7bb60a91b604482015290519081900360640190fd5b6001600160a01b0381166000908152601c60209081526040808320805460ff19908116909155601d835281842080549091166001179055600d825280832030808552925290912054611db491908390614bdc565b60196020526000908152604090205481565b6000438210613463576040805162461bcd60e51b815260206004820152600e60248201526d33b2ba283934b7b92b37ba32b99d60911b604482015290519081900360640190fd5b6001600160a01b03831660009081526005602052604090205463ffffffff1680613491576000915050611837565b6001600160a01b038416600090815260046020908152604080832063ffffffff600019860181168552925290912054168310613500576001600160a01b03841660009081526004602090815260408083206000199490940163ffffffff16835292905220600101549050611837565b6001600160a01b038416600090815260046020908152604080832083805290915290205463ffffffff1683101561353b576000915050611837565b600060001982015b8163ffffffff168163ffffffff1611156135f457600282820363ffffffff1604810361356d615f19565b506001600160a01b038716600090815260046020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152908714156135cf576020015194506118379350505050565b805163ffffffff168711156135e6578193506135ed565b6001820392505b5050613543565b506001600160a01b038516600090815260046020908152604080832063ffffffff9094168352929052206001015491505092915050565b60086020526000908152604090205481565b6020546001600160a01b0316331461368e576040805162461bcd60e51b815260206004820152600f60248201526e3932b6b7bb32a537b11d1010b3b7bb60891b604482015290519081900360640190fd5b6001600160a01b038116600081815260146020908152604091829020805460ff191690558151438152339181019190915281517f2ca18fdfae50f1042480d285d21f6706aa6abbd567d60a044b5bec07ccfee648929181900390910190a250565b600e81565b601860209081526000938452604080852082529284528284209052825290205481565b6002600054141561375d576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b600260009081556001600160a01b03831681526014602052604090205460ff166137c3576040805162461bcd60e51b815260206004820152601260248201527130b23221b932b234ba22aa241d1010b537b160711b604482015290519081900360640190fd5b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561381257600080fd5b505afa158015613826573d6000803e3d6000fd5b505050506040513d602081101561383c57600080fd5b505190506138556001600160a01b0385163330856156c5565b60006138da82866001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156138a857600080fd5b505afa1580156138bc573d6000803e3d6000fd5b505050506040513d60208110156138d257600080fd5b50519061516f565b905060006138ef612710611afb846032614feb565b905061392a6138fe838361516f565b6001600160a01b038088166000908152601560209081526040808320938c168352929052205490614fa8565b6001600160a01b0380871660009081526015602090815260408083208b851680855290835292209390935591546139639291168361566e565b336001600160a01b0316856001600160a01b0316876001600160a01b03167fb97975ea9bf5ae2173b9ea765214622396032aba11cd5cc1450c760ac80d059a4386604051808381526020018281526020019250505060405180910390a45050600160005550505050565b3360009081526014602052604090205460ff16613a21576040805162461bcd60e51b815260206004820152600d60248201526c3932b1b2b4b83a1d1010b537b160991b604482015290519081900360640190fd5b604080518082018252601d81527f776f726b526563656970743a20696e7375666669656e742066756e6473000000602080830191909152336000908152601582528381206001600160a01b03881682529091529190912054613a849183906152e8565b3360009081526015602090815260408083206001600160a01b0388811680865291845282852095909555938616835260129091529020429055613ac890838361566e565b604080514381526020810183905281516001600160a01b03808616933393918816927f3cda93551ad083704be19fabbd7c3eb94d88f6e72ff221bdea9017e52e4144e89281900390910190a4505050565b6040518060400160405280600581526020016425a819a92160d91b81525081565b600a60209081526000928352604080842090915290825290205481565b6020546001600160a01b03163314613ba3576040805162461bcd60e51b815260206004820152600a60248201526936b4b73a1d1010b3b7bb60b11b604482015290519081900360640190fd5b602054611db4906001600160a01b03168261553c565b600d60209081526000928352604080842090915290825290205481565b60026000541415613c1c576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b60026000908155338152601d602052604090205460ff1615613c79576040805162461bcd60e51b8152602060048201526011602482015270189bdb990e88189b1858dadb1a5cdd1959607a1b604482015290519081900360640190fd5b613c864262015180614fa8565b3360009081526009602090815260408083206001600160a01b038716808552925290912091909155301415613cc557613cc033308361537f565b613dac565b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613d1457600080fd5b505afa158015613d28573d6000803e3d6000fd5b505050506040513d6020811015613d3e57600080fd5b50519050613d576001600160a01b0384163330856156c5565b613da881846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156138a857600080fd5b9150505b336000908152600c602090815260408083206001600160a01b0386168452909152902054613dda9082614fa8565b336000818152600c602090815260408083206001600160a01b03881680855290835281842095909555838352600982528083209483529381529083902054835143815291820152808301849052915190917fa150b7ad789014c0171a2873708daadbdbf87457d90d3896eaf0907e5b225ae4919081900360600190a250506001600055565b613e6c4262127500614fa8565b336000818152600a602090815260408083206001600160a01b0388168452909152902091909155613e9f908390836157d4565b336000908152600b602090815260408083206001600160a01b0386168452909152902054613ecd9082614fa8565b336000818152600b602090815260408083206001600160a01b03881680855290835281842095909555838352600a82528083209483529381529083902054835143815291820152808301849052915190917f50eca01e7e4362bc0279a45c4fbe68f263771dd3418b0a29c93008759f433b2e919081900360600190a25050565b6000613f5a33848461537f565b50600192915050565b6020546001600160a01b03163314613fb8576040805162461bcd60e51b815260206004820152601360248201527239b2ba23b7bb32b93730b731b29d1010b3b7bb60691b604482015290519081900360640190fd5b602180546001600160a01b0319166001600160a01b0392909216919091179055565b60116020526000908152604090205460ff1681565b6060601e805480602002602001604051908101604052809291908181526020018280548015613138576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161311a575050505050905090565b6001600160a01b03811660009081526005602052604081205463ffffffff168061407a5760006140ac565b6001600160a01b038316600090815260046020908152604080832063ffffffff60001986011684529091529020600101545b9392505050565b6020546001600160a01b0316331461410b576040805162461bcd60e51b815260206004820152601660248201527530b8383937bb32a634b8bab4b234ba3c9d1010b3b7bb60511b604482015290519081900360640190fd5b6001600160a01b03811660009081526022602052604090205460ff1615614179576040805162461bcd60e51b815260206004820152601760248201527f617070726f76654c69717569646974793a202170616972000000000000000000604482015290519081900360640190fd5b6001600160a01b03166000818152602260205260408120805460ff191660019081179091556023805491820181559091527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180546001600160a01b0319169091179055565b601760209081526000938452604080852082529284528284209052825290205481565b6201518081565b604080517f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc6020808301919091526001600160a01b038916828401526060820188905260808083018890528351808403909101815260a08301845280519082012061190160f01b60c08401527f000000000000000000000000000000000000000000000000000000000000000060c284015260e2808401829052845180850390910181526101028401808652815191840191909120600091829052610122850180875281905260ff891661014286015261016285018890526101828501879052945191949390926001926101a280840193601f198301929081900390910190855afa15801561431c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614379576040805162461bcd60e51b815260206004820152601260248201527164656c656761746542795369673a2073696760701b604482015290519081900360640190fd5b6001600160a01b038116600090815260086020526040902080546001810190915588146143e4576040805162461bcd60e51b815260206004820152601460248201527364656c656761746542795369673a206e6f6e636560601b604482015290519081900360640190fd5b86421115614432576040805162461bcd60e51b815260206004820152601660248201527519195b1959d85d19509e54da59ce88195e1c1a5c995960521b604482015290519081900360640190fd5b61443c818a615725565b505050505050505050565b6020546001600160a01b03163314614495576040805162461bcd60e51b815260206004820152600c60248201526b30b2322537b11d1010b3b7bb60a11b604482015290519081900360640190fd5b6001600160a01b03811660009081526014602052604090205460ff16156144f7576040805162461bcd60e51b815260206004820152601160248201527030b2322537b11d103537b11035b737bbb760791b604482015290519081900360640190fd5b6001600160a01b0381166000818152601460209081526040808320805460ff19166001908117909155601f805491820181559093527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790920180546001600160a01b031916841790558151438152339181019190915281517f3d9884fbd11fce9188657c4bcfda7491d3316ce97bd234d981b7be1f012a852f929181900390910190a250565b603281565b6020546001600160a01b031633146145f2576040805162461bcd60e51b815260206004820152600e60248201526d30b2322b37ba32b99d1010b3b7bb60911b604482015290519081900360640190fd5b6001600160a01b0382166000908152600e6020526040902054614615908261516f565b6001600160a01b0383166000908152600e6020526040902055600f5461463b908261516f565b600f556001600160a01b0380831660009081526003602052604081205461466492169083615869565b5050565b60126020526000908152604090205481565b6001600160a01b0380881660008181526008602090815260408083208054600180820190925582517f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e98186015280840196909652958c166060860152608085018b905260a085019590955260c08085018a90528151808603909101815260e08501825280519083012061190160f01b6101008601527f000000000000000000000000000000000000000000000000000000000000000061010286015261012280860182905282518087039091018152610142860180845281519185019190912090859052610162860180845281905260ff8a166101828701526101a286018990526101c2860188905291519095919491926101e2808401939192601f1981019281900390910190855afa1580156147b5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614811576040805162461bcd60e51b81526020600482015260116024820152707065726d69743a207369676e617475726560781b604482015290519081900360640190fd5b896001600160a01b0316816001600160a01b03161461486e576040805162461bcd60e51b81526020600482015260146024820152731c195c9b5a5d0e881d5b985d5d1a1bdc9a5e995960621b604482015290519081900360640190fd5b864211156148b5576040805162461bcd60e51b815260206004820152600f60248201526e1c195c9b5a5d0e88195e1c1a5c9959608a1b604482015290519081900360640190fd5b6001600160a01b03808b166000818152600660209081526040808320948e16808452948252918290208c905581518c815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a350505050505050505050565b6020546001600160a01b03163314614972576040805162461bcd60e51b815260206004820152601260248201527130b23225a82921b932b234ba1d1010b3b7bb60711b604482015290519081900360640190fd5b6001600160a01b03821660009081526014602052604090205460ff166149d4576040805162461bcd60e51b815260206004820152601260248201527130b23225a82921b932b234ba1d1010b537b160711b604482015290519081900360640190fd5b6001600160a01b0382166000908152601560209081526040808320308452909152902054614a029082614fa8565b6001600160a01b038316600090815260156020908152604080832030808552925290912091909155614a34908261553c565b6040805143815260208101839052815133926001600160a01b0386169230927fb97975ea9bf5ae2173b9ea765214622396032aba11cd5cc1450c760ac80d059a929181900390910190a45050565b600e6020526000908152604090205481565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6020546001600160a01b03163314614b0f576040805162461bcd60e51b815260206004820152600e60248201526d30b2322b37ba32b99d1010b3b7bb60911b604482015290519081900360640190fd5b614b19823061519a565b6001600160a01b0382166000908152600e6020526040902054614b3c9082614fa8565b6001600160a01b0383166000908152600e6020526040902055600f54614b629082614fa8565b600f556001600160a01b03808316600090815260036020526040812054614664921683615869565b600c60209081526000928352604080842090915290825290205481565b601660209081526000938452604080852082529284528284209052825290205481565b60106020526000908152604090205481565b60026000541415614c22576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b60026000556020546001600160a01b03163314614c74576040805162461bcd60e51b815260206004820152600b60248201526a39b630b9b41d1010b3b7bb60a91b604482015290519081900360640190fd5b6001600160a01b038316301415614ca257602054614c9d9030906001600160a01b03168361537f565b614cbc565b602054614cbc906001600160a01b0385811691168361566e565b614cc78383836157d4565b6001600160a01b038216600081815260116020908152604091829020805460ff19169055815143815290810184905281513393927ff7e41ea76f0e7b22ba17dc4cc01fa75cff34ea24f5efe2874f5e175296259050928290030190a35050600160005550565b7f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc81565b60226020526000908152604090205460ff1681565b61271081565b601e818154811061185957fe5b60046020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6021546001600160a01b031681565b6020546001600160a01b03163314614e04576040805162461bcd60e51b815260206004820152600d60248201526c3234b9b83aba329d1010b3b7bb60991b604482015290519081900360640190fd5b6001600160a01b038116600081815260116020908152604091829020805460ff19166001179055815143815291517ffb2bdfce35c242f34d4f9633225d3c34a5892d5eae9ce102de6aac188dd25ba09281900390910190a250565b60005a6024556001600160a01b0386166000908152601c602052604090205460ff168015614eb257506001600160a01b038087166000908152600d60209081526040808320938916835292905220548411155b8015614ed657506001600160a01b0386166000908152601360205260409020548311155b8015614f0657506001600160a01b0386166000908152601060205260409020548290614f0390429061516f565b10155b9695505050505050565b601d6020526000908152604090205460ff1681565b601a60209081526000938452604080852082529284528284209052825290205481565b60606023805480602002602001604051908101604052809291908181526020018280548015613138576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161311a575050505050905090565b6000828201838110156140ac576040805162461bcd60e51b81526020600482015260066024820152656164643a202b60d01b604482015290519081900360640190fd5b600082614ffa57506000611837565b8282028284828161500757fe5b04146140ac576040805162461bcd60e51b815260206004820152600660248201526536bab61d101560d11b604482015290519081900360640190fd5b60006140ac8383604051806040016040528060068152602001656469763a202f60d01b8152506159e7565b6001600160a01b0382166150bf576040805162461bcd60e51b81526020600482015260136024820152725f6275726e3a207a65726f206164647265737360681b604482015290519081900360640190fd5b60408051808201825260168152755f6275726e3a20657863656564732062616c616e636560501b6020808301919091526001600160a01b0385166000908152600790915291909120546151139183906152e8565b6001600160a01b038316600090815260076020526040902055600254615139908261516f565b6002556040805182815290516000916001600160a01b03851691600080516020615f7b8339815191529181900360200190a35050565b60006140ac8383604051806040016040528060068152602001657375623a202d60d01b8152506152e8565b6001600160a01b03821660009081526010602052604090205461521f576001600160a01b03821660008181526010602090815260408083204290819055601e8054600181019091557f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b03191690951790945560129091529020555b6001600160a01b038083166000908152601c60209081526040808320805460ff19166001179055600c8252808320938516835292905220546152649082908490615a4c565b6001600160a01b038083166000818152600c60209081526040808320948616808452948252808320839055838352600d825280832094835293815290839020548351438152429281019290925281840152915190917f3d80dd4660c08288217e88c2d45230220fcd3debf16898013243026e6a2aad05919081900360600190a25050565b600081848411156153775760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561533c578181015183820152602001615324565b50505050905090810190601f1680156153695780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166153da576040805162461bcd60e51b815260206004820152601d60248201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604482015290519081900360640190fd5b6001600160a01b038216615435576040805162461bcd60e51b815260206004820152601d60248201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604482015290519081900360640190fd5b60408051808201825260208082527f5f7472616e73666572546f6b656e733a20657863656564732062616c616e6365818301526001600160a01b03861660009081526007909152919091205461548c9183906152e8565b6001600160a01b0380851660009081526007602081815260408084209590955584518086018652601a81527f5f7472616e73666572546f6b656e733a206f766572666c6f77730000000000008183015293871683525291909120546154f2918390615ae4565b6001600160a01b038084166000818152600760209081526040918290209490945580518581529051919392871692600080516020615f7b83398151915292918290030190a3505050565b6002546155499082614fa8565b6002556001600160a01b03821660009081526007602052604090205461556f9082614fa8565b6001600160a01b0383166000818152600760209081526040808320949094558351858152935192939192600080516020615f7b8339815191529281900390910190a35050565b6001600160a01b0382166000908152600d602090815260408083203084529091529020546155e39082614fa8565b6001600160a01b0383166000908152600d60209081526040808320308452909152902055600f546156149082614fa8565b600f556001600160a01b0380831660009081526003602052604081205461563c921683615869565b6040805182815290516001600160a01b038416913391600080516020615f7b8339815191529181900360200190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526156c0908490615b42565b505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261571f908590615b42565b50505050565b6001600160a01b03808316600081815260036020908152604080832054600d8352818420308552835281842054948452600e909252822054931692909161576c9190614fa8565b6001600160a01b0385811660008181526003602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461571f828483615869565b6001600160a01b038083166000908152600d6020908152604080832093871683529290522054615804908261516f565b6001600160a01b038084166000908152600d60209081526040808320938816808452939091529020919091553014156156c057600f54615844908261516f565b600f556001600160a01b038083166000908152600360205260408120546156c0921690835b816001600160a01b0316836001600160a01b03161415801561588b5750600081115b156156c0576001600160a01b03831615615956576001600160a01b03831660009081526005602052604081205463ffffffff1690816158cb5760006158fd565b6001600160a01b038516600090815260046020908152604080832063ffffffff60001987011684529091529020600101545b9050600061594484604051806040016040528060168152602001755f6d6f7665566f7465733a20756e646572666c6f777360501b815250846152e89092919063ffffffff16565b905061595286848484615cfd565b5050505b6001600160a01b038216156156c0576001600160a01b03821660009081526005602052604081205463ffffffff1690816159915760006159c3565b6001600160a01b038416600090815260046020908152604080832063ffffffff60001987011684529091529020600101545b905060006159d18285614fa8565b90506159df85848484615cfd565b505050505050565b60008183615a365760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561533c578181015183820152602001615324565b506000838581615a4257fe5b0495945050505050565b6001600160a01b038083166000908152600d6020908152604080832093871683529290522054615a7c9082614fa8565b6001600160a01b038084166000908152600d60209081526040808320938816808452939091529020919091553014156156c057600f54615abc9082614fa8565b600f556001600160a01b038083166000908152600360205260408120546156c0921683615869565b60008383018285821015615b395760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561533c578181015183820152602001615324565b50949350505050565b615b54826001600160a01b0316615e7f565b615b9c576040805162461bcd60e51b815260206004820152601460248201527314d85999515490cc8c0e880858dbdb9d1c9858dd60621b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310615bda5780518252601f199092019160209182019101615bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615c3c576040519150601f19603f3d011682016040523d82523d6000602084013e615c41565b606091505b509150915081615c98576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561571f57808060200190516020811015615cb457600080fd5b505161571f576040805162461bcd60e51b815260206004820152601360248201527214d85999515490cc8c0e88085cdd58d8d95959606a1b604482015290519081900360640190fd5b6000615d3e436040518060400160405280601981526020017f5f7772697465436865636b706f696e743a203332206269747300000000000000815250615ebb565b905060008463ffffffff16118015615d8757506001600160a01b038516600090815260046020908152604080832063ffffffff6000198901811685529252909120548282169116145b15615dc4576001600160a01b038516600090815260046020908152604080832063ffffffff60001989011684529091529020600101829055615e35565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600484528681208b8616825284528681209551865490861663ffffffff19918216178755925160019687015590815260059092529390208054928801909116919092161790555b604080518481526020810184905281516001600160a01b038816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590615eb357508115155b949350505050565b6000816401000000008410615f115760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561533c578181015183820152602001615324565b509192915050565b60408051808201909152600080825260208201529056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00756e626f6e644c697175696469747946726f6d4a6f623a20696e73756666696369656e742066756e6473ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef7472616e7366657246726f6d3a2065786365656473207370656e64657220616c6c6f77616e6365a2646970667358221220ccf99a096fb94a211e54a616aae056d15fe9255d96d45d31c2779c77ca9ab26164736f6c634300060c0033000000000000000000000000550f3313b771e2d35dad568be2f6948d5db7c5f6

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

000000000000000000000000550f3313b771e2d35dad568be2f6948d5db7c5f6

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000550f3313b771e2d35dad568be2f6948d5db7c5f6


Library Used

Keep3rbLibrary : 0x3ef349d4cfff5d4e802a1f64e8e61311699132c2

Deployed ByteCode Sourcemap

8871:30613:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9131:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37143:205;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37143:205:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9046:26;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;9046:26:0;;;;;;;;;;;;;;20944:24;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20944:24:0;;:::i;25979:1129::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25979:1129:0;;;;;;;;;;;;;;;;;:::i;:::-;;10184:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9443:27;;;;;;;;;;;;;:::i;20449:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20449:87:0;;;;;;;;;;;;;;;;;;;:::i;19456:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19456:45:0;-1:-1:-1;;;;;19456:45:0;;:::i;21243:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21243:31:0;;:::i;33998:274::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33998:274:0;-1:-1:-1;;;;;33998:274:0;;:::i;17996:43::-;;;;;;;;;;;;;:::i;32409:355::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32409:355:0;;;;;;;;;;;;;;;;;;:::i;10058:119::-;;;;;;;;;;;;;:::i;29683:376::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29683:376:0;;;;;;;;:::i;32093:170::-;;;;;;;;;;;;;:::i;38326:553::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38326:553:0;;;;;;;;;;;;;;;;;:::i;10519:128::-;;;;;;;;;;;;;:::i;9344:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18320:60;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18320:60:0;;;;;;;;;;:::i;20590:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20590:39:0;-1:-1:-1;;;;;20590:39:0;;:::i;19575:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19575:36:0;-1:-1:-1;;;;;19575:36:0;;:::i;27947:80::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27947:80:0;;:::i;25174:797::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25174:797:0;;;;;;;;;;;;;;;;;;;:::i;19042:27::-;;;;;;;;;;;;;:::i;28683:567::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28683:567:0;;;;;;;;:::i;35133:673::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35133:673:0;-1:-1:-1;;;;;35133:673:0;;:::i;24344:822::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24344:822:0;;;;;;;;;;;;;;;;;:::i;36784:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36784:198:0;-1:-1:-1;;;;;36784:198:0;;:::i;9544:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9544:45:0;-1:-1:-1;;;;;9544:45:0;;:::i;21041:25::-;;;;;;;;;;;;;:::i;11316:95::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11316:95:0;-1:-1:-1;;;;;11316:95:0;;:::i;28551:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28551:124:0;-1:-1:-1;;;;;28551:124:0;;:::i;17900:37::-;;;;;;;;;;;;;:::i;27116:673::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27116:673:0;;;;;;;;;;:::i;19674:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19674:59:0;;;;;;;;;;:::i;24049:177::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24049:177:0;-1:-1:-1;;;;;24049:177:0;;:::i;18556:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18556:68:0;;;;;;;;;;:::i;31323:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32271:130;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32271:130:0;-1:-1:-1;;;;;32271:130:0;;:::i;21722:354::-;;;;;;;;;;;;;;;;-1:-1:-1;21722:354:0;-1:-1:-1;;;;;21722:354:0;;:::i;9811:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9811:49:0;-1:-1:-1;;;;;9811:49:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;38045:108;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38045:108:0;-1:-1:-1;;;;;38045:108:0;;:::i;31632:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31632:156:0;-1:-1:-1;;;;;31632:156:0;;:::i;36526:246::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36526:246:0;-1:-1:-1;;;;;36526:246:0;;:::i;20218:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20218:48:0;-1:-1:-1;;;;;20218:48:0;;:::i;12263:1191::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12263:1191:0;;;;;;;;:::i;10730:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10730:39:0;-1:-1:-1;;;;;10730:39:0;;:::i;31427:197::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31427:197:0;-1:-1:-1;;;;;31427:197:0;;:::i;18217:42::-;;;;;;;;;;;;;:::i;20078:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20078:97:0;;;;;;;;;;;;;;;;;;;:::i;22084:627::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22084:627:0;;;;;;;;;;;;;;;;;:::i;29262:409::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29262:409:0;;;;;;;;;;;;;;;;;:::i;9242:39::-;;;;;;;;;;;;;:::i;18441:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18441:62:0;;;;;;;;;;:::i;27797:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27797:138:0;;:::i;18814:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18814:57:0;;;;;;;;;;:::i;33131:743::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33131:743:0;;;;;;;;:::i;34753:368::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34753:368:0;;;;;;;;:::i;38167:147::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38167:147:0;;;;;;;;:::i;31800:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31800:170:0;-1:-1:-1;;;;;31800:170:0;;:::i;19243:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19243:40:0;-1:-1:-1;;;;;19243:40:0;;:::i;33887:99::-;;;;;;;;;;;;;:::i;12035:220::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12035:220:0;-1:-1:-1;;;;;12035:220:0;;:::i;23746:295::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23746:295:0;-1:-1:-1;;;;;23746:295:0;;:::i;19936:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19936:90:0;;;;;;;;;;;;;;;;;;;:::i;17788:34::-;;;;;;;;;;;;;:::i;11419:604::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11419:604:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31044:267::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31044:267:0;-1:-1:-1;;;;;31044:267:0;;:::i;18091:29::-;;;;;;;;;;;;;:::i;23058:289::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23058:289:0;;;;;;;;:::i;19348:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19348:39:0;-1:-1:-1;;;;;19348:39:0;;:::i;37361:676::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37361:676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23355:380::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23355:380:0;;;;;;;;:::i;18942:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18942:37:0;-1:-1:-1;;;;;18942:37:0;;:::i;36995:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36995:136:0;;;;;;;;;;:::i;22719:328::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22719:328:0;;;;;;;;:::i;18690:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18690:64:0;;;;;;;;;;:::i;19798:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19798:89:0;;;;;;;;;;;;;;;;;;;:::i;19135:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19135:41:0;-1:-1:-1;;;;;19135:41:0;;:::i;36027:491::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36027:491:0;;;;;;;;;;;;;;;;;:::i;10318:111::-;;;;;;;;;;;;;:::i;21185:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21185:49:0;-1:-1:-1;;;;;21185:49:0;;:::i;18127:33::-;;;;;;;;;;;;;:::i;20832:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20832:27:0;;:::i;9672:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9672:70:0;;-1:-1:-1;;;;;9672:70:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;21073:32;;;;;;;;;;;;;:::i;35819:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35819:196:0;-1:-1:-1;;;;;35819:196:0;;:::i;32776:344::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32776:344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20701:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20701:41:0;-1:-1:-1;;;;;20701:41:0;;:::i;20311:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20311:88:0;;;;;;;;;;;;;;;;;;;:::i;24234:98::-;;;;;;;;;;;;;:::i;9131:50::-;;;;;;;;;;;;;;-1:-1:-1;;;9131:50:0;;;;:::o;37143:205::-;37234:10;37206:4;37223:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;37223:31:0;;;;;;;;;;;:40;;;37281:37;;;;;;;37206:4;;37223:31;;37234:10;;37281:37;;;;;;;;-1:-1:-1;37336:4:0;37143:205;;;;;:::o;9046:26::-;;;-1:-1:-1;;;;;9046:26:0;;:::o;20944:24::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20944:24:0;;-1:-1:-1;20944:24:0;:::o;25979:1129::-;26100:10;26084:27;;;;:15;:27;;;;;;;;-1:-1:-1;;;;;26084:38:0;;;;;;;;;;;:43;;;;;;;;;;;:48;26076:83;;;;;-1:-1:-1;;;26076:83:0;;;;;;;;;;;;-1:-1:-1;;;26076:83:0;;;;;;;;;;;;;;;26219:15;:3;17930:7;26219;:15::i;:::-;26189:10;26170:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;26170:41:0;;;;;;;;;;;;:46;;;;;;;;;;;;:64;;;;26301:37;;;:25;:37;;;;;:48;;;;;;;;;:53;;;;;;;;;;:65;;26359:6;26301:57;:65::i;:::-;26271:10;26245:37;;;;:25;:37;;;;;;;;-1:-1:-1;;;;;26245:48:0;;;;;;;;;;;;:53;;;;;;;;;;;;:121;;;26442:29;;;:17;:29;;;;;:40;;;;;;;;;:45;;;;;;;;;;26385:53;;;-1:-1:-1;26385:102:0;26377:157;;;;-1:-1:-1;;;26377:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26565:51;;;-1:-1:-1;;;26565:51:0;;-1:-1:-1;;;;;26565:51:0;;;;;;26610:4;26565:51;;;;;;26547:15;;26565:14;;:25;;:51;;;;;;;;;;;;;;;:14;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26565:51:0;26669:31;;;-1:-1:-1;;;26669:31:0;;;;26565:51;;-1:-1:-1;26627:12:0;;26642:59;;-1:-1:-1;;;;;26669:29:0;;;;;:31;;;;;26565:51;;26669:31;;;;;;;;:29;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26669:31:0;26642:22;:10;26657:6;26642:14;:22::i;:::-;:26;;:59::i;:::-;-1:-1:-1;;;;;26726:12:0;;;;;;:7;:12;;;;;;;;26747:4;26726:27;;;;;;;;26627:74;;-1:-1:-1;26716:37:0;;26712:312;;;-1:-1:-1;;;;;26791:12:0;;;;;;:7;:12;;;;;;;;26784:4;26791:27;;;;;;;;;26770:49;;26784:4;26770:5;:49::i;:::-;-1:-1:-1;;;;;26834:12:0;;26864:1;26834:12;;;:7;:12;;;;;;;;26855:4;26834:27;;;;;;;:31;26712:312;;;26898:29;26912:4;26919:7;26898:5;:29::i;:::-;-1:-1:-1;;;;;26972:12:0;;;;;;:7;:12;;;;;;;;26993:4;26972:27;;;;;;;;:40;;27004:7;26972:31;:40::i;:::-;-1:-1:-1;;;;;26942:12:0;;;;;;:7;:12;;;;;;;;26963:4;26942:27;;;;;;;:70;26712:312;27067:10;-1:-1:-1;;;;;27041:59:0;27056:9;-1:-1:-1;;;;;27041:59:0;27051:3;-1:-1:-1;;;;;27041:59:0;;27079:12;27093:6;27041:59;;;;;;;;;;;;;;;;;;;;;;;;25979:1129;;;;;:::o;10184:40::-;;;:::o;9443:27::-;;;;:::o;20449:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19456:45::-;;;;;;;;;;;;;:::o;21243:31::-;;;;;;;;;;33998:274;34072:10;34062:21;;;;:9;:21;;;;;;;;34061:22;34053:56;;;;;-1:-1:-1;;;34053:56:0;;;;;;;;;;;;-1:-1:-1;;;34053:56:0;;;;;;;;;;;;;;;34137:10;34128:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;34128:29:0;;;;;;;;;;:34;;;;:73;;-1:-1:-1;34175:10:0;34166:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;34166:29:0;;;;;;;;;;34198:3;-1:-1:-1;34128:73:0;34120:103;;;;;-1:-1:-1;;;34120:103:0;;;;;;;;;;;;-1:-1:-1;;;34120:103:0;;;;;;;;;;;;;;;34234:30;34244:10;34256:7;34234:9;:30::i;:::-;33998:274;:::o;17996:43::-;18033:6;17996:43;:::o;32409:355::-;32501:4;32529:9;32518:8;:20;-1:-1:-1;;;;;32556:15:0;;;;;;:7;:15;;;;;;;;:94;;;;-1:-1:-1;;;;;;32625:13:0;;;;;;:5;:13;;;;;;;;;32592:5;:13;;;;;32614:4;32592:28;;;;;;;;;32643:7;;32592:47;;:28;:32;:47::i;:::-;:58;;32556:94;:146;;;;-1:-1:-1;;;;;;32671:21:0;;;;;;:13;:21;;;;;;:31;-1:-1:-1;32671:31:0;32556:146;:200;;;;-1:-1:-1;;;;;;32731:17:0;;;;;;:9;:17;;;;;;32753:3;;32723:26;;:3;;:7;:26::i;:::-;:33;;32556:200;32549:207;32409:355;-1:-1:-1;;;;;32409:355:0:o;10058:119::-;10100:77;10058:119;:::o;29683:376::-;29765:10;29760:16;;;;:4;:16;;;;;;;;29752:42;;;;;-1:-1:-1;;;29752:42:0;;;;;;;;;;;;-1:-1:-1;;;29752:42:0;;;;;;;;;;;;;;;29832:69;;;;;;;;;;;;;;;;;;;;29840:10;-1:-1:-1;29832:19:0;;;:7;:19;;;;;18255:3;29832:24;;;;;;;;;;:69;;29861:6;;29832:28;:69::i;:::-;29813:10;29805:19;;;;:7;:19;;;;;;;;18255:3;29805:24;;;;;;;:96;;;;-1:-1:-1;;;;;29912:15:0;;;;;:7;:15;;;;;;29930:3;29912:21;;29944:32;;;;;;;29969:6;;29944:32;;29805:19;29944:32;29969:6;29912:15;29944:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29992:59:0;;;30030:12;29992:59;;;;;;;;;;-1:-1:-1;;;;;29992:59:0;;;30010:10;;18255:3;;29992:59;;;;;;;;;;;29683:376;;:::o;32093:170::-;32163:17;;-1:-1:-1;;;;;32163:17:0;32149:10;:31;32141:73;;;;;-1:-1:-1;;;32141:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32238:17;;32225:10;:30;;-1:-1:-1;;;;;;32225:30:0;-1:-1:-1;;;;;32238:17:0;;;32225:30;;;;;;32093:170::o;38326:553::-;-1:-1:-1;;;;;38485:15:0;;38405:4;38485:15;;;:10;:15;;;;;;;;38440:10;38485:24;;;;;;;;38405:4;;38440:10;;38485:24;38526:14;;;;;:46;;;-1:-1:-1;;38544:16:0;:28;;38526:46;38522:282;;;38589:17;38609:71;38630:6;38609:71;;;;;;;;;;;;;;;;;:16;;:71;:20;:71::i;:::-;-1:-1:-1;;;;;38695:15:0;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;:39;;;38756:36;;;;;;;38589:91;;-1:-1:-1;38695:24:0;;:15;;38756:36;;;;;;;;;38522:282;;38816:33;38832:3;38837;38842:6;38816:15;:33::i;:::-;-1:-1:-1;38867:4:0;;38326:553;-1:-1:-1;;;;;38326:553:0:o;10519:128::-;10561:86;10519:128;:::o;9344:35::-;9377:2;9344:35;:::o;18320:60::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20590:39::-;;;;;;;;;;;;;;;:::o;19575:36::-;;;;;;;;;;;;;;;:::o;27947:80::-;27994:25;28000:10;28012:6;27994:5;:25::i;25174:797::-;-1:-1:-1;;;;;25278:28:0;;;;;;:17;:28;;;;;;;;25270:65;;;;;-1:-1:-1;;;25270:65:0;;;;;;;;;;;;-1:-1:-1;;;25270:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25354:26:0;;;;;;;:16;:26;;;;;;;;:37;;;;;;;;;;:42;;;;;;;;;;25346:75;;;;;-1:-1:-1;;;25346:75:0;;;;;;;;;;;;-1:-1:-1;;;25346:75:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25440:26:0;;;;;;;:16;:26;;;;;;;;:37;;;;;;;;;;:42;;;;;;;;;;25485:3;-1:-1:-1;25432:76:0;;;;;-1:-1:-1;;;25432:76:0;;;;;;;;;;;;-1:-1:-1;;;25432:76:0;;;;;;;;;;;;;;;25537:51;;;-1:-1:-1;;;25537:51:0;;-1:-1:-1;;;;;25537:51:0;;;;;;25582:4;25537:51;;;;;;25519:15;;25537:14;;:25;;:51;;;;;;;;;;;;;;;:14;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25537:51:0;25676:31;;;-1:-1:-1;;;25676:31:0;;;;25537:51;;-1:-1:-1;25599:12:0;;25614:94;;-1:-1:-1;;;;;25676:29:0;;;;;:31;;;;;25537:51;;25676:31;;;;;;;;:29;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25676:31:0;-1:-1:-1;;;;;25629:25:0;;;;;;;:15;25676:31;25629:25;;;;;;;:36;;;;;;;;;;:41;;;;;;;;;;25614:57;;:10;;:14;:57::i;:94::-;25599:109;;25719:29;25733:4;25740:7;25719:5;:29::i;:::-;-1:-1:-1;;;;;25789:12:0;;;;;;:7;:12;;;;;;;;25810:4;25789:27;;;;;;;;:40;;25821:7;25789:31;:40::i;:::-;-1:-1:-1;;;;;25759:12:0;;;;;;;:7;:12;;;;;;;;25780:4;25759:27;;;;;;;:70;;;;25840:25;;;;;;:15;:25;;;;;:36;;;;;;;;;;;;:41;;;;;;;;:45;;;;25903:60;;25941:12;25903:60;;;;;;;;;;25840:25;;25903:60;;;;;;;;;25174:797;;;;;:::o;19042:27::-;;;;:::o;28683:567::-;28764:10;28759:16;;;;:4;:16;;;;;;;;28751:46;;;;;-1:-1:-1;;;28751:46:0;;;;;;;;;;;;-1:-1:-1;;;28751:46:0;;;;;;;;;;;;;;;28826:4;;-1:-1:-1;;;;;28826:4:0;:18;28845:23;28858:9;28845:8;;;:12;:23::i;:::-;28826:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28826:43:0;28816:53;;;28808:88;;;;;-1:-1:-1;;;28808:88:0;;;;;;;;;;;;-1:-1:-1;;;28808:88:0;;;;;;;;;;;;;;;28944:79;;;;;;;;;;;;;;;;;;;;28952:10;-1:-1:-1;28944:19:0;;;:7;:19;;;;;28972:4;28944:34;;;;;;;;;;:79;;28983:6;;28944:38;:79::i;:::-;28915:10;28907:19;;;;:7;:19;;;;;;;;28935:4;28907:34;;;;;;;:116;;;;-1:-1:-1;;;;;29034:15:0;;;;:7;:15;;;29052:3;29034:21;;29066:23;29042:6;29082;29066:7;:23::i;:::-;-1:-1:-1;;;;;29124:21:0;;;;;;:13;:21;;;;;;:33;;29150:6;29124:25;:33::i;:::-;-1:-1:-1;;;;;29100:21:0;;;;;;:13;:21;;;;;;;;;:57;;;;29173:69;;29221:12;29173:69;;;;;;;;;;29100:21;;29201:10;;29194:4;;29173:69;;;;;;;;28683:567;;:::o;35133:673::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;35220:10:::1;35209:22:::0;;:10:::1;:22;::::0;;;;;;;-1:-1:-1;;;;;35209:31:0;::::1;::::0;;;;;;;;:36;;::::1;::::0;:77:::1;;-1:-1:-1::0;35260:10:0::1;35249:22;::::0;;;:10:::1;:22;::::0;;;;;;;-1:-1:-1;;;;;35249:31:0;::::1;::::0;;;;;;;;35283:3:::1;-1:-1:-1::0;35209:77:0::1;35201:109;;;::::0;;-1:-1:-1;;;35201:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35201:109:0;;;;;;;;;;;;;::::1;;35339:10;35330:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;35329:21;35321:52;;;::::0;;-1:-1:-1;;;35321:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35321:52:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;35390:24:0;::::1;35409:4;35390:24;35386:250;;;35462:10;35474:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35474:37:0;::::1;::::0;;;;;;;;35431:81:::1;::::0;35455:4:::1;::::0;35431:15:::1;:81::i;:::-;35386:250;;;35574:10;35586:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35586:37:0;::::1;::::0;;;;;;;;;35545:79:::1;::::0;35574:10;35545:28:::1;:79::i;:::-;35665:10;35708:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35708:37:0;::::1;::::0;;;;;;;;;35651:95;;35677:12:::1;35651:95:::0;;35691:15:::1;35651:95:::0;;::::1;::::0;;;;;;;;;;::::1;::::0;;;;;;;::::1;35774:10;35797:1;35757:28:::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35757:37:0;;;::::1;::::0;;;;;;;;:41;;;1808:1;2113:22;;35133:673::o;24344:822::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;-1:-1:-1;;;;;24457:28:0;::::1;::::0;;:17:::1;:28;::::0;;;;;::::1;;24449:65;;;::::0;;-1:-1:-1;;;24449:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24449:65:0;;;;;;;;;;;;;::::1;;24525:69;-1:-1:-1::0;;;;;24525:34:0;::::1;24560:10;24580:4;24587:6:::0;24525:34:::1;:69::i;:::-;24671:10;24653:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;24653:40:0;;::::1;::::0;;;;;;;;:45;;::::1;::::0;;;;;;;;:57:::1;::::0;24703:6;24653:49:::1;:57::i;:::-;24623:10;24605:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;24605:40:0;;::::1;::::0;;;;;;;;:45;;::::1;::::0;;;;;;;:105;24770:22:::1;:3;18033:6;24770:7;:22::i;:::-;24740:10;24723:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;24723:39:0;;::::1;::::0;;;;;;;;;:44;;::::1;::::0;;;;;;;;;:69;;;;24849:27;;;:15:::1;:27:::0;;;;;:38;;;;;;;;;:43;;;;;;;;;;:55:::1;::::0;24897:6;24849:47:::1;:55::i;:::-;24819:10;24803:27;::::0;;;:15:::1;:27;::::0;;;;;;;-1:-1:-1;;;;;24803:38:0;;::::1;::::0;;;;;;;;:43;;::::1;::::0;;;;;;;:101;;;;24922:4:::1;:9:::0;;;;::::1;;24921:10;:41:::0;::::1;;;-1:-1:-1::0;;;;;;24935:21:0;::::1;;::::0;;;:16:::1;:21;::::0;;;;;24959:3:::1;-1:-1:-1::0;24921:41:0::1;24917:167;;;24991:10;::::0;24979:39:::1;::::0;;-1:-1:-1;;;24979:39:0;;-1:-1:-1;;;;;24979:39:0;;::::1;;::::0;::::1;::::0;;;24991:10;;;::::1;::::0;24979:34:::1;::::0;:39;;;;;24991:10:::1;::::0;24979:39;;;;;;;24991:10;;24979:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25057:15;17930:7;25057:3;:7;;:15;;;;:::i;:::-;-1:-1:-1::0;;;;;25033:21:0;::::1;;::::0;;;:16:::1;:21;::::0;;;;:39;24917:167:::1;25125:10;-1:-1:-1::0;;;;;25099:59:0::1;25114:9;-1:-1:-1::0;;;;;25099:59:0::1;25109:3;-1:-1:-1::0;;;;;25099:59:0::1;;25137:12;25151:6;25099:59;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1808:1:0;2113:7;:22;-1:-1:-1;24344:822:0:o;36784:198::-;36859:10;;-1:-1:-1;;;;;36859:10:0;36845;:24;36837:50;;;;;-1:-1:-1;;;36837:50:0;;;;;;;;;;;;-1:-1:-1;;;36837:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36898:16:0;;36917:5;36898:16;;;:8;:16;;;;;;;;;:24;;-1:-1:-1;;36898:24:0;;;36938:36;;36961:12;36938:36;;;;;;;;;;;;;;36784:198;:::o;9544:45::-;;;;;;;;;;;;-1:-1:-1;;;;;9544:45:0;;:::o;21041:25::-;;;-1:-1:-1;;;;;21041:25:0;;:::o;11316:95::-;11371:32;11381:10;11393:9;11371;:32::i;28551:124::-;28623:4;;28603:64;;28615:6;;-1:-1:-1;;;;;28623:4:0;:18;28642:23;28655:9;28642:8;;;:12;:23::i;:::-;28623:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28623:43:0;28603:11;:64::i;17900:37::-;17930:7;17900:37;:::o;27116:673::-;27227:10;27208:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;27208:41:0;;;;;;;;;;;:46;;;;;;;;;;;27200:81;;;;;-1:-1:-1;;;27200:81:0;;;;;;;;;;;;-1:-1:-1;;;27200:81:0;;;;;;;;;;;;;;;27319:10;27300:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;27300:41:0;;;;;;;;;;;:46;;;;;;;;;;;27349:3;-1:-1:-1;27292:85:0;;;;;-1:-1:-1;;;27292:85:0;;;;;;;;;;;;-1:-1:-1;;;27292:85:0;;;;;;;;;;;;;;;27429:10;27388:12;27403:37;;;:25;:37;;;;;;;;-1:-1:-1;;;;;27403:48:0;;;;;;;;;;;;:53;;;;;;;;;;;;;27515:29;;;:17;:29;;;;;:40;;;;;;;;;:45;;;;;;;;;:58;;27403:53;27515:49;:58::i;:::-;27485:10;27467:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;27467:40:0;;;;;;;;;;;;:45;;;;;;;;;;;;:106;;;;27584:37;;;:25;:37;;;;;:48;;;;;;;;:53;;;;;;;;;:57;27652:51;;27467:40;27695:7;27652:30;:51::i;:::-;27747:10;-1:-1:-1;;;;;27721:60:0;27736:9;-1:-1:-1;;;;;27721:60:0;27731:3;-1:-1:-1;;;;;27721:60:0;;27759:12;27773:7;27721:60;;;;;;;;;;;;;;;;;;;;;;;;27116:673;;;:::o;19674:59::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;24049:177::-;24135:10;;-1:-1:-1;;;;;24135:10:0;24121;:24;24113:58;;;;;-1:-1:-1;;;24113:58:0;;;;;;;;;;;;-1:-1:-1;;;24113:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24182:28:0;24213:5;24182:28;;;:17;:28;;;;;:36;;-1:-1:-1;;24182:36:0;;;24049:177::o;18556:68::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;31323:93::-;31365:16;31401:7;31394:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31394:14:0;;;;;;;;;;;;;;;;;;;;;;;31323:93;:::o;32271:130::-;32323:4;32351:9;32340:8;:20;-1:-1:-1;;;;;;32378:15:0;;;;;:7;:15;;;;;;;;;32271:130::o;21722:354::-;-1:-1:-1;;;;;21793:9:0;;;;;;:4;:9;;;;;;;;21785:40;;;;;-1:-1:-1;;;21785:40:0;;;;;;;;;;;;-1:-1:-1;;;21785:40:0;;;;;;;;;;;;;;;21836:9;21848:28;18155:5;21848:18;:9;18118:2;21848:13;:18::i;:28::-;21836:40;-1:-1:-1;21907:42:0;21929:19;:9;21836:40;21929:13;:19::i;:::-;-1:-1:-1;;;;;21907:12:0;;;;;;:7;:12;;;;;;;;18255:3;21907:17;;;;;;;;;:21;:42::i;:::-;-1:-1:-1;;;;;21887:12:0;;;;;;;:7;:12;;;;;;;;18255:3;21887:17;;;;;;;:62;;;;21968:10;21960:34;;21968:10;;;;;21960:34;;;;;21989:4;;21960:34;;21887:12;21960:34;21989:4;21968:10;21960:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22012:56:0;;;22044:12;22012:56;;22058:9;22012:56;;;;;;22032:10;;-1:-1:-1;;;;;22012:56:0;;;18255:3;;22012:56;;;;;;;;;;;21722:354;;:::o;9811:49::-;;;;;;;;;;;;;;;:::o;38045:108::-;-1:-1:-1;;;;;38128:17:0;38104:4;38128:17;;;:8;:17;;;;;;;38045:108::o;31632:156::-;31721:10;;-1:-1:-1;;;;;31721:10:0;31707;:24;31699:58;;;;;-1:-1:-1;;;31699:58:0;;;;;;;;;;;;-1:-1:-1;;;31699:58:0;;;;;;;;;;;;;;;31768:4;:12;;-1:-1:-1;;;;;;31768:12:0;-1:-1:-1;;;;;31768:12:0;;;;;;;;;;31632:156::o;36526:246::-;36600:10;;-1:-1:-1;;;;;36600:10:0;36586;:24;36578:48;;;;;-1:-1:-1;;;36578:48:0;;;;;;;;;;;;-1:-1:-1;;;36578:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36637:15:0;;36655:5;36637:15;;;:7;:15;;;;;;;;:23;;-1:-1:-1;;36637:23:0;;;;;;36671:9;:17;;;;;:24;;;;;36637:23;36671:24;;;36735:5;:13;;;;;36720:4;36735:28;;;;;;;;;36706:58;;36720:4;36645:6;;36706:5;:58::i;20218:48::-;;;;;;;;;;;;;:::o;12263:1191::-;12342:4;12381:12;12367:11;:26;12359:53;;;;;-1:-1:-1;;;12359:53:0;;;;;;;;;;;;-1:-1:-1;;;12359:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;12447:23:0;;12425:19;12447:23;;;:14;:23;;;;;;;;12485:17;12481:58;;12526:1;12519:8;;;;;12481:58;-1:-1:-1;;;;;12599:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;12620:16:0;;12599:38;;;;;;;;;:48;;:63;-1:-1:-1;12595:147:0;;-1:-1:-1;;;;;12686:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;12707:16:0;;;;12686:38;;;;;;;;12722:1;12686:44;;;-1:-1:-1;12679:51:0;;12595:147;-1:-1:-1;;;;;12803:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;12799:88:0;;;12874:1;12867:8;;;;;12799:88;12899:12;-1:-1:-1;;12941:16:0;;12968:428;12983:5;12975:13;;:5;:13;;;12968:428;;;13047:1;13030:13;;;13029:19;;;13021:27;;13090:20;;:::i;:::-;-1:-1:-1;;;;;;13113:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;13090:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:27;;13156:229;;;13215:8;;;;-1:-1:-1;13208:15:0;;-1:-1:-1;;;;13208:15:0;13156:229;13249:12;;:26;;;-1:-1:-1;13245:140:0;;;13304:6;13296:14;;13245:140;;;13368:1;13359:6;:10;13351:18;;13245:140;12968:428;;;;;-1:-1:-1;;;;;;13413:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;12263:1191:0;;;;:::o;10730:39::-;;;;;;;;;;;;;:::o;31427:197::-;31501:10;;-1:-1:-1;;;;;31501:10:0;31487;:24;31479:52;;;;;-1:-1:-1;;;31479:52:0;;;;;;;;;;;;-1:-1:-1;;;31479:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31542:9:0;;31554:5;31542:9;;;:4;:9;;;;;;;;;:17;;-1:-1:-1;;31542:17:0;;;31575:41;;31591:12;31575:41;;31605:10;31575:41;;;;;;;;;;;;;;;;;;;;31427:197;:::o;18217:42::-;18255:3;18217:42;:::o;20078:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22084:627::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;-1:-1:-1;;;;;22186:9:0;::::1;::::0;;:4:::1;:9;::::0;;;;;::::1;;22178:40;;;::::0;;-1:-1:-1;;;22178:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22178:40:0;;;;;;;;;;;;;::::1;;22229:12;22251:6;-1:-1:-1::0;;;;;22244:24:0::1;;22277:4;22244:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;22244:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22244:39:0;;-1:-1:-1;22294:66:0::1;-1:-1:-1::0;;;;;22294:31:0;::::1;22326:10;22346:4;22353:6:::0;22294:31:::1;:66::i;:::-;22371:14;22388:52;22432:7;22395:6;-1:-1:-1::0;;;;;22388:24:0::1;;22421:4;22388:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;22388:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22388:39:0;;:43:::1;:52::i;:::-;22371:69:::0;-1:-1:-1;22451:9:0::1;22463:28;18155:5;22463:18;22371:69:::0;18118:2:::1;22463:13;:18::i;:28::-;22451:40:::0;-1:-1:-1;22525:45:0::1;22550:19;:9:::0;22451:40;22550:13:::1;:19::i;:::-;-1:-1:-1::0;;;;;22525:12:0;;::::1;;::::0;;;:7:::1;:12;::::0;;;;;;;:20;;::::1;::::0;;;;;;;;:24:::1;:45::i;:::-;-1:-1:-1::0;;;;;22502:12:0;;::::1;;::::0;;;:7:::1;:12;::::0;;;;;;;:20;;::::1;::::0;;;;;;;;:68;;;;22609:10;;22581:45:::1;::::0;22502:20;22609:10:::1;22621:4:::0;22581:27:::1;:45::i;:::-;22667:10;-1:-1:-1::0;;;;;22644:59:0::1;22662:3;-1:-1:-1::0;;;;;22644:59:0::1;22654:6;-1:-1:-1::0;;;;;22644:59:0::1;;22679:12;22693:9;22644:59;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1808:1:0;2113:7;:22;-1:-1:-1;;;;22084:627:0:o;29262:409::-;29357:10;29352:16;;;;:4;:16;;;;;;;;29344:42;;;;;-1:-1:-1;;;29344:42:0;;;;;;;;;;;;-1:-1:-1;;;29344:42:0;;;;;;;;;;;;;;;29427:72;;;;;;;;;;;;;;;;;;;;29435:10;-1:-1:-1;29427:19:0;;;:7;:19;;;;;-1:-1:-1;;;;;29427:27:0;;;;;;;;;;;;:72;;29459:6;;29427:31;:72::i;:::-;29405:10;29397:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;29397:27:0;;;;;;;;;;;;:102;;;;29510:15;;;;;:7;:15;;;;;29528:3;29510:21;;29542:43;;29518:6;29578;29542:27;:43::i;:::-;29601:62;;;29642:12;29601:62;;;;;;;;;;-1:-1:-1;;;;;29601:62:0;;;;29622:10;;29601:62;;;;;;;;;;;;;;29262:409;;;:::o;9242:39::-;;;;;;;;;;;;;;-1:-1:-1;;;9242:39:0;;;;:::o;18441:62::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;27797:138::-;27866:10;;-1:-1:-1;;;;;27866:10:0;27852;:24;27844:47;;;;;-1:-1:-1;;;27844:47:0;;;;;;;;;;;;-1:-1:-1;;;27844:47:0;;;;;;;;;;;;;;;27908:10;;27902:25;;-1:-1:-1;;;;;27908:10:0;27920:6;27902:5;:25::i;18814:57::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;33131:743::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;33227:10:::1;33217:21:::0;;:9:::1;:21;::::0;;;;;::::1;;33216:22;33208:52;;;::::0;;-1:-1:-1;;;33208:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33208:52:0;;;;;;;;;;;;;::::1;;33303:13;:3;17816:6;33303:7;:13::i;:::-;33280:10;33271:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;33271:29:0;::::1;::::0;;;;;;;;:45;;;;33350:4:::1;33331:24;33327:354;;;33372:50;33388:10;33408:4;33415:6;33372:15;:50::i;:::-;33327:354;;;33455:12;33477:7;-1:-1:-1::0;;;;;33470:25:0::1;;33504:4;33470:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;33470:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33470:40:0;;-1:-1:-1;33525:67:0::1;-1:-1:-1::0;;;;;33525:32:0;::::1;33558:10;33578:4;33585:6:::0;33525:32:::1;:67::i;:::-;33616:53;33661:7;33623;-1:-1:-1::0;;;;;33616:25:0::1;;33650:4;33616:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;33616:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:53;33607:62;;33327:354;;33740:10;33727:24;::::0;;;:12:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;33727:33:0;::::1;::::0;;;;;;;;:45:::1;::::0;33765:6;33727:37:::1;:45::i;:::-;33704:10;33691:24;::::0;;;:12:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;33691:33:0;::::1;::::0;;;;;;;;;:81;;;;33828:20;;;:8:::1;:20:::0;;;;;:29;;;;;;;;;;;33788:78;;33814:12:::1;33788:78:::0;;;;::::1;::::0;;;;;;;;;33704:10;;33788:78:::1;::::0;;;;;;;;::::1;-1:-1:-1::0;;1808:1:0;2113:7;:22;33131:743::o;34753:368::-;34853:15;:3;17930:7;34853;:15::i;:::-;34830:10;34819:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;34819:31:0;;;;;;;;;:49;;;;34879:36;;34842:7;;34908:6;34879:7;:36::i;:::-;34983:10;34966:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;34966:37:0;;;;;;;;;;:49;;35008:6;34966:41;:49::i;:::-;34943:10;34926:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;34926:37:0;;;;;;;;;;;:89;;;;35073:22;;;:10;:22;;;;;:31;;;;;;;;;;;35031:82;;35059:12;35031:82;;;;;;;;;;;;;;34943:10;;35031:82;;;;;;;;;;34753:368;;:::o;38167:147::-;38227:4;38244:40;38260:10;38272:3;38277:6;38244:15;:40::i;:::-;-1:-1:-1;38302:4:0;38167:147;;;;:::o;31800:170::-;31886:10;;-1:-1:-1;;;;;31886:10:0;31872;:24;31864:56;;;;;-1:-1:-1;;;31864:56:0;;;;;;;;;;;;-1:-1:-1;;;31864:56:0;;;;;;;;;;;;;;;31931:17;:31;;-1:-1:-1;;;;;;31931:31:0;-1:-1:-1;;;;;31931:31:0;;;;;;;;;;31800:170::o;19243:40::-;;;;;;;;;;;;;;;:::o;33887:99::-;33932:16;33968:10;33961:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33961:17:0;;;;;;;;;;;;;;;;;;;;;;33887:99;:::o;12035:220::-;-1:-1:-1;;;;;12139:23:0;;12100:4;12139:23;;;:14;:23;;;;;;;;12180:16;:67;;12246:1;12180:67;;;-1:-1:-1;;;;;12199:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;12220:16:0;;12199:38;;;;;;;;12235:1;12199:44;;12180:67;12173:74;12035:220;-1:-1:-1;;;12035:220:0:o;23746:295::-;23833:10;;-1:-1:-1;;;;;23833:10:0;23819;:24;23811:59;;;;;-1:-1:-1;;;23811:59:0;;;;;;;;;;;;-1:-1:-1;;;23811:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23890:28:0;;;;;;:17;:28;;;;;;;;23889:29;23881:65;;;;;-1:-1:-1;;;23881:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23957:28:0;;;;;:17;:28;;;;;:35;;-1:-1:-1;;23957:35:0;23988:4;23957:35;;;;;;24003:14;:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;24003:30:0;;;;;;23746:295::o;19936:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17788:34::-;17816:6;17788:34;:::o;11419:604::-;11566:57;;;10364:65;11566:57;;;;;;;;-1:-1:-1;;;;;11566:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11556:68;;;;;;-1:-1:-1;;;11662:57:0;;;;11691:15;11662:57;;;;;;;;;;;;;;;;;;;;;;;;;;;11652:68;;;;;;;;;11535:18;11751:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11556:68;;11652;11535:18;;11751:26;;;;;;;-1:-1:-1;;11751:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11751:26:0;;-1:-1:-1;;11751:26:0;;;-1:-1:-1;;;;;;;11796:23:0;;11788:54;;;;;-1:-1:-1;;;11788:54:0;;;;;;;;;;;;-1:-1:-1;;;11788:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11870:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;11861:28;;11853:61;;;;;-1:-1:-1;;;11853:61:0;;;;;;;;;;;;-1:-1:-1;;;11853:61:0;;;;;;;;;;;;;;;11940:6;11933:3;:13;;11925:48;;;;;-1:-1:-1;;;11925:48:0;;;;;;;;;;;;-1:-1:-1;;;11925:48:0;;;;;;;;;;;;;;;11984:31;11994:9;12005;11984;:31::i;:::-;11419:604;;;;;;;;;:::o;31044:267::-;31115:10;;-1:-1:-1;;;;;31115:10:0;31101;:24;31093:49;;;;;-1:-1:-1;;;31093:49:0;;;;;;;;;;;;-1:-1:-1;;;31093:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31162:9:0;;;;;;:4;:9;;;;;;;;31161:10;31153:40;;;;;-1:-1:-1;;;31153:40:0;;;;;;;;;;;;-1:-1:-1;;;31153:40:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31204:9:0;;;;;;:4;:9;;;;;;;;:16;;-1:-1:-1;;31204:16:0;31216:4;31204:16;;;;;;31231:7;:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31231:17:0;;;;;31264:39;;31278:12;31264:39;;31292:10;31264:39;;;;;;;;;;;;;;;;;;;;31044:267;:::o;18091:29::-;18118:2;18091:29;:::o;23058:289::-;23149:10;;-1:-1:-1;;;;;23149:10:0;23135;:24;23127:51;;;;;-1:-1:-1;;;23127:51:0;;;;;;;;;;;;-1:-1:-1;;;23127:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23204:12:0;;;;;;:5;:12;;;;;;:24;;23221:6;23204:16;:24::i;:::-;-1:-1:-1;;;;;23189:12:0;;;;;;:5;:12;;;;;:39;23253:11;;:23;;23269:6;23253:15;:23::i;:::-;23239:11;:37;-1:-1:-1;;;;;23302:16:0;;;;;;;:9;:16;;;;;;23287:52;;23302:16;;23332:6;23287:14;:52::i;:::-;23058:289;;:::o;19348:39::-;;;;;;;;;;;;;:::o;37361:676::-;-1:-1:-1;;;;;37571:13:0;;;37488:18;37571:13;;;:6;:13;;;;;;;;:15;;;;;;;;;37519:78;;10561:86;37519:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37509:89;;;;;;-1:-1:-1;;;37636:57:0;;;;37665:15;37636:57;;;;;;;;;;;;;;;;;;;;;;;;;;;37626:68;;;;;;;;;37725:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37509:89;;37626:68;;37571:15;;37725:26;;;;;37571:13;;-1:-1:-1;;37725:26:0;;;;;;;;;;37571:15;37725:26;;;;;;;;;;;;;;;-1:-1:-1;;37725:26:0;;-1:-1:-1;;37725:26:0;;;-1:-1:-1;;;;;;;37770:23:0;;37762:53;;;;;-1:-1:-1;;;37762:53:0;;;;;;;;;;;;-1:-1:-1;;;37762:53:0;;;;;;;;;;;;;;;37847:5;-1:-1:-1;;;;;37834:18:0;:9;-1:-1:-1;;;;;37834:18:0;;37826:51;;;;;-1:-1:-1;;;37826:51:0;;;;;;;;;;;;-1:-1:-1;;;37826:51:0;;;;;;;;;;;;;;;37903:8;37896:3;:15;;37888:43;;;;;-1:-1:-1;;;37888:43:0;;;;;;;;;;;;-1:-1:-1;;;37888:43:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37944:17:0;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;:35;;;37997:32;;;;;;;;;;;;;;;;;37361:676;;;;;;;;;;:::o;23355:380::-;23445:10;;-1:-1:-1;;;;;23445:10:0;23431;:24;23423:55;;;;;-1:-1:-1;;;23423:55:0;;;;;;;;;;;;-1:-1:-1;;;23423:55:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23497:9:0;;;;;;:4;:9;;;;;;;;23489:40;;;;;-1:-1:-1;;;23489:40:0;;;;;;;;;;;;-1:-1:-1;;;23489:40:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23570:12:0;;;;;;:7;:12;;;;;;;;23591:4;23570:27;;;;;;;;:39;;23602:6;23570:31;:39::i;:::-;-1:-1:-1;;;;;23540:12:0;;;;;;:7;:12;;;;;;;;23561:4;23540:27;;;;;;;;:69;;;;23620:28;;23641:6;23620:5;:28::i;:::-;23664:63;;;23706:12;23664:63;;;;;;;;;;23694:10;;-1:-1:-1;;;;;23664:63:0;;;23682:4;;23664:63;;;;;;;;;;;23355:380;;:::o;18942:37::-;;;;;;;;;;;;;:::o;36995:136::-;-1:-1:-1;;;;;37095:19:0;;;37071:4;37095:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;36995:136::o;22719:328::-;22807:10;;-1:-1:-1;;;;;22807:10:0;22793;:24;22785:51;;;;;-1:-1:-1;;;22785:51:0;;;;;;;;;;;;-1:-1:-1;;;22785:51:0;;;;;;;;;;;;;;;22847:31;22857:5;22872:4;22847:9;:31::i;:::-;-1:-1:-1;;;;;22904:12:0;;;;;;:5;:12;;;;;;:24;;22921:6;22904:16;:24::i;:::-;-1:-1:-1;;;;;22889:12:0;;;;;;:5;:12;;;;;:39;22953:11;;:23;;22969:6;22953:15;:23::i;:::-;22939:11;:37;-1:-1:-1;;;;;23014:16:0;;;23010:1;23014:16;;;:9;:16;;;;;;22987:52;;23014:16;23032:6;22987:14;:52::i;18690:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19798:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19135:41::-;;;;;;;;;;;;;:::o;36027:491::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;36140:10:::1;::::0;-1:-1:-1;;;;;36140:10:0::1;36126;:24;36118:48;;;::::0;;-1:-1:-1;;;36118:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36118:48:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;36181:23:0;::::1;36199:4;36181:23;36177:186;;;36252:10;::::0;36221:50:::1;::::0;36245:4:::1;::::0;-1:-1:-1;;;;;36252:10:0::1;36264:6:::0;36221:15:::1;:50::i;:::-;36177:186;;;36332:10;::::0;36304:47:::1;::::0;-1:-1:-1;;;;;36304:27:0;;::::1;::::0;36332:10:::1;36344:6:::0;36304:27:::1;:47::i;:::-;36373:31;36381:6;36389;36397;36373:7;:31::i;:::-;-1:-1:-1::0;;;;;36415:16:0;::::1;36434:5;36415:16:::0;;;:8:::1;:16;::::0;;;;;;;;:24;;-1:-1:-1;;36415:24:0::1;::::0;;36455:55;;36489:12:::1;36455:55:::0;;;;::::1;::::0;;;;;36477:10:::1;::::0;36415:16;36455:55:::1;::::0;;;;;;::::1;-1:-1:-1::0;;1808:1:0;2113:7;:22;-1:-1:-1;36027:491:0:o;10318:111::-;10364:65;10318:111;:::o;21185:49::-;;;;;;;;;;;;;;;:::o;18127:33::-;18155:5;18127:33;:::o;20832:27::-;;;;;;;;;;9672:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21073:32::-;;;-1:-1:-1;;;;;21073:32:0;;:::o;35819:196::-;35894:10;;-1:-1:-1;;;;;35894:10:0;35880;:24;35872:50;;;;;-1:-1:-1;;;35872:50:0;;;;;;;;;;;;-1:-1:-1;;;35872:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35933:16:0;;;;;;:8;:16;;;;;;;;;:23;;-1:-1:-1;;35933:23:0;35952:4;35933:23;;;35972:35;;35994:12;35972:35;;;;;;;;;;;;;;35819:196;:::o;32776:344::-;32885:4;32913:9;32902:8;:20;-1:-1:-1;;;;;32940:15:0;;;;;;:7;:15;;;;;;;;:66;;;;-1:-1:-1;;;;;;32976:13:0;;;;;;;:5;:13;;;;;;;;:19;;;;;;;;;;:30;-1:-1:-1;32976:30:0;32940:66;:118;;;;-1:-1:-1;;;;;;33027:21:0;;;;;;:13;:21;;;;;;:31;-1:-1:-1;33027:31:0;32940:118;:172;;;;-1:-1:-1;;;;;;33087:17:0;;;;;;:9;:17;;;;;;33109:3;;33079:26;;:3;;:7;:26::i;:::-;:33;;32940:172;32933:179;32776:344;-1:-1:-1;;;;;;32776:344:0:o;20701:41::-;;;;;;;;;;;;;;;:::o;20311:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24234:98::-;24274:16;24310:14;24303:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24303:21:0;;;;;;;;;;;;;;;;;;;;;;24234:98;:::o;91:148::-;143:4;169:5;;;193:6;;;;185:25;;;;;-1:-1:-1;;;185:25:0;;;;;;;;;;;;-1:-1:-1;;;185:25:0;;;;;;;;;;;;;;721:208;773:4;793:6;789:47;;-1:-1:-1;823:1:0;816:8;;789:47;855:5;;;859:1;855;:5;:1;879:5;;;;;:10;871:29;;;;;-1:-1:-1;;;871:29:0;;;;;;;;;;;;-1:-1:-1;;;871:29:0;;;;;;;;;;;;;;1175:103;1227:4;1251:19;1255:1;1258;1251:19;;;;;;;;;;;;;-1:-1:-1;;;1251:19:0;;;:3;:19::i;28250:293::-;-1:-1:-1;;;;;28319:17:0;;28311:49;;;;;-1:-1:-1;;;28311:49:0;;;;;;;;;;;;-1:-1:-1;;;28311:49:0;;;;;;;;;;;;;;;28387:51;;;;;;;;;;;-1:-1:-1;;;28387:51:0;;;;;;;;-1:-1:-1;;;;;28387:13:0;;-1:-1:-1;28387:13:0;;;:8;:13;;;;;;;;:51;;28405:6;;28387:17;:51::i;:::-;-1:-1:-1;;;;;28371:13:0;;;;;;:8;:13;;;;;:67;28463:11;;:23;;28479:6;28463:15;:23::i;:::-;28449:11;:37;28502:33;;;;;;;;28524:1;;-1:-1:-1;;;;;28502:33:0;;;-1:-1:-1;;;;;;;;;;;28502:33:0;;;;;;;;28250:293;;:::o;429:103::-;481:4;505:19;509:1;512;505:19;;;;;;;;;;;;;-1:-1:-1;;;505:19:0;;;:3;:19::i;34284:457::-;-1:-1:-1;;;;;34360:17:0;;;;;;:9;:17;;;;;;34356:146;;-1:-1:-1;;;;;34397:17:0;;;;;;:9;:17;;;;;;;;34417:3;34397:23;;;;34433:10;:23;;;;;;;;;;;;-1:-1:-1;;;;;;34433:23:0;;;;;;;34469:7;:15;;;;;:21;34356:146;-1:-1:-1;;;;;34512:15:0;;;;;;;:7;:15;;;;;;;;:22;;-1:-1:-1;;34512:22:0;34530:4;34512:22;;;34568:12;:20;;;;;:29;;;;;;;;;;34545:53;;34551:7;;34520:6;;34545:5;:53::i;:::-;-1:-1:-1;;;;;34609:20:0;;;34641:1;34609:20;;;:12;:20;;;;;;;;:29;;;;;;;;;;;;:33;;;34710:13;;;:5;:13;;;;;:22;;;;;;;;;;;34658:75;;34679:12;34658:75;;34693:15;34658:75;;;;;;;;;;;;;34609:20;;34658:75;;;;;;;;;;34284:457;;:::o;537:180::-;617:4;650:12;642:6;;;;634:29;;;;-1:-1:-1;;;634:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;683:5:0;;;537:180::o;38887:435::-;-1:-1:-1;;;;;38979:17:0;;38971:59;;;;;-1:-1:-1;;;38971:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39049:17:0;;39041:59;;;;;-1:-1:-1;;;39041:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39129:61;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39129:13:0;;-1:-1:-1;39129:13:0;;;:8;:13;;;;;;;;:61;;39147:6;;39129:17;:61::i;:::-;-1:-1:-1;;;;;39113:13:0;;;;;;;:8;:13;;;;;;;;:77;;;;39217:55;;;;;;;;;;;;;;;:13;;;;;;;;;;;:55;;39235:6;;39217:17;:55::i;:::-;-1:-1:-1;;;;;39201:13:0;;;;;;;:8;:13;;;;;;;;;:71;;;;39288:26;;;;;;;39201:13;;39288:26;;;;-1:-1:-1;;;;;;;;;;;39288:26:0;;;;;;;;38887:435;;;:::o;28035:207::-;28110:11;;:23;;28126:6;28110:15;:23::i;:::-;28096:11;:37;-1:-1:-1;;;;;28160:13:0;;;;;;:8;:13;;;;;;:25;;28178:6;28160:17;:25::i;:::-;-1:-1:-1;;;;;28144:13:0;;;;;;:8;:13;;;;;;;;:41;;;;28201:33;;;;;;;28144:13;;;;-1:-1:-1;;;;;;;;;;;28201:33:0;;;;;;;;;28035:207;;:::o;30067:309::-;-1:-1:-1;;;;;30163:12:0;;;;;;:5;:12;;;;;;;;30184:4;30163:27;;;;;;;;:40;;30195:7;30163:31;:40::i;:::-;-1:-1:-1;;;;;30133:12:0;;;;;;:5;:12;;;;;;;;30154:4;30133:27;;;;;;;:70;30228:11;;:24;;30244:7;30228:15;:24::i;:::-;30214:11;:38;-1:-1:-1;;;;;30290:16:0;;;30286:1;30290:16;;;:9;:16;;;;;;30263:53;;30290:16;30308:7;30263:14;:53::i;:::-;30332:36;;;;;;;;-1:-1:-1;;;;;30332:36:0;;;30341:10;;-1:-1:-1;;;;;;;;;;;30332:36:0;;;;;;;;30067:309;;:::o;3787:176::-;3896:58;;;-1:-1:-1;;;;;3896:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3896:58:0;-1:-1:-1;;;3896:58:0;;;3870:85;;3889:5;;3870:18;:85::i;:::-;3787:176;;;:::o;3971:204::-;4098:68;;;-1:-1:-1;;;;;4098:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4098:68:0;-1:-1:-1;;;4098:68:0;;;4072:95;;4091:5;;4072:18;:95::i;:::-;3971:204;;;;:::o;13462:407::-;-1:-1:-1;;;;;13565:20:0;;;13539:23;13565:20;;;:9;:20;;;;;;;;;13641:5;:16;;;;;13666:4;13641:31;;;;;;;;13620:16;;;:5;:16;;;;;;13565:20;;;13539:23;;13620:53;;:16;:20;:53::i;:::-;-1:-1:-1;;;;;13684:20:0;;;;;;;:9;:20;;;;;;:32;;-1:-1:-1;;;;;;13684:32:0;;;;;;;;;;13734:54;;13596:77;;-1:-1:-1;13684:32:0;13734:54;;;;;;13684:20;13734:54;13801:60;13816:15;13833:9;13844:16;13801:14;:60::i;30712:324::-;-1:-1:-1;;;;;30819:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;:34;;30845:7;30819:25;:34::i;:::-;-1:-1:-1;;;;;30795:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;;;:58;;;;30887:4;30868:24;30864:163;;;30923:11;;:24;;30939:7;30923:15;:24::i;:::-;30909:11;:38;-1:-1:-1;;;;;30977:16:0;;;;;;;:9;:16;;;;;;30962:53;;30977:16;;31007:7;13877:862;13980:6;-1:-1:-1;;;;;13970:16:0;:6;-1:-1:-1;;;;;13970:16:0;;;:30;;;;;13999:1;13990:6;:10;13970:30;13966:766;;;-1:-1:-1;;;;;14021:20:0;;;14017:357;;-1:-1:-1;;;;;14081:22:0;;14062:16;14081:22;;;:14;:22;;;;;;;;;14139:13;:60;;14198:1;14139:60;;;-1:-1:-1;;;;;14155:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;14175:13:0;;14155:34;;;;;;;;14187:1;14155:40;;14139:60;14122:77;;14218:14;14235:47;14249:6;14235:47;;;;;;;;;;;;;-1:-1:-1;;;14235:47:0;;;:9;:13;;:47;;;;;:::i;:::-;14218:64;;14301:57;14318:6;14326:9;14337;14348;14301:16;:57::i;:::-;14017:357;;;;-1:-1:-1;;;;;14394:20:0;;;14390:331;;-1:-1:-1;;;;;14454:22:0;;14435:16;14454:22;;;:14;:22;;;;;;;;;14512:13;:60;;14571:1;14512:60;;;-1:-1:-1;;;;;14528:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;14548:13:0;;14528:34;;;;;;;;14560:1;14528:40;;14512:60;14495:77;-1:-1:-1;14591:14:0;14608:21;14495:77;14622:6;14608:13;:21::i;:::-;14591:38;;14648:57;14665:6;14673:9;14684;14695;14648:16;:57::i;:::-;14390:331;;;13877:862;;;:::o;1282:177::-;1362:4;1394:12;1387:5;1379:28;;;;-1:-1:-1;;;1379:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1418:6;1431:1;1427;:5;;;;;;;1282:177;-1:-1:-1;;;;;1282:177:0:o;30384:320::-;-1:-1:-1;;;;;30489:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;:34;;30515:7;30489:25;:34::i;:::-;-1:-1:-1;;;;;30465:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;;;:58;;;;30557:4;30538:24;30534:163;;;30593:11;;:24;;30609:7;30593:15;:24::i;:::-;30579:11;:38;-1:-1:-1;;;;;30659:16:0;;;30655:1;30659:16;;;:9;:16;;;;;;30632:53;;30659:16;30677:7;30632:14;:53::i;244:180::-;324:4;350:5;;;382:12;374:6;;;;366:29;;;;-1:-1:-1;;;366:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;415:1:0;244:180;-1:-1:-1;;;;244:180:0:o;5196:614::-;5341:27;5349:5;-1:-1:-1;;;;;5341:25:0;;:27::i;:::-;5333:60;;;;;-1:-1:-1;;;5333:60:0;;;;;;;;;;;;-1:-1:-1;;;5333:60:0;;;;;;;;;;;;;;;5465:12;5479:23;5514:5;-1:-1:-1;;;;;5506:19:0;5526:4;5506:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5506:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5464:67;;;;5550:7;5542:52;;;;;-1:-1:-1;;;5542:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5606:17;;:21;5602:201;;5748:10;5737:30;;;;;;;;;;;;;;;-1:-1:-1;5737:30:0;5729:62;;;;;-1:-1:-1;;;5729:62:0;;;;;;;;;;;;-1:-1:-1;;;5729:62:0;;;;;;;;;;;;;;14747:598;14861:18;14882:49;14889:12;14882:49;;;;;;;;;;;;;;;;;:6;:49::i;:::-;14861:70;;14961:1;14946:12;:16;;;:85;;;;-1:-1:-1;;;;;;14966:22:0;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;14989:16:0;;14966:40;;;;;;;;;:50;:65;;;:50;;:65;14946:85;14942:329;;;-1:-1:-1;;;;;15046:22:0;;;;;;:11;:22;;;;;;;;:40;-1:-1:-1;;15069:16:0;;15046:40;;;;;;;;15084:1;15046:46;:57;;;14942:329;;;15171:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15132:22:0;;-1:-1:-1;15132:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;-1:-1:-1;;15132:72:0;;;;;;;;;;;;;15217:25;;;:14;:25;;;;;;:44;;15245:16;;;15217:44;;;;;;;;;;14942:329;15286:51;;;;;;;;;;;;;;-1:-1:-1;;;;;15286:51:0;;;;;;;;;;;14747:598;;;;;:::o;2856:374::-;2916:4;3139:20;;2982:66;3179:23;;;;;;:42;;-1:-1:-1;3206:15:0;;;3179:42;3171:51;2856:374;-1:-1:-1;;;;2856:374:0:o;15353:161::-;15428:6;15466:12;15459:5;15455:9;;15447:32;;;;-1:-1:-1;;;15447:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15504:1:0;;15353:161;-1:-1:-1;;15353:161:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://ccf99a096fb94a211e54a616aae056d15fe9255d96d45d31c2779c77ca9ab261
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.