ETH Price: $2,973.51 (-8.28%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Balance106327232020-08-10 14:27:321637 days ago1597069652IN
0x3509626C...07bC3E512
0 ETH0.01427151110.5
Process Proposal106327132020-08-10 14:25:291637 days ago1597069529IN
0x3509626C...07bC3E512
0 ETH0.01682992109
Process Guild Ac...106326882020-08-10 14:20:091637 days ago1597069209IN
0x3509626C...07bC3E512
0 ETH0.00859677105
Process Guild Ac...106326782020-08-10 14:18:371637 days ago1597069117IN
0x3509626C...07bC3E512
0 ETH0.01196128105
Process Whitelis...106326692020-08-10 14:17:131637 days ago1597069033IN
0x3509626C...07bC3E512
0 ETH0.01052535110.00000023
Submit Vote106261532020-08-09 14:03:321638 days ago1596981812IN
0x3509626C...07bC3E512
0 ETH0.0085513877
Submit Vote106221652020-08-08 23:35:021638 days ago1596929702IN
0x3509626C...07bC3E512
0 ETH0.0045533341
Sponsor Proposal106219752020-08-08 22:53:481638 days ago1596927228IN
0x3509626C...07bC3E512
0 ETH0.004714536.905
Submit Guild Act...106219602020-08-08 22:49:541638 days ago1596926994IN
0x3509626C...07bC3E512
0 ETH0.0099277536
Submit Vote106197462020-08-08 14:30:561639 days ago1596897056IN
0x3509626C...07bC3E512
0 ETH0.0063625260
Submit Vote106197452020-08-08 14:30:471639 days ago1596897047IN
0x3509626C...07bC3E512
0 ETH0.0075634260
Sponsor Proposal106160392020-08-08 0:46:301639 days ago1596847590IN
0x3509626C...07bC3E512
0 ETH0.0057102840
Submit Proposal106160302020-08-08 0:44:441639 days ago1596847484IN
0x3509626C...07bC3E512
0 ETH0.0098330840
Sponsor Proposal106159112020-08-08 0:17:451639 days ago1596845865IN
0x3509626C...07bC3E512
0 ETH0.0063878550
Submit Guild Act...106159072020-08-08 0:16:571639 days ago1596845817IN
0x3509626C...07bC3E512
0 ETH0.011746750
Sponsor Proposal106157432020-08-07 23:40:251639 days ago1596843625IN
0x3509626C...07bC3E512
0 ETH0.006259649
Submit Guild Act...106157362020-08-07 23:39:141639 days ago1596843554IN
0x3509626C...07bC3E512
0 ETH0.0145600752.8
Sponsor Proposal106038372020-08-06 3:46:201641 days ago1596685580IN
0x3509626C...07bC3E512
0 ETH0.0077972351
Submit Whitelist...106038332020-08-06 3:45:561641 days ago1596685556IN
0x3509626C...07bC3E512
0 ETH0.0097573751
Convert Shares T...106035852020-08-06 2:49:201641 days ago1596682160IN
0x3509626C...07bC3E512
0 ETH0.0019807541
Claim Shares106026242020-08-05 23:13:371641 days ago1596669217IN
0x3509626C...07bC3E512
0 ETH0.009168637
Withdraw Balance106025452020-08-05 22:56:341641 days ago1596668194IN
0x3509626C...07bC3E512
0 ETH0.0053336937
Ragequit106024682020-08-05 22:35:251641 days ago1596666925IN
0x3509626C...07bC3E512
0 ETH0.0019765333
Claim Shares106023382020-08-05 22:03:271641 days ago1596665007IN
0x3509626C...07bC3E512
0 ETH0.008177433
Process Proposal106018932020-08-05 20:24:371641 days ago1596659077IN
0x3509626C...07bC3E512
0 ETH0.0043972429.00000112
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
105837112020-08-03 0:55:011644 days ago1596416101  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Moloch

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-03
*/

pragma solidity 0.5.17;

library SafeMath { // wrappers over solidity arithmetic operations with added overflow checks
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }
    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }
    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0);
        uint256 c = a / b;

        return c;
    }
}

interface IERC20 { // brief interface for moloch erc20 token txs
    function balanceOf(address who) external view returns (uint256);
    
    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

contract ReentrancyGuard { // contract module that helps prevent reentrant calls to a function
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "reentrant call");

        _status = _ENTERED;
        
        _;
        
        _status = _NOT_ENTERED;
    }
}

interface IWETH { // brief interface for canonical ether token wrapper contract 
    function deposit() payable external;
    
    function transfer(address dst, uint wad) external returns (bool);
}

contract Moloch is ReentrancyGuard {
    using SafeMath for uint256;

    /***************
    GLOBAL CONSTANTS
    ***************/
    address public depositToken; // deposit token contract reference; default = wETH
    address public wrapperToken; // wrapper token contract reference for guild shares 
    address public wETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // canonical ether token wrapper contract reference
    
    uint256 public proposalDeposit; // default = 10 ETH (~$1,000 worth of ETH at contract deployment)
    uint256 public processingReward; // default = 0.1 - amount of ETH to give to whoever processes a proposal
    uint256 public periodDuration; // default = 17280 = 4.8 hours in seconds (5 periods per day)
    uint256 public votingPeriodLength; // default = 35 periods (7 days)
    uint256 public gracePeriodLength; // default = 35 periods (7 days)
    uint256 public dilutionBound; // default = 3 - maximum multiplier a YES voter will be obligated to pay in case of mass ragequit
    uint256 public summoningTime; // needed to determine the current period
    
    // HARD-CODED LIMITS
    // These numbers are quite arbitrary; they are small enough to avoid overflows when doing calculations
    // with periods or shares, yet big enough to not limit reasonable use cases.
    uint256 constant MAX_GUILD_BOUND = 10**36; // maximum bound for guild shares / loot (reflects guild token 18 decimal default)
    uint256 constant MAX_TOKEN_WHITELIST_COUNT = 400; // maximum number of whitelisted tokens
    uint256 constant MAX_TOKEN_GUILDBANK_COUNT = 200; // maximum number of tokens with non-zero balance in guildbank

    // BANK TOKEN DETAILS
    string private _name = "Moloch DAO v2x Bank";
    string private _symbol = "MOL-V2X";
    uint8 private _decimals = 18;

    // ***************
    // EVENTS
    // ***************
    event SubmitProposal(address indexed applicant, uint256 sharesRequested, uint256 lootRequested, uint256 tributeOffered, address tributeToken, uint256 paymentRequested, address paymentToken, bytes32 details, uint8[7] flags, bytes actionData, uint256 proposalId, address indexed delegateKey, address indexed memberAddress);
    event CancelProposal(uint256 indexed proposalId, address applicantAddress);
    event SponsorProposal(address indexed delegateKey, address indexed memberAddress, uint256 proposalId, uint256 proposalIndex, uint256 startingPeriod);
    event SubmitVote(uint256 proposalId, uint256 indexed proposalIndex, address indexed delegateKey, address indexed memberAddress, uint8 uintVote);
    event ProcessProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
    event ProcessWhitelistProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
    event ProcessGuildActionProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
    event ProcessGuildKickProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
    event UpdateDelegateKey(address indexed memberAddress, address newDelegateKey);
    event Transfer(address indexed from, address indexed to, uint256 amount); // guild token mint, burn & (loot) transfer tracking
    event Ragequit(address indexed memberAddress, uint256 sharesToBurn, uint256 lootToBurn);
    event TokensCollected(address indexed token, uint256 amountToCollect);
    event Withdraw(address indexed memberAddress, address token, uint256 amount);
    
    // *******************
    // INTERNAL ACCOUNTING
    // *******************
    address public constant GUILD = address(0xdead);
    address public constant ESCROW = address(0xbeef);
    address public constant TOTAL = address(0xbabe);
    
    uint256 public proposalCount; // total proposals submitted
    uint256 public totalShares; // total shares across all members
    uint256 public totalLoot; // total loot across all members
    uint256 public totalGuildBankTokens; // total tokens with non-zero balance in guild bank

    mapping(uint256 => Action) public actions; // proposalId => Action
    mapping(address => uint256) private balances; // guild token balances
    mapping(address => mapping(address => uint256)) private userTokenBalances; // userTokenBalances[userAddress][tokenAddress]

    enum Vote {
        Null, // default value, counted as abstention
        Yes,
        No
    }
    
    struct Member {
        address delegateKey; // the key responsible for submitting proposals and voting - defaults to member address unless updated
        uint8 exists; // always true (1) once a member has been created
        uint256 shares; // the # of voting shares assigned to this member
        uint256 loot; // the loot amount available to this member (combined with shares on ragekick) / transferable by guild token
        uint256 highestIndexYesVote; // highest proposal index # on which the member voted YES
        uint256 jailed; // set to proposalIndex of a passing guild kick proposal for this member, prevents voting on and sponsoring proposals
    }
    
    struct Action {
        address to; // target for function call
        uint256 value; // ether value, if any
        bytes data; // data load for function call
    }

    struct Proposal {
        address applicant; // the applicant who wishes to become a member - this key will be used for withdrawals (doubles as guild kick target for gkick proposals)
        address proposer; // the account that submitted the proposal (can be non-member)
        address sponsor; // the member that sponsored the proposal (moving it into the queue)
        address tributeToken; // tribute token contract reference
        address paymentToken; // payment token contract reference
        uint8[7] flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
        uint256 sharesRequested; // the # of shares the applicant is requesting
        uint256 lootRequested; // the amount of loot the applicant is requesting
        uint256 paymentRequested; // amount of tokens requested as payment
        uint256 tributeOffered; // amount of tokens offered as tribute
        uint256 startingPeriod; // the period in which voting can start for this proposal
        uint256 yesVotes; // the total number of YES votes for this proposal
        uint256 noVotes; // the total number of NO votes for this proposal
        uint256 maxTotalSharesAndLootAtYesVote; // the maximum # of total shares encountered at a yes vote on this proposal
        bytes32 details; // proposal details to add context for members 
        mapping(address => Vote) votesByMember; // the votes on this proposal by each member
    }

    mapping(address => bool) public tokenWhitelist;
    address[] public approvedTokens;

    mapping(address => bool) public proposedToWhitelist;
    mapping(address => bool) public proposedToKick;
    
    mapping(address => Member) public members;
    mapping(address => address) public memberAddressByDelegateKey;
    
    mapping(uint256 => Proposal) public proposals;

    uint256[] private proposalQueue;

    modifier onlyDelegate {
        require(members[memberAddressByDelegateKey[msg.sender]].shares > 0, "not delegate");
        _;
    }
    
    constructor(
        address _depositToken,
        address _wrapperToken,
        address[] memory _summoner,
        uint256[] memory _summonerShares,
        uint256 _summonerDeposit,
        uint256 _proposalDeposit,
        uint256 _processingReward,
        uint256 _periodDuration,
        uint256 _votingPeriodLength,
        uint256 _gracePeriodLength,
        uint256 _dilutionBound
    ) public {
        require(_summoner.length == _summonerShares.length, "summoner & shares must match");
        
        for (uint256 i = 0; i < _summoner.length; i++) {
            registerMember(_summoner[i], _summonerShares[i]);
            mintGuildToken(_summoner[i], _summonerShares[i]);
            totalShares += _summonerShares[i];
        }
        
        require(totalShares <= MAX_GUILD_BOUND, "guild maxed");
        
        tokenWhitelist[_depositToken] = true;
        approvedTokens.push(_depositToken);
        
        if (_summonerDeposit > 0) {
            totalGuildBankTokens += 1;
            unsafeAddToBalance(GUILD, _depositToken, _summonerDeposit);
        }
        
        depositToken = _depositToken;
        wrapperToken = _wrapperToken;
        proposalDeposit = _proposalDeposit;
        processingReward = _processingReward;
        periodDuration = _periodDuration;
        votingPeriodLength = _votingPeriodLength;
        gracePeriodLength = _gracePeriodLength;
        dilutionBound = _dilutionBound;
        summoningTime = now;
    }
    
    /*****************
    PROPOSAL FUNCTIONS
    *****************/
    function submitProposal(
        address applicant,
        uint256 sharesRequested,
        uint256 lootRequested,
        uint256 tributeOffered,
        address tributeToken,
        uint256 paymentRequested,
        address paymentToken,
        bytes32 details
    ) payable external nonReentrant returns (uint256 proposalId) {
        require(sharesRequested.add(lootRequested) <= MAX_GUILD_BOUND, "guild maxed");
        require(tokenWhitelist[tributeToken], "tributeToken not whitelisted");
        require(tokenWhitelist[paymentToken], "paymentToken not whitelisted");
        require(applicant != GUILD && applicant != ESCROW && applicant != TOTAL, "applicant unreservable");
        require(members[applicant].jailed == 0, "applicant jailed");

        if (tributeOffered > 0 && userTokenBalances[GUILD][tributeToken] == 0) {
            require(totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT, "guildbank maxed");
        }
        
        // collect tribute from proposer and store it in the Moloch until the proposal is processed / if ether, wrap into wETH
        if (tributeToken == wETH && msg.value > 0) {
            require(msg.value == tributeOffered, "insufficient ETH");
            IWETH(wETH).deposit();
            (bool success, ) = wETH.call.value(msg.value)("");
            require(success, "transfer failed");
            IWETH(wETH).transfer(address(this), msg.value);
        } else {
            require(IERC20(tributeToken).transferFrom(msg.sender, address(this), tributeOffered), "transfer failed");
        }
        
        unsafeAddToBalance(ESCROW, tributeToken, tributeOffered);

        uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]

        _submitProposal(applicant, sharesRequested, lootRequested, tributeOffered, tributeToken, paymentRequested, paymentToken, details, flags, "");
        
        return proposalCount - 1; // return proposalId - contracts calling submit might want it
    }
    
    function submitWhitelistProposal(address tokenToWhitelist, bytes32 details) external returns (uint256 proposalId) {
        require(tokenToWhitelist != address(0), "need token");
        require(!tokenWhitelist[tokenToWhitelist], "already whitelisted");
        require(approvedTokens.length < MAX_TOKEN_WHITELIST_COUNT, "whitelist maxed");

        uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
        flags[4] = 1; // whitelist

        _submitProposal(address(0), 0, 0, 0, tokenToWhitelist, 0, address(0), details, flags, "");
        
        return proposalCount - 1;
    }
    
    function submitGuildActionProposal( // stages arbitrary function calls for member vote (based on Raid Guild 'Minion')
        address actionTo,
        uint256 actionValue,
        bytes calldata actionData,
        bytes32 details
    ) external returns (uint256 proposalId) {
        
        uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
        flags[6] = 1; // guild action
        
        _submitProposal(actionTo, 0, 0, 0, address(0), actionValue, address(0), details, flags, actionData);
        
        return proposalCount - 1;
    }

    function submitGuildKickProposal(address memberToKick, bytes32 details) external returns (uint256 proposalId) {
        Member memory member = members[memberToKick];

        require(member.shares > 0 || member.loot > 0, "must have share or loot");
        require(members[memberToKick].jailed == 0, "already jailed");

        uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
        flags[5] = 1; // guild kick

        _submitProposal(memberToKick, 0, 0, 0, address(0), 0, address(0), details, flags, "");
        
        return proposalCount - 1;
    }
    
    function _submitProposal(
        address applicant,
        uint256 sharesRequested,
        uint256 lootRequested,
        uint256 tributeOffered,
        address tributeToken,
        uint256 paymentRequested,
        address paymentToken,
        bytes32 details,
        uint8[7] memory flags,
        bytes memory actionData
    ) internal {
        Proposal memory proposal = Proposal({
            applicant : applicant,
            proposer : msg.sender,
            sponsor : address(0),
            tributeToken : tributeToken,
            paymentToken : paymentToken,
            flags : flags,
            sharesRequested : sharesRequested,
            lootRequested : lootRequested,
            paymentRequested : paymentRequested,
            tributeOffered : tributeOffered,
            startingPeriod : 0,
            yesVotes : 0,
            noVotes : 0,
            maxTotalSharesAndLootAtYesVote : 0,
            details : details
        });
        
        // collect action data
        if (proposal.flags[6] == 1) {
            Action memory action = Action({
                to : applicant,
                value : paymentRequested,
                data : actionData
            });
                
            actions[proposalCount] = action;
        }
        
        proposals[proposalCount] = proposal;
        address memberAddress = memberAddressByDelegateKey[msg.sender];
        // NOTE: argument order matters, avoid stack too deep
        emit SubmitProposal(applicant, sharesRequested, lootRequested, tributeOffered, tributeToken, paymentRequested, paymentToken, details, flags, actionData, proposalCount, msg.sender, memberAddress);
        
        proposalCount += 1;
    }

    function sponsorProposal(uint256 proposalId) external nonReentrant onlyDelegate {
        // collect proposal deposit from sponsor and store it in the Moloch until the proposal is processed
        require(IERC20(depositToken).transferFrom(msg.sender, address(this), proposalDeposit), "transfer failed");
        unsafeAddToBalance(ESCROW, depositToken, proposalDeposit);

        Proposal storage proposal = proposals[proposalId];

        require(proposal.proposer != address(0), "unproposed");
        require(proposal.flags[0] == 0, "already sponsored");
        require(proposal.flags[3] == 0, "cancelled");
        require(members[proposal.applicant].jailed == 0, "applicant jailed");

        if (proposal.tributeOffered > 0 && userTokenBalances[GUILD][proposal.tributeToken] == 0) {
            require(totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT, "guildbank maxed");
        }

        // whitelist proposal
        if (proposal.flags[4] == 1) {
            require(!tokenWhitelist[address(proposal.tributeToken)], "already whitelisted");
            require(!proposedToWhitelist[address(proposal.tributeToken)], "already whitelist proposed");
            require(approvedTokens.length < MAX_TOKEN_WHITELIST_COUNT, "whitelist maxed");
            proposedToWhitelist[address(proposal.tributeToken)] = true;

        // guild kick proposal
        } else if (proposal.flags[5] == 1) {
            require(!proposedToKick[proposal.applicant], "kick already proposed");
            proposedToKick[proposal.applicant] = true;
        }

        // compute startingPeriod for proposal
        uint256 startingPeriod = max(
            getCurrentPeriod(),
            proposalQueue.length == 0 ? 0 : proposals[proposalQueue[proposalQueue.length - 1]].startingPeriod
        ) + 1;

        proposal.startingPeriod = startingPeriod;

        address memberAddress = memberAddressByDelegateKey[msg.sender];
        proposal.sponsor = memberAddress;

        proposal.flags[0] = 1; // sponsored

        // append proposal to the queue
        proposalQueue.push(proposalId);
        
        emit SponsorProposal(msg.sender, memberAddress, proposalId, proposalQueue.length - 1, startingPeriod);
    }

    // NOTE: In MolochV2 proposalIndex !== proposalId
    function submitVote(uint256 proposalIndex, uint8 uintVote) external onlyDelegate {
        address memberAddress = memberAddressByDelegateKey[msg.sender];
        Member storage member = members[memberAddress];

        require(proposalIndex < proposalQueue.length, "unproposed");
        Proposal storage proposal = proposals[proposalQueue[proposalIndex]];

        require(uintVote < 3, "not < 3");
        Vote vote = Vote(uintVote);

        require(getCurrentPeriod() >= proposal.startingPeriod, "voting pending");
        require(!hasVotingPeriodExpired(proposal.startingPeriod), "proposal expired");
        require(proposal.votesByMember[memberAddress] == Vote.Null, "member voted");
        require(vote == Vote.Yes || vote == Vote.No, "vote Yes or No");

        proposal.votesByMember[memberAddress] = vote;

        if (vote == Vote.Yes) {
            proposal.yesVotes = proposal.yesVotes + member.shares;

            // set highest index (latest) yes vote - must be processed for member to ragequit
            if (proposalIndex > member.highestIndexYesVote) {
                member.highestIndexYesVote = proposalIndex;
            }

            // set maximum of total shares encountered at a yes vote - used to bound dilution for yes voters
            if (totalSupply() > proposal.maxTotalSharesAndLootAtYesVote) {
                proposal.maxTotalSharesAndLootAtYesVote = totalSupply();
            }

        } else if (vote == Vote.No) {
            proposal.noVotes = proposal.noVotes + member.shares;
        }
     
        // NOTE: subgraph indexes by proposalId not proposalIndex since proposalIndex isn't set until it's been sponsored but proposal is created on submission
        emit SubmitVote(proposalQueue[proposalIndex], proposalIndex, msg.sender, memberAddress, uintVote);
    }

    function processProposal(uint256 proposalIndex) external {
        _validateProposalForProcessing(proposalIndex);

        uint256 proposalId = proposalQueue[proposalIndex];
        Proposal storage proposal = proposals[proposalId];

        require(proposal.flags[4] == 0 && proposal.flags[5] == 0 && proposal.flags[6] == 0, "not standard proposal");

        proposal.flags[1] = 1; // processed

        bool didPass = _didPass(proposalIndex);

        // Make the proposal fail if the new total number of shares and loot exceeds the limit
        if (totalSupply().add(proposal.sharesRequested).add(proposal.lootRequested) > MAX_GUILD_BOUND) {
            didPass = false;
        }

        // Make the proposal fail if it is requesting more tokens as payment than the available guild bank balance
        if (proposal.paymentRequested > userTokenBalances[GUILD][proposal.paymentToken]) {
            didPass = false;
        }

        // Make the proposal fail if it would result in too many tokens with non-zero balance in guild bank
        if (proposal.tributeOffered > 0 && userTokenBalances[GUILD][proposal.tributeToken] == 0 && totalGuildBankTokens >= MAX_TOKEN_GUILDBANK_COUNT) {
            didPass = false;
        }

        // PROPOSAL PASSED
        if (didPass == true) {
            proposal.flags[2] = 1; // didPass

            // if the applicant is already a member, add to their existing shares & loot
            if (members[proposal.applicant].exists == 1) {
                members[proposal.applicant].shares = members[proposal.applicant].shares + proposal.sharesRequested;
                members[proposal.applicant].loot = members[proposal.applicant].loot + proposal.lootRequested;

            // if the applicant is a new member, create a new record for them
            } else {
                registerMember(proposal.applicant, proposal.sharesRequested);
            }

            // mint new guild token, shares, loot 
            mintGuildToken(proposal.applicant, proposal.sharesRequested + proposal.lootRequested);
            totalShares += proposal.sharesRequested;
            totalLoot += proposal.lootRequested;

            // if the proposal tribute is the first tokens of its kind to make it into the guild bank, increment total guild bank tokens
            if (userTokenBalances[GUILD][proposal.tributeToken] == 0 && proposal.tributeOffered > 0) {
                totalGuildBankTokens += 1;
            }

            unsafeInternalTransfer(ESCROW, GUILD, proposal.tributeToken, proposal.tributeOffered);
            unsafeInternalTransfer(GUILD, proposal.applicant, proposal.paymentToken, proposal.paymentRequested);

            // if the proposal spends 100% of guild bank balance for a token, decrement total guild bank tokens
            if (userTokenBalances[GUILD][proposal.paymentToken] == 0 && proposal.paymentRequested > 0) {
                totalGuildBankTokens -= 1;
            }

        // PROPOSAL FAILED
        } else {
            // return all tokens to the proposer (not the applicant, because funds come from proposer)
            unsafeInternalTransfer(ESCROW, proposal.proposer, proposal.tributeToken, proposal.tributeOffered);
        }

        _returnDeposit(proposal.sponsor);
        
        emit ProcessProposal(proposalIndex, proposalId, didPass);
    }

    function processWhitelistProposal(uint256 proposalIndex) external {
        _validateProposalForProcessing(proposalIndex);

        uint256 proposalId = proposalQueue[proposalIndex];
        Proposal storage proposal = proposals[proposalId];

        require(proposal.flags[4] == 1, "not whitelist proposal");

        proposal.flags[1] = 1; // processed

        bool didPass = _didPass(proposalIndex);

        if (approvedTokens.length >= MAX_TOKEN_WHITELIST_COUNT) {
            didPass = false;
        }

        if (didPass == true) {
            proposal.flags[2] = 1; // didPass

            tokenWhitelist[address(proposal.tributeToken)] = true;
            approvedTokens.push(proposal.tributeToken);
        }

        proposedToWhitelist[address(proposal.tributeToken)] = false;

        _returnDeposit(proposal.sponsor);
        
        emit ProcessWhitelistProposal(proposalIndex, proposalId, didPass);
    }

    function processGuildActionProposal(uint256 proposalIndex) external returns (bytes memory) {
        _validateProposalForProcessing(proposalIndex);
        
        uint256 proposalId = proposalQueue[proposalIndex];
        Action storage action = actions[proposalId];
        Proposal storage proposal = proposals[proposalId];
        
        require(proposal.flags[6] == 1, "not action proposal");

        proposal.flags[1] = 1; // processed

        bool didPass = _didPass(proposalIndex);
        
        if (didPass == true) {
            proposal.flags[2] = 1; // didPass
            
            // execute call 
            (bool success, bytes memory retData) = action.to.call.value(action.value)(action.data);
            require(success, "call failure");
            
            return retData;
        }
        
        emit ProcessGuildActionProposal(proposalIndex, proposalId, didPass);
    }

    function processGuildKickProposal(uint256 proposalIndex) external {
        _validateProposalForProcessing(proposalIndex);

        uint256 proposalId = proposalQueue[proposalIndex];
        Proposal storage proposal = proposals[proposalId];

        require(proposal.flags[5] == 1, "not kick proposal");

        proposal.flags[1] = 1; // processed

        bool didPass = _didPass(proposalIndex);

        if (didPass == true) {
            proposal.flags[2] = 1; // didPass
            Member storage member = members[proposal.applicant];
            member.jailed = proposalIndex;

            // transfer shares to loot
            member.shares = 0; // revoke all shares
            member.loot += member.shares;
            totalShares -= member.shares;
            totalLoot += member.shares;
        }

        proposedToKick[proposal.applicant] = false;

        _returnDeposit(proposal.sponsor);
        
        emit ProcessGuildKickProposal(proposalIndex, proposalId, didPass);
    }

    function _didPass(uint256 proposalIndex) internal view returns (bool didPass) {
        Proposal memory proposal = proposals[proposalQueue[proposalIndex]];
        
        if (proposal.yesVotes > proposal.noVotes) {
            didPass = true;
        }
        
        // Make the proposal fail if the dilutionBound is exceeded
        if ((totalSupply().mul(dilutionBound)) < proposal.maxTotalSharesAndLootAtYesVote) {
            didPass = false;
        }

        // Make the proposal fail if the applicant is jailed
        // - for standard proposals, we don't want the applicant to get any shares/loot/payment
        // - for guild kick proposals, we should never be able to propose to kick a jailed member (or have two kick proposals active), so it doesn't matter
        if (members[proposal.applicant].jailed != 0) {
            didPass = false;
        }

        return didPass;
    }

    function _validateProposalForProcessing(uint256 proposalIndex) internal view {
        require(proposalIndex < proposalQueue.length, "no such proposal");
        Proposal memory proposal = proposals[proposalQueue[proposalIndex]];

        require(getCurrentPeriod() >= proposal.startingPeriod + votingPeriodLength + gracePeriodLength, "proposal not ready");
        require(proposal.flags[1] == 0, "proposal already processed");
        require(proposalIndex == 0 || proposals[proposalQueue[proposalIndex - 1]].flags[1] == 1, "previous proposal unprocessed");
    }

    function _returnDeposit(address sponsor) internal {
        unsafeInternalTransfer(ESCROW, msg.sender, depositToken, processingReward);
        unsafeInternalTransfer(ESCROW, sponsor, depositToken, proposalDeposit - processingReward);
    }

    function ragequit(uint256 sharesToBurn, uint256 lootToBurn) external {
        require(members[msg.sender].exists == 1, "not member");
        
        _ragequit(msg.sender, sharesToBurn, lootToBurn);
    }

    function _ragequit(address memberAddress, uint256 sharesToBurn, uint256 lootToBurn) internal {
        uint256 initialTotalSharesAndLoot = totalSupply();

        Member storage member = members[memberAddress];

        require(member.shares >= sharesToBurn, "insufficient shares");
        require(member.loot >= lootToBurn, "insufficient loot");

        require(canRagequit(member.highestIndexYesVote), "cannot ragequit until highest index proposal member voted YES on is processed");

        uint256 sharesAndLootToBurn = sharesToBurn.add(lootToBurn);

        // burn tokens, shares and loot
        member.shares -= sharesToBurn;
        member.loot -= lootToBurn;
        burnGuildToken(memberAddress, sharesAndLootToBurn);
        totalShares -= sharesToBurn;
        totalLoot -= lootToBurn;

        for (uint256 i = 0; i < approvedTokens.length; i++) {
            uint256 amountToRagequit = fairShare(userTokenBalances[GUILD][approvedTokens[i]], sharesAndLootToBurn, initialTotalSharesAndLoot);
            if (amountToRagequit > 0) { // gas optimization to allow a higher maximum token limit
                // deliberately not using safemath here to keep overflows from preventing the function execution (which would break ragekicks)
                // if a token overflows, it is because the supply was artificially inflated to oblivion, so we probably don't care about it anyways
                userTokenBalances[GUILD][approvedTokens[i]] -= amountToRagequit;
                userTokenBalances[memberAddress][approvedTokens[i]] += amountToRagequit;
            }
        }

        emit Ragequit(memberAddress, sharesToBurn, lootToBurn);
    }

    function ragekick(address memberToKick) external {
        Member storage member = members[memberToKick];

        require(member.jailed != 0, "not jailed");
        require(member.loot > 0, "no loot"); // note - should be impossible for jailed member to have shares
        require(canRagequit(member.highestIndexYesVote), "cannot ragequit until highest index proposal member voted YES on is processed");

        _ragequit(memberToKick, 0, member.loot);
    }
    
    function withdrawBalance(address token, uint256 amount) external nonReentrant {
        _withdrawBalance(token, amount);
    }

    function withdrawBalances(address[] calldata tokens, uint256[] calldata amounts, bool max) external nonReentrant {
        require(tokens.length == amounts.length, "tokens & amounts must match");

        for (uint256 i=0; i < tokens.length; i++) {
            uint256 withdrawAmount = amounts[i];
            if (max) { // withdraw the maximum balance
                withdrawAmount = userTokenBalances[msg.sender][tokens[i]];
            }

            _withdrawBalance(tokens[i], withdrawAmount);
        }
    }
    
    function _withdrawBalance(address token, uint256 amount) internal {
        require(userTokenBalances[msg.sender][token] >= amount, "insufficient balance");
        
        require(IERC20(token).transfer(msg.sender, amount), "transfer failed");
        unsafeSubtractFromBalance(msg.sender, token, amount);
        
        emit Withdraw(msg.sender, token, amount);
    }

    function collectTokens(address token) external {
        uint256 amountToCollect = IERC20(token).balanceOf(address(this)) - userTokenBalances[TOTAL][token];
        // only collect if 1) there are tokens to collect and 2) token is whitelisted
        require(amountToCollect > 0, "no tokens");
        require(tokenWhitelist[token], "not whitelisted");
        
        if (userTokenBalances[GUILD][token] == 0 && totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT) {totalGuildBankTokens += 1;}
        unsafeAddToBalance(GUILD, token, amountToCollect);

        emit TokensCollected(token, amountToCollect);
    }

    // NOTE: requires that delegate key which sent the original proposal cancels, msg.sender == proposal.proposer
    function cancelProposal(uint256 proposalId) external {
        Proposal storage proposal = proposals[proposalId];
        require(proposal.flags[0] == 0, "proposal already sponsored");
        require(proposal.flags[3] == 0, "proposal already cancelled");
        require(msg.sender == proposal.proposer, "only proposer cancels");

        proposal.flags[3] = 1; // cancelled
        
        unsafeInternalTransfer(ESCROW, proposal.proposer, proposal.tributeToken, proposal.tributeOffered);
        
        emit CancelProposal(proposalId, msg.sender);
    }

    function updateDelegateKey(address newDelegateKey) external {
        require(members[msg.sender].shares > 0, "not shareholder");
        require(newDelegateKey != address(0), "newDelegateKey zeroed");

        // skip checks if member is setting the delegate key to their member address
        if (newDelegateKey != msg.sender) {
            require(members[newDelegateKey].exists == 0, "cannot overwrite members");
            require(members[memberAddressByDelegateKey[newDelegateKey]].exists == 0, "cannot overwrite keys");
        }

        Member storage member = members[msg.sender];
        memberAddressByDelegateKey[member.delegateKey] = address(0);
        memberAddressByDelegateKey[newDelegateKey] = msg.sender;
        member.delegateKey = newDelegateKey;

        emit UpdateDelegateKey(msg.sender, newDelegateKey);
    }
    
    // can only ragequit if the latest proposal you voted YES on has been processed
    function canRagequit(uint256 highestIndexYesVote) public view returns (bool) {
        require(highestIndexYesVote < proposalQueue.length, "no such proposal");
        
        return proposals[proposalQueue[highestIndexYesVote]].flags[1] == 1;
    }

    function hasVotingPeriodExpired(uint256 startingPeriod) public view returns (bool) {
        return getCurrentPeriod() >= startingPeriod + votingPeriodLength;
    }
    
    /***************
    GETTER FUNCTIONS
    ***************/
    function max(uint256 x, uint256 y) internal pure returns (uint256) {
        return x >= y ? x : y;
    }
    
    function getCurrentPeriod() public view returns (uint256) {
        return now.sub(summoningTime).div(periodDuration);
    }
    
    function getMemberProposalVote(address memberAddress, uint256 proposalIndex) public view returns (Vote) {
        require(members[memberAddress].exists == 1, "not member");
        require(proposalIndex < proposalQueue.length, "unproposed");
        
        return proposals[proposalQueue[proposalIndex]].votesByMember[memberAddress];
    }

    function getProposalFlags(uint256 proposalId) public view returns (uint8[7] memory) {
        return proposals[proposalId].flags;
    }
    
    function getProposalQueueLength() public view returns (uint256) {
        return proposalQueue.length;
    }
    
    function getTokenCount() public view returns (uint256) {
        return approvedTokens.length;
    }

    function getUserTokenBalance(address user, address token) public view returns (uint256) {
        return userTokenBalances[user][token];
    }
    
    /***************
    HELPER FUNCTIONS
    ***************/
    function() external payable {}
    
    function fairShare(uint256 balance, uint256 shares, uint256 totalSharesAndLoot) internal pure returns (uint256) {
        require(totalSharesAndLoot != 0);

        if (balance == 0) { return 0; }

        uint256 prod = balance * shares;

        if (prod / balance == shares) { // no overflow in multiplication above?
            return prod / totalSharesAndLoot;
        }

        return (balance / totalSharesAndLoot) * shares;
    }
    
    function registerMember(address newMember, uint256 shares) internal {
        // if new member is already taken by a member's delegateKey, reset it to their member address
        if (members[memberAddressByDelegateKey[newMember]].exists == 1) {
            address memberToOverride = memberAddressByDelegateKey[newMember];
            memberAddressByDelegateKey[memberToOverride] = memberToOverride;
            members[memberToOverride].delegateKey = memberToOverride;
        }
        
        members[newMember] = Member({
            delegateKey : newMember,
            exists : 1, // 'true'
            shares : shares,
            loot : 0,
            highestIndexYesVote : 0,
            jailed : 0
        });

        memberAddressByDelegateKey[newMember] = newMember;
    }
    
    function unsafeAddToBalance(address user, address token, uint256 amount) internal {
        userTokenBalances[user][token] += amount;
        userTokenBalances[TOTAL][token] += amount;
    }
    
    function unsafeInternalTransfer(address from, address to, address token, uint256 amount) internal {
        unsafeSubtractFromBalance(from, token, amount);
        unsafeAddToBalance(to, token, amount);
    }

    function unsafeSubtractFromBalance(address user, address token, uint256 amount) internal {
        userTokenBalances[user][token] -= amount;
        userTokenBalances[TOTAL][token] -= amount;
    }
    
    /********************
    GUILD TOKEN FUNCTIONS
    ********************/
    // GETTER FUNCTIONS
    function balanceOf(address account) external view returns (uint256) { 
        return balances[account];
    }
    
    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

    function decimals() external view returns (uint8) {
        return _decimals;
    }
    
    function totalSupply() public view returns (uint256) { 
        return totalShares + totalLoot;
    }
    
    // BALANCE MGMT FUNCTIONS
    function burnGuildToken(address memberAddress, uint256 amount) internal {
        balances[memberAddress] -= amount;
        
        emit Transfer(memberAddress, address(0), amount);
    }
    
    function claimShares(uint256 amount) external nonReentrant {
        require(IERC20(wrapperToken).transferFrom(msg.sender, address(this), amount), "transfer failed");
        
        // if the sender is already a member, add to their existing shares 
        if (members[msg.sender].exists == 1) {
            members[msg.sender].shares = members[msg.sender].shares.add(amount);

            // if the sender is a new member, create a new record for them
            } else {
                registerMember(msg.sender, amount);
            }

        // mint new guild token & shares 
        mintGuildToken(msg.sender, amount);
        totalShares += amount;
            
        require(totalShares <= MAX_GUILD_BOUND, "guild maxed");

        if (userTokenBalances[GUILD][wrapperToken] == 0 && totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT) {totalGuildBankTokens += 1;}
        unsafeAddToBalance(GUILD, wrapperToken, amount);
    }
    
    function convertSharesToLoot(uint256 sharesToLoot) external {
        members[msg.sender].shares -= sharesToLoot;
        members[msg.sender].loot += sharesToLoot;
    }
    
    function mintGuildToken(address memberAddress, uint256 amount) internal {
        balances[memberAddress] += amount;
        
        emit Transfer(address(0), memberAddress, amount);
    }

    // LOOT TRANSFER FUNCTION
    function transfer(address receiver, uint256 lootToTransfer) external {
        members[msg.sender].loot = members[msg.sender].loot.sub(lootToTransfer);
        members[receiver].loot = members[receiver].loot.add(lootToTransfer);
        
        balances[msg.sender] -= lootToTransfer;
        balances[receiver] += lootToTransfer;
        
        emit Transfer(msg.sender, receiver, lootToTransfer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_depositToken","type":"address"},{"internalType":"address","name":"_wrapperToken","type":"address"},{"internalType":"address[]","name":"_summoner","type":"address[]"},{"internalType":"uint256[]","name":"_summonerShares","type":"uint256[]"},{"internalType":"uint256","name":"_summonerDeposit","type":"uint256"},{"internalType":"uint256","name":"_proposalDeposit","type":"uint256"},{"internalType":"uint256","name":"_processingReward","type":"uint256"},{"internalType":"uint256","name":"_periodDuration","type":"uint256"},{"internalType":"uint256","name":"_votingPeriodLength","type":"uint256"},{"internalType":"uint256","name":"_gracePeriodLength","type":"uint256"},{"internalType":"uint256","name":"_dilutionBound","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"applicantAddress","type":"address"}],"name":"CancelProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessGuildActionProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessGuildKickProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessWhitelistProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesToBurn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lootToBurn","type":"uint256"}],"name":"Ragequit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startingPeriod","type":"uint256"}],"name":"SponsorProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"applicant","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lootRequested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"indexed":false,"internalType":"address","name":"tributeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"indexed":false,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"bytes32","name":"details","type":"bytes32"},{"indexed":false,"internalType":"uint8[7]","name":"flags","type":"uint8[7]"},{"indexed":false,"internalType":"bytes","name":"actionData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"}],"name":"SubmitProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint8","name":"uintVote","type":"uint8"}],"name":"SubmitVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToCollect","type":"uint256"}],"name":"TokensCollected","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":"memberAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newDelegateKey","type":"address"}],"name":"UpdateDelegateKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"ESCROW","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GUILD","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"actions","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"approvedTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"}],"name":"canRagequit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancelProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimShares","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"collectTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"sharesToLoot","type":"uint256"}],"name":"convertSharesToLoot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"depositToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dilutionBound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"memberAddress","type":"address"},{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"getMemberProposalVote","outputs":[{"internalType":"enum Moloch.Vote","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposalFlags","outputs":[{"internalType":"uint8[7]","name":"","type":"uint8[7]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getProposalQueueLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"getUserTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gracePeriodLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"startingPeriod","type":"uint256"}],"name":"hasVotingPeriodExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"memberAddressByDelegateKey","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"members","outputs":[{"internalType":"address","name":"delegateKey","type":"address"},{"internalType":"uint8","name":"exists","type":"uint8"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"loot","type":"uint256"},{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"},{"internalType":"uint256","name":"jailed","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processGuildActionProposal","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processGuildKickProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processWhitelistProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"processingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"address","name":"applicant","type":"address"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"address","name":"sponsor","type":"address"},{"internalType":"address","name":"tributeToken","type":"address"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"internalType":"uint256","name":"lootRequested","type":"uint256"},{"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"internalType":"uint256","name":"startingPeriod","type":"uint256"},{"internalType":"uint256","name":"yesVotes","type":"uint256"},{"internalType":"uint256","name":"noVotes","type":"uint256"},{"internalType":"uint256","name":"maxTotalSharesAndLootAtYesVote","type":"uint256"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proposedToKick","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proposedToWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"memberToKick","type":"address"}],"name":"ragekick","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"sharesToBurn","type":"uint256"},{"internalType":"uint256","name":"lootToBurn","type":"uint256"}],"name":"ragequit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"sponsorProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"actionTo","type":"address"},{"internalType":"uint256","name":"actionValue","type":"uint256"},{"internalType":"bytes","name":"actionData","type":"bytes"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitGuildActionProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"memberToKick","type":"address"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitGuildKickProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"applicant","type":"address"},{"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"internalType":"uint256","name":"lootRequested","type":"uint256"},{"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"internalType":"address","name":"tributeToken","type":"address"},{"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"internalType":"uint8","name":"uintVote","type":"uint8"}],"name":"submitVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenToWhitelist","type":"address"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitWhitelistProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"summoningTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalGuildBankTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalLoot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"lootToTransfer","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newDelegateKey","type":"address"}],"name":"updateDelegateKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriodLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wETH","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bool","name":"max","type":"bool"}],"name":"withdrawBalances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wrapperToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

600380546001600160a01b03191673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905560c0604052601360808190527f4d6f6c6f63682044414f207632782042616e6b0000000000000000000000000060a09081526200006691600b91906200065d565b506040805180820190915260078082526609a9e985aac64b60cb1b60209092019182526200009791600c916200065d565b50600d805460ff19166012179055348015620000b257600080fd5b50604051620059cf380380620059cf8339818101604052610160811015620000d957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200010557600080fd5b9083019060208201858111156200011b57600080fd5b82518660208202830111640100000000821117156200013957600080fd5b82525081516020918201928201910280838360005b83811015620001685781810151838201526020016200014e565b50505050905001604052602001805160405193929190846401000000008211156200019257600080fd5b908301906020820185811115620001a857600080fd5b8251866020820283011164010000000082111715620001c657600080fd5b82525081516020918201928201910280838360005b83811015620001f5578181015183820152602001620001db565b505050509190910160409081526020830151908301516060840151608085015160a086015160c087015160e09097015160016000558a518c51969a509498509296919550939092146200028f576040805162461bcd60e51b815260206004820152601c60248201527f73756d6d6f6e6572202620736861726573206d757374206d6174636800000000604482015290519081900360640190fd5b60005b89518110156200033a57620002d68a8281518110620002ad57fe5b60200260200101518a8381518110620002c257fe5b60200260200101516200047560201b60201c565b620003108a8281518110620002e757fe5b60200260200101518a8381518110620002fc57fe5b6020026020010151620005a860201b60201c565b8881815181106200031d57fe5b6020908102919091010151600f8054909101905560010162000292565b506ec097ce7bc90715b34b9f1000000000600f54111562000390576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6001600160a01b038b166000818152601560205260408120805460ff191660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b031916909117905586156200041d576011805460010190556200041d61dead8c896001600160e01b03620005ff16565b600180546001600160a01b039c8d166001600160a01b031991821617909155600280549b909c169a169990991790995560049390935560059190915560065560075550505060089190915560095542600a5562000702565b6001600160a01b038083166000908152601a6020908152604080832054909316825260199052205460ff600160a01b9091041660011415620004fe576001600160a01b038083166000908152601a602090815260408083205490931680835283832080546001600160a01b03199081168317909155601990925292909120805490911690911790555b6040805160c0810182526001600160a01b03938416808252600160208084018281528486019687526000606086018181526080870182815260a088018381528784526019865289842098518954955160ff16600160a01b0260ff60a01b1991909d166001600160a01b031996871617169b909b17885598519487019490945592516002860155955160038501559551600490930192909255601a9094522080549091169091179055565b6001600160a01b0382166000818152601360209081526040808320805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b6001600160a01b0392831660009081526014602090815260408083209490951682529283528381208054830190557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c2590925291902080549091019055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006a057805160ff1916838001178555620006d0565b82800160010185558215620006d0579182015b82811115620006d0578251825591602001919060010190620006b3565b50620006de929150620006e2565b5090565b620006ff91905b80821115620006de5760008155600101620006e9565b90565b6152bd80620007126000396000f3fe6080604052600436106103815760003560e01c80637d5b6c72116101d1578063b2643aab11610102578063e1780345116100a0578063ea00d3311161006f578063ea00d33114610f21578063ea7b6ffd14610f4b578063f242862114610fa0578063f5d54c7714610fb557610381565b8063e178034514610e85578063e1a0e3fa14610eb8578063e63bc62d14610ee2578063e681c4aa14610f0c57610381565b8063c89039c5116100dc578063c89039c514610dfe578063da35c66414610e13578063dfdd369e14610e28578063e0a8f6f514610e5b57610381565b8063b2643aab14610d5d578063b470aade14610dbf578063c68e45b714610dd457610381565b80639746d9401161016f578063a3dc380011610149578063a3dc380014610cac578063a4d2d9ec14610cd6578063a9059cbb14610d0f578063afe5475f14610d4857610381565b80639746d94014610c3a57806399653fbe14610c645780639d1722cb14610c9757610381565b80638a027690116101ab5780638a02769014610b565780638b15a60514610be65780639425a47614610bfb57806395d89b4114610c2557610381565b80637d5b6c7214610a6a57806383240f8314610a7f5780638340bbce14610b4157610381565b80633793ab3c116102b657806363858f2d11610254578063753d756311610223578063753d7563146109e357806378a8956714610a16578063797daf7014610a2b5780637a60964114610a4057610381565b806363858f2d146109275780636d4475eb1461093c57806370a082311461097557806373f8fd4b146109a857610381565b8063402c179411610290578063402c1794146107df5780634482394b1461081257806359999b41146108df578063635e99aa1461091257610381565b80633793ab3c146107595780633a98ef39146107835780633fc24bba1461079857610381565b80630d246214116103235780631dafede0116102fd5780631dafede0146106bc5780632582bf2a146106e657806327efc08614610719578063313ce5671461072e57610381565b80630d2462141461064657806315eb349e1461067757806318160ddd146106a757610381565b806306fdde031161035f57806306fdde03146104fc578063086146d21461058657806308ae4b0c1461059b5780630cf20cc91461060d57610381565b8063013cf08b1461038357806303e32fa114610478578063044a0ca81461049f575b005b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610fca565b604051808f6001600160a01b03166001600160a01b031681526020018e6001600160a01b03166001600160a01b031681526020018d6001600160a01b03166001600160a01b031681526020018c6001600160a01b03166001600160a01b031681526020018b6001600160a01b03166001600160a01b031681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b34801561048457600080fd5b5061048d611049565b60408051918252519081900360200190f35b3480156104ab57600080fd5b506104d8600480360360408110156104c257600080fd5b506001600160a01b03813516906020013561104f565b604051808260028111156104e857fe5b60ff16815260200191505060405180910390f35b34801561050857600080fd5b50610511611146565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054b578181015183820152602001610533565b50505050905090810190601f1680156105785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561059257600080fd5b5061048d6111dd565b3480156105a757600080fd5b506105ce600480360360208110156105be57600080fd5b50356001600160a01b031661120b565b604080516001600160a01b03909716875260ff9095166020870152858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561061957600080fd5b506103816004803603604081101561063057600080fd5b506001600160a01b03813516906020013561124b565b34801561065257600080fd5b5061065b6112ac565b604080516001600160a01b039092168252519081900360200190f35b34801561068357600080fd5b506103816004803603604081101561069a57600080fd5b50803590602001356112bb565b3480156106b357600080fd5b5061048d611325565b3480156106c857600080fd5b5061065b600480360360208110156106df57600080fd5b503561132f565b3480156106f257600080fd5b506103816004803603602081101561070957600080fd5b50356001600160a01b0316611356565b34801561072557600080fd5b5061065b611589565b34801561073a57600080fd5b5061074361158f565b6040805160ff9092168252519081900360200190f35b34801561076557600080fd5b506103816004803603602081101561077c57600080fd5b5035611598565b34801561078f57600080fd5b5061048d611764565b3480156107a457600080fd5b506107cb600480360360208110156107bb57600080fd5b50356001600160a01b031661176a565b604080519115158252519081900360200190f35b3480156107eb57600080fd5b5061065b6004803603602081101561080257600080fd5b50356001600160a01b031661177f565b34801561081e57600080fd5b506103816004803603606081101561083557600080fd5b810190602081018135600160201b81111561084f57600080fd5b82018360208201111561086157600080fd5b803590602001918460208302840111600160201b8311171561088257600080fd5b919390929091602081019035600160201b81111561089f57600080fd5b8201836020820111156108b157600080fd5b803590602001918460208302840111600160201b831117156108d257600080fd5b919350915035151561179a565b3480156108eb57600080fd5b506103816004803603602081101561090257600080fd5b50356001600160a01b03166118ef565b34801561091e57600080fd5b5061048d611ac5565b34801561093357600080fd5b5061048d611acb565b34801561094857600080fd5b5061048d6004803603604081101561095f57600080fd5b506001600160a01b038135169060200135611ad1565b34801561098157600080fd5b5061048d6004803603602081101561099857600080fd5b50356001600160a01b0316611c4c565b3480156109b457600080fd5b5061048d600480360360408110156109cb57600080fd5b506001600160a01b0381358116916020013516611c6b565b3480156109ef57600080fd5b506107cb60048036036020811015610a0657600080fd5b50356001600160a01b0316611c96565b348015610a2257600080fd5b5061048d611cab565b348015610a3757600080fd5b5061048d611cb1565b348015610a4c57600080fd5b5061038160048036036020811015610a6357600080fd5b5035611cb7565b348015610a7657600080fd5b5061048d611cdd565b348015610a8b57600080fd5b50610aa960048036036020811015610aa257600080fd5b5035611ce3565b60405180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b04578181015183820152602001610aec565b50505050905090810190601f168015610b315780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610b4d57600080fd5b5061048d611d99565b348015610b6257600080fd5b5061048d60048036036080811015610b7957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610ba857600080fd5b820183602082011115610bba57600080fd5b803590602001918460018302840111600160201b83111715610bdb57600080fd5b919350915035611d9f565b348015610bf257600080fd5b5061048d611e1c565b348015610c0757600080fd5b506107cb60048036036020811015610c1e57600080fd5b5035611e22565b348015610c3157600080fd5b50610511611e39565b348015610c4657600080fd5b5061038160048036036020811015610c5d57600080fd5b5035611e9a565b348015610c7057600080fd5b5061038160048036036040811015610c8757600080fd5b508035906020013560ff16612558565b348015610ca357600080fd5b5061048d612954565b348015610cb857600080fd5b506107cb60048036036020811015610ccf57600080fd5b503561295a565b348015610ce257600080fd5b5061048d60048036036040811015610cf957600080fd5b506001600160a01b038135169060200135612a02565b348015610d1b57600080fd5b5061038160048036036040811015610d3257600080fd5b506001600160a01b038135169060200135612b41565b348015610d5457600080fd5b5061048d612c17565b348015610d6957600080fd5b50610d8760048036036020811015610d8057600080fd5b5035612c1d565b604051808260e080838360005b83811015610dac578181015183820152602001610d94565b5050505090500191505060405180910390f35b348015610dcb57600080fd5b5061048d612c85565b348015610de057600080fd5b5061038160048036036020811015610df757600080fd5b5035612c8b565b348015610e0a57600080fd5b5061065b612ed7565b348015610e1f57600080fd5b5061048d612ee6565b348015610e3457600080fd5b5061038160048036036020811015610e4b57600080fd5b50356001600160a01b0316612eec565b348015610e6757600080fd5b5061038160048036036020811015610e7e57600080fd5b5035612fe2565b348015610e9157600080fd5b506107cb60048036036020811015610ea857600080fd5b50356001600160a01b031661317e565b348015610ec457600080fd5b5061038160048036036020811015610edb57600080fd5b5035613193565b348015610eee57600080fd5b5061038160048036036020811015610f0557600080fd5b50356132f6565b348015610f1857600080fd5b5061065b6136f7565b348015610f2d57600080fd5b5061051160048036036020811015610f4457600080fd5b50356136fd565b61048d6004803603610100811015610f6257600080fd5b506001600160a01b038135811691602081013591604082013591606081013591608082013581169160a08101359160c0820135169060e0013561392f565b348015610fac57600080fd5b5061065b613f2a565b348015610fc157600080fd5b5061065b613f39565b601b602052600090815260409020805460018201546002830154600384015460048501546006860154600787015460088801546009890154600a8a0154600b8b0154600c8c0154600d8d0154600e909d01546001600160a01b039c8d169d9b8d169c9a8b169b998b169a9098169896979596949593949293919290918e565b60055481565b6001600160a01b038216600090815260196020526040812054600160a01b900460ff166001146110b3576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b601c5482106110f6576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b601b6000601c848154811061110757fe5b6000918252602080832090910154835282810193909352604091820181206001600160a01b0387168252600f0190925290205460ff1690505b92915050565b600b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b820191906000526020600020905b8154815290600101906020018083116111b557829003601f168201915b505050505090505b90565b60006112066006546111fa600a5442613f3f90919063ffffffff16565b9063ffffffff613f5416565b905090565b601960205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03841694600160a01b90940460ff16939086565b60026000541415611294576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556112a38282613f76565b50506001600055565b6002546001600160a01b031681565b33600090815260196020526040902054600160a01b900460ff16600114611316576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b6113213383836140f5565b5050565b601054600f540190565b6016818154811061133c57fe5b6000918252602090912001546001600160a01b0316905081565b336000908152601960205260409020600101546113ac576040805162461bcd60e51b815260206004820152600f60248201526e3737ba1039b430b932b437b63232b960891b604482015290519081900360640190fd5b6001600160a01b0381166113ff576040805162461bcd60e51b81526020600482015260156024820152741b995dd1195b1959d85d1952d95e481e995c9bd959605a1b604482015290519081900360640190fd5b6001600160a01b0381163314611500576001600160a01b038116600090815260196020526040902054600160a01b900460ff1615611484576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206f7665727772697465206d656d626572730000000000000000604482015290519081900360640190fd5b6001600160a01b038181166000908152601a60209081526040808320549093168252601990522054600160a01b900460ff1615611500576040805162461bcd60e51b815260206004820152601560248201527463616e6e6f74206f7665727772697465206b65797360581b604482015290519081900360640190fd5b33600081815260196020908152604080832080546001600160a01b039081168552601a845282852080546001600160a01b031990811690915590871680865294839020805482168717905581541684178155815193845290519093927fde7b64a369e10562cc2e71f0f1f944eaf144b75fead6ecb51fac9c4dd693488592908290030190a25050565b61babe81565b600d5460ff1690565b6115a1816143b9565b6000601c82815481106115b057fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff1660011461162c576040805162461bcd60e51b81526020600482015260166024820152751b9bdd081dda1a5d195b1a5cdd081c1c9bdc1bdcd85b60521b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000611648846146a2565b6016549091506101901161165a575060005b600181151514156116f05760058201805462ff00001916620100001790556003820180546001600160a01b039081166000908152601560205260408120805460ff1916600190811790915592546016805494850181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899092018054929091166001600160a01b03199092169190911790555b60038201546001600160a01b039081166000908152601760205260409020805460ff1916905560028301546117259116614845565b6040805182151581529051849186917f2094fc13d2ecb0acd6861e82bd006c7e5ab6f312ec0c6cdfe3d1a01ee54d885a9181900360200190a350505050565b600f5481565b60186020526000908152604090205460ff1681565b601a602052600090815260409020546001600160a01b031681565b600260005414156117e3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260005583821461183c576040805162461bcd60e51b815260206004820152601b60248201527f746f6b656e73202620616d6f756e7473206d757374206d617463680000000000604482015290519081900360640190fd5b60005b848110156118e257600084848381811061185557fe5b90506020020135905082156118b4573360009081526014602052604081209088888581811061188057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205490505b6118d98787848181106118c357fe5b905060200201356001600160a01b031682613f76565b5060010161183f565b5050600160005550505050565b6001600160a01b03811660008181527fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c25602090815260408083205481516370a0823160e01b815230600482015291519394909390926370a082319260248082019391829003018186803b15801561196557600080fd5b505afa158015611979573d6000803e3d6000fd5b505050506040513d602081101561198f57600080fd5b5051039050806119d2576040805162461bcd60e51b81526020600482015260096024820152686e6f20746f6b656e7360b81b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16611a31576040805162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604482015290519081900360640190fd5b6001600160a01b03821660009081526000805160206152698339815191526020526040902054158015611a66575060c8601154105b15611a75576011805460010190555b611a8261dead838361488c565b6040805182815290516001600160a01b038416917f9381e53ffdc9733a6783a6f8665be3f89c231bb81a6771996ed553b4e75c0fe3919081900360200190a25050565b60105481565b60085481565b6000611adb614fcc565b506001600160a01b03838116600090815260196020908152604091829020825160c08101845281549485168152600160a01b90940460ff1691840191909152600181015491830182905260028101546060840152600381015460808401526004015460a0830152151580611b53575060008160600151115b611ba4576040805162461bcd60e51b815260206004820152601760248201527f6d7573742068617665207368617265206f72206c6f6f74000000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526019602052604090206004015415611c03576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a985a5b195960921b604482015290519081900360640190fd5b611c0b61500e565b600160a082015260408051602081019091526000808252611c3c91879190819081908190819081908c908a906148ea565b5050600e54600019019392505050565b6001600160a01b0381166000908152601360205260409020545b919050565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b60156020526000908152604090205460ff1681565b60165490565b601c5490565b336000908152601960205260409020600181018054839003905560020180549091019055565b600a5481565b60126020908152600091825260409182902080546001808301546002808501805488516101009582161595909502600019011691909104601f81018790048702840187019097528683526001600160a01b03909316959094919291830182828015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b5050505050905083565b60075481565b6000611da961500e565b6001816006602002019060ff16908160ff1681525050611e0a876000806000808b60008a898e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506148ea92505050565b5050600e546000190195945050505050565b60045481565b60006007548201611e316111dd565b101592915050565b600c8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b60026000541415611ee3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000908155338152601a60209081526040808320546001600160a01b031683526019909152902060010154611f50576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b60015460048054604080516323b872dd60e01b815233938101939093523060248401526044830191909152516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611fb057600080fd5b505af1158015611fc4573d6000803e3d6000fd5b505050506040513d6020811015611fda57600080fd5b505161201f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60015460045461203e9161beef916001600160a01b039091169061488c565b6000818152601b6020526040902060018101546001600160a01b0316612098576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b600581015460ff16156120e6576040805162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481cdc1bdb9cdbdc9959607a1b604482015290519081900360640190fd5b60058101546301000000900460ff1615612133576040805162461bcd60e51b815260206004820152600960248201526818d85b98d95b1b195960ba1b604482015290519081900360640190fd5b80546001600160a01b031660009081526019602052604090206004015415612195576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600081600901541180156121d0575060038101546001600160a01b031660009081526000805160206152698339815191526020526040902054155b1561221e5760c86011541061221e576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6005810154600160201b900460ff16600114156123855760038101546001600160a01b031660009081526015602052604090205460ff161561229d576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60038101546001600160a01b031660009081526017602052604090205460ff161561230f576040805162461bcd60e51b815260206004820152601a60248201527f616c72656164792077686974656c6973742070726f706f736564000000000000604482015290519081900360640190fd5b60165461019011612359576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b60038101546001600160a01b03166000908152601760205260409020805460ff1916600117905561242a565b600581015465010000000000900460ff166001141561242a5780546001600160a01b031660009081526018602052604090205460ff1615612405576040805162461bcd60e51b81526020600482015260156024820152741ada58dac8185b1c9958591e481c1c9bdc1bdcd959605a1b604482015290519081900360640190fd5b80546001600160a01b03166000908152601860205260409020805460ff191660011790555b60006124816124376111dd565b601c541561247957601c8054601b91600091600019810190811061245757fe5b90600052602060002001548152602001908152602001600020600a015461247c565b60005b614cc6565b6001908101600a8401819055336000818152601a60209081526040808320546002890180546001600160a01b0319166001600160a01b03909216918217905560058901805460ff191688179055601c80549788018155938490527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2119096018990559154825189815260001990910191810191909152808201849052905192945083927f2a383a979381335e3eb401ac01dd8083e024ff0256bf5338456ffc0063390bbd9181900360600190a3505060016000555050565b336000908152601a60209081526040808320546001600160a01b0316835260199091529020600101546125c1576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b336000908152601a60209081526040808320546001600160a01b03168084526019909252909120601c54841061262b576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b6000601b6000601c878154811061263e57fe5b90600052602060002001548152602001908152602001600020905060038460ff161061269b576040805162461bcd60e51b81526020600482015260076024820152666e6f74203c203360c81b604482015290519081900360640190fd5b60008460ff1660028111156126ac57fe5b905081600a01546126bb6111dd565b10156126ff576040805162461bcd60e51b815260206004820152600e60248201526d766f74696e672070656e64696e6760901b604482015290519081900360640190fd5b61270c82600a0154611e22565b15612751576040805162461bcd60e51b815260206004820152601060248201526f1c1c9bdc1bdcd85b08195e1c1a5c995960821b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f8301602052604081205460ff16600281111561277a57fe5b146127bb576040805162461bcd60e51b815260206004820152600c60248201526b1b595b58995c881d9bdd195960a21b604482015290519081900360640190fd5b60018160028111156127c957fe5b14806127e0575060028160028111156127de57fe5b145b612822576040805162461bcd60e51b815260206004820152600e60248201526d766f746520596573206f72204e6f60901b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f830160205260409020805482919060ff1916600183600281111561285357fe5b0217905550600181600281111561286657fe5b14156128b6576001830154600b830180549091019055600383015486111561289057600383018690555b81600d015461289d611325565b11156128b1576128ab611325565b600d8301555b6128db565b60028160028111156128c457fe5b14156128db576001830154600c8301805490910190555b836001600160a01b0316336001600160a01b0316877f804f03797630bf8b8a46b9371608abbf7d78a20df720e477bab641957ca68a20601c8a8154811061291e57fe5b906000526020600020015489604051808381526020018260ff1660ff1681526020019250505060405180910390a4505050505050565b60115481565b601c5460009082106129a6576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b601b6000601c84815481106129b757fe5b906000526020600020015481526020019081526020016000206005016001600781106129df57fe5b602091828204019190069054906101000a900460ff1660ff166001149050919050565b60006001600160a01b038316612a4c576040805162461bcd60e51b815260206004820152600a6024820152693732b2b2103a37b5b2b760b11b604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff1615612ab0576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60165461019011612afa576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b612b0261500e565b6001608082015260408051602081019091526000808252612b32918190819081908990829081908b908a906148ea565b5050600e546000190192915050565b33600090815260196020526040902060020154612b64908263ffffffff613f3f16565b336000908152601960205260408082206002908101939093556001600160a01b038516825290200154612b9d908263ffffffff614cdf16565b6001600160a01b0383166000818152601960209081526040808320600201949094553380835260138252848320805487900390558383529184902080548601905583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60095481565b612c2561500e565b6000828152601b6020526040808220815160e0810192839052926005909101916007918390855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612c4c575094979650505050505050565b60065481565b60026000541415612cd4576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260008181559054604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216926323b872dd926064808401936020939083900390910190829087803b158015612d3457600080fd5b505af1158015612d48573d6000803e3d6000fd5b505050506040513d6020811015612d5e57600080fd5b5051612da3576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b33600090815260196020526040902054600160a01b900460ff1660011415612e005733600090815260196020526040902060010154612de8908263ffffffff614cdf16565b33600090815260196020526040902060010155612e0a565b612e0a3382614cf1565b612e143382614e23565b600f80548201908190556ec097ce7bc90715b34b9f10000000001015612e6f576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6002546001600160a01b031660009081526000805160206152698339815191526020526040902054158015612ea6575060c8601154105b15612eb5576011805460010190555b600254612ecf9061dead906001600160a01b03168361488c565b506001600055565b6001546001600160a01b031681565b600e5481565b6001600160a01b03811660009081526019602052604090206004810154612f47576040805162461bcd60e51b815260206004820152600a6024820152691b9bdd081a985a5b195960b21b604482015290519081900360640190fd5b6000816002015411612f8a576040805162461bcd60e51b81526020600482015260076024820152661b9bc81b1bdbdd60ca1b604482015290519081900360640190fd5b612f97816003015461295a565b612fd25760405162461bcd60e51b815260040180806020018281038252604d81526020018061521c604d913960600191505060405180910390fd5b61132182600083600201546140f5565b6000818152601b60205260409020600581015460ff161561304a576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792073706f6e736f726564000000000000604482015290519081900360640190fd5b60058101546301000000900460ff16156130ab576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792063616e63656c6c6564000000000000604482015290519081900360640190fd5b60018101546001600160a01b03163314613104576040805162461bcd60e51b81526020600482015260156024820152746f6e6c792070726f706f7365722063616e63656c7360581b604482015290519081900360640190fd5b60058101805463ff000000191663010000001790556001810154600382015460098301546131449261beef926001600160a01b0391821692911690614e7a565b60408051338152905183917fc215fed6680bb02d323dc3f8b8f85241572607538426059c9232601bd293c3be919081900360200190a25050565b60176020526000908152604090205460ff1681565b61319c816143b9565b6000601c82815481106131ab57fe5b600091825260208083209190910154808352601b909152604090912060058101549192509065010000000000900460ff16600114613224576040805162461bcd60e51b81526020600482015260116024820152701b9bdd081ada58dac81c1c9bdc1bdcd85b607a1b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000613240846146a2565b9050600181151514156132855760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040812060048101869055600101555b81546001600160a01b039081166000908152601860205260409020805460ff1916905560028301546132b79116614845565b6040805182151581529051849186917f0e347d00d3e9e6cdff9e6c09092c9ff1bd448f9b3dfb7091b30939ec5e7a3c739181900360200190a350505050565b6132ff816143b9565b6000601c828154811061330e57fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff161580156133585750600581015465010000000000900460ff16155b8015613373575060058101546601000000000000900460ff16155b6133bc576040805162461bcd60e51b81526020600482015260156024820152741b9bdd081cdd185b99185c99081c1c9bdc1bdcd85b605a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006133d8846146a2565b90506ec097ce7bc90715b34b9f100000000061340e83600701546134028560060154613402611325565b9063ffffffff614cdf16565b1115613418575060005b60048201546001600160a01b03166000908152600080516020615269833981519152602052604090205460088301541115613451575060005b6000826009015411801561348c575060038201546001600160a01b031660009081526000805160206152698339815191526020526040902054155b801561349b575060c860115410155b156134a4575060005b600181151514156136765760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040902054600160a01b900460ff166001141561353957600682015482546001600160a01b0390811660009081526019602052604080822060010180549094019093556007850154855490921681529190912060020180549091019055613553565b81546006830154613553916001600160a01b031690614cf1565b815460078301546006840154613573926001600160a01b03169101614e23565b6006820154600f80549091019055600782015460108054909101905560038201546001600160a01b0316600090815260008051602061526983398151915260205260409020541580156135ca575060008260090154115b156135d9576011805460010190555b600382015460098301546135fe9161beef9161dead916001600160a01b031690614e7a565b8154600483015460088401546136269261dead926001600160a01b0391821692911690614e7a565b60048201546001600160a01b031660009081526000805160206152698339815191526020526040902054158015613661575060008260080154115b1561367157601180546000190190555b6136a1565b6001820154600383015460098401546136a19261beef926001600160a01b0391821692911690614e7a565b60028201546136b8906001600160a01b0316614845565b6040805182151581529051849186917f86f74240ecee9e4230d26ff92e17fee978460d9c0f78f5c88b2864c9e7a494279181900360200190a350505050565b61beef81565b6060613708826143b9565b6000601c838154811061371757fe5b600091825260208083209190910154808352601282526040808420601b909352909220600581015492935090916601000000000000900460ff1660011461379b576040805162461bcd60e51b81526020600482015260136024820152721b9bdd081858dd1a5bdb881c1c9bdc1bdcd85b606a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006137b7866146a2565b9050600181151514156138ed5760058201805462ff00001916620100001790558254600184810154604051600287810180546000966060966001600160a01b039091169594929383928592600019908216156101000201160480156138535780601f10613831576101008083540402835291820191613853565b820191906000526020600020905b81548152906001019060200180831161383f575b505091505060006040518083038185875af1925050503d8060008114613895576040519150601f19603f3d011682016040523d82523d6000602084013e61389a565b606091505b5091509150816138e0576040805162461bcd60e51b815260206004820152600c60248201526b63616c6c206661696c75726560a01b604482015290519081900360640190fd5b9550611c66945050505050565b6040805182151581529051859188917facc0e8fc789590d1cf21203e356b7b1cd28911b1309c24883c5fcdc305b497a39181900360200190a350505050919050565b60006002600054141561397a576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556ec097ce7bc90715b34b9f100000000061399f898963ffffffff614cdf16565b11156139e0576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff16613a4d576040805162461bcd60e51b815260206004820152601c60248201527f74726962757465546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff16613aba576040805162461bcd60e51b815260206004820152601c60248201527f7061796d656e74546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03891661dead14801590613ae057506001600160a01b03891661beef14155b8015613af757506001600160a01b03891661babe14155b613b41576040805162461bcd60e51b81526020600482015260166024820152756170706c6963616e7420756e72657365727661626c6560501b604482015290519081900360640190fd5b6001600160a01b03891660009081526019602052604090206004015415613ba2576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600086118015613bd557506001600160a01b03851660009081526000805160206152698339815191526020526040902054155b15613c235760c860115410613c23576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6003546001600160a01b038681169116148015613c405750600034115b15613e1657853414613c8c576040805162461bcd60e51b815260206004820152601060248201526f0d2dce6eaccccd2c6d2cadce8408aa8960831b604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cdc57600080fd5b505af1158015613cf0573d6000803e3d6000fd5b5050600354604051600093506001600160a01b03909116915034908381818185875af1925050503d8060008114613d43576040519150601f19603f3d011682016040523d82523d6000602084013e613d48565b606091505b5050905080613d90576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6003546040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015613de357600080fd5b505af1158015613df7573d6000803e3d6000fd5b505050506040513d6020811015613e0d57600080fd5b50613eda915050565b604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b158015613e6b57600080fd5b505af1158015613e7f573d6000803e3d6000fd5b505050506040513d6020811015613e9557600080fd5b5051613eda576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b613ee761beef868861488c565b613eef61500e565b613f108a8a8a8a8a8a8a8a89604051806020016040528060008152506148ea565b5050600e5460001901600160005598975050505050505050565b6003546001600160a01b031681565b61dead81565b600082821115613f4e57600080fd5b50900390565b6000808211613f6257600080fd5b6000828481613f6d57fe5b04949350505050565b3360009081526014602090815260408083206001600160a01b0386168452909152902054811115613fe5576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561403457600080fd5b505af1158015614048573d6000803e3d6000fd5b505050506040513d602081101561405e57600080fd5b50516140a3576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6140ae338383614e96565b604080516001600160a01b038416815260208101839052815133927f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb928290030190a25050565b60006140ff611325565b6001600160a01b038516600090815260196020526040902060018101549192509084111561416a576040805162461bcd60e51b8152602060048201526013602482015272696e73756666696369656e742073686172657360681b604482015290519081900360640190fd5b82816002015410156141b7576040805162461bcd60e51b81526020600482015260116024820152701a5b9cdd59999a58da595b9d081b1bdbdd607a1b604482015290519081900360640190fd5b6141c4816003015461295a565b6141ff5760405162461bcd60e51b815260040180806020018281038252604d81526020018061521c604d913960600191505060405180910390fd5b6000614211858563ffffffff614cdf16565b6001830180548790039055600283018054869003905590506142338682614ef6565b600f8054869003905560108054859003905560005b60165481101561436d5761dead60009081526014602052601680546142b091600080516020615269833981519152918491908690811061428457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548487614f51565b905080156143645761dead60009081526014602052601680548392600080516020615269833981519152929091869081106142e757fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220805495909503909455918b168252601490925290812060168054849391908690811061433857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020805490910190555b50600101614248565b50604080518681526020810186905281516001600160a01b038916927fcad1a1c68982832d9abc314de8a1e5d5e8c81b0588961e360766736d10c3be1a928290030190a2505050505050565b601c548110614402576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b61440a61502c565b601b6000601c848154811061441b57fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116144a15790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250509050600854600754826101400151010161454a6111dd565b1015614592576040805162461bcd60e51b815260206004820152601260248201527170726f706f73616c206e6f7420726561647960701b604482015290519081900360640190fd5b60a08101516020015160ff16156145f0576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792070726f636573736564000000000000604482015290519081900360640190fd5b8115806146515750601b6000601c600185038154811061460c57fe5b9060005260206000200154815260200190815260200160002060050160016007811061463457fe5b602091828204019190069054906101000a900460ff1660ff166001145b611321576040805162461bcd60e51b815260206004820152601d60248201527f70726576696f75732070726f706f73616c20756e70726f636573736564000000604482015290519081900360640190fd5b60006146ac61502c565b601b6000601c85815481106146bd57fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116147435790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050905080610180015181610160015111156147ed57600191505b806101a0015161480d600954614801611325565b9063ffffffff614fa516565b101561481857600091505b80516001600160a01b03166000908152601960205260409020600401541561483f57600091505b50919050565b6001546005546148649161beef9133916001600160a01b031690614e7a565b6001546005546004546148899261beef9285926001600160a01b039092169103614e7a565b50565b6001600160a01b0392831660009081526014602090815260408083209490951682529283528381208054830190557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c2590925291902080549091019055565b6148f261502c565b604051806101e001604052808c6001600160a01b03168152602001336001600160a01b0316815260200160006001600160a01b03168152602001886001600160a01b03168152602001866001600160a01b031681526020018481526020018b81526020018a8152602001878152602001898152602001600081526020016000815260200160008152602001600081526020018581525090508060a0015160066007811061499b57fe5b602002015160ff1660011415614a22576149b36150ac565b50604080516060810182526001600160a01b038d8116825260208083018a8152838501878152600e5460009081526012845295909520845181546001600160a01b03191694169390931783555160018301559251805192938493614a1d92600285019201906150d6565b505050505b600e546000908152601b6020908152604091829020835181546001600160a01b03199081166001600160a01b03928316178355928501516001830180548516918316919091179055928401516002820180548416918516919091179055606084015160038201805484169185169190911790556080840151600482018054909316931692909217905560a0820151829190614ac39060058301906007615154565b5060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d01556101c082015181600e01559050506000601a6000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050806001600160a01b0316336001600160a01b03168d6001600160a01b03167f698b6b5a7173505e04fab049527190ad00a5d40a2dfb3d6e811f0e9c47c00c058e8e8e8e8e8e8e8e8e600e54604051808b81526020018a8152602001898152602001886001600160a01b03166001600160a01b03168152602001878152602001866001600160a01b03166001600160a01b0316815260200185815260200184600760200280838360005b83811015614c26578181015183820152602001614c0e565b5050505090500180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015614c6c578181015183820152602001614c54565b50505050905090810190601f168015614c995780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a45050600e8054600101905550505050505050505050565b600081831015614cd65781614cd8565b825b9392505050565b600082820183811015614cd857600080fd5b6001600160a01b038083166000908152601a6020908152604080832054909316825260199052205460ff600160a01b9091041660011415614d79576001600160a01b038083166000908152601a602090815260408083205490931680835283832080546001600160a01b03199081168317909155601990925292909120805490911690911790555b6040805160c0810182526001600160a01b03938416808252600160208084018281528486019687526000606086018181526080870182815260a088018381528784526019865289842098518954955160ff16600160a01b0260ff60a01b1991909d166001600160a01b031996871617169b909b17885598519487019490945592516002860155955160038501559551600490930192909255601a9094522080549091169091179055565b6001600160a01b0382166000818152601360209081526040808320805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b614e85848383614e96565b614e9083838361488c565b50505050565b6001600160a01b039283166000908152601460209081526040808320949095168252928352838120805483900390557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c259092529190208054919091039055565b6001600160a01b038216600081815260136020908152604080832080548690039055805185815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b600081614f5d57600080fd5b83614f6a57506000614cd8565b83830283858281614f7757fe5b041415614f9057828181614f8757fe5b04915050614cd8565b83838681614f9a57fe5b040295945050505050565b600082614fb457506000611140565b82820282848281614fc157fe5b0414614cd857600080fd5b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600081526020016000815260200160008152602001600081525090565b6040518060e001604052806007906020820280388339509192915050565b604080516101e08101825260008082526020820181905291810182905260608101829052608081019190915260a0810161506461500e565b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600080191681525090565b604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061511757805160ff1916838001178555615144565b82800160010185558215615144579182015b82811115615144578251825591602001919060010190615129565b506151509291506151e3565b5090565b6001830191839082156151d75791602002820160005b838211156151a857835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261516a565b80156151d55782816101000a81549060ff02191690556001016020816000010492830192600103026151a8565b505b506151509291506151fd565b6111da91905b8082111561515057600081556001016151e9565b6111da91905b8082111561515057805460ff1916815560010161520356fe63616e6e6f7420726167657175697420756e74696c206869676865737420696e6465782070726f706f73616c206d656d62657220766f74656420594553206f6e2069732070726f6365737365648b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00a265627a7a723158207a5d3c6d2366eb79ed02b3eba85b47da141d58c3e6517e0f1f03b4051e05c0a564736f6c63430005110032000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b184000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b1840000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000005150ae84a8cdf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004380000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20000000000000000000000000cc4dc8e92a6e30b6f5f6e65156b121d9f83ca18f000000000000000000000000f290f3d843826d00f8176182fd76550535f6dbb4000000000000000000000000756ce9c56b02f05b5faffafc707b552bedce83ee000000000000000000000000d5b3988ed0ab5ec375e51bb6fd10e205cec16a2e000000000000000000000000130093a5aebc07e78e16f0ecef09d1c45afd8178000000000000000000000000a3564677fc4907a15c9a7eae1dbc1ae9ac57b8e10000000000000000000000004744cda32be7b3e75b9334001da9ed21789d4c0d0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca000000000000000000000000b7f49e02552751b249cae86959fd50d887708b1d00000000000000000000000036306c060497b8df0b34485181c012b7acae77b10000000000000000000000007285502ed0a0ed25f65941e480bda7114492acf9000000000000000000000000c2d6416f5be67aacbcd516580b36d06884e3a2e1000000000000000000000000423afc4406d10c726d5d664d2997571e69d1875f0000000000000000000000001bc9e52baa93dab1a47c3168f6d82ed08856ec83000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000

Deployed Bytecode

0x6080604052600436106103815760003560e01c80637d5b6c72116101d1578063b2643aab11610102578063e1780345116100a0578063ea00d3311161006f578063ea00d33114610f21578063ea7b6ffd14610f4b578063f242862114610fa0578063f5d54c7714610fb557610381565b8063e178034514610e85578063e1a0e3fa14610eb8578063e63bc62d14610ee2578063e681c4aa14610f0c57610381565b8063c89039c5116100dc578063c89039c514610dfe578063da35c66414610e13578063dfdd369e14610e28578063e0a8f6f514610e5b57610381565b8063b2643aab14610d5d578063b470aade14610dbf578063c68e45b714610dd457610381565b80639746d9401161016f578063a3dc380011610149578063a3dc380014610cac578063a4d2d9ec14610cd6578063a9059cbb14610d0f578063afe5475f14610d4857610381565b80639746d94014610c3a57806399653fbe14610c645780639d1722cb14610c9757610381565b80638a027690116101ab5780638a02769014610b565780638b15a60514610be65780639425a47614610bfb57806395d89b4114610c2557610381565b80637d5b6c7214610a6a57806383240f8314610a7f5780638340bbce14610b4157610381565b80633793ab3c116102b657806363858f2d11610254578063753d756311610223578063753d7563146109e357806378a8956714610a16578063797daf7014610a2b5780637a60964114610a4057610381565b806363858f2d146109275780636d4475eb1461093c57806370a082311461097557806373f8fd4b146109a857610381565b8063402c179411610290578063402c1794146107df5780634482394b1461081257806359999b41146108df578063635e99aa1461091257610381565b80633793ab3c146107595780633a98ef39146107835780633fc24bba1461079857610381565b80630d246214116103235780631dafede0116102fd5780631dafede0146106bc5780632582bf2a146106e657806327efc08614610719578063313ce5671461072e57610381565b80630d2462141461064657806315eb349e1461067757806318160ddd146106a757610381565b806306fdde031161035f57806306fdde03146104fc578063086146d21461058657806308ae4b0c1461059b5780630cf20cc91461060d57610381565b8063013cf08b1461038357806303e32fa114610478578063044a0ca81461049f575b005b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610fca565b604051808f6001600160a01b03166001600160a01b031681526020018e6001600160a01b03166001600160a01b031681526020018d6001600160a01b03166001600160a01b031681526020018c6001600160a01b03166001600160a01b031681526020018b6001600160a01b03166001600160a01b031681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b34801561048457600080fd5b5061048d611049565b60408051918252519081900360200190f35b3480156104ab57600080fd5b506104d8600480360360408110156104c257600080fd5b506001600160a01b03813516906020013561104f565b604051808260028111156104e857fe5b60ff16815260200191505060405180910390f35b34801561050857600080fd5b50610511611146565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054b578181015183820152602001610533565b50505050905090810190601f1680156105785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561059257600080fd5b5061048d6111dd565b3480156105a757600080fd5b506105ce600480360360208110156105be57600080fd5b50356001600160a01b031661120b565b604080516001600160a01b03909716875260ff9095166020870152858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561061957600080fd5b506103816004803603604081101561063057600080fd5b506001600160a01b03813516906020013561124b565b34801561065257600080fd5b5061065b6112ac565b604080516001600160a01b039092168252519081900360200190f35b34801561068357600080fd5b506103816004803603604081101561069a57600080fd5b50803590602001356112bb565b3480156106b357600080fd5b5061048d611325565b3480156106c857600080fd5b5061065b600480360360208110156106df57600080fd5b503561132f565b3480156106f257600080fd5b506103816004803603602081101561070957600080fd5b50356001600160a01b0316611356565b34801561072557600080fd5b5061065b611589565b34801561073a57600080fd5b5061074361158f565b6040805160ff9092168252519081900360200190f35b34801561076557600080fd5b506103816004803603602081101561077c57600080fd5b5035611598565b34801561078f57600080fd5b5061048d611764565b3480156107a457600080fd5b506107cb600480360360208110156107bb57600080fd5b50356001600160a01b031661176a565b604080519115158252519081900360200190f35b3480156107eb57600080fd5b5061065b6004803603602081101561080257600080fd5b50356001600160a01b031661177f565b34801561081e57600080fd5b506103816004803603606081101561083557600080fd5b810190602081018135600160201b81111561084f57600080fd5b82018360208201111561086157600080fd5b803590602001918460208302840111600160201b8311171561088257600080fd5b919390929091602081019035600160201b81111561089f57600080fd5b8201836020820111156108b157600080fd5b803590602001918460208302840111600160201b831117156108d257600080fd5b919350915035151561179a565b3480156108eb57600080fd5b506103816004803603602081101561090257600080fd5b50356001600160a01b03166118ef565b34801561091e57600080fd5b5061048d611ac5565b34801561093357600080fd5b5061048d611acb565b34801561094857600080fd5b5061048d6004803603604081101561095f57600080fd5b506001600160a01b038135169060200135611ad1565b34801561098157600080fd5b5061048d6004803603602081101561099857600080fd5b50356001600160a01b0316611c4c565b3480156109b457600080fd5b5061048d600480360360408110156109cb57600080fd5b506001600160a01b0381358116916020013516611c6b565b3480156109ef57600080fd5b506107cb60048036036020811015610a0657600080fd5b50356001600160a01b0316611c96565b348015610a2257600080fd5b5061048d611cab565b348015610a3757600080fd5b5061048d611cb1565b348015610a4c57600080fd5b5061038160048036036020811015610a6357600080fd5b5035611cb7565b348015610a7657600080fd5b5061048d611cdd565b348015610a8b57600080fd5b50610aa960048036036020811015610aa257600080fd5b5035611ce3565b60405180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b04578181015183820152602001610aec565b50505050905090810190601f168015610b315780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610b4d57600080fd5b5061048d611d99565b348015610b6257600080fd5b5061048d60048036036080811015610b7957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610ba857600080fd5b820183602082011115610bba57600080fd5b803590602001918460018302840111600160201b83111715610bdb57600080fd5b919350915035611d9f565b348015610bf257600080fd5b5061048d611e1c565b348015610c0757600080fd5b506107cb60048036036020811015610c1e57600080fd5b5035611e22565b348015610c3157600080fd5b50610511611e39565b348015610c4657600080fd5b5061038160048036036020811015610c5d57600080fd5b5035611e9a565b348015610c7057600080fd5b5061038160048036036040811015610c8757600080fd5b508035906020013560ff16612558565b348015610ca357600080fd5b5061048d612954565b348015610cb857600080fd5b506107cb60048036036020811015610ccf57600080fd5b503561295a565b348015610ce257600080fd5b5061048d60048036036040811015610cf957600080fd5b506001600160a01b038135169060200135612a02565b348015610d1b57600080fd5b5061038160048036036040811015610d3257600080fd5b506001600160a01b038135169060200135612b41565b348015610d5457600080fd5b5061048d612c17565b348015610d6957600080fd5b50610d8760048036036020811015610d8057600080fd5b5035612c1d565b604051808260e080838360005b83811015610dac578181015183820152602001610d94565b5050505090500191505060405180910390f35b348015610dcb57600080fd5b5061048d612c85565b348015610de057600080fd5b5061038160048036036020811015610df757600080fd5b5035612c8b565b348015610e0a57600080fd5b5061065b612ed7565b348015610e1f57600080fd5b5061048d612ee6565b348015610e3457600080fd5b5061038160048036036020811015610e4b57600080fd5b50356001600160a01b0316612eec565b348015610e6757600080fd5b5061038160048036036020811015610e7e57600080fd5b5035612fe2565b348015610e9157600080fd5b506107cb60048036036020811015610ea857600080fd5b50356001600160a01b031661317e565b348015610ec457600080fd5b5061038160048036036020811015610edb57600080fd5b5035613193565b348015610eee57600080fd5b5061038160048036036020811015610f0557600080fd5b50356132f6565b348015610f1857600080fd5b5061065b6136f7565b348015610f2d57600080fd5b5061051160048036036020811015610f4457600080fd5b50356136fd565b61048d6004803603610100811015610f6257600080fd5b506001600160a01b038135811691602081013591604082013591606081013591608082013581169160a08101359160c0820135169060e0013561392f565b348015610fac57600080fd5b5061065b613f2a565b348015610fc157600080fd5b5061065b613f39565b601b602052600090815260409020805460018201546002830154600384015460048501546006860154600787015460088801546009890154600a8a0154600b8b0154600c8c0154600d8d0154600e909d01546001600160a01b039c8d169d9b8d169c9a8b169b998b169a9098169896979596949593949293919290918e565b60055481565b6001600160a01b038216600090815260196020526040812054600160a01b900460ff166001146110b3576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b601c5482106110f6576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b601b6000601c848154811061110757fe5b6000918252602080832090910154835282810193909352604091820181206001600160a01b0387168252600f0190925290205460ff1690505b92915050565b600b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b820191906000526020600020905b8154815290600101906020018083116111b557829003601f168201915b505050505090505b90565b60006112066006546111fa600a5442613f3f90919063ffffffff16565b9063ffffffff613f5416565b905090565b601960205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03841694600160a01b90940460ff16939086565b60026000541415611294576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556112a38282613f76565b50506001600055565b6002546001600160a01b031681565b33600090815260196020526040902054600160a01b900460ff16600114611316576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b6113213383836140f5565b5050565b601054600f540190565b6016818154811061133c57fe5b6000918252602090912001546001600160a01b0316905081565b336000908152601960205260409020600101546113ac576040805162461bcd60e51b815260206004820152600f60248201526e3737ba1039b430b932b437b63232b960891b604482015290519081900360640190fd5b6001600160a01b0381166113ff576040805162461bcd60e51b81526020600482015260156024820152741b995dd1195b1959d85d1952d95e481e995c9bd959605a1b604482015290519081900360640190fd5b6001600160a01b0381163314611500576001600160a01b038116600090815260196020526040902054600160a01b900460ff1615611484576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206f7665727772697465206d656d626572730000000000000000604482015290519081900360640190fd5b6001600160a01b038181166000908152601a60209081526040808320549093168252601990522054600160a01b900460ff1615611500576040805162461bcd60e51b815260206004820152601560248201527463616e6e6f74206f7665727772697465206b65797360581b604482015290519081900360640190fd5b33600081815260196020908152604080832080546001600160a01b039081168552601a845282852080546001600160a01b031990811690915590871680865294839020805482168717905581541684178155815193845290519093927fde7b64a369e10562cc2e71f0f1f944eaf144b75fead6ecb51fac9c4dd693488592908290030190a25050565b61babe81565b600d5460ff1690565b6115a1816143b9565b6000601c82815481106115b057fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff1660011461162c576040805162461bcd60e51b81526020600482015260166024820152751b9bdd081dda1a5d195b1a5cdd081c1c9bdc1bdcd85b60521b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000611648846146a2565b6016549091506101901161165a575060005b600181151514156116f05760058201805462ff00001916620100001790556003820180546001600160a01b039081166000908152601560205260408120805460ff1916600190811790915592546016805494850181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899092018054929091166001600160a01b03199092169190911790555b60038201546001600160a01b039081166000908152601760205260409020805460ff1916905560028301546117259116614845565b6040805182151581529051849186917f2094fc13d2ecb0acd6861e82bd006c7e5ab6f312ec0c6cdfe3d1a01ee54d885a9181900360200190a350505050565b600f5481565b60186020526000908152604090205460ff1681565b601a602052600090815260409020546001600160a01b031681565b600260005414156117e3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260005583821461183c576040805162461bcd60e51b815260206004820152601b60248201527f746f6b656e73202620616d6f756e7473206d757374206d617463680000000000604482015290519081900360640190fd5b60005b848110156118e257600084848381811061185557fe5b90506020020135905082156118b4573360009081526014602052604081209088888581811061188057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205490505b6118d98787848181106118c357fe5b905060200201356001600160a01b031682613f76565b5060010161183f565b5050600160005550505050565b6001600160a01b03811660008181527fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c25602090815260408083205481516370a0823160e01b815230600482015291519394909390926370a082319260248082019391829003018186803b15801561196557600080fd5b505afa158015611979573d6000803e3d6000fd5b505050506040513d602081101561198f57600080fd5b5051039050806119d2576040805162461bcd60e51b81526020600482015260096024820152686e6f20746f6b656e7360b81b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16611a31576040805162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604482015290519081900360640190fd5b6001600160a01b03821660009081526000805160206152698339815191526020526040902054158015611a66575060c8601154105b15611a75576011805460010190555b611a8261dead838361488c565b6040805182815290516001600160a01b038416917f9381e53ffdc9733a6783a6f8665be3f89c231bb81a6771996ed553b4e75c0fe3919081900360200190a25050565b60105481565b60085481565b6000611adb614fcc565b506001600160a01b03838116600090815260196020908152604091829020825160c08101845281549485168152600160a01b90940460ff1691840191909152600181015491830182905260028101546060840152600381015460808401526004015460a0830152151580611b53575060008160600151115b611ba4576040805162461bcd60e51b815260206004820152601760248201527f6d7573742068617665207368617265206f72206c6f6f74000000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526019602052604090206004015415611c03576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a985a5b195960921b604482015290519081900360640190fd5b611c0b61500e565b600160a082015260408051602081019091526000808252611c3c91879190819081908190819081908c908a906148ea565b5050600e54600019019392505050565b6001600160a01b0381166000908152601360205260409020545b919050565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b60156020526000908152604090205460ff1681565b60165490565b601c5490565b336000908152601960205260409020600181018054839003905560020180549091019055565b600a5481565b60126020908152600091825260409182902080546001808301546002808501805488516101009582161595909502600019011691909104601f81018790048702840187019097528683526001600160a01b03909316959094919291830182828015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b5050505050905083565b60075481565b6000611da961500e565b6001816006602002019060ff16908160ff1681525050611e0a876000806000808b60008a898e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506148ea92505050565b5050600e546000190195945050505050565b60045481565b60006007548201611e316111dd565b101592915050565b600c8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b60026000541415611ee3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000908155338152601a60209081526040808320546001600160a01b031683526019909152902060010154611f50576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b60015460048054604080516323b872dd60e01b815233938101939093523060248401526044830191909152516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611fb057600080fd5b505af1158015611fc4573d6000803e3d6000fd5b505050506040513d6020811015611fda57600080fd5b505161201f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60015460045461203e9161beef916001600160a01b039091169061488c565b6000818152601b6020526040902060018101546001600160a01b0316612098576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b600581015460ff16156120e6576040805162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481cdc1bdb9cdbdc9959607a1b604482015290519081900360640190fd5b60058101546301000000900460ff1615612133576040805162461bcd60e51b815260206004820152600960248201526818d85b98d95b1b195960ba1b604482015290519081900360640190fd5b80546001600160a01b031660009081526019602052604090206004015415612195576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600081600901541180156121d0575060038101546001600160a01b031660009081526000805160206152698339815191526020526040902054155b1561221e5760c86011541061221e576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6005810154600160201b900460ff16600114156123855760038101546001600160a01b031660009081526015602052604090205460ff161561229d576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60038101546001600160a01b031660009081526017602052604090205460ff161561230f576040805162461bcd60e51b815260206004820152601a60248201527f616c72656164792077686974656c6973742070726f706f736564000000000000604482015290519081900360640190fd5b60165461019011612359576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b60038101546001600160a01b03166000908152601760205260409020805460ff1916600117905561242a565b600581015465010000000000900460ff166001141561242a5780546001600160a01b031660009081526018602052604090205460ff1615612405576040805162461bcd60e51b81526020600482015260156024820152741ada58dac8185b1c9958591e481c1c9bdc1bdcd959605a1b604482015290519081900360640190fd5b80546001600160a01b03166000908152601860205260409020805460ff191660011790555b60006124816124376111dd565b601c541561247957601c8054601b91600091600019810190811061245757fe5b90600052602060002001548152602001908152602001600020600a015461247c565b60005b614cc6565b6001908101600a8401819055336000818152601a60209081526040808320546002890180546001600160a01b0319166001600160a01b03909216918217905560058901805460ff191688179055601c80549788018155938490527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2119096018990559154825189815260001990910191810191909152808201849052905192945083927f2a383a979381335e3eb401ac01dd8083e024ff0256bf5338456ffc0063390bbd9181900360600190a3505060016000555050565b336000908152601a60209081526040808320546001600160a01b0316835260199091529020600101546125c1576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b336000908152601a60209081526040808320546001600160a01b03168084526019909252909120601c54841061262b576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b6000601b6000601c878154811061263e57fe5b90600052602060002001548152602001908152602001600020905060038460ff161061269b576040805162461bcd60e51b81526020600482015260076024820152666e6f74203c203360c81b604482015290519081900360640190fd5b60008460ff1660028111156126ac57fe5b905081600a01546126bb6111dd565b10156126ff576040805162461bcd60e51b815260206004820152600e60248201526d766f74696e672070656e64696e6760901b604482015290519081900360640190fd5b61270c82600a0154611e22565b15612751576040805162461bcd60e51b815260206004820152601060248201526f1c1c9bdc1bdcd85b08195e1c1a5c995960821b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f8301602052604081205460ff16600281111561277a57fe5b146127bb576040805162461bcd60e51b815260206004820152600c60248201526b1b595b58995c881d9bdd195960a21b604482015290519081900360640190fd5b60018160028111156127c957fe5b14806127e0575060028160028111156127de57fe5b145b612822576040805162461bcd60e51b815260206004820152600e60248201526d766f746520596573206f72204e6f60901b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f830160205260409020805482919060ff1916600183600281111561285357fe5b0217905550600181600281111561286657fe5b14156128b6576001830154600b830180549091019055600383015486111561289057600383018690555b81600d015461289d611325565b11156128b1576128ab611325565b600d8301555b6128db565b60028160028111156128c457fe5b14156128db576001830154600c8301805490910190555b836001600160a01b0316336001600160a01b0316877f804f03797630bf8b8a46b9371608abbf7d78a20df720e477bab641957ca68a20601c8a8154811061291e57fe5b906000526020600020015489604051808381526020018260ff1660ff1681526020019250505060405180910390a4505050505050565b60115481565b601c5460009082106129a6576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b601b6000601c84815481106129b757fe5b906000526020600020015481526020019081526020016000206005016001600781106129df57fe5b602091828204019190069054906101000a900460ff1660ff166001149050919050565b60006001600160a01b038316612a4c576040805162461bcd60e51b815260206004820152600a6024820152693732b2b2103a37b5b2b760b11b604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff1615612ab0576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60165461019011612afa576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b612b0261500e565b6001608082015260408051602081019091526000808252612b32918190819081908990829081908b908a906148ea565b5050600e546000190192915050565b33600090815260196020526040902060020154612b64908263ffffffff613f3f16565b336000908152601960205260408082206002908101939093556001600160a01b038516825290200154612b9d908263ffffffff614cdf16565b6001600160a01b0383166000818152601960209081526040808320600201949094553380835260138252848320805487900390558383529184902080548601905583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60095481565b612c2561500e565b6000828152601b6020526040808220815160e0810192839052926005909101916007918390855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612c4c575094979650505050505050565b60065481565b60026000541415612cd4576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260008181559054604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216926323b872dd926064808401936020939083900390910190829087803b158015612d3457600080fd5b505af1158015612d48573d6000803e3d6000fd5b505050506040513d6020811015612d5e57600080fd5b5051612da3576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b33600090815260196020526040902054600160a01b900460ff1660011415612e005733600090815260196020526040902060010154612de8908263ffffffff614cdf16565b33600090815260196020526040902060010155612e0a565b612e0a3382614cf1565b612e143382614e23565b600f80548201908190556ec097ce7bc90715b34b9f10000000001015612e6f576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6002546001600160a01b031660009081526000805160206152698339815191526020526040902054158015612ea6575060c8601154105b15612eb5576011805460010190555b600254612ecf9061dead906001600160a01b03168361488c565b506001600055565b6001546001600160a01b031681565b600e5481565b6001600160a01b03811660009081526019602052604090206004810154612f47576040805162461bcd60e51b815260206004820152600a6024820152691b9bdd081a985a5b195960b21b604482015290519081900360640190fd5b6000816002015411612f8a576040805162461bcd60e51b81526020600482015260076024820152661b9bc81b1bdbdd60ca1b604482015290519081900360640190fd5b612f97816003015461295a565b612fd25760405162461bcd60e51b815260040180806020018281038252604d81526020018061521c604d913960600191505060405180910390fd5b61132182600083600201546140f5565b6000818152601b60205260409020600581015460ff161561304a576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792073706f6e736f726564000000000000604482015290519081900360640190fd5b60058101546301000000900460ff16156130ab576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792063616e63656c6c6564000000000000604482015290519081900360640190fd5b60018101546001600160a01b03163314613104576040805162461bcd60e51b81526020600482015260156024820152746f6e6c792070726f706f7365722063616e63656c7360581b604482015290519081900360640190fd5b60058101805463ff000000191663010000001790556001810154600382015460098301546131449261beef926001600160a01b0391821692911690614e7a565b60408051338152905183917fc215fed6680bb02d323dc3f8b8f85241572607538426059c9232601bd293c3be919081900360200190a25050565b60176020526000908152604090205460ff1681565b61319c816143b9565b6000601c82815481106131ab57fe5b600091825260208083209190910154808352601b909152604090912060058101549192509065010000000000900460ff16600114613224576040805162461bcd60e51b81526020600482015260116024820152701b9bdd081ada58dac81c1c9bdc1bdcd85b607a1b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000613240846146a2565b9050600181151514156132855760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040812060048101869055600101555b81546001600160a01b039081166000908152601860205260409020805460ff1916905560028301546132b79116614845565b6040805182151581529051849186917f0e347d00d3e9e6cdff9e6c09092c9ff1bd448f9b3dfb7091b30939ec5e7a3c739181900360200190a350505050565b6132ff816143b9565b6000601c828154811061330e57fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff161580156133585750600581015465010000000000900460ff16155b8015613373575060058101546601000000000000900460ff16155b6133bc576040805162461bcd60e51b81526020600482015260156024820152741b9bdd081cdd185b99185c99081c1c9bdc1bdcd85b605a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006133d8846146a2565b90506ec097ce7bc90715b34b9f100000000061340e83600701546134028560060154613402611325565b9063ffffffff614cdf16565b1115613418575060005b60048201546001600160a01b03166000908152600080516020615269833981519152602052604090205460088301541115613451575060005b6000826009015411801561348c575060038201546001600160a01b031660009081526000805160206152698339815191526020526040902054155b801561349b575060c860115410155b156134a4575060005b600181151514156136765760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040902054600160a01b900460ff166001141561353957600682015482546001600160a01b0390811660009081526019602052604080822060010180549094019093556007850154855490921681529190912060020180549091019055613553565b81546006830154613553916001600160a01b031690614cf1565b815460078301546006840154613573926001600160a01b03169101614e23565b6006820154600f80549091019055600782015460108054909101905560038201546001600160a01b0316600090815260008051602061526983398151915260205260409020541580156135ca575060008260090154115b156135d9576011805460010190555b600382015460098301546135fe9161beef9161dead916001600160a01b031690614e7a565b8154600483015460088401546136269261dead926001600160a01b0391821692911690614e7a565b60048201546001600160a01b031660009081526000805160206152698339815191526020526040902054158015613661575060008260080154115b1561367157601180546000190190555b6136a1565b6001820154600383015460098401546136a19261beef926001600160a01b0391821692911690614e7a565b60028201546136b8906001600160a01b0316614845565b6040805182151581529051849186917f86f74240ecee9e4230d26ff92e17fee978460d9c0f78f5c88b2864c9e7a494279181900360200190a350505050565b61beef81565b6060613708826143b9565b6000601c838154811061371757fe5b600091825260208083209190910154808352601282526040808420601b909352909220600581015492935090916601000000000000900460ff1660011461379b576040805162461bcd60e51b81526020600482015260136024820152721b9bdd081858dd1a5bdb881c1c9bdc1bdcd85b606a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006137b7866146a2565b9050600181151514156138ed5760058201805462ff00001916620100001790558254600184810154604051600287810180546000966060966001600160a01b039091169594929383928592600019908216156101000201160480156138535780601f10613831576101008083540402835291820191613853565b820191906000526020600020905b81548152906001019060200180831161383f575b505091505060006040518083038185875af1925050503d8060008114613895576040519150601f19603f3d011682016040523d82523d6000602084013e61389a565b606091505b5091509150816138e0576040805162461bcd60e51b815260206004820152600c60248201526b63616c6c206661696c75726560a01b604482015290519081900360640190fd5b9550611c66945050505050565b6040805182151581529051859188917facc0e8fc789590d1cf21203e356b7b1cd28911b1309c24883c5fcdc305b497a39181900360200190a350505050919050565b60006002600054141561397a576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556ec097ce7bc90715b34b9f100000000061399f898963ffffffff614cdf16565b11156139e0576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff16613a4d576040805162461bcd60e51b815260206004820152601c60248201527f74726962757465546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff16613aba576040805162461bcd60e51b815260206004820152601c60248201527f7061796d656e74546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03891661dead14801590613ae057506001600160a01b03891661beef14155b8015613af757506001600160a01b03891661babe14155b613b41576040805162461bcd60e51b81526020600482015260166024820152756170706c6963616e7420756e72657365727661626c6560501b604482015290519081900360640190fd5b6001600160a01b03891660009081526019602052604090206004015415613ba2576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600086118015613bd557506001600160a01b03851660009081526000805160206152698339815191526020526040902054155b15613c235760c860115410613c23576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6003546001600160a01b038681169116148015613c405750600034115b15613e1657853414613c8c576040805162461bcd60e51b815260206004820152601060248201526f0d2dce6eaccccd2c6d2cadce8408aa8960831b604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cdc57600080fd5b505af1158015613cf0573d6000803e3d6000fd5b5050600354604051600093506001600160a01b03909116915034908381818185875af1925050503d8060008114613d43576040519150601f19603f3d011682016040523d82523d6000602084013e613d48565b606091505b5050905080613d90576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6003546040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015613de357600080fd5b505af1158015613df7573d6000803e3d6000fd5b505050506040513d6020811015613e0d57600080fd5b50613eda915050565b604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b158015613e6b57600080fd5b505af1158015613e7f573d6000803e3d6000fd5b505050506040513d6020811015613e9557600080fd5b5051613eda576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b613ee761beef868861488c565b613eef61500e565b613f108a8a8a8a8a8a8a8a89604051806020016040528060008152506148ea565b5050600e5460001901600160005598975050505050505050565b6003546001600160a01b031681565b61dead81565b600082821115613f4e57600080fd5b50900390565b6000808211613f6257600080fd5b6000828481613f6d57fe5b04949350505050565b3360009081526014602090815260408083206001600160a01b0386168452909152902054811115613fe5576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561403457600080fd5b505af1158015614048573d6000803e3d6000fd5b505050506040513d602081101561405e57600080fd5b50516140a3576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6140ae338383614e96565b604080516001600160a01b038416815260208101839052815133927f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb928290030190a25050565b60006140ff611325565b6001600160a01b038516600090815260196020526040902060018101549192509084111561416a576040805162461bcd60e51b8152602060048201526013602482015272696e73756666696369656e742073686172657360681b604482015290519081900360640190fd5b82816002015410156141b7576040805162461bcd60e51b81526020600482015260116024820152701a5b9cdd59999a58da595b9d081b1bdbdd607a1b604482015290519081900360640190fd5b6141c4816003015461295a565b6141ff5760405162461bcd60e51b815260040180806020018281038252604d81526020018061521c604d913960600191505060405180910390fd5b6000614211858563ffffffff614cdf16565b6001830180548790039055600283018054869003905590506142338682614ef6565b600f8054869003905560108054859003905560005b60165481101561436d5761dead60009081526014602052601680546142b091600080516020615269833981519152918491908690811061428457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548487614f51565b905080156143645761dead60009081526014602052601680548392600080516020615269833981519152929091869081106142e757fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220805495909503909455918b168252601490925290812060168054849391908690811061433857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020805490910190555b50600101614248565b50604080518681526020810186905281516001600160a01b038916927fcad1a1c68982832d9abc314de8a1e5d5e8c81b0588961e360766736d10c3be1a928290030190a2505050505050565b601c548110614402576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b61440a61502c565b601b6000601c848154811061441b57fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116144a15790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250509050600854600754826101400151010161454a6111dd565b1015614592576040805162461bcd60e51b815260206004820152601260248201527170726f706f73616c206e6f7420726561647960701b604482015290519081900360640190fd5b60a08101516020015160ff16156145f0576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792070726f636573736564000000000000604482015290519081900360640190fd5b8115806146515750601b6000601c600185038154811061460c57fe5b9060005260206000200154815260200190815260200160002060050160016007811061463457fe5b602091828204019190069054906101000a900460ff1660ff166001145b611321576040805162461bcd60e51b815260206004820152601d60248201527f70726576696f75732070726f706f73616c20756e70726f636573736564000000604482015290519081900360640190fd5b60006146ac61502c565b601b6000601c85815481106146bd57fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116147435790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050905080610180015181610160015111156147ed57600191505b806101a0015161480d600954614801611325565b9063ffffffff614fa516565b101561481857600091505b80516001600160a01b03166000908152601960205260409020600401541561483f57600091505b50919050565b6001546005546148649161beef9133916001600160a01b031690614e7a565b6001546005546004546148899261beef9285926001600160a01b039092169103614e7a565b50565b6001600160a01b0392831660009081526014602090815260408083209490951682529283528381208054830190557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c2590925291902080549091019055565b6148f261502c565b604051806101e001604052808c6001600160a01b03168152602001336001600160a01b0316815260200160006001600160a01b03168152602001886001600160a01b03168152602001866001600160a01b031681526020018481526020018b81526020018a8152602001878152602001898152602001600081526020016000815260200160008152602001600081526020018581525090508060a0015160066007811061499b57fe5b602002015160ff1660011415614a22576149b36150ac565b50604080516060810182526001600160a01b038d8116825260208083018a8152838501878152600e5460009081526012845295909520845181546001600160a01b03191694169390931783555160018301559251805192938493614a1d92600285019201906150d6565b505050505b600e546000908152601b6020908152604091829020835181546001600160a01b03199081166001600160a01b03928316178355928501516001830180548516918316919091179055928401516002820180548416918516919091179055606084015160038201805484169185169190911790556080840151600482018054909316931692909217905560a0820151829190614ac39060058301906007615154565b5060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d01556101c082015181600e01559050506000601a6000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050806001600160a01b0316336001600160a01b03168d6001600160a01b03167f698b6b5a7173505e04fab049527190ad00a5d40a2dfb3d6e811f0e9c47c00c058e8e8e8e8e8e8e8e8e600e54604051808b81526020018a8152602001898152602001886001600160a01b03166001600160a01b03168152602001878152602001866001600160a01b03166001600160a01b0316815260200185815260200184600760200280838360005b83811015614c26578181015183820152602001614c0e565b5050505090500180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015614c6c578181015183820152602001614c54565b50505050905090810190601f168015614c995780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a45050600e8054600101905550505050505050505050565b600081831015614cd65781614cd8565b825b9392505050565b600082820183811015614cd857600080fd5b6001600160a01b038083166000908152601a6020908152604080832054909316825260199052205460ff600160a01b9091041660011415614d79576001600160a01b038083166000908152601a602090815260408083205490931680835283832080546001600160a01b03199081168317909155601990925292909120805490911690911790555b6040805160c0810182526001600160a01b03938416808252600160208084018281528486019687526000606086018181526080870182815260a088018381528784526019865289842098518954955160ff16600160a01b0260ff60a01b1991909d166001600160a01b031996871617169b909b17885598519487019490945592516002860155955160038501559551600490930192909255601a9094522080549091169091179055565b6001600160a01b0382166000818152601360209081526040808320805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b614e85848383614e96565b614e9083838361488c565b50505050565b6001600160a01b039283166000908152601460209081526040808320949095168252928352838120805483900390557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c259092529190208054919091039055565b6001600160a01b038216600081815260136020908152604080832080548690039055805185815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b600081614f5d57600080fd5b83614f6a57506000614cd8565b83830283858281614f7757fe5b041415614f9057828181614f8757fe5b04915050614cd8565b83838681614f9a57fe5b040295945050505050565b600082614fb457506000611140565b82820282848281614fc157fe5b0414614cd857600080fd5b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600081526020016000815260200160008152602001600081525090565b6040518060e001604052806007906020820280388339509192915050565b604080516101e08101825260008082526020820181905291810182905260608101829052608081019190915260a0810161506461500e565b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600080191681525090565b604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061511757805160ff1916838001178555615144565b82800160010185558215615144579182015b82811115615144578251825591602001919060010190615129565b506151509291506151e3565b5090565b6001830191839082156151d75791602002820160005b838211156151a857835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261516a565b80156151d55782816101000a81549060ff02191690556001016020816000010492830192600103026151a8565b505b506151509291506151fd565b6111da91905b8082111561515057600081556001016151e9565b6111da91905b8082111561515057805460ff1916815560010161520356fe63616e6e6f7420726167657175697420756e74696c206869676865737420696e6465782070726f706f73616c206d656d62657220766f74656420594553206f6e2069732070726f6365737365648b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00a265627a7a723158207a5d3c6d2366eb79ed02b3eba85b47da141d58c3e6517e0f1f03b4051e05c0a564736f6c63430005110032

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

000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b184000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b1840000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000005150ae84a8cdf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004380000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20000000000000000000000000cc4dc8e92a6e30b6f5f6e65156b121d9f83ca18f000000000000000000000000f290f3d843826d00f8176182fd76550535f6dbb4000000000000000000000000756ce9c56b02f05b5faffafc707b552bedce83ee000000000000000000000000d5b3988ed0ab5ec375e51bb6fd10e205cec16a2e000000000000000000000000130093a5aebc07e78e16f0ecef09d1c45afd8178000000000000000000000000a3564677fc4907a15c9a7eae1dbc1ae9ac57b8e10000000000000000000000004744cda32be7b3e75b9334001da9ed21789d4c0d0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca000000000000000000000000b7f49e02552751b249cae86959fd50d887708b1d00000000000000000000000036306c060497b8df0b34485181c012b7acae77b10000000000000000000000007285502ed0a0ed25f65941e480bda7114492acf9000000000000000000000000c2d6416f5be67aacbcd516580b36d06884e3a2e1000000000000000000000000423afc4406d10c726d5d664d2997571e69d1875f0000000000000000000000001bc9e52baa93dab1a47c3168f6d82ed08856ec83000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000

-----Decoded View---------------
Arg [0] : _depositToken (address): 0xcD62b1C403fa761BAadFC74C525ce2B51780b184
Arg [1] : _wrapperToken (address): 0xcD62b1C403fa761BAadFC74C525ce2B51780b184
Arg [2] : _summoner (address[]): 0x1C0Aa8cCD568d90d61659F060D1bFb1e6f855A20,0xcC4Dc8e92A6E30b6F5F6E65156b121D9f83Ca18F,0xf290f3d843826d00f8176182fd76550535f6dbb4,0x756CE9C56B02f05b5FaFfaFc707B552bEDce83eE,0xd5B3988eD0AB5ec375E51bB6fd10e205cEC16A2E,0x130093A5aEbc07e78e16f0EcEF09d1c45AfD8178,0xa3564677FC4907A15c9A7EAe1DBc1ae9aC57b8E1,0x4744cda32bE7b3e75b9334001da9ED21789d4c0d,0x7136fbDdD4DFfa2369A9283B6E90A040318011Ca,0xb7f49E02552751b249caE86959fD50D887708B1D,0x36306C060497B8df0b34485181c012b7aCAE77B1,0x7285502ED0A0Ed25F65941E480bda7114492acF9,0xC2d6416F5BE67AaCBcd516580b36D06884E3A2E1,0x423afc4406d10C726d5d664D2997571e69D1875F,0x1bc9e52bAa93Dab1a47c3168f6d82ED08856Ec83
Arg [3] : _summonerShares (uint256[]): 100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000
Arg [4] : _summonerDeposit (uint256): 1500000000000000000000
Arg [5] : _proposalDeposit (uint256): 0
Arg [6] : _processingReward (uint256): 0
Arg [7] : _periodDuration (uint256): 17280
Arg [8] : _votingPeriodLength (uint256): 5
Arg [9] : _gracePeriodLength (uint256): 3
Arg [10] : _dilutionBound (uint256): 3

-----Encoded View---------------
43 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b184
Arg [1] : 000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b184
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000360
Arg [4] : 00000000000000000000000000000000000000000000005150ae84a8cdf00000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000004380
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [12] : 0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20
Arg [13] : 000000000000000000000000cc4dc8e92a6e30b6f5f6e65156b121d9f83ca18f
Arg [14] : 000000000000000000000000f290f3d843826d00f8176182fd76550535f6dbb4
Arg [15] : 000000000000000000000000756ce9c56b02f05b5faffafc707b552bedce83ee
Arg [16] : 000000000000000000000000d5b3988ed0ab5ec375e51bb6fd10e205cec16a2e
Arg [17] : 000000000000000000000000130093a5aebc07e78e16f0ecef09d1c45afd8178
Arg [18] : 000000000000000000000000a3564677fc4907a15c9a7eae1dbc1ae9ac57b8e1
Arg [19] : 0000000000000000000000004744cda32be7b3e75b9334001da9ed21789d4c0d
Arg [20] : 0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca
Arg [21] : 000000000000000000000000b7f49e02552751b249cae86959fd50d887708b1d
Arg [22] : 00000000000000000000000036306c060497b8df0b34485181c012b7acae77b1
Arg [23] : 0000000000000000000000007285502ed0a0ed25f65941e480bda7114492acf9
Arg [24] : 000000000000000000000000c2d6416f5be67aacbcd516580b36d06884e3a2e1
Arg [25] : 000000000000000000000000423afc4406d10c726d5d664d2997571e69d1875f
Arg [26] : 0000000000000000000000001bc9e52baa93dab1a47c3168f6d82ed08856ec83
Arg [27] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [28] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [29] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [30] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [31] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [32] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [33] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [34] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [35] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [36] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [37] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [38] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [39] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [40] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [41] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [42] : 0000000000000000000000000000000000000000000000056bc75e2d63100000


Deployed Bytecode Sourcemap

1841:39039:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8959:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8959:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8959:45:0;;:::i;:::-;;;;;-1:-1:-1;;;;;8959:45:0;-1:-1:-1;;;;;8959:45:0;;;;;;-1:-1:-1;;;;;8959:45:0;-1:-1:-1;;;;;8959:45:0;;;;;;-1:-1:-1;;;;;8959:45:0;-1:-1:-1;;;;;8959:45:0;;;;;;-1:-1:-1;;;;;8959:45:0;-1:-1:-1;;;;;8959:45:0;;;;;;-1:-1:-1;;;;;8959:45:0;-1:-1:-1;;;;;8959:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2390:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2390:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;35293:346;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35293:346:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;35293:346:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38437:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38437:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;38437:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35155:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35155:126:0;;;:::i;8837:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8837:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8837:41:0;-1:-1:-1;;;;;8837:41:0;;:::i;:::-;;;;-1:-1:-1;;;;;8837:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31195:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31195:128:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;31195:128:0;;;;;;;;:::i;2070:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2070:27:0;;;:::i;:::-;;;;-1:-1:-1;;;;;2070:27:0;;;;;;;;;;;;;;28797:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28797:210:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28797:210:0;;;;;;;:::i;38724:103::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38724:103:0;;;:::i;8680:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8680:31:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8680:31:0;;:::i;33579:854::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33579:854:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33579:854:0;-1:-1:-1;;;;;33579:854:0;;:::i;5556:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5556:47:0;;;:::i;38627:85::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38627:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24102:952;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24102:952:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24102:952:0;;:::i;5680:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5680:26:0;;;:::i;8778:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8778:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8778:46:0;-1:-1:-1;;;;;8778:46:0;;:::i;:::-;;;;;;;;;;;;;;;;;;8885:61;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8885:61:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8885:61:0;-1:-1:-1;;;;;8885:61:0;;:::i;31331:526::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31331:526:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31331:526:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31331:526:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31331:526:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31331:526:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31331:526:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31331:526:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31331:526:0;;-1:-1:-1;31331:526:0;-1:-1:-1;31331:526:0;;;;:::i;32256:622::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32256:622:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32256:622:0;-1:-1:-1;;;;;32256:622:0;;:::i;5748:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5748:24:0;;;:::i;2672:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2672:32:0;;;:::i;14116:619::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14116:619:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14116:619:0;;;;;;;;:::i;38313:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38313:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38313:112:0;-1:-1:-1;;;;;38313:112:0;;:::i;36028:144::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36028:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;36028:144:0;;;;;;;;;;:::i;8627:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8627:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8627:46:0;-1:-1:-1;;;;;8627:46:0;;:::i;35918:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35918:102:0;;;:::i;35796:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35796:110:0;;;:::i;40046:172::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40046:172:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40046:172:0;;:::i;2877:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2877:28:0;;;:::i;5908:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5908:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5908:41:0;;:::i;:::-;;;;;-1:-1:-1;;;;;5908:41:0;-1:-1:-1;;;;;5908:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5908:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2599:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2599:33:0;;;:::i;13497:611::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13497:611:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;13497:611:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;13497:611:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13497:611:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;13497:611:0;;-1:-1:-1;13497:611:0;-1:-1:-1;13497:611:0;;:::i;2287:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2287:30:0;;;:::i;34792:166::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34792:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34792:166:0;;:::i;38530:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38530:89:0;;;:::i;16518:2252::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16518:2252:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16518:2252:0;;:::i;18833:1850::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18833:1850:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18833:1850:0;;;;;;;;;:::i;5812:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5812:35:0;;;:::i;34530:254::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34530:254:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34530:254:0;;:::i;12842:643::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12842:643:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12842:643:0;;;;;;;;:::i;40462:415::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40462:415:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40462:415:0;;;;;;;;:::i;2744:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2744:28:0;;;:::i;35647:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35647:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35647:137:0;;:::i;:::-;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;35647:137:0;;;;;;;;;;;;;;;;2501:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2501:29:0;;;:::i;39075:959::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39075:959:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39075:959:0;;:::i;1984:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1984:27:0;;;:::i;5616:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5616:28:0;;;:::i;30714:469::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30714:469:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30714:469:0;-1:-1:-1;;;;;30714:469:0;;:::i;33001:570::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33001:570:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33001:570:0;;:::i;8720:51::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8720:51:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8720:51:0;-1:-1:-1;;;;;8720:51:0;;:::i;26005:1025::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26005:1025:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26005:1025:0;;:::i;20691:3403::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20691:3403:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20691:3403:0;;:::i;5501:48::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5501:48:0;;;:::i;25062:935::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25062:935:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25062:935:0;;:::i;10800:2030::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;10800:2030:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2158:64::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2158:64:0;;;:::i;5447:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5447:47:0;;;:::i;8959:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8959:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2390:31::-;;;;:::o;35293:346::-;-1:-1:-1;;;;;35416:22:0;;35391:4;35416:22;;;:7;:22;;;;;:29;-1:-1:-1;;;35416:29:0;;;;35449:1;35416:34;35408:57;;;;;-1:-1:-1;;;35408:57:0;;;;;;;;;;;;-1:-1:-1;;;35408:57:0;;;;;;;;;;;;;;;35500:13;:20;35484:36;;35476:59;;;;;-1:-1:-1;;;35476:59:0;;;;;;;;;;;;-1:-1:-1;;;35476:59:0;;;;;;;;;;;;;;;35563:9;:39;35573:13;35587;35573:28;;;;;;;;;;;;;;;;;;;;35563:39;;;;;;;;;;;;;;;-1:-1:-1;;;;;35563:68:0;;;;:53;;:68;;;;;;;;;-1:-1:-1;35293:346:0;;;;;:::o;38437:85::-;38509:5;38502:12;;;;;;;;-1:-1:-1;;38502:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38476:13;;38502:12;;38509:5;;38502:12;;38509:5;38502:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38437:85;;:::o;35155:126::-;35204:7;35231:42;35258:14;;35231:22;35239:13;;35231:3;:7;;:22;;;;:::i;:::-;:26;:42;:26;:42;:::i;:::-;35224:49;;35155:126;:::o;8837:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8837:41:0;;;-1:-1:-1;;;8837:41:0;;;;;;;;:::o;31195:128::-;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;31284:31;31301:5;31308:6;31284:16;:31::i;:::-;-1:-1:-1;;1284:1:0;1598:7;:22;31195:128::o;2070:27::-;;;-1:-1:-1;;;;;2070:27:0;;:::o;28797:210::-;28893:10;28885:19;;;;:7;:19;;;;;:26;-1:-1:-1;;;28885:26:0;;;;28915:1;28885:31;28877:54;;;;;-1:-1:-1;;;28877:54:0;;;;;;;;;;;;-1:-1:-1;;;28877:54:0;;;;;;;;;;;;;;;28952:47;28962:10;28974:12;28988:10;28952:9;:47::i;:::-;28797:210;;:::o;38724:103::-;38810:9;;38796:11;;:23;38724:103;:::o;8680:31::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8680:31:0;;-1:-1:-1;8680:31:0;:::o;33579:854::-;33666:10;33687:1;33658:19;;;:7;:19;;;;;:26;;;33650:58;;;;;-1:-1:-1;;;33650:58:0;;;;;;;;;;;;-1:-1:-1;;;33650:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33727:28:0;;33719:62;;;;;-1:-1:-1;;;33719:62:0;;;;;;;;;;;;-1:-1:-1;;;33719:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33884:28:0;;33902:10;33884:28;33880:245;;-1:-1:-1;;;;;33937:23:0;;;;;;:7;:23;;;;;:30;-1:-1:-1;;;33937:30:0;;;;:35;33929:72;;;;;-1:-1:-1;;;33929:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34032:42:0;;;34024:51;34032:42;;;:26;:42;;;;;;;;;;;;34024:51;;:7;:51;;;:58;-1:-1:-1;;;34024:58:0;;;;:63;34016:97;;;;;-1:-1:-1;;;34016:97:0;;;;;;;;;;;;-1:-1:-1;;;34016:97:0;;;;;;;;;;;;;;;34169:10;34137:21;34161:19;;;:7;:19;;;;;;;;34218:18;;-1:-1:-1;;;;;34218:18:0;;;34191:46;;:26;:46;;;;;:59;;-1:-1:-1;;;;;;34191:59:0;;;;;;34261:42;;;;;;;;;;:55;;;;;;;;34327:35;;;;;;;34380:45;;;;;;;34161:19;;34169:10;34380:45;;;;;;;;;33579:854;;:::o;5556:47::-;5596:6;5556:47;:::o;38627:85::-;38695:9;;;;38627:85;:::o;24102:952::-;24179:45;24210:13;24179:30;:45::i;:::-;24237:18;24258:13;24272;24258:28;;;;;;;;;;;;;;;;;;;;;24325:21;;;:9;:21;;;;;;;24367:14;;;:17;24258:28;;-1:-1:-1;24325:21:0;-1:-1:-1;;;24367:17:0;;;;24388:1;24367:22;24359:57;;;;;-1:-1:-1;;;24359:57:0;;;;;;;;;;;;-1:-1:-1;;;24359:57:0;;;;;;;;;;;;;;;24429:14;;;:21;;-1:-1:-1;;24429:21:0;;;;;:17;24491:23;24500:13;24491:8;:23::i;:::-;24531:14;:21;24476:38;;-1:-1:-1;3352:3:0;-1:-1:-1;24527:98:0;;-1:-1:-1;24608:5:0;24527:98;24652:4;24641:15;;;;24637:207;;;24673:14;;;:21;;-1:-1:-1;;24673:21:0;;;;;24745;;;;;-1:-1:-1;;;;;24745:21:0;;;24673:17;24722:46;;;:14;24673:17;24722:46;;;;:53;;-1:-1:-1;;24722:53:0;24693:1;24722:53;;;;;;24810:21;;24790:14;27:10:-1;;23:18;;;45:23;;24790:42:0;;;;;;;;;24810:21;;;;-1:-1:-1;;;;;;24790:42:0;;;;;;;;;24637:207;24884:21;;;;-1:-1:-1;;;;;24884:21:0;;;24910:5;24856:51;;;:19;:51;;;;;:59;;-1:-1:-1;;24856:59:0;;;24943:16;;;;24928:32;;24943:16;24928:14;:32::i;:::-;24986:60;;;;;;;;;;25026:10;;25011:13;;24986:60;;;;;;;;;24102:952;;;;:::o;5680:26::-;;;;:::o;8778:46::-;;;;;;;;;;;;;;;:::o;8885:61::-;;;;;;;;;;;;-1:-1:-1;;;;;8885:61:0;;:::o;31331:526::-;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;31463:31;;;31455:71;;;;;-1:-1:-1;;;31455:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31544:9;31539:311;31557:17;;;31539:311;;;31596:22;31621:7;;31629:1;31621:10;;;;;;;;;;;;;31596:35;;31650:3;31646:133;;;31741:10;31723:29;;;;:17;:29;;;;;;31753:6;;31760:1;31753:9;;;;;;;;;;;;;-1:-1:-1;;;;;31753:9:0;-1:-1:-1;;;;;31723:40:0;-1:-1:-1;;;;;31723:40:0;;;;;;;;;;;;;31706:57;;31646:133;31795:43;31812:6;;31819:1;31812:9;;;;;;;;;;;;;-1:-1:-1;;;;;31812:9:0;31823:14;31795:16;:43::i;:::-;-1:-1:-1;31576:3:0;;31539:311;;;-1:-1:-1;;1284:1:0;1598:7;:22;-1:-1:-1;;;;31331:526:0:o;32256:622::-;-1:-1:-1;;;;;32381:31:0;;32314:23;32381:31;;;:24;;:31;;;:24;:31;;;;32340:38;;-1:-1:-1;;;32340:38:0;;32372:4;32340:38;;;;;;32314:23;;32381:31;;;;32340:23;;:38;;;;;;;;;;;32381:31;32340:38;;;5:2:-1;;;;30:1;27;20:12;5:2;32340:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32340:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32340:38:0;:72;;-1:-1:-1;32518:19:0;32510:41;;;;;-1:-1:-1;;;32510:41:0;;;;;;;;;;;;-1:-1:-1;;;32510:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32570:21:0;;;;;;:14;:21;;;;;;;;32562:49;;;;;-1:-1:-1;;;32562:49:0;;;;;;;;;;;;-1:-1:-1;;;32562:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32636:31:0;;:24;:31;;;-1:-1:-1;;;;;;;;;;;32636:24:0;:31;:24;:31;;;:36;:88;;;;;3447:3;32676:20;;:48;32636:88;32632:122;;;32727:20;:25;;32751:1;32727:25;;;32632:122;32764:49;5487:6;32790:5;32797:15;32764:18;:49::i;:::-;32831:39;;;;;;;;-1:-1:-1;;;;;32831:39:0;;;;;;;;;;;;;32256:622;;:::o;5748:24::-;;;;:::o;2672:32::-;;;;:::o;14116:619::-;14206:18;14237:20;;:::i;:::-;-1:-1:-1;;;;;;14260:21:0;;;;;;;:7;:21;;;;;;;;;14237:44;;;;;;;;;;;;;;-1:-1:-1;;;14237:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14302:17;;;:36;;;14337:1;14323:6;:11;;;:15;14302:36;14294:72;;;;;-1:-1:-1;;;14294:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14385:21:0;;;;;;:7;:21;;;;;:28;;;:33;14377:60;;;;;-1:-1:-1;;;14377:60:0;;;;;;;;;;;;-1:-1:-1;;;14377:60:0;;;;;;;;;;;;;;;14450:21;;:::i;:::-;14569:1;14558:8;;;:12;14597:85;;;14558:8;14597:85;;;;;14627:1;14597:85;;;;;14613:12;;14627:1;;;;;;;;;;;14663:7;;14558:5;;14597:15;:85::i;:::-;-1:-1:-1;;14710:13:0;;-1:-1:-1;;14710:17:0;;14116:619;-1:-1:-1;;;14116:619:0:o;38313:112::-;-1:-1:-1;;;;;38400:17:0;;38372:7;38400:17;;;:8;:17;;;;;;38313:112;;;;:::o;36028:144::-;-1:-1:-1;;;;;36134:23:0;;;36107:7;36134:23;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;;36028:144::o;8627:46::-;;;;;;;;;;;;;;;:::o;35918:102::-;35991:14;:21;35918:102;:::o;35796:110::-;35878:13;:20;35796:110;:::o;40046:172::-;40125:10;40117:19;;;;:7;:19;;;;;:26;;;:42;;;;;;;40170:24;;:40;;;;;;;40046:172::o;2877:28::-;;;;:::o;5908:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5908:41:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5908:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2599:33::-;;;;:::o;13497:611::-;13758:18;13799:21;;:::i;:::-;13918:1;13907:5;13913:1;13907:8;;;:12;;;;;;;;;;;13956:99;13972:8;13982:1;13985;13988;13999;14003:11;14024:1;14028:7;14037:5;14044:10;;13956:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13956:15:0;;-1:-1:-1;;;13956:99:0:i;:::-;-1:-1:-1;;14083:13:0;;-1:-1:-1;;14083:17:0;13497:611;;;;;;;:::o;2287:30::-;;;;:::o;34792:166::-;34869:4;34932:18;;34915:14;:35;34893:18;:16;:18::i;:::-;:57;;;34792:166;-1:-1:-1;;34792:166:0:o;38530:89::-;38604:7;38597:14;;;;;;;;-1:-1:-1;;38597:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38571:13;;38597:14;;38604:7;;38597:14;;38604:7;38597:14;;;;;;;;;;;;;;;;;;;;;;;;16518:2252;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;;;9129:10;9102:38;;:26;:38;;;;;;;;;-1:-1:-1;;;;;9102:38:0;9094:47;;:7;:47;;;;;9102:38;9094:54;;9086:83;;;;;-1:-1:-1;;;9086:83:0;;;;;;;;;;;;-1:-1:-1;;;9086:83:0;;;;;;;;;;;;;;;16733:12;;16787:15;;;16726:77;;;-1:-1:-1;;;16726:77:0;;16760:10;16726:77;;;;;;;16780:4;16726:77;;;;;;;;;;;;-1:-1:-1;;;;;16733:12:0;;;;16726:33;;:77;;;;;;;;;;;;;;;16733:12;;16726:77;;;5:2:-1;;;;30:1;27;20:12;5:2;16726:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16726:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16726:77:0;16718:105;;;;;-1:-1:-1;;;16718:105:0;;;;;;;;;;;;-1:-1:-1;;;16718:105:0;;;;;;;;;;;;;;;16861:12;;16875:15;;16834:57;;5542:6;;-1:-1:-1;;;;;16861:12:0;;;;16834:18;:57::i;:::-;16904:25;16932:21;;;:9;:21;;;;;16974:17;;;;-1:-1:-1;;;;;16974:17:0;16966:54;;;;;-1:-1:-1;;;16966:54:0;;;;;;;;;;;;-1:-1:-1;;;16966:54:0;;;;;;;;;;;;;;;17039:14;;;:17;;;:22;17031:52;;;;;-1:-1:-1;;;17031:52:0;;;;;;;;;;;;-1:-1:-1;;;17031:52:0;;;;;;;;;;;;;;;17102:14;;;:17;;;;;;:22;17094:44;;;;;-1:-1:-1;;;17094:44:0;;;;;;;;;;;;-1:-1:-1;;;17094:44:0;;;;;;;;;;;;;;;17165:18;;-1:-1:-1;;;;;17165:18:0;17157:27;;;;:7;:27;;;;;:34;;;:39;17149:68;;;;;-1:-1:-1;;;17149:68:0;;;;;;;;;;;;-1:-1:-1;;;17149:68:0;;;;;;;;;;;;;;;17260:1;17234:8;:23;;;:27;:83;;;;-1:-1:-1;17290:21:0;;;;-1:-1:-1;;;;;17290:21:0;17265:24;:47;;;-1:-1:-1;;;;;;;;;;;17265:24:0;:47;:24;:47;;;:52;17234:83;17230:192;;;3447:3;17342:20;;:48;17334:76;;;;;-1:-1:-1;;;17334:76:0;;;;;;;;;;;;-1:-1:-1;;;17334:76:0;;;;;;;;;;;;;;;17469:14;;;:17;-1:-1:-1;;;17469:17:0;;;;17490:1;17469:22;17465:625;;;17540:21;;;;-1:-1:-1;;;;;17540:21:0;17517:46;;;;:14;:46;;;;;;;;17516:47;17508:79;;;;;-1:-1:-1;;;17508:79:0;;;;;;;;;;;;-1:-1:-1;;;17508:79:0;;;;;;;;;;;;;;;17639:21;;;;-1:-1:-1;;;;;17639:21:0;17611:51;;;;:19;:51;;;;;;;;17610:52;17602:91;;;;;-1:-1:-1;;;17602:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17716:14;:21;3352:3;-1:-1:-1;17708:77:0;;;;;-1:-1:-1;;;17708:77:0;;;;;;;;;;;;-1:-1:-1;;;17708:77:0;;;;;;;;;;;;;;;17828:21;;;;-1:-1:-1;;;;;17828:21:0;17800:51;;;;:19;:51;;;;;:58;;-1:-1:-1;;17800:58:0;17854:4;17800:58;;;17465:625;;;17914:14;;;:17;;;;;;17935:1;17914:22;17910:180;;;17977:18;;-1:-1:-1;;;;;17977:18:0;17962:34;;;;:14;:34;;;;;;;;17961:35;17953:69;;;;;-1:-1:-1;;;17953:69:0;;;;;;;;;;;;-1:-1:-1;;;17953:69:0;;;;;;;;;;;;;;;18052:18;;-1:-1:-1;;;;;18052:18:0;18037:34;;;;:14;:34;;;;;:41;;-1:-1:-1;;18037:41:0;18074:4;18037:41;;;17910:180;18150:22;18175:159;18193:18;:16;:18::i;:::-;18226:13;:20;:25;:97;;18268:13;18282:20;;18258:9;;:50;;-1:-1:-1;;18282:24:0;;;18268:39;;;;;;;;;;;;;;18258:50;;;;;;;;;;;:65;;;18226:97;;;18254:1;18226:97;18175:3;:159::i;:::-;18337:1;18175:163;;;18351:23;;;:40;;;18455:10;18404:21;18428:38;;;:26;:38;;;;;;;;;18477:16;;;:32;;-1:-1:-1;;;;;;18477:32:0;-1:-1:-1;;;;;18428:38:0;;;18477:32;;;;;18522:14;;;:21;;-1:-1:-1;;18522:21:0;;;;;18610:13;27:10:-1;;23:18;;;45:23;;18610:30:0;;;;;;;;;;;18721:20;;18666:96;;;;;-1:-1:-1;;18721:24:0;;;18666:96;;;;;;;;;;;;;;;18175:163;;-1:-1:-1;18428:38:0;;18666:96;;;;;;;;;-1:-1:-1;;1284:1:0;1598:7;:22;-1:-1:-1;;16518:2252:0:o;18833:1850::-;9129:10;9151:1;9102:38;;;:26;:38;;;;;;;;;-1:-1:-1;;;;;9102:38:0;9094:47;;:7;:47;;;;;9102:38;9094:54;;9086:83;;;;;-1:-1:-1;;;9086:83:0;;;;;;;;;;;;-1:-1:-1;;;9086:83:0;;;;;;;;;;;;;;;18976:10;18925:21;18949:38;;;:26;:38;;;;;;;;;-1:-1:-1;;;;;18949:38:0;19022:22;;;:7;:22;;;;;;19081:13;:20;19065:36;;19057:59;;;;;-1:-1:-1;;;19057:59:0;;;;;;;;;;;;-1:-1:-1;;;19057:59:0;;;;;;;;;;;;;;;19127:25;19155:9;:39;19165:13;19179;19165:28;;;;;;;;;;;;;;;;19155:39;;;;;;;;;;;19127:67;;19226:1;19215:8;:12;;;19207:32;;;;;-1:-1:-1;;;19207:32:0;;;;;;;;;;;;-1:-1:-1;;;19207:32:0;;;;;;;;;;;;;;;19250:9;19267:8;19262:14;;;;;;;;;;19250:26;;19319:8;:23;;;19297:18;:16;:18::i;:::-;:45;;19289:72;;;;;-1:-1:-1;;;19289:72:0;;;;;;;;;;;;-1:-1:-1;;;19289:72:0;;;;;;;;;;;;;;;19381:47;19404:8;:23;;;19381:22;:47::i;:::-;19380:48;19372:77;;;;;-1:-1:-1;;;19372:77:0;;;;;;;;;;;;-1:-1:-1;;;19372:77:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19468:37:0;;19509:9;19468:37;;;:22;;;:37;;;;;;;;:50;;;;;;;;;19460:75;;;;;-1:-1:-1;;;19460:75:0;;;;;;;;;;;;-1:-1:-1;;;19460:75:0;;;;;;;;;;;;;;;19562:8;19554:4;:16;;;;;;;;;:35;;;-1:-1:-1;19582:7:0;19574:4;:15;;;;;;;;;19554:35;19546:62;;;;;-1:-1:-1;;;19546:62:0;;;;;;;;;;;;-1:-1:-1;;;19546:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19621:37:0;;;;;;:22;;;:37;;;;;:44;;19661:4;;19621:37;-1:-1:-1;;19621:44:0;;19661:4;19621:44;;;;;;;;;;;;-1:-1:-1;19690:8:0;19682:4;:16;;;;;;;;;19678:722;;;19755:13;;;;19735:17;;;;;:33;;;19715:53;;19900:26;;;;19884:42;;19880:125;;;19947:26;;;:42;;;19880:125;20151:8;:39;;;20135:13;:11;:13::i;:::-;:55;20131:151;;;20253:13;:11;:13::i;:::-;20211:39;;;:55;20131:151;19678:722;;;20313:7;20305:4;:15;;;;;;;;;20301:99;;;20375:13;;;;20356:16;;;;;:32;;;20337:51;;20301:99;20651:13;-1:-1:-1;;;;;20583:92:0;20639:10;-1:-1:-1;;;;;20583:92:0;20624:13;20583:92;20594:13;20608;20594:28;;;;;;;;;;;;;;;;20666:8;20583:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;9180:1;;;;18833:1850;;:::o;5812:35::-;;;;:::o;34530:254::-;34648:13;:20;34601:4;;34626:42;;34618:71;;;;;-1:-1:-1;;;34618:71:0;;;;;;;;;;;;-1:-1:-1;;;34618:71:0;;;;;;;;;;;;;;;34717:9;:45;34727:13;34741:19;34727:34;;;;;;;;;;;;;;;;34717:45;;;;;;;;;;;:51;;34769:1;34717:54;;;;;;;;;;;;;;;;;;;;;;;;;:59;;34775:1;34717:59;34710:66;;34530:254;;;:::o;12842:643::-;12936:18;-1:-1:-1;;;;;12975:30:0;;12967:53;;;;;-1:-1:-1;;;12967:53:0;;;;;;;;;;;;-1:-1:-1;;;12967:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13040:32:0;;;;;;:14;:32;;;;;;;;13039:33;13031:65;;;;;-1:-1:-1;;;13031:65:0;;;;;;;;;;;;-1:-1:-1;;;13031:65:0;;;;;;;;;;;;;;;13115:14;:21;3352:3;-1:-1:-1;13107:77:0;;;;;-1:-1:-1;;;13107:77:0;;;;;;;;;;;;-1:-1:-1;;;13107:77:0;;;;;;;;;;;;;;;13197:21;;:::i;:::-;13316:1;13305:8;;;:12;13343:89;;;13305:8;13343:89;;;;;13367:1;13343:89;;;;;13367:1;;;;;;13380:16;;13367:1;;;;13413:7;;13305:5;;13343:15;:89::i;:::-;-1:-1:-1;;13460:13:0;;-1:-1:-1;;13460:17:0;12842:643;;;;:::o;40462:415::-;40577:10;40569:19;;;;:7;:19;;;;;:24;;;:44;;40598:14;40569:44;:28;:44;:::i;:::-;40550:10;40542:19;;;;:7;:19;;;;;;:24;;;;:71;;;;-1:-1:-1;;;;;40649:17:0;;;;;;:22;;:42;;40676:14;40649:42;:26;:42;:::i;:::-;-1:-1:-1;;;;;40624:17:0;;;;;;:7;:17;;;;;;;;:22;;:67;;;;40721:10;40712:20;;;:8;:20;;;;;:38;;;;;;;40761:18;;;;;;;:36;;;;;;40823:46;;;;;;;40624:17;;40721:10;;40823:46;;;;;;;;;;40462:415;;:::o;2744:28::-;;;;:::o;35647:137::-;35714:15;;:::i;:::-;35749:21;;;;:9;:21;;;;;;35742:34;;;;;;;;;;35749:27;;;;;35742:34;;35749:27;;35742:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35742:34:0;;35647:137;-1:-1:-1;;;;;;;35647:137:0:o;2501:29::-;;;;:::o;39075:959::-;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;;;39160:12;;39153:68;;;-1:-1:-1;;;39153:68:0;;39187:10;39153:68;;;;39207:4;39153:68;;;;;;;;;;;;-1:-1:-1;;;;;39160:12:0;;;;39153:33;;:68;;;;;;;;;;;;;;;;;39160:12;39153:68;;;5:2:-1;;;;30:1;27;20:12;5:2;39153:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39153:68:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39153:68:0;39145:96;;;;;-1:-1:-1;;;39145:96:0;;;;;;;;;;;;-1:-1:-1;;;39145:96:0;;;;;;;;;;;;;;;39351:10;39343:19;;;;:7;:19;;;;;:26;-1:-1:-1;;;39343:26:0;;;;39373:1;39343:31;39339:288;;;39428:10;39420:19;;;;:7;:19;;;;;:26;;;:38;;39451:6;39420:38;:30;:38;:::i;:::-;39399:10;39391:19;;;;:7;:19;;;;;:26;;:67;39339:288;;;39577:34;39592:10;39604:6;39577:14;:34::i;:::-;39682;39697:10;39709:6;39682:14;:34::i;:::-;39727:11;:21;;;;;;;;3211:6;-1:-1:-1;39781:30:0;39773:54;;;;;-1:-1:-1;;;39773:54:0;;;;;;;;;;;;-1:-1:-1;;;39773:54:0;;;;;;;;;;;;;;;39869:12;;-1:-1:-1;;;;;39869:12:0;39844:24;:38;;;-1:-1:-1;;;;;;;;;;;39844:24:0;:38;:24;:38;;;:43;:95;;;;;3447:3;39891:20;;:48;39844:95;39840:129;;;39942:20;:25;;39966:1;39942:25;;;39840:129;40005:12;;39979:47;;5487:6;;-1:-1:-1;;;;;40005:12:0;40019:6;39979:18;:47::i;:::-;-1:-1:-1;1284:1:0;1598:7;:22;39075:959::o;1984:27::-;;;-1:-1:-1;;;;;1984:27:0;;:::o;5616:28::-;;;;:::o;30714:469::-;-1:-1:-1;;;;;30798:21:0;;30774;30798;;;:7;:21;;;;;30840:13;;;;30832:41;;;;;-1:-1:-1;;;30832:41:0;;;;;;;;;;;;-1:-1:-1;;;30832:41:0;;;;;;;;;;;;;;;30906:1;30892:6;:11;;;:15;30884:35;;;;;-1:-1:-1;;;30884:35:0;;;;;;;;;;;;-1:-1:-1;;;30884:35:0;;;;;;;;;;;;;;;31002:39;31014:6;:26;;;31002:11;:39::i;:::-;30994:129;;;;-1:-1:-1;;;30994:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31136:39;31146:12;31160:1;31163:6;:11;;;31136:9;:39::i;33001:570::-;33065:25;33093:21;;;:9;:21;;;;;33133:14;;;:17;;;:22;33125:61;;;;;-1:-1:-1;;;33125:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33205:14;;;:17;;;;;;:22;33197:61;;;;;-1:-1:-1;;;33197:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33291:17;;;;-1:-1:-1;;;;;33291:17:0;33277:10;:31;33269:65;;;;;-1:-1:-1;;;33269:65:0;;;;;;;;;;;;-1:-1:-1;;;33269:65:0;;;;;;;;;;;;;;;33347:14;;;:21;;-1:-1:-1;;33347:21:0;;;;;33367:1;33433:17;;;33362:1;33452:21;;;33475:23;;;;33402:97;;5542:6;;-1:-1:-1;;;;;33433:17:0;;;;33452:21;;;33402:22;:97::i;:::-;33525:38;;;33552:10;33525:38;;;;33540:10;;33525:38;;;;;;;;;;33001:570;;:::o;8720:51::-;;;;;;;;;;;;;;;:::o;26005:1025::-;26082:45;26113:13;26082:30;:45::i;:::-;26140:18;26161:13;26175;26161:28;;;;;;;;;;;;;;;;;;;;;26228:21;;;:9;:21;;;;;;;26270:14;;;:17;26161:28;;-1:-1:-1;26228:21:0;26270:17;;;;;26291:1;26270:22;26262:52;;;;;-1:-1:-1;;;26262:52:0;;;;;;;;;;;;-1:-1:-1;;;26262:52:0;;;;;;;;;;;;;;;26327:14;;;:21;;-1:-1:-1;;26327:21:0;;;;;:17;26389:23;26398:13;26389:8;:23::i;:::-;26374:38;-1:-1:-1;26440:4:0;26429:15;;;;26425:412;;;26461:14;;;:21;;-1:-1:-1;;26461:21:0;;;;;26540:18;;-1:-1:-1;;;;;26540:18:0;26461:17;26532:27;;;:7;26461:17;26532:27;;;;26574:13;;;:29;;;26481:1;26660:13;:17;26425:412;26864:18;;-1:-1:-1;;;;;26864:18:0;;;26886:5;26849:34;;;:14;:34;;;;;:42;;-1:-1:-1;;26849:42:0;;;26919:16;;;;26904:32;;26919:16;26904:14;:32::i;:::-;26962:60;;;;;;;;;;27002:10;;26987:13;;26962:60;;;;;;;;;26005:1025;;;;:::o;20691:3403::-;20759:45;20790:13;20759:30;:45::i;:::-;20817:18;20838:13;20852;20838:28;;;;;;;;;;;;;;;;;;;;;20905:21;;;:9;:21;;;;;;;20947:14;;;:17;20838:28;;-1:-1:-1;20905:21:0;-1:-1:-1;;;20947:17:0;;;;:22;:48;;;;-1:-1:-1;20973:14:0;;;:17;;;;;;:22;20947:48;:74;;;;-1:-1:-1;20999:14:0;;;:17;;;;;;:22;20947:74;20939:108;;;;;-1:-1:-1;;;20939:108:0;;;;;;;;;;;;-1:-1:-1;;;20939:108:0;;;;;;;;;;;;;;;21060:14;;;:21;;-1:-1:-1;;21060:21:0;;;;;:17;21122:23;21131:13;21122:8;:23::i;:::-;21107:38;;3211:6;21258:71;21306:8;:22;;;21258:43;21276:8;:24;;;21258:13;:11;:13::i;:::-;:17;:43;:17;:43;:::i;:71::-;:89;21254:137;;;-1:-1:-1;21374:5:0;21254:137;21576:21;;;;-1:-1:-1;;;;;21576:21:0;21551:24;:47;;;-1:-1:-1;;;;;;;;;;;21551:24:0;:47;:24;:47;;;21523:25;;;;:75;21519:123;;;-1:-1:-1;21625:5:0;21519:123;21793:1;21767:8;:23;;;:27;:83;;;;-1:-1:-1;21823:21:0;;;;-1:-1:-1;;;;;21823:21:0;21798:24;:47;;;-1:-1:-1;;;;;;;;;;;21798:24:0;:47;:24;:47;;;:52;21767:83;:136;;;;;3447:3;21854:20;;:49;;21767:136;21763:184;;;-1:-1:-1;21930:5:0;21763:184;22002:4;21991:15;;;;21987:1978;;;22023:14;;;:21;;-1:-1:-1;;22023:21:0;;;;;22174:18;;-1:-1:-1;;;;;22174:18:0;22023:17;22166:27;;;:7;22023:17;22166:27;;;;:34;-1:-1:-1;;;22166:34:0;;22023:21;22166:34;22043:1;22166:39;22162:471;;;22300:24;;;;22271:18;;-1:-1:-1;;;;;22271:18:0;;;22263:27;;;;:7;:27;;;;;;22271:18;22263:34;;;:61;;;22226:98;;;22413:22;;;;22386:18;;;;;22378:27;;;;;;:32;;;;:57;;;22343:92;;22162:471;;;22572:18;;22592:24;;;;22557:60;;-1:-1:-1;;;;;22572:18:0;;22557:14;:60::i;:::-;22716:18;;22763:22;;;;22736:24;;;;22701:85;;-1:-1:-1;;;;;22716:18:0;;22736:49;22701:14;:85::i;:::-;22816:24;;;;22801:11;:39;;;;;;;22868:22;;;;22855:9;:35;;;;;;;23074:21;;;;-1:-1:-1;;;;;23074:21:0;22801:11;23049:47;;;-1:-1:-1;;;;;;;;;;;23049:24:0;:47;:24;:47;;;:52;:83;;;;;23131:1;23105:8;:23;;;:27;23049:83;23045:149;;;23153:20;:25;;23177:1;23153:25;;;23045:149;23248:21;;;;23271:23;;;;23210:85;;5542:6;;5487;;-1:-1:-1;;;;;23248:21:0;;23210:22;:85::i;:::-;23340:18;;23360:21;;;;23383:25;;;;23310:99;;5487:6;;-1:-1:-1;;;;;23340:18:0;;;;23360:21;;;23310:22;:99::i;:::-;23568:21;;;;-1:-1:-1;;;;;23568:21:0;23543:24;:47;;;-1:-1:-1;;;;;;;;;;;23543:24:0;:47;:24;:47;;;:52;:85;;;;;23627:1;23599:8;:25;;;:29;23543:85;23539:151;;;23649:20;:25;;-1:-1:-1;;23649:25:0;;;23539:151;21987:1978;;;23887:17;;;;23906:21;;;;23929:23;;;;23856:97;;5542:6;;-1:-1:-1;;;;;23887:17:0;;;;23906:21;;;23856:22;:97::i;:::-;23992:16;;;;23977:32;;-1:-1:-1;;;;;23992:16:0;23977:14;:32::i;:::-;24035:51;;;;;;;;;;24066:10;;24051:13;;24035:51;;;;;;;;;20691:3403;;;;:::o;5501:48::-;5542:6;5501:48;:::o;25062:935::-;25139:12;25164:45;25195:13;25164:30;:45::i;:::-;25230:18;25251:13;25265;25251:28;;;;;;;;;;;;;;;;;;;;;25314:19;;;:7;:19;;;;;;25372:9;:21;;;;;;25422:14;;;:17;25251:28;;-1:-1:-1;25314:19:0;;25422:17;;;;;25443:1;25422:22;25414:54;;;;;-1:-1:-1;;;25414:54:0;;;;;;;;;;;;-1:-1:-1;;;25414:54:0;;;;;;;;;;;;;;;25481:14;;;:21;;-1:-1:-1;;25481:21:0;;;;;:17;25543:23;25552:13;25543:8;:23::i;:::-;25528:38;-1:-1:-1;25602:4:0;25591:15;;;;25587:315;;;25623:14;;;:21;;-1:-1:-1;;25623:21:0;;;;;25753:9;;25643:1;25774:12;;;;25753:47;;25638:1;25788:11;;;25753:47;;25623:17;;25729:20;;-1:-1:-1;;;;;25753:9:0;;;;25774:12;25788:11;;25753:47;;25788:11;;-1:-1:-1;;25753:47:0;;;;25623:21;25753:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;25714:86:0;;;;25823:7;25815:32;;;;;-1:-1:-1;;;25815:32:0;;;;;;;;;;;;-1:-1:-1;;;25815:32:0;;;;;;;;;;;;;;;25883:7;-1:-1:-1;25876:14:0;;-1:-1:-1;;;;;25876:14:0;25587:315;25927:62;;;;;;;;;;25969:10;;25954:13;;25927:62;;;;;;;;;25062:935;;;;;;;:::o;10800:2030::-;11120:18;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;3211:6;11159:34;:15;11179:13;11159:34;:19;:34;:::i;:::-;:53;;11151:77;;;;;-1:-1:-1;;;11151:77:0;;;;;;;;;;;;-1:-1:-1;;;11151:77:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11247:28:0;;;;;;:14;:28;;;;;;;;11239:69;;;;;-1:-1:-1;;;11239:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11327:28:0;;;;;;:14;:28;;;;;;;;11319:69;;;;;-1:-1:-1;;;11319:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11407:18:0;;5487:6;11407:18;;;;:41;;-1:-1:-1;;;;;;11429:19:0;;5542:6;11429:19;;11407:41;:63;;;;-1:-1:-1;;;;;;11452:18:0;;5596:6;11452:18;;11407:63;11399:98;;;;;-1:-1:-1;;;11399:98:0;;;;;;;;;;;;-1:-1:-1;;;11399:98:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11516:18:0;;;;;;:7;:18;;;;;:25;;;:30;11508:59;;;;;-1:-1:-1;;;11508:59:0;;;;;;;;;;;;-1:-1:-1;;;11508:59:0;;;;;;;;;;;;;;;11601:1;11584:14;:18;:65;;;;-1:-1:-1;;;;;;11606:38:0;;:24;:38;;;-1:-1:-1;;;;;;;;;;;11606:24:0;:38;:24;:38;;;:43;11584:65;11580:174;;;3447:3;11674:20;;:48;11666:76;;;;;-1:-1:-1;;;11666:76:0;;;;;;;;;;;;-1:-1:-1;;;11666:76:0;;;;;;;;;;;;;;;11922:4;;-1:-1:-1;;;;;11906:20:0;;;11922:4;;11906:20;:37;;;;;11942:1;11930:9;:13;11906:37;11902:474;;;11981:14;11968:9;:27;11960:56;;;;;-1:-1:-1;;;11960:56:0;;;;;;;;;;;;-1:-1:-1;;;11960:56:0;;;;;;;;;;;;;;;12037:4;;;;;;;;;-1:-1:-1;;;;;12037:4:0;-1:-1:-1;;;;;12031:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12031:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;12086:4:0;;:30;;12068:12;;-1:-1:-1;;;;;;12086:4:0;;;;-1:-1:-1;12102:9:0;;12068:12;12086:30;12068:12;12086:30;12102:9;12086:4;:30;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;12067:49:0;;;12139:7;12131:35;;;;;-1:-1:-1;;;12131:35:0;;;;;;;;;;;;-1:-1:-1;;;12131:35:0;;;;;;;;;;;;;;;12187:4;;12181:46;;;-1:-1:-1;;;12181:46:0;;12210:4;12181:46;;;;12217:9;12181:46;;;;;;-1:-1:-1;;;;;12187:4:0;;;;12181:20;;:46;;;;;;;;;;;;;;;12187:4;;12181:46;;;5:2:-1;;;;30:1;27;20:12;5:2;12181:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12181:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11902:474:0;;-1:-1:-1;;11902:474:0;;12268:76;;;-1:-1:-1;;;12268:76:0;;12302:10;12268:76;;;;12322:4;12268:76;;;;;;;;;;;;-1:-1:-1;;;;;12268:33:0;;;;;:76;;;;;;;;;;;;;;-1:-1:-1;12268:33:0;:76;;;5:2:-1;;;;30:1;27;20:12;5:2;12268:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12268:76:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12268:76:0;12260:104;;;;;-1:-1:-1;;;12260:104:0;;;;;;;;;;;;-1:-1:-1;;;12260:104:0;;;;;;;;;;;;;;;12396:56;5542:6;12423:12;12437:14;12396:18;:56::i;:::-;12465:21;;:::i;:::-;12575:140;12591:9;12602:15;12619:13;12634:14;12650:12;12664:16;12682:12;12696:7;12705:5;12575:140;;;;;;;;;;;;:15;:140::i;:::-;-1:-1:-1;;12743:13:0;;-1:-1:-1;;12743:17:0;1284:1;1598:7;:22;10800:2030;;-1:-1:-1;;;;;;;;10800:2030:0:o;2158:64::-;;;-1:-1:-1;;;;;2158:64:0;;:::o;5447:47::-;5487:6;5447:47;:::o;288:150::-;346:7;379:1;374;:6;;366:15;;;;;;-1:-1:-1;404:5:0;;;288:150::o;671:149::-;729:7;761:1;757;:5;749:14;;;;;;774:9;790:1;786;:5;;;;;;;671:149;-1:-1:-1;;;;671:149:0:o;31869:379::-;31972:10;31954:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;31954:36:0;;;;;;;;;;:46;-1:-1:-1;31954:46:0;31946:79;;;;;-1:-1:-1;;;31946:79:0;;;;;;;;;;;;-1:-1:-1;;;31946:79:0;;;;;;;;;;;;;;;32054:42;;;-1:-1:-1;;;32054:42:0;;32077:10;32054:42;;;;;;;;;;;;-1:-1:-1;;;;;32054:22:0;;;;;:42;;;;;;;;;;;;;;-1:-1:-1;32054:22:0;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;32054:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32054:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32054:42:0;32046:70;;;;;-1:-1:-1;;;32046:70:0;;;;;;;;;;;;-1:-1:-1;;;32046:70:0;;;;;;;;;;;;;;;32127:52;32153:10;32165:5;32172:6;32127:25;:52::i;:::-;32205:35;;;-1:-1:-1;;;;;32205:35:0;;;;;;;;;;;;32214:10;;32205:35;;;;;;;;31869:379;;:::o;29015:1691::-;29119:33;29155:13;:11;:13::i;:::-;-1:-1:-1;;;;;29205:22:0;;29181:21;29205:22;;;:7;:22;;;;;29248:13;;;;29119:49;;-1:-1:-1;29205:22:0;29248:29;-1:-1:-1;29248:29:0;29240:61;;;;;-1:-1:-1;;;29240:61:0;;;;;;;;;;;;-1:-1:-1;;;29240:61:0;;;;;;;;;;;;;;;29335:10;29320:6;:11;;;:25;;29312:55;;;;;-1:-1:-1;;;29312:55:0;;;;;;;;;;;;-1:-1:-1;;;29312:55:0;;;;;;;;;;;;;;;29388:39;29400:6;:26;;;29388:11;:39::i;:::-;29380:129;;;;-1:-1:-1;;;29380:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29522:27;29552:28;:12;29569:10;29552:28;:16;:28;:::i;:::-;29634:13;;;:29;;;;;;;29674:11;;;:25;;;;;;;29522:58;-1:-1:-1;29710:50:0;29725:13;29522:58;29710:14;:50::i;:::-;29771:11;:27;;;;;;;29809:9;:23;;;;;;;29771:11;29845:787;29869:14;:21;29865:25;;29845:787;;;5487:6;29912:24;29949;;;:17;:24;;29974:14;:17;;29939:102;;-1:-1:-1;;;;;;;;;;;29949:24:0;29912;;29974:14;29989:1;;29974:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29974:17:0;29949:43;;;;;;;;;;;;;29994:19;30015:25;29939:9;:102::i;:::-;29912:129;-1:-1:-1;30060:20:0;;30056:565;;5487:6;30452:24;;;;:17;:24;;30477:14;:17;;30499:16;;-1:-1:-1;;;;;;;;;;;30452:24:0;;;30492:1;;30477:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30477:17:0;;;30452:43;;;;;;;;;;;;;;;:63;;;;;;;;;30534:32;;;;;:17;:32;;;;;;30567:14;:17;;30589:16;;30477:17;30567:14;30582:1;;30567:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30567:17:0;30534:51;;;;;;;;;;;;:71;;;;;;;30056:565;-1:-1:-1;29892:3:0;;29845:787;;;-1:-1:-1;30649:49:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30649:49:0;;;;;;;;;;;29015:1691;;;;;;:::o;27966:572::-;28078:13;:20;28062:36;;28054:65;;;;;-1:-1:-1;;;28054:65:0;;;;;;;;;;;;-1:-1:-1;;;28054:65:0;;;;;;;;;;;;;;;28130:24;;:::i;:::-;28157:9;:39;28167:13;28181;28167:28;;;;;;;;;;;;;;;;;;;;;28157:39;;;;;;;;;;;;;;;28130:66;;;;;;;;;-1:-1:-1;;;;;28130:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28157:39;;28130:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28286:17;;28265:18;;28239:8;:23;;;:44;:64;28217:18;:16;:18::i;:::-;:86;;28209:117;;;;;-1:-1:-1;;;28209:117:0;;;;;;;;;;;;-1:-1:-1;;;28209:117:0;;;;;;;;;;;;;;;28345:14;;;;:17;;;:22;;;28337:61;;;;;-1:-1:-1;;;28337:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28417:18;;;:79;;;28439:9;:43;28449:13;28479:1;28463:13;:17;28449:32;;;;;;;;;;;;;;;;28439:43;;;;;;;;;;;:49;;28489:1;28439:52;;;;;;;;;;;;;;;;;;;;;;;;;:57;;28495:1;28439:57;28417:79;28409:121;;;;;-1:-1:-1;;;28409:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27038:920;27102:12;27127:24;;:::i;:::-;27154:9;:39;27164:13;27178;27164:28;;;;;;;;;;;;;;;;;;;;;27154:39;;;;;;;;;;;;;;;27127:66;;;;;;;;;-1:-1:-1;;;;;27127:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27154:39;;27127:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27238:8;:16;;;27218:8;:17;;;:36;27214:83;;;27281:4;27271:14;;27214:83;27426:8;:39;;;27390:32;27408:13;;27390;:11;:13::i;:::-;:17;:32;:17;:32;:::i;:::-;27389:76;27385:124;;;27492:5;27482:15;;27385:124;27849:18;;-1:-1:-1;;;;;27841:27:0;;;;;:7;:27;;;;;:34;;;:39;27837:87;;27907:5;27897:15;;27837:87;-1:-1:-1;27038:920:0;;;:::o;28546:243::-;28650:12;;28664:16;;28607:74;;5542:6;;28638:10;;-1:-1:-1;;;;;28650:12:0;;28607:22;:74::i;:::-;28732:12;;28764:16;;28746:15;;28692:89;;5542:6;;28723:7;;-1:-1:-1;;;;;28732:12:0;;;;28746:34;28692:22;:89::i;:::-;28546:243;:::o;37571:193::-;-1:-1:-1;;;;;37664:23:0;;;;;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;:40;;;;;;37715:24;:31;;;;;;:41;;;;;;;37571:193::o;14747:1763::-;15115:24;;:::i;:::-;15142:595;;;;;;;;15178:9;-1:-1:-1;;;;;15142:595:0;;;;;15213:10;-1:-1:-1;;;;;15142:595:0;;;;;15256:1;-1:-1:-1;;;;;15142:595:0;;;;;15288:12;-1:-1:-1;;;;;15142:595:0;;;;;15330:12;-1:-1:-1;;;;;15142:595:0;;;;;15365:5;15142:595;;;;15403:15;15142:595;;;;15449:13;15142:595;;;;15496:16;15142:595;;;;15544:14;15142:595;;;;15590:1;15142:595;;;;15617:1;15142:595;;;;15643:1;15142:595;;;;15692:1;15142:595;;;;15718:7;15142:595;;;15115:622;;15794:8;:14;;;15809:1;15794:17;;;;;;;;;;;:22;;15815:1;15794:22;15790:277;;;15833:20;;:::i;:::-;-1:-1:-1;15856:135:0;;;;;;;;-1:-1:-1;;;;;15856:135:0;;;;;;;;;;;;;;;;;;16032:13;;-1:-1:-1;16024:22:0;;;:7;:22;;;;;;:31;;;;-1:-1:-1;;;;;;16024:31:0;;;;;;;;;;-1:-1:-1;16024:31:0;;;;;;;15856:135;;;;16024:31;;;;;;;;;:::i;:::-;-1:-1:-1;;;;15790:277:0;16097:13;;16087:24;;;;:9;:24;;;;;;;;;:35;;;;-1:-1:-1;;;;;;16087:35:0;;;-1:-1:-1;;;;;16087:35:0;;;;;;;;;;-1:-1:-1;16087:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16133:21;16157:26;:38;16184:10;-1:-1:-1;;;;;16157:38:0;-1:-1:-1;;;;;16157:38:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16157:38:0;16133:62;;16449:13;-1:-1:-1;;;;;16274:189:0;16437:10;-1:-1:-1;;;;;16274:189:0;16289:9;-1:-1:-1;;;;;16274:189:0;;16300:15;16317:13;16332:14;16348:12;16362:16;16380:12;16394:7;16403:5;16410:10;16422:13;;16274:189;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16274:189:0;-1:-1:-1;;;;;16274:189:0;;;;;;;;;;;-1:-1:-1;;;;;16274:189:0;-1:-1:-1;;;;;16274:189:0;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16274:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16274:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16484:13:0;:18;;16501:1;16484:18;;;-1:-1:-1;;;;;;;;;;14747:1763:0:o;35036:107::-;35094:7;35126:1;35121;:6;;:14;;35134:1;35121:14;;;35130:1;35121:14;35114:21;35036:107;-1:-1:-1;;;35036:107:0:o;126:150::-;184:7;216:5;;;240:6;;;;232:15;;;;;36754:805;-1:-1:-1;;;;;36948:37:0;;;36940:46;36948:37;;;:26;:37;;;;;;;;;;;;36940:46;;:7;:46;;;:53;;-1:-1:-1;;;36940:53:0;;;;36948:37;36940:58;36936:304;;;-1:-1:-1;;;;;37042:37:0;;;37015:24;37042:37;;;:26;:37;;;;;;;;;;;;37094:44;;;;;;:63;;-1:-1:-1;;;;;;37094:63:0;;;;;;;;37172:7;:25;;;;;;;:56;;;;;;;;;;36936:304;37281:208;;;;;;;;-1:-1:-1;;;;;37281:208:0;;;;;;37350:1;37281:208;;;;;;;;;;;;;-1:-1:-1;37281:208:0;;;;;;;;;;;;;;;;;;37260:18;;;:7;:18;;;;;:229;;;;;;37281:208;37260:229;-1:-1:-1;;;37260:229:0;-1:-1:-1;;;;37260:229:0;;;;-1:-1:-1;;;;;;37260:229:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37502:26;:37;;;;:49;;;;;;;;;;36754:805::o;40230:193::-;-1:-1:-1;;;;;40313:23:0;;;;;;:8;:23;;;;;;;;:33;;;;;;40372:43;;;;;;;;;;;;;;;;;;40230:193;;:::o;37776:211::-;37885:46;37911:4;37917:5;37924:6;37885:25;:46::i;:::-;37942:37;37961:2;37965:5;37972:6;37942:18;:37::i;:::-;37776:211;;;;:::o;37995:200::-;-1:-1:-1;;;;;38095:23:0;;;;;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;:40;;;;;;;38146:24;:31;;;;;;:41;;;;;;;;37995:200::o;38870:193::-;-1:-1:-1;;;;;38953:23:0;;;;;;:8;:23;;;;;;;;:33;;;;;;;39012:43;;;;;;;38953:23;;;39012:43;;;;;;;;;;;38870:193;;:::o;36292:450::-;36395:7;36423:23;36415:32;;;;;;36464:12;36460:31;;-1:-1:-1;36487:1:0;36480:8;;36460:31;36518:16;;;36528:6;36518:7;:16;:7;36551:14;;;;;:24;36547:129;;;36646:18;36639:4;:25;;;;;;36632:32;;;;;36547:129;36728:6;36706:18;36696:7;:28;;;;;;36695:39;;36292:450;-1:-1:-1;;;;;36292:450:0:o;450:213::-;508:7;532:6;528:47;;-1:-1:-1;562:1:0;555:8;;528:47;599:5;;;603:1;599;:5;:1;623:5;;;;;:10;615:19;;;;;1841:39039;;;;;;;;;;-1:-1:-1;;;;;1841:39039:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;1841:39039:0;;;-1:-1:-1;;1841:39039:0:o;:::-;;;;;;;;;-1:-1:-1;1841:39039:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;1841:39039:0;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1841:39039:0;;;-1:-1:-1;1841:39039:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1841:39039:0;;;-1:-1:-1;1841:39039:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1841:39039:0;;;;;;

Swarm Source

bzzr://7a5d3c6d2366eb79ed02b3eba85b47da141d58c3e6517e0f1f03b4051e05c0a5

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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