ETH Price: $3,913.04 (+0.12%)
Gas: 9.34 Gwei

Token

ERC-20: Baal (BAAL)
 

Overview

Max Total Supply

70,000 BAAL

Holders

7

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
hq.spengrah.eth
Balance
10,000 BAAL

Value
$0.00
0x15c6ac4cf1b5e49c44332fb0a1043ccab19db80a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Baal

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 222 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-18
*/

// SPDX-License-Identifier: UNLICENSED
/*
███   ██   ██   █     
█  █  █ █  █ █  █     
█ ▀ ▄ █▄▄█ █▄▄█ █     
█  ▄▀ █  █ █  █ ███▄  
███      █    █     ▀ 
        █    █        
       ▀    ▀*/
pragma solidity >=0.8.0;

/// @notice Interface for Baal {memberAction} that adjusts member `shares` & `loot`.
interface IShaman {
    function memberAction(address member, uint96 loot, uint96 shares) external payable returns (uint96 lootOut, uint96 sharesOut);
}

/// @title Baal ';_;'.
/// @notice Flexible guild contract inspired by Moloch DAO framework.
contract Baal {
    bool public lootPaused; /*tracks transferability of `loot` economic weight - amendable through 'period'[2] proposal*/
    bool public sharesPaused; /*tracks transferability of erc20 `shares` - amendable through 'period'[2] proposal*/
    bool singleSummoner; /*internal flag to gauge speedy proposal processing*/
    
    uint8  constant public decimals = 18; /*unit scaling factor in erc20 `shares` accounting - '18' is default to match ETH & common erc20s*/
    uint16 constant MAX_GUILD_TOKEN_COUNT = 400; /*maximum number of whitelistable tokens subject to {ragequit}*/
    
    uint96 public totalLoot; /*counter for total `loot` economic weight held by `members`*/  
    uint96 public totalSupply; /*counter for total `members` voting `shares` with erc20 accounting*/
    
    uint32 public flashFeeNumerator; /*tracks 'fee' numerator for {flashLoan} in {flashFee} - e.g., '1 = 0.0001%'*/
    uint32 public gracePeriod; /*time delay after proposal voting period for processing*/
    uint32 public minVotingPeriod; /*minimum period for voting in seconds - amendable through 'period'[2] proposal*/
    uint32 public maxVotingPeriod; /*maximum period for voting in seconds - amendable through 'period'[2] proposal*/
    uint public proposalCount; /*counter for total `proposals` submitted*/
    uint status; /*internal reentrancy check tracking value*/
    
    string public name; /*'name' for erc20 `shares` accounting*/
    string public symbol; /*'symbol' for erc20 `shares` accounting*/
    
    bytes32 constant DOMAIN_TYPEHASH = keccak256('EIP712Domain(string name,uint chainId,address verifyingContract)'); /*EIP-712 typehash for Baal domain*/
    bytes32 constant DELEGATION_TYPEHASH = keccak256('Delegation(address delegatee,uint nonce,uint expiry)'); /*EIP-712 typehash for Baal delegation*/
    bytes32 constant PERMIT_TYPEHASH = keccak256('Permit(address owner,address spender,uint value,uint nonce,uint deadline)'); /*EIP-712 typehash for EIP-2612 {permit}*/
    bytes32 constant VOTE_TYPEHASH = keccak256('Vote(uint proposalId,bool support)'); /*EIP-712 typehash for Baal proposal vote*/
    
    address[] guildTokens; /*array list of erc20 tokens approved on summoning or by 'whitelist'[3] `proposals` for {ragequit} claims*/
    
    mapping(address => mapping(address => uint))    public allowance; /*maps approved pulls of `shares` with erc20 accounting*/
    mapping(address => uint)                        public balanceOf; /*maps `members` accounts to `shares` with erc20 accounting*/
    mapping(address => mapping(uint => Checkpoint)) public checkpoints; /*maps record of vote `checkpoints` for each account by index*/
    mapping(address => uint)                        public numCheckpoints; /*maps number of `checkpoints` for each account*/
    mapping(address => address)                     public delegates; /*maps record of each account's `shares` delegate*/
    mapping(address => uint)                        public nonces; /*maps record of states for signing & validating signatures*/
    
    mapping(address => Member) public members; /*maps `members` accounts to struct details*/
    mapping(uint => Proposal)  public proposals; /*maps `proposalCount` to struct details*/
    mapping(uint => bool)      public proposalsPassed; /*maps `proposalCount` to approval status - separated out as struct is deleted, and this value can be used by minion-like contracts*/
    mapping(address => bool)   public shamans; /*maps contracts approved in 'whitelist'[3] proposals for {memberAction} that mint or burn `shares`*/
    
    event SummonComplete(bool lootPaused, bool sharesPaused, uint gracePeriod, uint minVotingPeriod, uint maxVotingPeriod, string name, string symbol, address[] guildTokens, address[] shamans, address[] summoners, uint96[] loot, uint96[] shares); /*emits after Baal summoning*/
    event SubmitProposal(uint8 indexed flag, uint indexed proposal, uint indexed votingPeriod, address[] to, uint96[] value, bytes[] data, string details); /*emits after proposal is submitted*/
    event SponsorProposal(address indexed member, uint indexed proposal, uint indexed votingStarts); /*emits after member has sponsored proposal*/
    event SubmitVote(address indexed member, uint balance, uint indexed proposal, bool indexed approved); /*emits after vote is submitted on proposal*/
    event ProcessProposal(uint indexed proposal); /*emits when proposal is processed & executed*/
    event Ragequit(address indexed member, address to, uint96 indexed lootToBurn, uint96 indexed sharesToBurn); /*emits when users burn Baal `shares` and/or `loot` for given `to` account*/
    event Approval(address indexed owner, address indexed spender, uint amount); /*emits when Baal `shares` are approved for pulls with erc20 accounting*/
    event Transfer(address indexed from, address indexed to, uint amount); /*emits when Baal `shares` are minted, burned or transferred with erc20 accounting*/
    event TransferLoot(address indexed from, address indexed to, uint96 amount); /*emits when Baal `loot` is minted, burned or transferred*/
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /*emits when an account changes its voting delegate*/
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /*emits when a delegate account's voting balance changes*/
    
    modifier nonReentrant() { /*reentrancy guard*/
        require(status == 1,'reentrant'); 
        status = 2; 
        _;
        status = 1;
    }
    
    struct Checkpoint { /*Baal checkpoint for marking number of delegated votes*/
        uint32 fromTimeStamp; /*unix time for referencing voting balance*/
        uint96 votes; /*votes at given unix time*/
    }
 
    struct Member { /*Baal membership details*/
        uint96 loot; /*economic weight held by `members` - can be set on summoning & adjusted via {memberAction}*/
        uint highestIndexYesVote; /*highest proposal index on which a member `approved`*/
        mapping(uint => bool) voted; /*maps voting decisions on proposals by `members` account*/
    }
    
    struct Proposal { /*Baal proposal details*/
        uint32 votingPeriod; /*time for voting in seconds*/
        uint32 votingStarts; /*starting time for proposal in seconds since unix epoch*/
        uint32 votingEnds; /*termination time for proposal in seconds since unix epoch - derived from `votingPeriod` set on proposal*/
        uint96 yesVotes; /*counter for `members` `approved` 'votes' to calculate approval on processing*/
        uint96 noVotes; /*counter for `members` 'dis-approved' 'votes' to calculate approval on processing*/
        bool[4] flags; /*flags for proposal type & status - [action, member, period, whitelist]*/
        address[] to; /*account(s) that receive(s) Baal state updates*/
        uint96[] value; /*value(s) associated with Baal state updates (also used to toggle)*/
        bytes[] data; /*raw data associated with Baal state updates (also used to toggle)*/
        string details; /*human-readable context for proposal*/
    }

    /// @notice Summon Baal with voting configuration & initial array of `members` accounts with `shares` & `loot` weights.
    /// @param _sharesPaused Sets transferability of Baal voting shares on initialization - if 'paused', `loot` will also be 'paused'.
    /// @param _gracePeriod Time delay in seconds after voting period before proposal can be processed.
    /// @param _minVotingPeriod Minimum voting period in seconds for `members` to cast votes on proposals.
    /// @param _maxVotingPeriod Maximum voting period in seconds for `members` to cast votes on proposals.
    /// @param _name Name for erc20 `shares` accounting.
    /// @param _symbol Symbol for erc20 `shares` accounting.
    /// @param _guildTokens Tokens approved for internal accounting - {ragequit} of `shares` &/or `loot`.
    /// @param _shamans External contracts approved for {memberAction} that adjust `shares` & `loot`.
    /// @param _summoners Accounts to add as `members`.
    /// @param _loot Economic weight among `members`.
    /// @param _shares Voting weight among `members` (`shares` also have economic weight & are erc20 tokens).
    constructor(
        bool             _sharesPaused,
        uint32           _gracePeriod,
        uint32           _minVotingPeriod, 
        uint32           _maxVotingPeriod,
        string    memory _name, 
        string    memory _symbol,
        address[] memory _guildTokens,
        address[] memory _shamans, 
        address[] memory _summoners, 
        uint96[]  memory _loot, 
        uint96[]  memory _shares
    ) {
        require(_minVotingPeriod != 0,'0_min'); /*check min. period isn't null*/
        require(_minVotingPeriod <= _maxVotingPeriod,'min>max'); /*check minimum period doesn't exceed max*/
        require(_guildTokens.length != 0,'0_tokens'); /*check approved tokens are not null*/
        require(_summoners.length != 0,'0_summoners'); /*check that there is at least 1 summoner*/
        require(_summoners.length == _loot.length && _loot.length == _shares.length,'!member array parity'); /*check `members`-related array lengths match*/
        
        unchecked {
            for (uint i; i < _shamans.length; i++) shamans[_shamans[i]] = true; /*update mapping of approved `shamans` in Baal*/
            for (uint i; i < _guildTokens.length; i++) guildTokens.push(_guildTokens[i]); /*update array of `guildTokens` approved for {ragequit}*/
            for (uint i; i < _summoners.length; i++) {
                _mintLoot(_summoners[i], _loot[i]); /*mint Baal `loot` to `summoners`*/
                _mintShares(_summoners[i], _shares[i]); /*mint Baal `shares` to `summoners`*/ 
                _delegate(_summoners[i], _summoners[i]); /*delegate `summoners` voting weights to themselves - this saves a step before voting*/
                if (_summoners.length == 1) singleSummoner = true; /*flag if Baal summoned singly for speedy processing*/
            }
        }
        
        gracePeriod = _gracePeriod; /*sets delay for processing proposal*/
        minVotingPeriod = _minVotingPeriod; /*set minimum voting period - adjustable via 'period'[2] proposal*/
        maxVotingPeriod = _maxVotingPeriod; /*set maximum voting period - adjustable via 'period'[2] proposal*/
        if (_sharesPaused) lootPaused = true; /*set initial transferability for `loot` - if `sharesPaused`, transfers are blocked*/
        sharesPaused = _sharesPaused; /*set initial transferability for `shares` tokens - if 'true', transfers are blocked*/
        name = _name; /*initialize Baal `name` with erc20 accounting*/
        symbol = _symbol; /*initialize Baal `symbol` with erc20 accounting*/
        status = 1; /*initialize 'reentrancy guard' status*/
        
        emit SummonComplete(lootPaused, _sharesPaused, _gracePeriod, _minVotingPeriod, _maxVotingPeriod, _name, _symbol, _guildTokens, _shamans, _summoners, _loot, _shares); /*emit event reflecting Baal summoning completed*/
    }

    /// @notice Execute membership action to mint or burn `shares` and/or `loot` against whitelisted `shamans` in consideration of user & given amounts.
    /// @param shaman Whitelisted contract to trigger action.
    /// @param loot Economic weight involved in external call.
    /// @param shares Voting weight involved in external call.
    /// @param mint Confirm whether action involves 'mint' or 'burn' action - if `false`, perform burn.
    /// @return lootOut sharesOut Membership updates derived from action.
    function memberAction(
        address shaman, 
        uint96 loot, 
        uint96 shares, 
        bool mint
    ) external nonReentrant payable returns (uint96 lootOut, uint96 sharesOut) {
        require(shamans[shaman],'!shaman'); /*check `shaman` is approved*/
        
        (lootOut, sharesOut) = IShaman(shaman).memberAction{value: msg.value}(msg.sender, loot, shares); /*fetch 'reaction' per inputs*/
        
        if (mint) { /*execute `mint` actions*/
            if (lootOut != 0) _mintLoot(msg.sender, lootOut); /*add `loot` to user account & Baal total*/
            if (sharesOut != 0) _mintShares(msg.sender, sharesOut); /*add `shares` to user account & Baal total with erc20 accounting*/
        } else { /*otherwise, execute `burn` actions*/
            if (lootOut != 0) _burnLoot(msg.sender, lootOut); /*subtract `loot` from user account & Baal total*/
            if (sharesOut != 0) _burnShares(msg.sender, sharesOut); /*subtract `shares` from user account & Baal total with erc20 accounting*/
        }
    }
    
    /*****************
    PROPOSAL FUNCTIONS
    *****************/
    /// @notice Submit proposal to Baal `members` for approval within given voting period.
    /// @param flag Index to assign proposal type '[0...3]'.
    /// @param votingPeriod Voting period in seconds.
    /// @param to Account to target for proposal.
    /// @param value Numerical value to bind to proposal.
    /// @param data Data to bind to proposal.
    /// @param details Context for proposal.
    /// @return proposal Count for submitted proposal.
    function submitProposal(
        uint8 flag, 
        uint32 votingPeriod, 
        address[] calldata to, 
        uint96[] calldata value, 
        bytes[] calldata data, 
        string calldata details
    ) external nonReentrant returns (uint proposal) {
        require(minVotingPeriod <= votingPeriod && votingPeriod <= maxVotingPeriod,'!votingPeriod'); /*check voting period is within Baal bounds*/
        require(to.length <= 10,'array max'); /*limit executable actions to help avoid block gas limit errors on processing*/
        require(flag <= 3,'!flag'); /*check 'flag' is in bounds*/
        
        bool[4] memory flags; /*plant `flags` - [action, member, period, whitelist]*/
        flags[flag] = true; /*flag proposal type for struct storage*/ 
        
        if (flag == 2) {
            if (value.length == 1) {
                require(value[0] <= maxVotingPeriod,'over max');
            } else if (value.length == 2) {
                require(value[1] >= minVotingPeriod,'under min');
            }
        } else {
            require(to.length == value.length && value.length == data.length,'!array parity'); /*check array lengths match*/
        }
        
        bool selfSponsor; /*plant sponsor flag*/
        if (balanceOf[msg.sender] != 0) selfSponsor = true; /*if a member, self-sponsor*/

        unchecked {
            proposalCount++; /*increment proposal counter*/
            proposals[proposalCount] = Proposal( /*push params into proposal struct - start voting period timer if member submission*/
                votingPeriod,
                selfSponsor ? uint32(block.timestamp) : 0, 
                selfSponsor ? uint32(block.timestamp) + votingPeriod : 0, 
                0, 0, flags, to, value, data, details
            );
        }
        
        emit SubmitProposal(flag, proposal, votingPeriod, to, value, data, details); /*emit event reflecting proposal submission*/
    }
    
    /// @notice Sponsor proposal to Baal `members` for approval within voting period.
    /// @param proposal Number of proposal in `proposals` mapping to sponsor.
    function sponsorProposal(uint proposal) external nonReentrant {
        Proposal storage prop = proposals[proposal]; /*alias proposal storage pointers*/
        
        require(balanceOf[msg.sender] != 0,'!member'); /*check 'membership' - required to sponsor proposal*/
        require(prop.votingPeriod != 0,'!exist'); /*check proposal existence*/
        require(prop.votingStarts == 0,'sponsored'); /*check proposal not already sponsored*/
        
        prop.votingStarts = uint32(block.timestamp);
        
        unchecked {
            prop.votingEnds = uint32(block.timestamp) + prop.votingPeriod;
        }

        emit SponsorProposal(msg.sender, proposal, block.timestamp);
    }

    /// @notice Submit vote - proposal must exist & voting period must not have ended.
    /// @param proposal Number of proposal in `proposals` mapping to cast vote on.
    /// @param approved If 'true', member will cast `yesVotes` onto proposal - if 'false', `noVotes` will be counted.
    function submitVote(uint proposal, bool approved) external nonReentrant {
        Proposal storage prop = proposals[proposal]; /*alias proposal storage pointers*/
        
        uint96 balance = getPriorVotes(msg.sender, prop.votingStarts); /*fetch & gas-optimize voting weight at proposal creation time*/
        
        require(prop.votingEnds >= block.timestamp,'ended'); /*check voting period has not ended*/
        require(!members[msg.sender].voted[proposal],'voted'); /*check vote not already cast*/
        
        unchecked {
            if (approved) { /*if `approved`, cast delegated balance `yesVotes` to proposal*/
                prop.yesVotes += balance; 
                members[msg.sender].highestIndexYesVote = proposal;
            } else { /*otherwise, cast delegated balance `noVotes` to proposal*/
                prop.noVotes += balance;
            }
        }
        
        members[msg.sender].voted[proposal] = true; /*record voting action to `members` struct per user account*/

        emit SubmitVote(msg.sender, balance, proposal, approved); /*emit event reflecting vote*/
    }
    
    /// @notice Submit vote with EIP-712 signature - proposal must exist & voting period must not have ended.
    /// @param proposal Number of proposal in `proposals` mapping to cast vote on.
    /// @param approved If 'true', member will cast `yesVotes` onto proposal - if 'false', `noVotes` will be counted.
    /// @param v The recovery byte of the signature.
    /// @param r Half of the ECDSA signature pair.
    /// @param s Half of the ECDSA signature pair.
    function submitVoteWithSig(
        uint proposal, 
        bool approved, 
        uint8 v, 
        bytes32 r, 
        bytes32 s
    ) external nonReentrant {
        Proposal storage prop = proposals[proposal]; /*alias proposal storage pointers*/
        
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), block.chainid, address(this))); /*calculate EIP-712 domain hash*/
        bytes32 structHash = keccak256(abi.encode(VOTE_TYPEHASH, proposal, approved)); /*calculate EIP-712 struct hash*/
        bytes32 digest = keccak256(abi.encodePacked('\x19\x01', domainSeparator, structHash)); /*calculate EIP-712 digest for signature*/
        address signatory = ecrecover(digest, v, r, s); /*recover signer from hash data*/
        
        require(signatory != address(0),'!signatory'); /*check signer is not null*/
        
        uint96 balance = getPriorVotes(signatory, prop.votingStarts); /*fetch & gas-optimize voting weight at proposal creation time*/
        
        require(prop.votingEnds >= block.timestamp,'ended'); /*check voting period has not ended*/
        require(!members[signatory].voted[proposal],'voted'); /*check vote not already cast*/
        
        unchecked {
            if (approved) { /*if `approved`, cast delegated balance `yesVotes` to proposal*/
                prop.yesVotes += balance; members[signatory].highestIndexYesVote = proposal;
            } else { /*otherwise, cast delegated balance `noVotes` to proposal*/
                prop.noVotes += balance;
            }
        }
        
        members[signatory].voted[proposal] = true; /*record voting action to `members` struct per user account*/
        
        emit SubmitVote(signatory, balance, proposal, approved); /*emit event reflecting vote*/
    }
        
    // ********************
    // PROCESSING FUNCTIONS
    // ********************
    /// @notice Process `proposal` & execute internal functions based on `flag`[#].
    /// @param proposal Number of proposal in `proposals` mapping to process for execution.
    function processProposal(uint proposal) external nonReentrant {
        Proposal storage prop = proposals[proposal]; /*alias `proposal` storage pointers*/
        
        _processingReady(proposal, prop); /*validate `proposal` processing requirements*/
        
        if (prop.yesVotes > prop.noVotes) /*check if `proposal` approved by simple majority of members*/
            proposalsPassed[proposal] = true; /*flag that proposal passed - allows minion-like extensions*/
            if (prop.flags[0]) processActionProposal(prop); /*check `flag`, execute 'action'*/
            else if (prop.flags[1]) processMemberProposal(prop); /*check `flag`, execute 'member'*/
            else if (prop.flags[2]) processPeriodProposal(prop); /*check `flag`, execute 'period'*/
            else processWhitelistProposal(prop); /*otherwise, execute 'whitelist'*/
            
        delete proposals[proposal]; /*delete given proposal struct details for gas refund & the commons*/
        
        emit ProcessProposal(proposal); /*emit event reflecting that given proposal processed*/
    }
    
    /// @notice Internal function to process 'action'[0] proposal.
    function processActionProposal(Proposal memory prop) private {
        unchecked {
            for (uint i; i < prop.to.length; i++) 
                prop.to[i].call{value:prop.value[i]} /*pass ETH value(s), if any*/
                (prop.data[i]); /*execute low-level call(s)*/
        }
    }
    
    /// @notice Internal function to process 'member'[1] proposal.
    function processMemberProposal(Proposal memory prop) private {
        unchecked {
            for (uint i; i < prop.to.length; i++) {
                if (prop.data[i].length == 0) {
                    _mintShares(prop.to[i], prop.value[i]); /*grant `to` `value` `shares`*/
                } else {
                    uint96 removedBalance = uint96(balanceOf[prop.to[i]]); /*gas-optimize variable*/
                    _burnShares(prop.to[i], removedBalance); /*burn all of `to` `shares` & convert into `loot`*/
                    _mintLoot(prop.to[i], removedBalance); /*mint equivalent `loot`*/
                }
            }
        }
    }
    
    /// @notice Internal function to process 'period'[2] proposal - state updates are broken up for security.
    function processPeriodProposal(Proposal memory prop) private {
        uint length = prop.value.length;
        
        if (length == 1) {
            if (prop.value[0] != 0) minVotingPeriod = uint32(prop.value[0]); /*if positive, reset min. voting period to first `value`*/ 
        } else if (length == 2) {
            if (prop.value[1] != 0) maxVotingPeriod = uint32(prop.value[1]); /*if positive, reset max. voting period to second `value`*/
        } else if (length == 3) {
            if (prop.value[2] != 0) gracePeriod = uint32(prop.value[2]); /*if positive, reset grace period to third `value`*/
        } else if (length == 4) {
            if (prop.value[3] != 0) flashFeeNumerator = uint32(prop.value[3]); /*if positive, reset grace period to fourth `value`*/
        } else if (length == 5) {
            prop.value[4] == 0 ? lootPaused = false : lootPaused = true; /*if positive, pause `loot` transfers on fifth `value`*/
        } else if (length == 6) {
            prop.value[5] == 0 ? sharesPaused = false : sharesPaused = true; /*if positive, pause `shares` transfers on sixth `value`*/
        }
    }  
        
    /// @notice Internal function to process 'whitelist'[3] proposal - toggles included for security.
    function processWhitelistProposal(Proposal memory prop) private {
        unchecked {
            for (uint i; i < prop.to.length; i++) {
                if (prop.value[i] == 0 && prop.data[i].length == 0) { /*if `value` & `data` are null, approve `shamans`*/
                    shamans[prop.to[i]] = true; /*add account(s) to `shamans` extensions*/
                } else if (prop.value[i] == 0 && prop.data[i].length != 0) { /*if `value` is null & `data` is populated, remove `shamans`*/
                    shamans[prop.to[i]] = false; /*remove account(s) from `shamans` extensions*/
                } else if (prop.value[i] != 0 && prop.data[i].length == 0) { /*if `value` is positive & `data` is null, add `guildTokens`*/
                    if (guildTokens.length != MAX_GUILD_TOKEN_COUNT) guildTokens.push(prop.to[i]); /*push account to `guildTokens` array if within 'MAX'*/
                }
            }
        }
    }
    
    /*******************
    GUILD MGMT FUNCTIONS
    *******************/
    /// @notice Approve `to` to transfer up to `amount`.
    /// @return success Whether or not the approval succeeded.
    function approve(address to, uint amount) external returns (bool success) {
        allowance[msg.sender][to] = amount; /*adjust `allowance`*/
        
        emit Approval(msg.sender, to, amount); /*emit event reflecting approval*/
        
        success = true; /*confirm approval with ERC-20 accounting*/
    }
    
    /// @notice Delegate votes from user to `delegatee`.
    /// @param delegatee The address to delegate votes to.
    function delegate(address delegatee) external {
        _delegate(msg.sender, delegatee);
    }
    
    /// @notice Delegates votes from `signatory` to `delegatee` with EIP-712 signature.
    /// @param delegatee The address to delegate 'votes' to.
    /// @param nonce The contract state required to match the signature.
    /// @param deadline The time at which to expire the signature.
    /// @param v The recovery byte of the signature.
    /// @param r Half of the ECDSA signature pair.
    /// @param s Half of the ECDSA signature pair.
    function delegateBySig(
        address delegatee, 
        uint nonce, 
        uint deadline, 
        uint8 v, 
        bytes32 r, 
        bytes32 s
    ) external {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), block.chainid, address(this))); /*calculate EIP-712 domain hash*/
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, deadline)); /*calculate EIP-712 struct hash*/
        bytes32 digest = keccak256(abi.encodePacked('\x19\x01', domainSeparator, structHash)); /*calculate EIP-712 digest for signature*/
        address signatory = ecrecover(digest, v, r, s); /*recover signer from hash data*/
            
        require(signatory != address(0),'!signatory'); /*check signer is not null*/
        unchecked {
            require(nonce == nonces[signatory]++,'!nonce'); /*check given `nonce` is next in `nonces`*/
        }
        require(block.timestamp <= deadline,'expired'); /*check signature is not expired*/
            
        _delegate(signatory, delegatee); /*execute delegation*/
    }

    /// @notice Triggers an approval from `owner` to `spender` with EIP-712 signature.
    /// @param owner The address to approve from.
    /// @param spender The address to be approved.
    /// @param amount The number of `shares` tokens that are approved (2^256-1 means infinite).
    /// @param deadline The time at which to expire the signature.
    /// @param v The recovery byte of the signature.
    /// @param r Half of the ECDSA signature pair.
    /// @param s Half of the ECDSA signature pair.
    function permit(
        address owner, 
        address spender, 
        uint96 amount, 
        uint deadline, 
        uint8 v, 
        bytes32 r, 
        bytes32 s
    ) external {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), block.chainid, address(this))); /*calculate EIP-712 domain hash*/
        
        unchecked {
            bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline)); /*calculate EIP-712 struct hash*/
            bytes32 digest = keccak256(abi.encodePacked('\x19\x01', domainSeparator, structHash)); /*calculate EIP-712 digest for signature*/
            address signatory = ecrecover(digest, v, r, s); /*recover signer from hash data*/
            require(signatory != address(0),'!signatory'); /*check signer is not null*/
            require(signatory == owner,'!authorized'); /*check signer is `owner`*/
        }
        
        require(block.timestamp <= deadline,'expired'); /*check signature is not expired*/
        
        allowance[owner][spender] = amount; /*adjust `allowance`*/
        
        emit Approval(owner, spender, amount); /*emit event reflecting approval*/
    }
    
    /// @notice Transfer `amount` tokens from user to `to`.
    /// @param to The address of destination account.
    /// @param amount The number of `shares` tokens to transfer.
    /// @return success Whether or not the transfer succeeded.
    function transfer(address to, uint96 amount) external returns (bool success) {
        require(!sharesPaused,'!transferable');
        
        balanceOf[msg.sender] -= amount;
        
        unchecked {
            balanceOf[to] += amount;
        }
        
        _moveDelegates(delegates[msg.sender], delegates[to], amount);
        
        emit Transfer(msg.sender, to, amount);
        
        success = true;
    }
        
    /// @notice Transfer `amount` tokens from `from` to `to`.
    /// @param from The address of the source account.
    /// @param to The address of the destination account.
    /// @param amount The number of `shares` tokens to transfer.
    /// @return success Whether or not the transfer succeeded.
    function transferFrom(address from, address to, uint96 amount) external returns (bool success) {
        require(!sharesPaused,'!transferable');
        
        if (allowance[from][msg.sender] != type(uint).max) {
            allowance[from][msg.sender] -= amount;
        }
        
        balanceOf[from] -= amount;
        
        unchecked {
            balanceOf[to] += amount;
        }
        
        _moveDelegates(delegates[from], delegates[to], amount);
        
        emit Transfer(from, to, amount);
        
        success = true;
    }
    
    /// @notice Transfer `amount` `loot` from user to `to`.
    /// @param to The address of destination account.
    /// @param amount The sum of loot to transfer.
    function transferLoot(address to, uint96 amount) external {
        require(!lootPaused,'!transferable');
        
        members[msg.sender].loot -= amount;
        
        unchecked {
            members[to].loot += amount;
        }
        
        emit TransferLoot(msg.sender, to, amount);
    }
    
    /// @notice Flashloan ability that conforms to `IERC3156FlashLender`, as defined in 'https://eips.ethereum.org/EIPS/eip-3156'.
    /// @param receiver Address of token receiver that conforms to `IERC3156FlashBorrower` & handles flashloan.
    /// @param token The loan currency.
    /// @param amount The amount of tokens lent.
    /// @param data Arbitrary data structure, intended to contain user-defined parameters.
    function flashLoan(
        address receiver,
        address token,
        uint amount,
        bytes calldata data
    ) external returns (bool success) {
        uint fee = flashFee(token, amount);
        require(fee != 0,'uninitialized');
        
        _safeTransfer(token, receiver, amount);
        
        (,bytes memory _flashData) = receiver.call(abi.encodeWithSelector(0x23e30c8b, msg.sender, token, amount, fee, data)); /*'onFlashLoan(address,address,uint,uint,bytes)'*/
        bytes32 flashData = abi.decode(_flashData, (bytes32));
        require(flashData == keccak256('ERC3156FlashBorrower.onFlashLoan'),'Callback failed'); /*checks flash loan success*/
        
        _safeTransferFrom(token, receiver, address(this), amount + fee);
        
        success = true;
    }

    /// @notice Process member burn of `shares` and/or `loot` to claim 'fair share' of `guildTokens`.
    /// @param to Account that receives 'fair share'.
    /// @param lootToBurn Baal pure economic weight to burn.
    /// @param sharesToBurn Baal voting weight to burn.
    function ragequit(address to, uint96 lootToBurn, uint96 sharesToBurn) external nonReentrant {
        require(proposals[members[msg.sender].highestIndexYesVote].votingEnds == 0,'processed'); /*check highest index proposal member approved has processed*/
        
        for (uint i; i < guildTokens.length; i++) {
            (,bytes memory balanceData) = guildTokens[i].staticcall(abi.encodeWithSelector(0x70a08231, address(this))); /*get Baal token balances - 'balanceOf(address)'*/
            uint balance = abi.decode(balanceData, (uint)); /*decode Baal token balances for calculation*/
            
            uint amountToRagequit = ((lootToBurn + sharesToBurn) * balance) / (totalSupply + totalLoot); /*calculate 'fair shair' claims*/
            
            if (amountToRagequit != 0) { /*gas optimization to allow higher maximum token limit*/
                _safeTransfer(guildTokens[i], to, amountToRagequit); /*execute 'safe' token transfer*/
            }
        }
        
        if (lootToBurn != 0) { /*gas optimization*/ 
            _burnLoot(msg.sender, lootToBurn); /*subtract `loot` from user account & Baal totals*/
        }
        
        if (sharesToBurn != 0) { /*gas optimization*/ 
            _burnShares(msg.sender, sharesToBurn);  /*subtract `shares` from user account & Baal totals with erc20 accounting*/
        }
        
        emit Ragequit(msg.sender, to, lootToBurn, sharesToBurn); /*event reflects claims made against Baal*/
    }

    /***************
    GETTER FUNCTIONS
    ***************/
    /// @notice Returns the current delegated `vote` balance for `account`.
    /// @param account The user to check delegated `votes` for.
    /// @return votes Current `votes` delegated to `account`.
    function getCurrentVotes(address account) external view returns (uint96 votes) {
        uint nCheckpoints = numCheckpoints[account];
        unchecked { votes = nCheckpoints != 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; }
    }
    
    /// @notice Returns the prior number of `votes` for `account` as of `timeStamp`.
    /// @param account The user to check `votes` for.
    /// @param timeStamp The unix time to check `votes` for.
    /// @return votes Prior `votes` delegated to `account`.
    function getPriorVotes(address account, uint timeStamp) public view returns (uint96 votes) {
        require(timeStamp < block.timestamp,'!determined');
        
        uint nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) return 0;
        
        unchecked {
            if (checkpoints[account][nCheckpoints - 1].fromTimeStamp <= timeStamp)
                return checkpoints[account][nCheckpoints - 1].votes; 
            if (checkpoints[account][0].fromTimeStamp > timeStamp) return 0;
            uint lower = 0; 
            uint upper = nCheckpoints - 1;
            while (upper > lower) {
                uint center = upper - (upper - lower) / 2;
                Checkpoint memory cp = checkpoints[account][center];
                if (cp.fromTimeStamp == timeStamp) return cp.votes; 
                else if (cp.fromTimeStamp < timeStamp) lower = center; 
                else upper = center - 1;
            }
            votes = checkpoints[account][lower].votes;
        }
    }
    
    /// @notice Returns array list of approved `guildTokens` in Baal for {ragequit}.
    /// @return tokens ERC-20s approved for {ragequit}.
    function getGuildTokens() external view returns (address[] memory tokens) {
        tokens = guildTokens;
    }
    
    /// @notice Returns `flags` for given Baal `proposal` describing type ('action'[0], 'member'[1], 'period'[2], 'whitelist'[3]).
    /// @param proposal The index to check `flags` for.
    /// @return flags The boolean flags describing `proposal` type.
    function getProposalFlags(uint proposal) external view returns (bool[4] memory flags) {
        flags = proposals[proposal].flags;
    }

    /// @notice Returns the `fee` to be charged for a flash loan.
    /// @param amount The sum of tokens lent.
    /// @return fee The `fee` amount of 'token' to be charged for the loan, on top of the returned principal - uniform in Baal.
    function flashFee(address, uint amount) public view returns (uint fee) {
        fee = amount * flashFeeNumerator / 10000; /*Calculate `fee` - precision factor '10000' derived from ERC-3156 'Flash Loan Reference'*/
    }
    
    /// @notice Returns the `max` amount of `token` available to be lent.
    /// @param token The loan currency.
    /// @return max The `amount` of `token` that can be borrowed.
    function maxFlashLoan(address token) external view returns (uint max) {
        (,bytes memory balanceData) = token.staticcall(abi.encodeWithSelector(0x70a08231, address(this))); /*get Baal token balance - 'balanceOf(address)'*/
        max = abi.decode(balanceData, (uint)); /*decode Baal token balance for calculation*/
    }

    /***************
    HELPER FUNCTIONS
    ***************/
    /// @notice Allows batched calls to Baal.
    /// @param data An array of payloads for each call.
    function multicall(bytes[] calldata data) external returns (bytes[] memory results) {
        results = new bytes[](data.length);
        unchecked {
            for (uint256 i = 0; i < data.length; i++) {
                (bool success, bytes memory result) = address(this).delegatecall(data[i]);
                if (!success) {
                    if (result.length < 68) revert();
                    assembly { result := add(result, 0x04) }
                    revert(abi.decode(result, (string)));
                }
                results[i] = result;
            }
        }
    }

    /// @notice Returns confirmation for 'safe' ERC-721 (NFT) transfers to Baal.
    function onERC721Received(address, address, uint, bytes calldata) external pure returns (bytes4 sig) {
        sig = 0x150b7a02; /*'onERC721Received(address,address,uint,bytes)'*/
    }
    
    /// @notice Returns confirmation for 'safe' ERC-1155 transfers to Baal.
    function onERC1155Received(address, address, uint, uint, bytes calldata) external pure returns (bytes4 sig) {
        sig = 0xf23a6e61; /*'onERC1155Received(address,address,uint,uint,bytes)'*/
    }
    
    /// @notice Returns confirmation for 'safe' batch ERC-1155 transfers to Baal.
    function onERC1155BatchReceived(address, address, uint[] calldata, uint[] calldata, bytes calldata) external pure returns (bytes4 sig) {
        sig = 0xbc197c81; /*'onERC1155BatchReceived(address,address,uint[],uint[],bytes)'*/
    }
    
    /// @notice Deposits ETH sent to Baal.
    receive() external payable {}

    /// @notice Delegates Baal voting weight.
    function _delegate(address delegator, address delegatee) private {
        address currentDelegate = delegates[delegator];
        
        delegates[delegator] = delegatee;
        
        _moveDelegates(currentDelegate, delegatee, uint96(balanceOf[delegator]));
        
        emit DelegateChanged(delegator, currentDelegate, delegatee);
    }
    
    /// @notice Elaborates delegate update - cf., 'Compound Governance'.
    function _moveDelegates(address srcRep, address dstRep, uint96 amount) private {
        unchecked {
            if (srcRep != dstRep && amount != 0) {
                if (srcRep != address(0)) {
                    uint srcRepNum = numCheckpoints[srcRep];
                    uint96 srcRepOld = srcRepNum != 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                    uint96 srcRepNew = srcRepOld - amount;
                    _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
                }
            
                if (dstRep != address(0)) {
                    uint dstRepNum = numCheckpoints[dstRep];
                    uint96 dstRepOld = dstRepNum != 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                    uint96 dstRepNew = dstRepOld + amount;
                    _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
                }
            }
        }
    }
    
    /// @notice Elaborates delegate update - cf., 'Compound Governance'.
    function _writeCheckpoint(address delegatee, uint nCheckpoints, uint96 oldVotes, uint96 newVotes) private {
        uint32 timeStamp = uint32(block.timestamp);
        
        unchecked {
            if (nCheckpoints != 0 && checkpoints[delegatee][nCheckpoints - 1].fromTimeStamp == timeStamp) {
                checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
            } else {
                checkpoints[delegatee][nCheckpoints] = Checkpoint(timeStamp, newVotes);
                numCheckpoints[delegatee] = nCheckpoints + 1;
            }
        }
        
        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }
    
    /// @notice Burn function for Baal `loot`.
    function _burnLoot(address from, uint96 loot) private {
        members[from].loot -= loot; /*subtract `loot` for `from` account*/
        
        unchecked {
            totalLoot -= loot; /*subtract from total Baal `loot`*/
        }
        
        emit TransferLoot(from, address(0), loot); /*emit event reflecting burn of `loot`*/
    }
    
    /// @notice Burn function for Baal `shares`.
    function _burnShares(address from, uint96 shares) private {
        balanceOf[from] -= shares; /*subtract `shares` for `from` account*/
        
        unchecked {
            totalSupply -= shares; /*subtract from total Baal `shares`*/
        }
        
        _moveDelegates(delegates[from], address(0), shares); /*update delegation*/
        
        emit Transfer(from, address(0), shares); /*emit event reflecting burn of `shares` with erc20 accounting*/
    }
    
    /// @notice Minting function for Baal `loot`.
    function _mintLoot(address to, uint96 loot) private {
        unchecked {
            if (totalSupply + loot <= type(uint96).max / 2) {
                members[to].loot += loot; /*add `loot` for `to` account*/
        
                totalLoot += loot; /*add to total Baal `loot`*/
            
                emit TransferLoot(address(0), to, loot); /*emit event reflecting mint of `loot`*/
            }
        }
    }
    
    /// @notice Minting function for Baal `shares`.
    function _mintShares(address to, uint96 shares) private {
        unchecked {
            if (totalSupply + shares <= type(uint96).max / 2) {
                balanceOf[to] += shares; /*add `shares` for `to` account*/
        
                totalSupply += shares; /*add to total Baal `shares`*/
            
                _moveDelegates(address(0), delegates[to], shares); /*update delegation*/
        
                emit Transfer(address(0), to, shares); /*emit event reflecting mint of `shares` with erc20 accounting*/
            }
        }
    }
 
    /// @notice Check to validate proposal processing requirements. 
    function _processingReady(uint proposal, Proposal memory prop) private view returns (bool ready) {
        unchecked {
            require(proposal <= proposalCount,'!exist'); /*check proposal exists*/
            require(proposals[proposal - 1].votingEnds == 0,'prev!processed'); /*check previous proposal has processed by deletion*/
            require(proposals[proposal].votingEnds != 0,'processed'); /*check given proposal has been sponsored & not yet processed by deletion*/
            if (singleSummoner) return true; /*if single member, process early*/
            if (prop.yesVotes > totalSupply / 2) return true; /*process early if majority member support*/
            require(prop.votingEnds + gracePeriod <= block.timestamp,'!ended'); /*check voting period has ended*/
            ready = true; /*otherwise, process if voting period done*/
        }
    }
    
    /// @notice Provides 'safe' {transfer} for tokens that do not consistently return 'true/false'.
    function _safeTransfer(address token, address to, uint amount) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, amount)); /*'transfer(address,uint)'*/
        require(success && (data.length == 0 || abi.decode(data, (bool))),'transfer failed'); /*checks success & allows non-conforming transfers*/
    }
    
    /// @notice Provides 'safe' {transferFrom} for tokens that do not consistently return 'true/false'.
    function _safeTransferFrom(address token, address from, address to, uint amount) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, amount)); /*'transferFrom(address,address,uint)'*/
        require(success && (data.length == 0 || abi.decode(data, (bool))),'transferFrom failed'); /*checks success & allows non-conforming transfers*/
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bool","name":"_sharesPaused","type":"bool"},{"internalType":"uint32","name":"_gracePeriod","type":"uint32"},{"internalType":"uint32","name":"_minVotingPeriod","type":"uint32"},{"internalType":"uint32","name":"_maxVotingPeriod","type":"uint32"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address[]","name":"_guildTokens","type":"address[]"},{"internalType":"address[]","name":"_shamans","type":"address[]"},{"internalType":"address[]","name":"_summoners","type":"address[]"},{"internalType":"uint96[]","name":"_loot","type":"uint96[]"},{"internalType":"uint96[]","name":"_shares","type":"uint96[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposal","type":"uint256"}],"name":"ProcessProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint96","name":"lootToBurn","type":"uint96"},{"indexed":true,"internalType":"uint96","name":"sharesToBurn","type":"uint96"}],"name":"Ragequit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":true,"internalType":"uint256","name":"proposal","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"votingStarts","type":"uint256"}],"name":"SponsorProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"flag","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"proposal","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"to","type":"address[]"},{"indexed":false,"internalType":"uint96[]","name":"value","type":"uint96[]"},{"indexed":false,"internalType":"bytes[]","name":"data","type":"bytes[]"},{"indexed":false,"internalType":"string","name":"details","type":"string"}],"name":"SubmitProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposal","type":"uint256"},{"indexed":true,"internalType":"bool","name":"approved","type":"bool"}],"name":"SubmitVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"lootPaused","type":"bool"},{"indexed":false,"internalType":"bool","name":"sharesPaused","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gracePeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"address[]","name":"guildTokens","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"shamans","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"summoners","type":"address[]"},{"indexed":false,"internalType":"uint96[]","name":"loot","type":"uint96[]"},{"indexed":false,"internalType":"uint96[]","name":"shares","type":"uint96[]"}],"name":"SummonComplete","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint96","name":"amount","type":"uint96"}],"name":"TransferLoot","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromTimeStamp","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"flashFee","outputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flashFeeNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"flashLoan","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGuildTokens","outputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposal","type":"uint256"}],"name":"getProposalFlags","outputs":[{"internalType":"bool[4]","name":"flags","type":"bool[4]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gracePeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lootPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"maxFlashLoan","outputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxVotingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shaman","type":"address"},{"internalType":"uint96","name":"loot","type":"uint96"},{"internalType":"uint96","name":"shares","type":"uint96"},{"internalType":"bool","name":"mint","type":"bool"}],"name":"memberAction","outputs":[{"internalType":"uint96","name":"lootOut","type":"uint96"},{"internalType":"uint96","name":"sharesOut","type":"uint96"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"members","outputs":[{"internalType":"uint96","name":"loot","type":"uint96"},{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minVotingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"sig","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"sig","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"sig","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposal","type":"uint256"}],"name":"processProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint32","name":"votingPeriod","type":"uint32"},{"internalType":"uint32","name":"votingStarts","type":"uint32"},{"internalType":"uint32","name":"votingEnds","type":"uint32"},{"internalType":"uint96","name":"yesVotes","type":"uint96"},{"internalType":"uint96","name":"noVotes","type":"uint96"},{"internalType":"string","name":"details","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalsPassed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint96","name":"lootToBurn","type":"uint96"},{"internalType":"uint96","name":"sharesToBurn","type":"uint96"}],"name":"ragequit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shamans","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sharesPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposal","type":"uint256"}],"name":"sponsorProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"flag","type":"uint8"},{"internalType":"uint32","name":"votingPeriod","type":"uint32"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint96[]","name":"value","type":"uint96[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"string","name":"details","type":"string"}],"name":"submitProposal","outputs":[{"internalType":"uint256","name":"proposal","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposal","type":"uint256"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"submitVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposal","type":"uint256"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"submitVoteWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLoot","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"transferLoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162006fb338038062006fb3833981016040819052620000349162000bb2565b63ffffffff8916620000755760405162461bcd60e51b8152602060048201526005602482015264182fb6b4b760d91b60448201526064015b60405180910390fd5b8763ffffffff168963ffffffff161115620000bd5760405162461bcd60e51b81526020600482015260076024820152660dad2dc7cdac2f60cb1b60448201526064016200006c565b8451620000f85760405162461bcd60e51b8152602060048201526008602482015267305f746f6b656e7360c01b60448201526064016200006c565b8251620001365760405162461bcd60e51b815260206004820152600b60248201526a305f73756d6d6f6e65727360a81b60448201526064016200006c565b8151835114801562000149575080518251145b620001975760405162461bcd60e51b815260206004820152601460248201527f216d656d6265722061727261792070617269747900000000000000000000000060448201526064016200006c565b60005b8451811015620001fa57600160106000878481518110620001bf57620001bf62000fbb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016200019a565b5060005b8551811015620002655760068682815181106200021f576200021f62000fbb565b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501620001fe565b5060005b83518110156200037757620002bd8482815181106200028c576200028c62000fbb565b6020026020010151848381518110620002a957620002a962000fbb565b60200260200101516200047e60201b60201c565b62000307848281518110620002d657620002d662000fbb565b6020026020010151838381518110620002f357620002f362000fbb565b60200260200101516200053d60201b60201c565b6200035184828151811062000320576200032062000fbb565b60200260200101518583815181106200033d576200033d62000fbb565b60200260200101516200061460201b60201c565b8351600114156200036e576000805462ff00001916620100001790555b60010162000269565b506001805463ffffffff8a8116680100000000000000000263ffffffff60401b198d8316640100000000026001600160401b0319909416928f169290921792909217161790558a15620003d2576000805460ff191660011790555b6000805461ff0019166101008d1515021790558651620003fa9060049060208a01906200095f565b508551620004109060059060208901906200095f565b5060016003556000546040517fed32625fa3563c019d2077aa04c53d5d9f796acee06e13a8bd74be8e9226348e91620004659160ff909116908e908e908e908e908e908e908e908e908e908e908e9062000e0e565b60405180910390a1505050505050505050505062000fe7565b60005460016001605f1b03600160781b9091046001600160601b039081168301161162000539576001600160a01b0382166000818152600d6020908152604080832080546001600160601b031981166001600160601b03918216880182161790915583546301000000600160781b03198116630100000091829004831688018316909102178455905190851681527f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b85878791015b60405180910390a35b5050565b60005460016001605f1b03600160781b9091046001600160601b039081168301161162000539576001600160a01b03828116600090815260086020908152604080832080546001600160601b038781169091019091558354600160781b600160d81b03198116600160781b918290048316880190921602178355600b909152812054620005cc921683620006ae565b6040516001600160601b03821681526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200162000530565b6001600160a01b038083166000908152600b6020908152604080832080548686166001600160a01b03198216179091556008909252909120549116906200065f9082908490620006ae565b816001600160a01b0316816001600160a01b0316846001600160a01b03167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4505050565b816001600160a01b0316836001600160a01b031614158015620006d957506001600160601b03811615155b15620007f1576001600160a01b0383161562000768576001600160a01b0383166000908152600a602052604081205490816200071757600062000751565b6001600160a01b03851660009081526009602090815260408083206000198601845290915290205464010000000090046001600160601b03165b90508281036200076486848484620007f6565b5050505b6001600160a01b03821615620007f1576001600160a01b0382166000908152600a60205260408120549081620007a0576000620007da565b6001600160a01b03841660009081526009602090815260408083206000198601845290915290205464010000000090046001600160601b03165b9050828101620007ed85848484620007f6565b5050505b505050565b4283158015906200083657506001600160a01b03851660009081526009602090815260408083206000198801845290915290205463ffffffff8281169116145b156200088c576001600160a01b03851660009081526009602090815260408083206000198801845290915290208054600160201b600160801b0319166401000000006001600160601b038516021790556200090a565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600983528781208c82528352878120965187549451909516640100000000026001600160801b03199094169490951693909317919091179093558152600a909152206001850190555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b8280546200096d9062000f7e565b90600052602060002090601f016020900481019282620009915760008555620009dc565b82601f10620009ac57805160ff1916838001178555620009dc565b82800160010185558215620009dc579182015b82811115620009dc578251825591602001919060010190620009bf565b50620009ea929150620009ee565b5090565b5b80821115620009ea5760008155600101620009ef565b600082601f83011262000a1757600080fd5b8151602062000a3062000a2a8362000f25565b62000ef2565b80838252828201915082860187848660051b890101111562000a5157600080fd5b6000805b8681101562000a885782516001600160a01b038116811462000a75578283fd5b8552938501939185019160010162000a55565b509198975050505050505050565b600082601f83011262000aa857600080fd5b8151602062000abb62000a2a8362000f25565b80838252828201915082860187848660051b890101111562000adc57600080fd5b6000805b8681101562000a885782516001600160601b038116811462000b00578283fd5b8552938501939185019160010162000ae0565b8051801515811462000b2457600080fd5b919050565b600082601f83011262000b3b57600080fd5b81516001600160401b0381111562000b575762000b5762000fd1565b62000b6c601f8201601f191660200162000ef2565b81815284602083860101111562000b8257600080fd5b62000b9582602083016020870162000f4b565b949350505050565b805163ffffffff8116811462000b2457600080fd5b60008060008060008060008060008060006101608c8e03121562000bd557600080fd5b62000be08c62000b13565b9a5062000bf060208d0162000b9d565b995062000c0060408d0162000b9d565b985062000c1060608d0162000b9d565b60808d01519098506001600160401b0381111562000c2d57600080fd5b62000c3b8e828f0162000b29565b60a08e015190985090506001600160401b0381111562000c5a57600080fd5b62000c688e828f0162000b29565b60c08e015190975090506001600160401b0381111562000c8757600080fd5b62000c958e828f0162000a05565b60e08e015190965090506001600160401b0381111562000cb457600080fd5b62000cc28e828f0162000a05565b6101008e015190955090506001600160401b0381111562000ce257600080fd5b62000cf08e828f0162000a05565b6101208e015190945090506001600160401b0381111562000d1057600080fd5b62000d1e8e828f0162000a96565b6101408e015190935090506001600160401b0381111562000d3e57600080fd5b62000d4c8e828f0162000a96565b9150509295989b509295989b9093969950565b600081518084526020808501945080840160005b8381101562000d9a5781516001600160a01b03168752958201959082019060010162000d73565b509495945050505050565b600081518084526020808501945080840160005b8381101562000d9a5781516001600160601b03168752958201959082019060010162000db9565b6000815180845262000dfa81602086016020860162000f4b565b601f01601f19169290920160200192915050565b8c151581528b1515602082015263ffffffff8b16604082015263ffffffff8a16606082015263ffffffff8916608082015261018060a0820152600062000e5961018083018a62000de0565b82810360c084015262000e6d818a62000de0565b905082810360e084015262000e83818962000d5f565b905082810361010084015262000e9a818862000d5f565b905082810361012084015262000eb1818762000d5f565b905082810361014084015262000ec8818662000da5565b905082810361016084015262000edf818562000da5565b9f9e505050505050505050505050505050565b604051601f8201601f191681016001600160401b038111828210171562000f1d5762000f1d62000fd1565b604052919050565b60006001600160401b0382111562000f415762000f4162000fd1565b5060051b60200190565b60005b8381101562000f6857818101518382015260200162000f4e565b8381111562000f78576000848401525b50505050565b600181811c9082168062000f9357607f821691505b6020821081141562000fb557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b615fbc8062000ff76000396000f3fe60806040526004361061028c5760003560e01c806370a082311161015a578063ac041b5b116100c1578063c64c209b1161007a578063c64c209b14610999578063d9d98ce4146109b9578063da35c664146109d9578063dd62ed3e146109ef578063e63bc62d14610a27578063f23a6e6114610a4757600080fd5b8063ac041b5b146108b0578063ac9650d8146108d0578063b2643aab146108fd578063b4b5ea571461092a578063bc197c811461094a578063c3cda5201461097957600080fd5b806394a4babe1161011357806394a4babe146107fe57806395d89b411461081e5780639746d940146108335780639a23b2b414610853578063a001793814610873578063a06db7dc1461089357600080fd5b806370a082311461072057806373110d131461074d578063782d6fe11461076d5780637e1514dc1461078d5780637ecebe00146107ad5780638635447a146107da57600080fd5b8063313ce567116101fe5780635cffe9de116101b75780635cffe9de1461062e5780635fe695591461064e578063612c56fa1461067e578063613255ab1461069e578063635e99aa146106cc5780636fcfff45146106f357600080fd5b8063313ce56714610512578063317b2c4c146105395780633232444c1461055b57806353c924e41461058b578063587cde1e146105be5780635c19a95c1461060c57600080fd5b80630cdfebfa116102505780630cdfebfa1461039e5780630e31f6c214610412578063150b7a021461044b57806318160ddd146104905780631a894b8f146104cf5780631c97cf3f146104f357600080fd5b8063013cf08b1461029857806306fdde03146102d357806308ae4b0c146102f5578063095ea7b3146103545780630ac419b21461038457600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b3366004615636565b610a74565b6040516102ca96959493929190615c0e565b60405180910390f35b3480156102df57600080fd5b506102e8610b52565b6040516102ca9190615b8d565b34801561030157600080fd5b5061033561031036600461515c565b600d60205260009081526040902080546001909101546001600160601b039091169082565b604080516001600160601b0390931683526020830191909152016102ca565b34801561036057600080fd5b5061037461036f366004615403565b610be0565b60405190151581526020016102ca565b34801561039057600080fd5b506000546103749060ff1681565b3480156103aa57600080fd5b506103ee6103b9366004615403565b600960209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6040805163ffffffff90931683526001600160601b039091166020830152016102ca565b34801561041e57600080fd5b5060015461043690600160401b900463ffffffff1681565b60405163ffffffff90911681526020016102ca565b34801561045757600080fd5b50610477610466366004615264565b50630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016102ca565b34801561049c57600080fd5b506000546104b790600160781b90046001600160601b031681565b6040516001600160601b0390911681526020016102ca565b3480156104db57600080fd5b5060005461043690600160d81b900463ffffffff1681565b3480156104ff57600080fd5b5060005461037490610100900460ff1681565b34801561051e57600080fd5b50610527601281565b60405160ff90911681526020016102ca565b34801561054557600080fd5b5061054e610c4c565b6040516102ca9190615aab565b34801561056757600080fd5b5061037461057636600461515c565b60106020526000908152604090205460ff1681565b61059e6105993660046154ea565b610cae565b604080516001600160601b039384168152929091166020830152016102ca565b3480156105ca57600080fd5b506105f46105d936600461515c565b600b602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102ca565b34801561061857600080fd5b5061062c61062736600461515c565b610e4b565b005b34801561063a57600080fd5b50610374610649366004615264565b610e58565b34801561065a57600080fd5b50610374610669366004615636565b600f6020526000908152604090205460ff1681565b34801561068a57600080fd5b5061062c61069936600461564f565b610ff7565b3480156106aa57600080fd5b506106be6106b936600461515c565b6111ce565b6040519081526020016102ca565b3480156106d857600080fd5b506000546104b790630100000090046001600160601b031681565b3480156106ff57600080fd5b506106be61070e36600461515c565b600a6020526000908152604090205481565b34801561072c57600080fd5b506106be61073b36600461515c565b60086020526000908152604090205481565b34801561075957600080fd5b5061062c610768366004615390565b611281565b34801561077957600080fd5b506104b7610788366004615403565b611542565b34801561079957600080fd5b5061062c6107a8366004615674565b61173b565b3480156107b957600080fd5b506106be6107c836600461515c565b600c6020526000908152604090205481565b3480156107e657600080fd5b5060015461043690600160201b900463ffffffff1681565b34801561080a57600080fd5b5061062c610819366004615485565b611abc565b34801561082a57600080fd5b506102e8611b96565b34801561083f57600080fd5b5061062c61084e366004615636565b611ba3565b34801561085f57600080fd5b5061037461086e366004615349565b611d24565b34801561087f57600080fd5b5061037461088e366004615485565b611e83565b34801561089f57600080fd5b506001546104369063ffffffff1681565b3480156108bc57600080fd5b506106be6108cb3660046156c4565b611f59565b3480156108dc57600080fd5b506108f06108eb366004615544565b6124ea565b6040516102ca9190615b2b565b34801561090957600080fd5b5061091d610918366004615636565b612636565b6040516102ca9190615af8565b34801561093657600080fd5b506104b761094536600461515c565b6126a0565b34801561095657600080fd5b506104776109653660046151aa565b5063bc197c8160e01b979650505050505050565b34801561098557600080fd5b5061062c61099436600461542d565b612705565b3480156109a557600080fd5b5061062c6109b43660046154bc565b61293f565b3480156109c557600080fd5b506106be6109d4366004615403565b612bda565b3480156109e557600080fd5b506106be60025481565b3480156109fb57600080fd5b506106be610a0a366004615177565b600760209081526000928352604080842090915290825290205481565b348015610a3357600080fd5b5061062c610a42366004615636565b612c03565b348015610a5357600080fd5b50610477610a623660046152d2565b5063f23a6e6160e01b95945050505050565b600e6020526000908152604090208054600182015460068301805463ffffffff80851695600160201b8604821695600160401b8104909216946001600160601b03600160601b909304831694921692909190610acf90615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054610afb90615eab565b8015610b485780601f10610b1d57610100808354040283529160200191610b48565b820191906000526020600020905b815481529060010190602001808311610b2b57829003601f168201915b5050505050905086565b60048054610b5f90615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8b90615eab565b8015610bd85780601f10610bad57610100808354040283529160200191610bd8565b820191906000526020600020905b815481529060010190602001808311610bbb57829003601f168201915b505050505081565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c3b9086815260200190565b60405180910390a350600192915050565b60606006805480602002602001604051908101604052809291908181526020018280548015610ca457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c86575b5050505050905090565b600080600354600114610cdc5760405162461bcd60e51b8152600401610cd390615bc7565b60405180910390fd5b60026003556001600160a01b03861660009081526010602052604090205460ff16610d335760405162461bcd60e51b815260206004820152600760248201526610b9b430b6b0b760c91b6044820152606401610cd3565b6040516001622cd9df60e21b031981523360048201526001600160601b038087166024830152851660448201526001600160a01b0387169063ff4c988490349060640160408051808303818588803b158015610d8e57600080fd5b505af1158015610da2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dc791906157c8565b90925090508215610e09576001600160601b03821615610deb57610deb3383613c9f565b6001600160601b03811615610e0457610e043382613d62565b610e3b565b6001600160601b03821615610e2257610e223383613e2d565b6001600160601b03811615610e3b57610e3b3382613eea565b6001600355909590945092505050565b610e553382613fad565b50565b600080610e658686612bda565b905080610ea45760405162461bcd60e51b815260206004820152600d60248201526c1d5b9a5b9a5d1a585b1a5e9959609a1b6044820152606401610cd3565b610eaf868887614045565b6000876001600160a01b03166323e30c8b338989868a8a604051602401610edb969594939291906159a4565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610f1491906158ec565b6000604051808303816000865af19150503d8060008114610f51576040519150601f19603f3d011682016040523d82523d6000602084013e610f56565b606091505b50915050600081806020019051810190610f7091906155a2565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd98114610fd35760405162461bcd60e51b815260206004820152600f60248201526e10d85b1b189858dac819985a5b1959608a1b6044820152606401610cd3565b610fe8888a30610fe3878c615cf3565b614152565b50600198975050505050505050565b6003546001146110195760405162461bcd60e51b8152600401610cd390615bc7565b60026003556000828152600e602052604081208054909190611049903390600160201b900463ffffffff16611542565b825490915042600160401b90910463ffffffff1610156110935760405162461bcd60e51b8152602060048201526005602482015264195b99195960da1b6044820152606401610cd3565b336000908152600d6020908152604080832087845260020190915290205460ff16156110e95760405162461bcd60e51b81526020600482015260056024820152641d9bdd195960da1b6044820152606401610cd3565b82156111355781546001600160601b03600160601b8083048216840190911602600160601b600160c01b0319909116178255336000908152600d60205260409020600101849055611159565b6001820180546001600160601b038082168401166001600160601b03199091161790555b336000818152600d60209081526040808320888452600201825291829020805460ff1916600117905590516001600160601b038416815285151592879290917f786755545a7e27c12c90cc7f0934514d03fdacfe3684a340b8c4100531e7ecd5910160405180910390a4505060016003555050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b179052905160009182916001600160a01b03851691611222916158ec565b600060405180830381855afa9150503d806000811461125d576040519150601f19603f3d011682016040523d82523d6000602084013e611262565b606091505b509150508080602001905181019061127a91906155a2565b9392505050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3560046040516112b39190615908565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401206001600160a01b038c81166000818152600c87528481208054600181019091557f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e960c088015260e0870192909252918d166101008601526001600160601b038c166101208601526101408501526101608085018b90528351808603909101815261018085019093528251929094019190912061190160f01b6101a08401526101a283018290526101c2830181905290935091906101e20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611412573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114455760405162461bcd60e51b8152600401610cd390615bea565b8a6001600160a01b0316816001600160a01b0316146114945760405162461bcd60e51b815260206004820152600b60248201526a08585d5d1a1bdc9a5e995960aa1b6044820152606401610cd3565b505050844211156114d15760405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b6044820152606401610cd3565b6001600160a01b038881166000818152600760209081526040808320948c16808452948252918290206001600160601b038b169081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35050505050505050565b60004282106115815760405162461bcd60e51b815260206004820152600b60248201526a0859195d195c9b5a5b995960aa1b6044820152606401610cd3565b6001600160a01b0383166000908152600a6020526040902054806115a9576000915050611735565b6001600160a01b03841660009081526009602090815260408083206000198501845290915290205463ffffffff16831061161d576001600160a01b0384166000908152600960209081526040808320600019909401835292905220546001600160601b03600160201b909104169050611735565b6001600160a01b038416600090815260096020908152604080832083805290915290205463ffffffff16831015611658576000915050611735565b600060001982015b818111156116fd576001600160a01b038616600090815260096020908152604080832060028686030485038085529083529281902081518083019092525463ffffffff8116808352600160201b9091046001600160601b031692820192909252908714156116d8576020015194506117359350505050565b805163ffffffff168711156116ef578193506116f6565b6001820392505b5050611660565b506001600160a01b03851660009081526009602090815260408083209383529290522054600160201b90046001600160601b03169150505b92915050565b60035460011461175d5760405162461bcd60e51b8152600401610cd390615bc7565b60026003556000858152600e602052604080822090519091907f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f35906117a490600490615908565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401207f9743d4a93cddcc4a4dde282c87f883f02700a64c026c1f456f3e4ee79abab60f60c084015260e083018b9052891515610100808501919091528251808503909101815261012084019092528151919093012061190160f01b610140830152610142820183905261016282018190529192506000906101820160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156118c5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118f85760405162461bcd60e51b8152600401610cd390615bea565b8454600090611915908390600160201b900463ffffffff16611542565b865490915042600160401b90910463ffffffff16101561195f5760405162461bcd60e51b8152602060048201526005602482015264195b99195960da1b6044820152606401610cd3565b6001600160a01b0382166000908152600d602090815260408083208e845260020190915290205460ff16156119be5760405162461bcd60e51b81526020600482015260056024820152641d9bdd195960da1b6044820152606401610cd3565b8915611a135785546001600160601b03600160601b8083048216840190911602600160601b600160c01b03199091161786556001600160a01b0382166000908152600d602052604090206001018b9055611a37565b6001860180546001600160601b038082168401166001600160601b03199091161790555b6001600160a01b0382166000818152600d602090815260408083208f8452600201825291829020805460ff1916600117905590516001600160601b03841681528c1515928e9290917f786755545a7e27c12c90cc7f0934514d03fdacfe3684a340b8c4100531e7ecd5910160405180910390a450506001600355505050505050505050565b60005460ff1615611adf5760405162461bcd60e51b8152600401610cd390615ba0565b336000908152600d602052604081208054839290611b079084906001600160601b0316615d8e565b82546101009290920a6001600160601b038181021990931691831602179091556001600160a01b0384166000818152600d602090815260409182902080546001600160601b03198116908616880186161790559051928516835290925033917f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b85878791015b60405180910390a35050565b60058054610b5f90615eab565b600354600114611bc55760405162461bcd60e51b8152600401610cd390615bc7565b60026003556000818152600e60209081526040808320338452600890925290912054611c1d5760405162461bcd60e51b815260206004820152600760248201526610b6b2b6b132b960c91b6044820152606401610cd3565b805463ffffffff16611c5a5760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610cd3565b8054600160201b900463ffffffff1615611ca25760405162461bcd60e51b81526020600482015260096024820152681cdc1bdb9cdbdc995960ba1b6044820152606401610cd3565b805463ffffffff42818116600160201b02808316838516178201909216600160401b026bffffffff0000000000000000199092166bffffffffffffffff000000001990931692909217178255604051839033907fd45ad122361f16d6f50d7c4a73638f20ee48eff6186af15224e2a4a1f6d5017190600090a450506001600355565b60008054610100900460ff1615611d4d5760405162461bcd60e51b8152600401610cd390615ba0565b6001600160a01b038416600090815260076020908152604080832033845290915290205460001914611dbb576001600160a01b0384166000908152600760209081526040808320338452909152812080546001600160601b0385169290611db5908490615d77565b90915550505b6001600160a01b038416600090815260086020526040812080546001600160601b0385169290611dec908490615d77565b90915550506001600160a01b03808416600081815260086020908152604080832080546001600160601b0389160190558885168352600b90915280822054928252902054611e3f9291821691168461426c565b6040516001600160601b03831681526001600160a01b038085169190861690600080516020615f678339815191529060200160405180910390a35060019392505050565b60008054610100900460ff1615611eac5760405162461bcd60e51b8152600401610cd390615ba0565b33600090815260086020526040812080546001600160601b0385169290611ed4908490615d77565b90915550506001600160a01b03808416600081815260086020908152604080832080546001600160601b038916019055338352600b90915280822054928252902054611f259291821691168461426c565b6040516001600160601b03831681526001600160a01b038416903390600080516020615f6783398151915290602001610c3b565b6000600354600114611f7d5760405162461bcd60e51b8152600401610cd390615bc7565b600260035560015463ffffffff808c16600160201b9092041611801590611fb7575060015463ffffffff600160401b9091048116908b1611155b611ff35760405162461bcd60e51b815260206004820152600d60248201526c085d9bdd1a5b99d4195c9a5bd9609a1b6044820152606401610cd3565b600a8811156120305760405162461bcd60e51b81526020600482015260096024820152680c2e4e4c2f240dac2f60bb1b6044820152606401610cd3565b60038b60ff16111561206c5760405162461bcd60e51b815260206004820152600560248201526421666c616760d81b6044820152606401610cd3565b612074614d4e565b6001818d60ff166004811061208b5761208b615f17565b9115156020909202015260ff8c16600214156121ad57600187141561212757600154600160401b900463ffffffff1688886000816120cb576120cb615f17565b90506020020160208101906120e091906157ab565b6001600160601b031611156121225760405162461bcd60e51b81526020600482015260086024820152670deeccae440dac2f60c31b6044820152606401610cd3565b6121f7565b60028714156121225760018054600160201b900463ffffffff16908990899081811061215557612155615f17565b905060200201602081019061216a91906157ab565b6001600160601b031610156121225760405162461bcd60e51b81526020600482015260096024820152683ab73232b91036b4b760b91b6044820152606401610cd3565b88871480156121bb57508685145b6121f75760405162461bcd60e51b815260206004820152600d60248201526c2161727261792070617269747960981b6044820152606401610cd3565b3360009081526008602052604081205415612210575060015b60028054600101905560408051610140810190915263ffffffff8d168152602081018261223e576000612240565b425b63ffffffff1681526020018261225757600061225b565b8d42015b63ffffffff16815260200160006001600160601b0316815260200160006001600160601b031681526020018381526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d918291850190849080828437600092019190915250505090825250602001612307888a615db6565b815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050600280548252600e6020908152604092839020855181549287015194870151606088015163ffffffff92831667ffffffffffffffff1990951694909417600160201b968316969096029590951777ffffffffffffffffffffffffffffffff00000000000000001916600160401b9190951602600160601b600160c01b03191693909317600160601b6001600160601b039283160217835560808501516001840180546001600160601b0319169190921617905560a084015191925061240e91908301906004614d6c565b5060c0820151805161242a916003840191602090910190614dfe565b5060e08201518051612446916004840191602090910190614e53565b506101008201518051612463916005840191602090910190614ef9565b506101208201518051612480916006840191602090910190614f52565b509050508b63ffffffff16838e60ff167f50816127f50bc7b89be229f8063a0f3995c58cebdac89a56cb6bda32fa688cf98e8e8e8e8e8e8e8e6040516124cd9897969594939291906159e9565b60405180910390a4505060016003559a9950505050505050505050565b6060816001600160401b0381111561250457612504615f2d565b60405190808252806020026020018201604052801561253757816020015b60608152602001906001900390816125225790505b50905060005b8281101561262f576000803086868581811061255b5761255b615f17565b905060200281019061256d9190615c56565b60405161257b9291906158dc565b600060405180830381855af49150503d80600081146125b6576040519150601f19603f3d011682016040523d82523d6000602084013e6125bb565b606091505b509150915081612607576044815110156125d457600080fd5b600481019050808060200190518101906125ee91906155bb565b60405162461bcd60e51b8152600401610cd39190615b8d565b8084848151811061261a5761261a615f17565b6020908102919091010152505060010161253d565b5092915050565b61263e614d4e565b6000828152600e602052604080822081516080810192839052926002909101916004918390855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612665575094979650505050505050565b6001600160a01b0381166000908152600a6020526040812054806126c557600061127a565b6001600160a01b0383166000908152600960209081526040808320600019850184529091529020546001600160601b03600160201b909104169392505050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3560046040516127379190615908565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401207f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015612864573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166128975760405162461bcd60e51b8152600401610cd390615bea565b6001600160a01b0381166000908152600c6020526040902080546001810190915589146128ef5760405162461bcd60e51b8152602060048201526006602482015265216e6f6e636560d01b6044820152606401610cd3565b874211156129295760405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b6044820152606401610cd3565b612933818b613fad565b50505050505050505050565b6003546001146129615760405162461bcd60e51b8152600401610cd390615bc7565b6002600355336000908152600d60209081526040808320600101548352600e909152902054600160401b900463ffffffff16156129cc5760405162461bcd60e51b81526020600482015260096024820152681c1c9bd8d95cdcd95960ba1b6044820152606401610cd3565b60005b600654811015612b4f576000600682815481106129ee576129ee615f17565b600091825260209182902001546040805130602480830191909152825180830390910181526044909101825292830180516001600160e01b03166370a0823160e01b179052516001600160a01b0390911691612a49916158ec565b600060405180830381855afa9150503d8060008114612a84576040519150601f19603f3d011682016040523d82523d6000602084013e612a89565b606091505b50915050600081806020019051810190612aa391906155a2565b6000805491925090612ace906001600160601b0363010000008204811691600160781b900416615d0b565b6001600160601b031682612ae28789615d0b565b6001600160601b0316612af59190615d58565b612aff9190615d36565b90508015612b3957612b3960068581548110612b1d57612b1d615f17565b6000918252602090912001546001600160a01b03168883614045565b5050508080612b4790615ee6565b9150506129cf565b506001600160601b03821615612b6957612b693383613e2d565b6001600160601b03811615612b8257612b823382613eea565b6040516001600160a01b03841681526001600160601b03808316919084169033907fa6fdd1129b11eeeca9629fe02070648e56711f159a52c65449cf86a19ceb0d2d9060200160405180910390a45050600160035550565b6000805461271090612bf990600160d81b900463ffffffff1684615d58565b61127a9190615d36565b600354600114612c255760405162461bcd60e51b8152600401610cd390615bc7565b600260038190556000828152600e60209081526040808320815161014081018352815463ffffffff8082168352600160201b8204811695830195909552600160401b810490941681840152600160601b9093046001600160601b0390811660608501526001820154166080808501919091528251908101928390529094612f5294879493879360a08601939092908501916004918390855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612cbd5790505050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015612d4f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612d31575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015612dd957602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b01049283019260010382029150808411612d965790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015612eb3578382906000526020600020018054612e2690615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5290615eab565b8015612e9f5780601f10612e7457610100808354040283529160200191612e9f565b820191906000526020600020905b815481529060010190602001808311612e8257829003601f168201915b505050505081526020019060010190612e07565b505050508152602001600682018054612ecb90615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054612ef790615eab565b8015612f445780601f10612f1957610100808354040283529160200191612f44565b820191906000526020600020905b815481529060010190602001808311612f2757829003601f168201915b5050505050815250506143a2565b50600181015481546001600160601b03918216600160601b9091049091161115612f90576000828152600f60205260409020805460ff191660011790555b600281015460ff16156132af576040805161014081018252825463ffffffff8082168352600160201b820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526132aa92849160a08401916002840190600490826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161301557905050505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156130a757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613089575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561313157602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116130ee5790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b8282101561320b57838290600052602060002001805461317e90615eab565b80601f01602080910402602001604051908101604052809291908181526020018280546131aa90615eab565b80156131f75780601f106131cc576101008083540402835291602001916131f7565b820191906000526020600020905b8154815290600101906020018083116131da57829003601f168201915b50505050508152602001906001019061315f565b50505050815260200160068201805461322390615eab565b80601f016020809104026020016040519081016040528092919081815260200182805461324f90615eab565b801561329c5780601f106132715761010080835404028352916020019161329c565b820191906000526020600020905b81548152906001019060200180831161327f57829003601f168201915b50505050508152505061453e565b613bfb565b6002810154610100900460ff16156135ce576040805161014081018252825463ffffffff8082168352600160201b820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526132aa92849160a08401916002840190600490826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161333957905050505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156133cb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116133ad575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561345557602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116134125790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b8282101561352f5783829060005260206000200180546134a290615eab565b80601f01602080910402602001604051908101604052809291908181526020018280546134ce90615eab565b801561351b5780601f106134f05761010080835404028352916020019161351b565b820191906000526020600020905b8154815290600101906020018083116134fe57829003601f168201915b505050505081526020019060010190613483565b50505050815260200160068201805461354790615eab565b80601f016020809104026020016040519081016040528092919081815260200182805461357390615eab565b80156135c05780601f10613595576101008083540402835291602001916135c0565b820191906000526020600020905b8154815290600101906020018083116135a357829003601f168201915b505050505081525050614615565b600281015462010000900460ff16156138ee576040805161014081018252825463ffffffff8082168352600160201b820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526132aa92849160a08401916002840190600490826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161365957905050505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156136eb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116136cd575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561377557602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116137325790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b8282101561384f5783829060005260206000200180546137c290615eab565b80601f01602080910402602001604051908101604052809291908181526020018280546137ee90615eab565b801561383b5780601f106138105761010080835404028352916020019161383b565b820191906000526020600020905b81548152906001019060200180831161381e57829003601f168201915b5050505050815260200190600101906137a3565b50505050815260200160068201805461386790615eab565b80601f016020809104026020016040519081016040528092919081815260200182805461389390615eab565b80156138e05780601f106138b5576101008083540402835291602001916138e0565b820191906000526020600020905b8154815290600101906020018083116138c357829003601f168201915b505050505081525050614735565b6040805161014081018252825463ffffffff8082168352600160201b820481166020840152600160401b82041682840152600160601b90046001600160601b039081166060830152600184015416608080830191909152825190810192839052613bfb92849160a08401916002840190600490826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161396657905050505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156139f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116139da575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015613a8257602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b01049283019260010382029150808411613a3f5790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015613b5c578382906000526020600020018054613acf90615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054613afb90615eab565b8015613b485780601f10613b1d57610100808354040283529160200191613b48565b820191906000526020600020905b815481529060010190602001808311613b2b57829003601f168201915b505050505081526020019060010190613ab0565b505050508152602001600682018054613b7490615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054613ba090615eab565b8015613bed5780601f10613bc257610100808354040283529160200191613bed565b820191906000526020600020905b815481529060010190602001808311613bd057829003601f168201915b5050505050815250506149d8565b6000828152600e6020526040812080546001600160c01b03191681556001810180546001600160601b03191690556002810182905590613c3f600383016000614fc6565b613c4d600483016000614fe4565b613c5b600583016000615009565b613c69600683016000615027565b505060405182907f753d5d5633f467e3835cd605f6bcb9584fdab3e90e34d0ac888e2677e61c2ad990600090a250506001600355565b6000546b7fffffffffffffffffffffff600160781b9091046001600160601b0390811683011611613d5e576001600160a01b0382166000818152600d6020908152604080832080546001600160601b031981166001600160601b03918216880182161790915583546effffffffffffffffffffffff000000198116630100000091829004831688018316909102178455905190851681527f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b8587879101611b8a565b5050565b6000546b7fffffffffffffffffffffff600160781b9091046001600160601b0390811683011611613d5e576001600160a01b03828116600090815260086020908152604080832080546001600160601b0387811690910190915583546bffffffffffffffffffffffff60781b198116600160781b918290048316880190921602178355600b909152812054613df892168361426c565b6040516001600160601b03821681526001600160a01b03831690600090600080516020615f6783398151915290602001611b8a565b6001600160a01b0382166000908152600d602052604081208054839290613e5e9084906001600160601b0316615d8e565b82546101009290920a6001600160601b03818102199093169183160217909155600080546effffffffffffffffffffffff00000019811663010000009182900484168690038416909102178155604051918416825291506001600160a01b038416907f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b85878790602001611b8a565b6001600160a01b038216600090815260086020526040812080546001600160601b0384169290613f1b908490615d77565b9091555050600080546001600160601b03600160781b8083048216859003909116026bffffffffffffffffffffffff60781b199091161781556001600160a01b038084168252600b6020526040822054613f78929116908361426c565b6040516001600160601b03821681526000906001600160a01b03841690600080516020615f6783398151915290602001611b8a565b6001600160a01b038083166000908152600b6020908152604080832080548686166001600160a01b0319821617909155600890925290912054911690613ff6908290849061426c565b816001600160a01b0316816001600160a01b0316846001600160a01b03167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916140a191906158ec565b6000604051808303816000865af19150503d80600081146140de576040519150601f19603f3d011682016040523d82523d6000602084013e6140e3565b606091505b509150915081801561410d57508051158061410d57508080602001905181019061410d9190615585565b61414b5760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610cd3565b5050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916141b691906158ec565b6000604051808303816000865af19150503d80600081146141f3576040519150601f19603f3d011682016040523d82523d6000602084013e6141f8565b606091505b50915091508180156142225750805115806142225750808060200190518101906142229190615585565b6142645760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610cd3565b505050505050565b816001600160a01b0316836001600160a01b03161415801561429657506001600160601b03811615155b1561439d576001600160a01b0383161561431e576001600160a01b0383166000908152600a602052604081205490816142d0576000614309565b6001600160a01b038516600090815260096020908152604080832060001986018452909152902054600160201b90046001600160601b03165b905082810361431a86848484614bdb565b5050505b6001600160a01b0382161561439d576001600160a01b0382166000908152600a6020526040812054908161435357600061438c565b6001600160a01b038416600090815260096020908152604080832060001986018452909152902054600160201b90046001600160601b03165b905082810161426485848484614bdb565b505050565b60006002548311156143df5760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610cd3565b60001983016000908152600e6020526040902054600160401b900463ffffffff161561443e5760405162461bcd60e51b815260206004820152600e60248201526d1c1c995d885c1c9bd8d95cdcd95960921b6044820152606401610cd3565b6000838152600e6020526040902054600160401b900463ffffffff166144925760405162461bcd60e51b81526020600482015260096024820152681c1c9bd8d95cdcd95960ba1b6044820152606401610cd3565b60005462010000900460ff16156144ab57506001611735565b600054600290600160781b90046001600160601b0316046001600160601b031682606001516001600160601b031611156144e757506001611735565b60015460408301514263ffffffff92831690910190911611156145355760405162461bcd60e51b815260206004820152600660248201526508595b99195960d21b6044820152606401610cd3565b50600192915050565b60005b8160c0015151811015613d5e578160c00151818151811061456457614564615f17565b60200260200101516001600160a01b03168260e00151828151811061458b5761458b615f17565b60200260200101516001600160601b031683610100015183815181106145b3576145b3615f17565b60200260200101516040516145c891906158ec565b60006040518083038185875af1925050503d8060008114614605576040519150601f19603f3d011682016040523d82523d6000602084013e61460a565b606091505b505050600101614541565b60005b8160c0015151811015613d5e57816101000151818151811061463c5761463c615f17565b60200260200101515160001415614696576146918260c00151828151811061466657614666615f17565b60200260200101518360e00151838151811061468457614684615f17565b6020026020010151613d62565b61472d565b6000600860008460c0015184815181106146b2576146b2615f17565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205490506147048360c0015183815181106146f6576146f6615f17565b602002602001015182613eea565b61472b8360c00151838151811061471d5761471d615f17565b602002602001015182613c9f565b505b600101614618565b60e08101515160018114156147b6578160e0015160008151811061475b5761475b615f17565b60200260200101516001600160601b0316600014613d5e578160e0015160008151811061478a5761478a615f17565b6020026020010151600160046101000a81548163ffffffff021916908363ffffffff1602179055505050565b8060021415614831578160e001516001815181106147d6576147d6615f17565b60200260200101516001600160601b0316600014613d5e578160e0015160018151811061480557614805615f17565b6020026020010151600160086101000a81548163ffffffff021916908363ffffffff1602179055505050565b80600314156148ac578160e0015160028151811061485157614851615f17565b60200260200101516001600160601b0316600014613d5e578160e0015160028151811061488057614880615f17565b6020026020010151600160006101000a81548163ffffffff021916908363ffffffff1602179055505050565b8060041415614927578160e001516003815181106148cc576148cc615f17565b60200260200101516001600160601b0316600014613d5e578160e001516003815181106148fb576148fb615f17565b60200260200101516000601b6101000a81548163ffffffff021916908363ffffffff1602179055505050565b806005141561497e578160e0015160048151811061494757614947615f17565b60200260200101516001600160601b03166000146149705750506000805460ff19166001179055565b50506000805460ff19169055565b8060061415613d5e578160e0015160058151811061499e5761499e615f17565b60200260200101516001600160601b03166000146149c9576000805461ff0019166101001790555050565b50506000805461ff0019169055565b60005b8160c0015151811015613d5e578160e0015181815181106149fe576149fe615f17565b60200260200101516001600160601b03166000148015614a3d57508161010001518181518110614a3057614a30615f17565b6020026020010151516000145b15614aa2576001601060008460c001518481518110614a5e57614a5e615f17565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550614bd3565b8160e001518181518110614ab857614ab8615f17565b60200260200101516001600160601b03166000148015614af857508161010001518181518110614aea57614aea615f17565b602002602001015151600014155b15614b19576000601060008460c001518481518110614a5e57614a5e615f17565b8160e001518181518110614b2f57614b2f615f17565b60200260200101516001600160601b0316600014158015614b6f57508161010001518181518110614b6257614b62615f17565b6020026020010151516000145b15614bd35760065461019014614bd35760068260c001518281518110614b9757614b97615f17565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790555b6001016149db565b428315801590614c1a57506001600160a01b03851660009081526009602090815260408083206000198801845290915290205463ffffffff8281169116145b15614c73576001600160a01b038516600090815260096020908152604080832060001988018452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055614cf9565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600983528781208c82528352878120965187549451909516600160201b026fffffffffffffffffffffffffffffffff199094169490951693909317919091179093558152600a909152206001850190555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b60405180608001604052806004906020820280368337509192915050565b600183019183908215614dee5791602002820160005b83821115614dbf57835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302614d82565b8015614dec5782816101000a81549060ff0219169055600101602081600001049283019260010302614dbf565b505b50614dfa92915061505d565b5090565b828054828255906000526020600020908101928215614dee579160200282015b82811115614dee57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614e1e565b82805482825590600052602060002090600101600290048101928215614dee5791602002820160005b83821115614ec657835183826101000a8154816001600160601b0302191690836001600160601b031602179055509260200192600c01602081600b01049283019260010302614e7c565b8015614dec5782816101000a8154906001600160601b030219169055600c01602081600b01049283019260010302614ec6565b828054828255906000526020600020908101928215614f46579160200282015b82811115614f465782518051614f36918491602090910190614f52565b5091602001919060010190614f19565b50614dfa929150615072565b828054614f5e90615eab565b90600052602060002090601f016020900481019282614f805760008555614dee565b82601f10614f9957805160ff1916838001178555614dee565b82800160010185558215614dee579182015b82811115614dee578251825591602001919060010190614fab565b5080546000825590600052602060002090810190610e55919061505d565b508054600082556001016002900490600052602060002090810190610e55919061505d565b5080546000825590600052602060002090810190610e559190615072565b50805461503390615eab565b6000825580601f10615043575050565b601f016020900490600052602060002090810190610e5591905b5b80821115614dfa576000815560010161505e565b80821115614dfa5760006150868282615027565b50600101615072565b80356001600160a01b03811681146150a657600080fd5b919050565b60008083601f8401126150bd57600080fd5b5081356001600160401b038111156150d457600080fd5b6020830191508360208260051b85010111156150ef57600080fd5b9250929050565b60008083601f84011261510857600080fd5b5081356001600160401b0381111561511f57600080fd5b6020830191508360208285010111156150ef57600080fd5b803563ffffffff811681146150a657600080fd5b803560ff811681146150a657600080fd5b60006020828403121561516e57600080fd5b61127a8261508f565b6000806040838503121561518a57600080fd5b6151938361508f565b91506151a16020840161508f565b90509250929050565b60008060008060008060008060a0898b0312156151c657600080fd5b6151cf8961508f565b97506151dd60208a0161508f565b965060408901356001600160401b03808211156151f957600080fd5b6152058c838d016150ab565b909850965060608b013591508082111561521e57600080fd5b61522a8c838d016150ab565b909650945060808b013591508082111561524357600080fd5b506152508b828c016150f6565b999c989b5096995094979396929594505050565b60008060008060006080868803121561527c57600080fd5b6152858661508f565b94506152936020870161508f565b93506040860135925060608601356001600160401b038111156152b557600080fd5b6152c1888289016150f6565b969995985093965092949392505050565b60008060008060008060a087890312156152eb57600080fd5b6152f48761508f565b95506153026020880161508f565b9450604087013593506060870135925060808701356001600160401b0381111561532b57600080fd5b61533789828a016150f6565b979a9699509497509295939492505050565b60008060006060848603121561535e57600080fd5b6153678461508f565b92506153756020850161508f565b9150604084013561538581615f51565b809150509250925092565b600080600080600080600060e0888a0312156153ab57600080fd5b6153b48861508f565b96506153c26020890161508f565b955060408801356153d281615f51565b9450606088013593506153e76080890161514b565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561541657600080fd5b61541f8361508f565b946020939093013593505050565b60008060008060008060c0878903121561544657600080fd5b61544f8761508f565b9550602087013594506040870135935061546b6060880161514b565b92506080870135915060a087013590509295509295509295565b6000806040838503121561549857600080fd5b6154a18361508f565b915060208301356154b181615f51565b809150509250929050565b6000806000606084860312156154d157600080fd5b6154da8461508f565b9250602084013561537581615f51565b6000806000806080858703121561550057600080fd5b6155098561508f565b9350602085013561551981615f51565b9250604085013561552981615f51565b9150606085013561553981615f43565b939692955090935050565b6000806020838503121561555757600080fd5b82356001600160401b0381111561556d57600080fd5b615579858286016150ab565b90969095509350505050565b60006020828403121561559757600080fd5b815161127a81615f43565b6000602082840312156155b457600080fd5b5051919050565b6000602082840312156155cd57600080fd5b81516001600160401b038111156155e357600080fd5b8201601f810184136155f457600080fd5b805161560761560282615ccc565b615c9c565b81815285602083850101111561561c57600080fd5b61562d826020830160208601615e7b565b95945050505050565b60006020828403121561564857600080fd5b5035919050565b6000806040838503121561566257600080fd5b8235915060208301356154b181615f43565b600080600080600060a0868803121561568c57600080fd5b85359450602086013561569e81615f43565b93506156ac6040870161514b565b94979396509394606081013594506080013592915050565b60008060008060008060008060008060c08b8d0312156156e357600080fd5b6156ec8b61514b565b99506156fa60208c01615137565b985060408b01356001600160401b038082111561571657600080fd5b6157228e838f016150ab565b909a50985060608d013591508082111561573b57600080fd5b6157478e838f016150ab565b909850965060808d013591508082111561576057600080fd5b61576c8e838f016150ab565b909650945060a08d013591508082111561578557600080fd5b506157928d828e016150f6565b915080935050809150509295989b9194979a5092959850565b6000602082840312156157bd57600080fd5b813561127a81615f51565b600080604083850312156157db57600080fd5b82516157e681615f51565b60208401519092506154b181615f51565b81835260006020808501808196508560051b810191508460005b8781101561587a5782840389528135601e1988360301811261583257600080fd5b870180356001600160401b0381111561584a57600080fd5b80360389131561585957600080fd5b6158668682898501615887565b9a87019a9550505090840190600101615811565b5091979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526158c8816020860160208601615e7b565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b600082516158fe818460208701615e7b565b9190910192915050565b600080835481600182811c91508083168061592457607f831692505b602080841082141561594457634e487b7160e01b86526022600452602486fd5b818015615958576001811461596957615996565b60ff19861689528489019650615996565b60008a81526020902060005b8681101561598e5781548b820152908501908301615975565b505084890196505b509498975050505050505050565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a060808301526159dd60a083018486615887565b98975050505050505050565b6080808252810188905260008960a08301825b8b811015615a2a576001600160a01b03615a158461508f565b168252602092830192909101906001016159fc565b5083810360208581019190915289825291508990820160005b8a811015615a71578235615a5681615f51565b6001600160601b031682529183019190830190600101615a43565b508481036040860152615a8581898b6157f7565b925050508281036060840152615a9c818587615887565b9b9a5050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615aec5783516001600160a01b031683529284019291840191600101615ac7565b50909695505050505050565b60808101818360005b6004811015615b225781511515835260209283019290910190600101615b01565b50505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015615b8057603f19888603018452615b6e8583516158b0565b94509285019290850190600101615b52565b5092979650505050505050565b60208152600061127a60208301846158b0565b6020808252600d908201526c217472616e7366657261626c6560981b604082015260600190565b6020808252600990820152681c99595b9d1c985b9d60ba1b604082015260600190565b6020808252600a9082015269217369676e61746f727960b01b604082015260600190565b63ffffffff87811682528681166020830152851660408201526001600160601b0384811660608301528316608082015260c060a082018190526000906159dd908301846158b0565b6000808335601e19843603018112615c6d57600080fd5b8301803591506001600160401b03821115615c8757600080fd5b6020019150368190038213156150ef57600080fd5b604051601f8201601f191681016001600160401b0381118282101715615cc457615cc4615f2d565b604052919050565b60006001600160401b03821115615ce557615ce5615f2d565b50601f01601f191660200190565b60008219821115615d0657615d06615f01565b500190565b60006001600160601b03808316818516808303821115615d2d57615d2d615f01565b01949350505050565b600082615d5357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615d7257615d72615f01565b500290565b600082821015615d8957615d89615f01565b500390565b60006001600160601b0383811690831681811015615dae57615dae615f01565b039392505050565b60006001600160401b0380841115615dd057615dd0615f2d565b8360051b6020615de1818301615c9c565b8681528181019086368582011115615df857600080fd5b600094505b88851015615e6f57803586811115615e1457600080fd5b880136601f820112615e2557600080fd5b8035615e3361560282615ccc565b8181523687838501011115615e4757600080fd5b8187840188830137600091810187019190915284525060019490940193918301918301615dfd565b50979650505050505050565b60005b83811015615e96578181015183820152602001615e7e565b83811115615ea5576000848401525b50505050565b600181811c90821680615ebf57607f821691505b60208210811415615ee057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615efa57615efa615f01565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610e5557600080fd5b6001600160601b0381168114610e5557600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122082841cc57dfe433915481cf8225900e6e45a71ae330c30781643354a1a4f0b1164736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000000044261616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044241414c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000003ab458634910aad20ef5f1c8ee96f1d6ac549190000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a200000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca000000000000000000000000ced608aa29bb92185d9b6340adcbfa263dae075b000000000000000000000000d26a3f686d43f2a62ba9eae2ff77e9f516d945b900000000000000000000000015c6ac4cf1b5e49c44332fb0a1043ccab19db80a000000000000000000000000775af9b7c214fe8792ab5f5da61a8708591d517e000000000000000000000000bf42c05bd8302a4d2efd0cdf66fc33d8123887bf00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab2400000

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806370a082311161015a578063ac041b5b116100c1578063c64c209b1161007a578063c64c209b14610999578063d9d98ce4146109b9578063da35c664146109d9578063dd62ed3e146109ef578063e63bc62d14610a27578063f23a6e6114610a4757600080fd5b8063ac041b5b146108b0578063ac9650d8146108d0578063b2643aab146108fd578063b4b5ea571461092a578063bc197c811461094a578063c3cda5201461097957600080fd5b806394a4babe1161011357806394a4babe146107fe57806395d89b411461081e5780639746d940146108335780639a23b2b414610853578063a001793814610873578063a06db7dc1461089357600080fd5b806370a082311461072057806373110d131461074d578063782d6fe11461076d5780637e1514dc1461078d5780637ecebe00146107ad5780638635447a146107da57600080fd5b8063313ce567116101fe5780635cffe9de116101b75780635cffe9de1461062e5780635fe695591461064e578063612c56fa1461067e578063613255ab1461069e578063635e99aa146106cc5780636fcfff45146106f357600080fd5b8063313ce56714610512578063317b2c4c146105395780633232444c1461055b57806353c924e41461058b578063587cde1e146105be5780635c19a95c1461060c57600080fd5b80630cdfebfa116102505780630cdfebfa1461039e5780630e31f6c214610412578063150b7a021461044b57806318160ddd146104905780631a894b8f146104cf5780631c97cf3f146104f357600080fd5b8063013cf08b1461029857806306fdde03146102d357806308ae4b0c146102f5578063095ea7b3146103545780630ac419b21461038457600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b3366004615636565b610a74565b6040516102ca96959493929190615c0e565b60405180910390f35b3480156102df57600080fd5b506102e8610b52565b6040516102ca9190615b8d565b34801561030157600080fd5b5061033561031036600461515c565b600d60205260009081526040902080546001909101546001600160601b039091169082565b604080516001600160601b0390931683526020830191909152016102ca565b34801561036057600080fd5b5061037461036f366004615403565b610be0565b60405190151581526020016102ca565b34801561039057600080fd5b506000546103749060ff1681565b3480156103aa57600080fd5b506103ee6103b9366004615403565b600960209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6040805163ffffffff90931683526001600160601b039091166020830152016102ca565b34801561041e57600080fd5b5060015461043690600160401b900463ffffffff1681565b60405163ffffffff90911681526020016102ca565b34801561045757600080fd5b50610477610466366004615264565b50630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016102ca565b34801561049c57600080fd5b506000546104b790600160781b90046001600160601b031681565b6040516001600160601b0390911681526020016102ca565b3480156104db57600080fd5b5060005461043690600160d81b900463ffffffff1681565b3480156104ff57600080fd5b5060005461037490610100900460ff1681565b34801561051e57600080fd5b50610527601281565b60405160ff90911681526020016102ca565b34801561054557600080fd5b5061054e610c4c565b6040516102ca9190615aab565b34801561056757600080fd5b5061037461057636600461515c565b60106020526000908152604090205460ff1681565b61059e6105993660046154ea565b610cae565b604080516001600160601b039384168152929091166020830152016102ca565b3480156105ca57600080fd5b506105f46105d936600461515c565b600b602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102ca565b34801561061857600080fd5b5061062c61062736600461515c565b610e4b565b005b34801561063a57600080fd5b50610374610649366004615264565b610e58565b34801561065a57600080fd5b50610374610669366004615636565b600f6020526000908152604090205460ff1681565b34801561068a57600080fd5b5061062c61069936600461564f565b610ff7565b3480156106aa57600080fd5b506106be6106b936600461515c565b6111ce565b6040519081526020016102ca565b3480156106d857600080fd5b506000546104b790630100000090046001600160601b031681565b3480156106ff57600080fd5b506106be61070e36600461515c565b600a6020526000908152604090205481565b34801561072c57600080fd5b506106be61073b36600461515c565b60086020526000908152604090205481565b34801561075957600080fd5b5061062c610768366004615390565b611281565b34801561077957600080fd5b506104b7610788366004615403565b611542565b34801561079957600080fd5b5061062c6107a8366004615674565b61173b565b3480156107b957600080fd5b506106be6107c836600461515c565b600c6020526000908152604090205481565b3480156107e657600080fd5b5060015461043690600160201b900463ffffffff1681565b34801561080a57600080fd5b5061062c610819366004615485565b611abc565b34801561082a57600080fd5b506102e8611b96565b34801561083f57600080fd5b5061062c61084e366004615636565b611ba3565b34801561085f57600080fd5b5061037461086e366004615349565b611d24565b34801561087f57600080fd5b5061037461088e366004615485565b611e83565b34801561089f57600080fd5b506001546104369063ffffffff1681565b3480156108bc57600080fd5b506106be6108cb3660046156c4565b611f59565b3480156108dc57600080fd5b506108f06108eb366004615544565b6124ea565b6040516102ca9190615b2b565b34801561090957600080fd5b5061091d610918366004615636565b612636565b6040516102ca9190615af8565b34801561093657600080fd5b506104b761094536600461515c565b6126a0565b34801561095657600080fd5b506104776109653660046151aa565b5063bc197c8160e01b979650505050505050565b34801561098557600080fd5b5061062c61099436600461542d565b612705565b3480156109a557600080fd5b5061062c6109b43660046154bc565b61293f565b3480156109c557600080fd5b506106be6109d4366004615403565b612bda565b3480156109e557600080fd5b506106be60025481565b3480156109fb57600080fd5b506106be610a0a366004615177565b600760209081526000928352604080842090915290825290205481565b348015610a3357600080fd5b5061062c610a42366004615636565b612c03565b348015610a5357600080fd5b50610477610a623660046152d2565b5063f23a6e6160e01b95945050505050565b600e6020526000908152604090208054600182015460068301805463ffffffff80851695600160201b8604821695600160401b8104909216946001600160601b03600160601b909304831694921692909190610acf90615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054610afb90615eab565b8015610b485780601f10610b1d57610100808354040283529160200191610b48565b820191906000526020600020905b815481529060010190602001808311610b2b57829003601f168201915b5050505050905086565b60048054610b5f90615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8b90615eab565b8015610bd85780601f10610bad57610100808354040283529160200191610bd8565b820191906000526020600020905b815481529060010190602001808311610bbb57829003601f168201915b505050505081565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c3b9086815260200190565b60405180910390a350600192915050565b60606006805480602002602001604051908101604052809291908181526020018280548015610ca457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c86575b5050505050905090565b600080600354600114610cdc5760405162461bcd60e51b8152600401610cd390615bc7565b60405180910390fd5b60026003556001600160a01b03861660009081526010602052604090205460ff16610d335760405162461bcd60e51b815260206004820152600760248201526610b9b430b6b0b760c91b6044820152606401610cd3565b6040516001622cd9df60e21b031981523360048201526001600160601b038087166024830152851660448201526001600160a01b0387169063ff4c988490349060640160408051808303818588803b158015610d8e57600080fd5b505af1158015610da2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dc791906157c8565b90925090508215610e09576001600160601b03821615610deb57610deb3383613c9f565b6001600160601b03811615610e0457610e043382613d62565b610e3b565b6001600160601b03821615610e2257610e223383613e2d565b6001600160601b03811615610e3b57610e3b3382613eea565b6001600355909590945092505050565b610e553382613fad565b50565b600080610e658686612bda565b905080610ea45760405162461bcd60e51b815260206004820152600d60248201526c1d5b9a5b9a5d1a585b1a5e9959609a1b6044820152606401610cd3565b610eaf868887614045565b6000876001600160a01b03166323e30c8b338989868a8a604051602401610edb969594939291906159a4565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610f1491906158ec565b6000604051808303816000865af19150503d8060008114610f51576040519150601f19603f3d011682016040523d82523d6000602084013e610f56565b606091505b50915050600081806020019051810190610f7091906155a2565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd98114610fd35760405162461bcd60e51b815260206004820152600f60248201526e10d85b1b189858dac819985a5b1959608a1b6044820152606401610cd3565b610fe8888a30610fe3878c615cf3565b614152565b50600198975050505050505050565b6003546001146110195760405162461bcd60e51b8152600401610cd390615bc7565b60026003556000828152600e602052604081208054909190611049903390600160201b900463ffffffff16611542565b825490915042600160401b90910463ffffffff1610156110935760405162461bcd60e51b8152602060048201526005602482015264195b99195960da1b6044820152606401610cd3565b336000908152600d6020908152604080832087845260020190915290205460ff16156110e95760405162461bcd60e51b81526020600482015260056024820152641d9bdd195960da1b6044820152606401610cd3565b82156111355781546001600160601b03600160601b8083048216840190911602600160601b600160c01b0319909116178255336000908152600d60205260409020600101849055611159565b6001820180546001600160601b038082168401166001600160601b03199091161790555b336000818152600d60209081526040808320888452600201825291829020805460ff1916600117905590516001600160601b038416815285151592879290917f786755545a7e27c12c90cc7f0934514d03fdacfe3684a340b8c4100531e7ecd5910160405180910390a4505060016003555050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b179052905160009182916001600160a01b03851691611222916158ec565b600060405180830381855afa9150503d806000811461125d576040519150601f19603f3d011682016040523d82523d6000602084013e611262565b606091505b509150508080602001905181019061127a91906155a2565b9392505050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3560046040516112b39190615908565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401206001600160a01b038c81166000818152600c87528481208054600181019091557f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e960c088015260e0870192909252918d166101008601526001600160601b038c166101208601526101408501526101608085018b90528351808603909101815261018085019093528251929094019190912061190160f01b6101a08401526101a283018290526101c2830181905290935091906101e20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611412573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114455760405162461bcd60e51b8152600401610cd390615bea565b8a6001600160a01b0316816001600160a01b0316146114945760405162461bcd60e51b815260206004820152600b60248201526a08585d5d1a1bdc9a5e995960aa1b6044820152606401610cd3565b505050844211156114d15760405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b6044820152606401610cd3565b6001600160a01b038881166000818152600760209081526040808320948c16808452948252918290206001600160601b038b169081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35050505050505050565b60004282106115815760405162461bcd60e51b815260206004820152600b60248201526a0859195d195c9b5a5b995960aa1b6044820152606401610cd3565b6001600160a01b0383166000908152600a6020526040902054806115a9576000915050611735565b6001600160a01b03841660009081526009602090815260408083206000198501845290915290205463ffffffff16831061161d576001600160a01b0384166000908152600960209081526040808320600019909401835292905220546001600160601b03600160201b909104169050611735565b6001600160a01b038416600090815260096020908152604080832083805290915290205463ffffffff16831015611658576000915050611735565b600060001982015b818111156116fd576001600160a01b038616600090815260096020908152604080832060028686030485038085529083529281902081518083019092525463ffffffff8116808352600160201b9091046001600160601b031692820192909252908714156116d8576020015194506117359350505050565b805163ffffffff168711156116ef578193506116f6565b6001820392505b5050611660565b506001600160a01b03851660009081526009602090815260408083209383529290522054600160201b90046001600160601b03169150505b92915050565b60035460011461175d5760405162461bcd60e51b8152600401610cd390615bc7565b60026003556000858152600e602052604080822090519091907f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f35906117a490600490615908565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401207f9743d4a93cddcc4a4dde282c87f883f02700a64c026c1f456f3e4ee79abab60f60c084015260e083018b9052891515610100808501919091528251808503909101815261012084019092528151919093012061190160f01b610140830152610142820183905261016282018190529192506000906101820160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156118c5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118f85760405162461bcd60e51b8152600401610cd390615bea565b8454600090611915908390600160201b900463ffffffff16611542565b865490915042600160401b90910463ffffffff16101561195f5760405162461bcd60e51b8152602060048201526005602482015264195b99195960da1b6044820152606401610cd3565b6001600160a01b0382166000908152600d602090815260408083208e845260020190915290205460ff16156119be5760405162461bcd60e51b81526020600482015260056024820152641d9bdd195960da1b6044820152606401610cd3565b8915611a135785546001600160601b03600160601b8083048216840190911602600160601b600160c01b03199091161786556001600160a01b0382166000908152600d602052604090206001018b9055611a37565b6001860180546001600160601b038082168401166001600160601b03199091161790555b6001600160a01b0382166000818152600d602090815260408083208f8452600201825291829020805460ff1916600117905590516001600160601b03841681528c1515928e9290917f786755545a7e27c12c90cc7f0934514d03fdacfe3684a340b8c4100531e7ecd5910160405180910390a450506001600355505050505050505050565b60005460ff1615611adf5760405162461bcd60e51b8152600401610cd390615ba0565b336000908152600d602052604081208054839290611b079084906001600160601b0316615d8e565b82546101009290920a6001600160601b038181021990931691831602179091556001600160a01b0384166000818152600d602090815260409182902080546001600160601b03198116908616880186161790559051928516835290925033917f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b85878791015b60405180910390a35050565b60058054610b5f90615eab565b600354600114611bc55760405162461bcd60e51b8152600401610cd390615bc7565b60026003556000818152600e60209081526040808320338452600890925290912054611c1d5760405162461bcd60e51b815260206004820152600760248201526610b6b2b6b132b960c91b6044820152606401610cd3565b805463ffffffff16611c5a5760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610cd3565b8054600160201b900463ffffffff1615611ca25760405162461bcd60e51b81526020600482015260096024820152681cdc1bdb9cdbdc995960ba1b6044820152606401610cd3565b805463ffffffff42818116600160201b02808316838516178201909216600160401b026bffffffff0000000000000000199092166bffffffffffffffff000000001990931692909217178255604051839033907fd45ad122361f16d6f50d7c4a73638f20ee48eff6186af15224e2a4a1f6d5017190600090a450506001600355565b60008054610100900460ff1615611d4d5760405162461bcd60e51b8152600401610cd390615ba0565b6001600160a01b038416600090815260076020908152604080832033845290915290205460001914611dbb576001600160a01b0384166000908152600760209081526040808320338452909152812080546001600160601b0385169290611db5908490615d77565b90915550505b6001600160a01b038416600090815260086020526040812080546001600160601b0385169290611dec908490615d77565b90915550506001600160a01b03808416600081815260086020908152604080832080546001600160601b0389160190558885168352600b90915280822054928252902054611e3f9291821691168461426c565b6040516001600160601b03831681526001600160a01b038085169190861690600080516020615f678339815191529060200160405180910390a35060019392505050565b60008054610100900460ff1615611eac5760405162461bcd60e51b8152600401610cd390615ba0565b33600090815260086020526040812080546001600160601b0385169290611ed4908490615d77565b90915550506001600160a01b03808416600081815260086020908152604080832080546001600160601b038916019055338352600b90915280822054928252902054611f259291821691168461426c565b6040516001600160601b03831681526001600160a01b038416903390600080516020615f6783398151915290602001610c3b565b6000600354600114611f7d5760405162461bcd60e51b8152600401610cd390615bc7565b600260035560015463ffffffff808c16600160201b9092041611801590611fb7575060015463ffffffff600160401b9091048116908b1611155b611ff35760405162461bcd60e51b815260206004820152600d60248201526c085d9bdd1a5b99d4195c9a5bd9609a1b6044820152606401610cd3565b600a8811156120305760405162461bcd60e51b81526020600482015260096024820152680c2e4e4c2f240dac2f60bb1b6044820152606401610cd3565b60038b60ff16111561206c5760405162461bcd60e51b815260206004820152600560248201526421666c616760d81b6044820152606401610cd3565b612074614d4e565b6001818d60ff166004811061208b5761208b615f17565b9115156020909202015260ff8c16600214156121ad57600187141561212757600154600160401b900463ffffffff1688886000816120cb576120cb615f17565b90506020020160208101906120e091906157ab565b6001600160601b031611156121225760405162461bcd60e51b81526020600482015260086024820152670deeccae440dac2f60c31b6044820152606401610cd3565b6121f7565b60028714156121225760018054600160201b900463ffffffff16908990899081811061215557612155615f17565b905060200201602081019061216a91906157ab565b6001600160601b031610156121225760405162461bcd60e51b81526020600482015260096024820152683ab73232b91036b4b760b91b6044820152606401610cd3565b88871480156121bb57508685145b6121f75760405162461bcd60e51b815260206004820152600d60248201526c2161727261792070617269747960981b6044820152606401610cd3565b3360009081526008602052604081205415612210575060015b60028054600101905560408051610140810190915263ffffffff8d168152602081018261223e576000612240565b425b63ffffffff1681526020018261225757600061225b565b8d42015b63ffffffff16815260200160006001600160601b0316815260200160006001600160601b031681526020018381526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d918291850190849080828437600092019190915250505090825250602001612307888a615db6565b815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050600280548252600e6020908152604092839020855181549287015194870151606088015163ffffffff92831667ffffffffffffffff1990951694909417600160201b968316969096029590951777ffffffffffffffffffffffffffffffff00000000000000001916600160401b9190951602600160601b600160c01b03191693909317600160601b6001600160601b039283160217835560808501516001840180546001600160601b0319169190921617905560a084015191925061240e91908301906004614d6c565b5060c0820151805161242a916003840191602090910190614dfe565b5060e08201518051612446916004840191602090910190614e53565b506101008201518051612463916005840191602090910190614ef9565b506101208201518051612480916006840191602090910190614f52565b509050508b63ffffffff16838e60ff167f50816127f50bc7b89be229f8063a0f3995c58cebdac89a56cb6bda32fa688cf98e8e8e8e8e8e8e8e6040516124cd9897969594939291906159e9565b60405180910390a4505060016003559a9950505050505050505050565b6060816001600160401b0381111561250457612504615f2d565b60405190808252806020026020018201604052801561253757816020015b60608152602001906001900390816125225790505b50905060005b8281101561262f576000803086868581811061255b5761255b615f17565b905060200281019061256d9190615c56565b60405161257b9291906158dc565b600060405180830381855af49150503d80600081146125b6576040519150601f19603f3d011682016040523d82523d6000602084013e6125bb565b606091505b509150915081612607576044815110156125d457600080fd5b600481019050808060200190518101906125ee91906155bb565b60405162461bcd60e51b8152600401610cd39190615b8d565b8084848151811061261a5761261a615f17565b6020908102919091010152505060010161253d565b5092915050565b61263e614d4e565b6000828152600e602052604080822081516080810192839052926002909101916004918390855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612665575094979650505050505050565b6001600160a01b0381166000908152600a6020526040812054806126c557600061127a565b6001600160a01b0383166000908152600960209081526040808320600019850184529091529020546001600160601b03600160201b909104169392505050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3560046040516127379190615908565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401207f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015612864573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166128975760405162461bcd60e51b8152600401610cd390615bea565b6001600160a01b0381166000908152600c6020526040902080546001810190915589146128ef5760405162461bcd60e51b8152602060048201526006602482015265216e6f6e636560d01b6044820152606401610cd3565b874211156129295760405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b6044820152606401610cd3565b612933818b613fad565b50505050505050505050565b6003546001146129615760405162461bcd60e51b8152600401610cd390615bc7565b6002600355336000908152600d60209081526040808320600101548352600e909152902054600160401b900463ffffffff16156129cc5760405162461bcd60e51b81526020600482015260096024820152681c1c9bd8d95cdcd95960ba1b6044820152606401610cd3565b60005b600654811015612b4f576000600682815481106129ee576129ee615f17565b600091825260209182902001546040805130602480830191909152825180830390910181526044909101825292830180516001600160e01b03166370a0823160e01b179052516001600160a01b0390911691612a49916158ec565b600060405180830381855afa9150503d8060008114612a84576040519150601f19603f3d011682016040523d82523d6000602084013e612a89565b606091505b50915050600081806020019051810190612aa391906155a2565b6000805491925090612ace906001600160601b0363010000008204811691600160781b900416615d0b565b6001600160601b031682612ae28789615d0b565b6001600160601b0316612af59190615d58565b612aff9190615d36565b90508015612b3957612b3960068581548110612b1d57612b1d615f17565b6000918252602090912001546001600160a01b03168883614045565b5050508080612b4790615ee6565b9150506129cf565b506001600160601b03821615612b6957612b693383613e2d565b6001600160601b03811615612b8257612b823382613eea565b6040516001600160a01b03841681526001600160601b03808316919084169033907fa6fdd1129b11eeeca9629fe02070648e56711f159a52c65449cf86a19ceb0d2d9060200160405180910390a45050600160035550565b6000805461271090612bf990600160d81b900463ffffffff1684615d58565b61127a9190615d36565b600354600114612c255760405162461bcd60e51b8152600401610cd390615bc7565b600260038190556000828152600e60209081526040808320815161014081018352815463ffffffff8082168352600160201b8204811695830195909552600160401b810490941681840152600160601b9093046001600160601b0390811660608501526001820154166080808501919091528251908101928390529094612f5294879493879360a08601939092908501916004918390855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612cbd5790505050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015612d4f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612d31575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015612dd957602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b01049283019260010382029150808411612d965790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015612eb3578382906000526020600020018054612e2690615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5290615eab565b8015612e9f5780601f10612e7457610100808354040283529160200191612e9f565b820191906000526020600020905b815481529060010190602001808311612e8257829003601f168201915b505050505081526020019060010190612e07565b505050508152602001600682018054612ecb90615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054612ef790615eab565b8015612f445780601f10612f1957610100808354040283529160200191612f44565b820191906000526020600020905b815481529060010190602001808311612f2757829003601f168201915b5050505050815250506143a2565b50600181015481546001600160601b03918216600160601b9091049091161115612f90576000828152600f60205260409020805460ff191660011790555b600281015460ff16156132af576040805161014081018252825463ffffffff8082168352600160201b820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526132aa92849160a08401916002840190600490826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161301557905050505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156130a757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613089575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561313157602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116130ee5790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b8282101561320b57838290600052602060002001805461317e90615eab565b80601f01602080910402602001604051908101604052809291908181526020018280546131aa90615eab565b80156131f75780601f106131cc576101008083540402835291602001916131f7565b820191906000526020600020905b8154815290600101906020018083116131da57829003601f168201915b50505050508152602001906001019061315f565b50505050815260200160068201805461322390615eab565b80601f016020809104026020016040519081016040528092919081815260200182805461324f90615eab565b801561329c5780601f106132715761010080835404028352916020019161329c565b820191906000526020600020905b81548152906001019060200180831161327f57829003601f168201915b50505050508152505061453e565b613bfb565b6002810154610100900460ff16156135ce576040805161014081018252825463ffffffff8082168352600160201b820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526132aa92849160a08401916002840190600490826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161333957905050505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156133cb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116133ad575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561345557602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116134125790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b8282101561352f5783829060005260206000200180546134a290615eab565b80601f01602080910402602001604051908101604052809291908181526020018280546134ce90615eab565b801561351b5780601f106134f05761010080835404028352916020019161351b565b820191906000526020600020905b8154815290600101906020018083116134fe57829003601f168201915b505050505081526020019060010190613483565b50505050815260200160068201805461354790615eab565b80601f016020809104026020016040519081016040528092919081815260200182805461357390615eab565b80156135c05780601f10613595576101008083540402835291602001916135c0565b820191906000526020600020905b8154815290600101906020018083116135a357829003601f168201915b505050505081525050614615565b600281015462010000900460ff16156138ee576040805161014081018252825463ffffffff8082168352600160201b820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526132aa92849160a08401916002840190600490826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161365957905050505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156136eb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116136cd575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561377557602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116137325790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b8282101561384f5783829060005260206000200180546137c290615eab565b80601f01602080910402602001604051908101604052809291908181526020018280546137ee90615eab565b801561383b5780601f106138105761010080835404028352916020019161383b565b820191906000526020600020905b81548152906001019060200180831161381e57829003601f168201915b5050505050815260200190600101906137a3565b50505050815260200160068201805461386790615eab565b80601f016020809104026020016040519081016040528092919081815260200182805461389390615eab565b80156138e05780601f106138b5576101008083540402835291602001916138e0565b820191906000526020600020905b8154815290600101906020018083116138c357829003601f168201915b505050505081525050614735565b6040805161014081018252825463ffffffff8082168352600160201b820481166020840152600160401b82041682840152600160601b90046001600160601b039081166060830152600184015416608080830191909152825190810192839052613bfb92849160a08401916002840190600490826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161396657905050505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156139f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116139da575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015613a8257602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b01049283019260010382029150808411613a3f5790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015613b5c578382906000526020600020018054613acf90615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054613afb90615eab565b8015613b485780601f10613b1d57610100808354040283529160200191613b48565b820191906000526020600020905b815481529060010190602001808311613b2b57829003601f168201915b505050505081526020019060010190613ab0565b505050508152602001600682018054613b7490615eab565b80601f0160208091040260200160405190810160405280929190818152602001828054613ba090615eab565b8015613bed5780601f10613bc257610100808354040283529160200191613bed565b820191906000526020600020905b815481529060010190602001808311613bd057829003601f168201915b5050505050815250506149d8565b6000828152600e6020526040812080546001600160c01b03191681556001810180546001600160601b03191690556002810182905590613c3f600383016000614fc6565b613c4d600483016000614fe4565b613c5b600583016000615009565b613c69600683016000615027565b505060405182907f753d5d5633f467e3835cd605f6bcb9584fdab3e90e34d0ac888e2677e61c2ad990600090a250506001600355565b6000546b7fffffffffffffffffffffff600160781b9091046001600160601b0390811683011611613d5e576001600160a01b0382166000818152600d6020908152604080832080546001600160601b031981166001600160601b03918216880182161790915583546effffffffffffffffffffffff000000198116630100000091829004831688018316909102178455905190851681527f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b8587879101611b8a565b5050565b6000546b7fffffffffffffffffffffff600160781b9091046001600160601b0390811683011611613d5e576001600160a01b03828116600090815260086020908152604080832080546001600160601b0387811690910190915583546bffffffffffffffffffffffff60781b198116600160781b918290048316880190921602178355600b909152812054613df892168361426c565b6040516001600160601b03821681526001600160a01b03831690600090600080516020615f6783398151915290602001611b8a565b6001600160a01b0382166000908152600d602052604081208054839290613e5e9084906001600160601b0316615d8e565b82546101009290920a6001600160601b03818102199093169183160217909155600080546effffffffffffffffffffffff00000019811663010000009182900484168690038416909102178155604051918416825291506001600160a01b038416907f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b85878790602001611b8a565b6001600160a01b038216600090815260086020526040812080546001600160601b0384169290613f1b908490615d77565b9091555050600080546001600160601b03600160781b8083048216859003909116026bffffffffffffffffffffffff60781b199091161781556001600160a01b038084168252600b6020526040822054613f78929116908361426c565b6040516001600160601b03821681526000906001600160a01b03841690600080516020615f6783398151915290602001611b8a565b6001600160a01b038083166000908152600b6020908152604080832080548686166001600160a01b0319821617909155600890925290912054911690613ff6908290849061426c565b816001600160a01b0316816001600160a01b0316846001600160a01b03167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916140a191906158ec565b6000604051808303816000865af19150503d80600081146140de576040519150601f19603f3d011682016040523d82523d6000602084013e6140e3565b606091505b509150915081801561410d57508051158061410d57508080602001905181019061410d9190615585565b61414b5760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610cd3565b5050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916141b691906158ec565b6000604051808303816000865af19150503d80600081146141f3576040519150601f19603f3d011682016040523d82523d6000602084013e6141f8565b606091505b50915091508180156142225750805115806142225750808060200190518101906142229190615585565b6142645760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610cd3565b505050505050565b816001600160a01b0316836001600160a01b03161415801561429657506001600160601b03811615155b1561439d576001600160a01b0383161561431e576001600160a01b0383166000908152600a602052604081205490816142d0576000614309565b6001600160a01b038516600090815260096020908152604080832060001986018452909152902054600160201b90046001600160601b03165b905082810361431a86848484614bdb565b5050505b6001600160a01b0382161561439d576001600160a01b0382166000908152600a6020526040812054908161435357600061438c565b6001600160a01b038416600090815260096020908152604080832060001986018452909152902054600160201b90046001600160601b03165b905082810161426485848484614bdb565b505050565b60006002548311156143df5760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610cd3565b60001983016000908152600e6020526040902054600160401b900463ffffffff161561443e5760405162461bcd60e51b815260206004820152600e60248201526d1c1c995d885c1c9bd8d95cdcd95960921b6044820152606401610cd3565b6000838152600e6020526040902054600160401b900463ffffffff166144925760405162461bcd60e51b81526020600482015260096024820152681c1c9bd8d95cdcd95960ba1b6044820152606401610cd3565b60005462010000900460ff16156144ab57506001611735565b600054600290600160781b90046001600160601b0316046001600160601b031682606001516001600160601b031611156144e757506001611735565b60015460408301514263ffffffff92831690910190911611156145355760405162461bcd60e51b815260206004820152600660248201526508595b99195960d21b6044820152606401610cd3565b50600192915050565b60005b8160c0015151811015613d5e578160c00151818151811061456457614564615f17565b60200260200101516001600160a01b03168260e00151828151811061458b5761458b615f17565b60200260200101516001600160601b031683610100015183815181106145b3576145b3615f17565b60200260200101516040516145c891906158ec565b60006040518083038185875af1925050503d8060008114614605576040519150601f19603f3d011682016040523d82523d6000602084013e61460a565b606091505b505050600101614541565b60005b8160c0015151811015613d5e57816101000151818151811061463c5761463c615f17565b60200260200101515160001415614696576146918260c00151828151811061466657614666615f17565b60200260200101518360e00151838151811061468457614684615f17565b6020026020010151613d62565b61472d565b6000600860008460c0015184815181106146b2576146b2615f17565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205490506147048360c0015183815181106146f6576146f6615f17565b602002602001015182613eea565b61472b8360c00151838151811061471d5761471d615f17565b602002602001015182613c9f565b505b600101614618565b60e08101515160018114156147b6578160e0015160008151811061475b5761475b615f17565b60200260200101516001600160601b0316600014613d5e578160e0015160008151811061478a5761478a615f17565b6020026020010151600160046101000a81548163ffffffff021916908363ffffffff1602179055505050565b8060021415614831578160e001516001815181106147d6576147d6615f17565b60200260200101516001600160601b0316600014613d5e578160e0015160018151811061480557614805615f17565b6020026020010151600160086101000a81548163ffffffff021916908363ffffffff1602179055505050565b80600314156148ac578160e0015160028151811061485157614851615f17565b60200260200101516001600160601b0316600014613d5e578160e0015160028151811061488057614880615f17565b6020026020010151600160006101000a81548163ffffffff021916908363ffffffff1602179055505050565b8060041415614927578160e001516003815181106148cc576148cc615f17565b60200260200101516001600160601b0316600014613d5e578160e001516003815181106148fb576148fb615f17565b60200260200101516000601b6101000a81548163ffffffff021916908363ffffffff1602179055505050565b806005141561497e578160e0015160048151811061494757614947615f17565b60200260200101516001600160601b03166000146149705750506000805460ff19166001179055565b50506000805460ff19169055565b8060061415613d5e578160e0015160058151811061499e5761499e615f17565b60200260200101516001600160601b03166000146149c9576000805461ff0019166101001790555050565b50506000805461ff0019169055565b60005b8160c0015151811015613d5e578160e0015181815181106149fe576149fe615f17565b60200260200101516001600160601b03166000148015614a3d57508161010001518181518110614a3057614a30615f17565b6020026020010151516000145b15614aa2576001601060008460c001518481518110614a5e57614a5e615f17565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550614bd3565b8160e001518181518110614ab857614ab8615f17565b60200260200101516001600160601b03166000148015614af857508161010001518181518110614aea57614aea615f17565b602002602001015151600014155b15614b19576000601060008460c001518481518110614a5e57614a5e615f17565b8160e001518181518110614b2f57614b2f615f17565b60200260200101516001600160601b0316600014158015614b6f57508161010001518181518110614b6257614b62615f17565b6020026020010151516000145b15614bd35760065461019014614bd35760068260c001518281518110614b9757614b97615f17565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790555b6001016149db565b428315801590614c1a57506001600160a01b03851660009081526009602090815260408083206000198801845290915290205463ffffffff8281169116145b15614c73576001600160a01b038516600090815260096020908152604080832060001988018452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055614cf9565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600983528781208c82528352878120965187549451909516600160201b026fffffffffffffffffffffffffffffffff199094169490951693909317919091179093558152600a909152206001850190555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b60405180608001604052806004906020820280368337509192915050565b600183019183908215614dee5791602002820160005b83821115614dbf57835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302614d82565b8015614dec5782816101000a81549060ff0219169055600101602081600001049283019260010302614dbf565b505b50614dfa92915061505d565b5090565b828054828255906000526020600020908101928215614dee579160200282015b82811115614dee57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614e1e565b82805482825590600052602060002090600101600290048101928215614dee5791602002820160005b83821115614ec657835183826101000a8154816001600160601b0302191690836001600160601b031602179055509260200192600c01602081600b01049283019260010302614e7c565b8015614dec5782816101000a8154906001600160601b030219169055600c01602081600b01049283019260010302614ec6565b828054828255906000526020600020908101928215614f46579160200282015b82811115614f465782518051614f36918491602090910190614f52565b5091602001919060010190614f19565b50614dfa929150615072565b828054614f5e90615eab565b90600052602060002090601f016020900481019282614f805760008555614dee565b82601f10614f9957805160ff1916838001178555614dee565b82800160010185558215614dee579182015b82811115614dee578251825591602001919060010190614fab565b5080546000825590600052602060002090810190610e55919061505d565b508054600082556001016002900490600052602060002090810190610e55919061505d565b5080546000825590600052602060002090810190610e559190615072565b50805461503390615eab565b6000825580601f10615043575050565b601f016020900490600052602060002090810190610e5591905b5b80821115614dfa576000815560010161505e565b80821115614dfa5760006150868282615027565b50600101615072565b80356001600160a01b03811681146150a657600080fd5b919050565b60008083601f8401126150bd57600080fd5b5081356001600160401b038111156150d457600080fd5b6020830191508360208260051b85010111156150ef57600080fd5b9250929050565b60008083601f84011261510857600080fd5b5081356001600160401b0381111561511f57600080fd5b6020830191508360208285010111156150ef57600080fd5b803563ffffffff811681146150a657600080fd5b803560ff811681146150a657600080fd5b60006020828403121561516e57600080fd5b61127a8261508f565b6000806040838503121561518a57600080fd5b6151938361508f565b91506151a16020840161508f565b90509250929050565b60008060008060008060008060a0898b0312156151c657600080fd5b6151cf8961508f565b97506151dd60208a0161508f565b965060408901356001600160401b03808211156151f957600080fd5b6152058c838d016150ab565b909850965060608b013591508082111561521e57600080fd5b61522a8c838d016150ab565b909650945060808b013591508082111561524357600080fd5b506152508b828c016150f6565b999c989b5096995094979396929594505050565b60008060008060006080868803121561527c57600080fd5b6152858661508f565b94506152936020870161508f565b93506040860135925060608601356001600160401b038111156152b557600080fd5b6152c1888289016150f6565b969995985093965092949392505050565b60008060008060008060a087890312156152eb57600080fd5b6152f48761508f565b95506153026020880161508f565b9450604087013593506060870135925060808701356001600160401b0381111561532b57600080fd5b61533789828a016150f6565b979a9699509497509295939492505050565b60008060006060848603121561535e57600080fd5b6153678461508f565b92506153756020850161508f565b9150604084013561538581615f51565b809150509250925092565b600080600080600080600060e0888a0312156153ab57600080fd5b6153b48861508f565b96506153c26020890161508f565b955060408801356153d281615f51565b9450606088013593506153e76080890161514b565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561541657600080fd5b61541f8361508f565b946020939093013593505050565b60008060008060008060c0878903121561544657600080fd5b61544f8761508f565b9550602087013594506040870135935061546b6060880161514b565b92506080870135915060a087013590509295509295509295565b6000806040838503121561549857600080fd5b6154a18361508f565b915060208301356154b181615f51565b809150509250929050565b6000806000606084860312156154d157600080fd5b6154da8461508f565b9250602084013561537581615f51565b6000806000806080858703121561550057600080fd5b6155098561508f565b9350602085013561551981615f51565b9250604085013561552981615f51565b9150606085013561553981615f43565b939692955090935050565b6000806020838503121561555757600080fd5b82356001600160401b0381111561556d57600080fd5b615579858286016150ab565b90969095509350505050565b60006020828403121561559757600080fd5b815161127a81615f43565b6000602082840312156155b457600080fd5b5051919050565b6000602082840312156155cd57600080fd5b81516001600160401b038111156155e357600080fd5b8201601f810184136155f457600080fd5b805161560761560282615ccc565b615c9c565b81815285602083850101111561561c57600080fd5b61562d826020830160208601615e7b565b95945050505050565b60006020828403121561564857600080fd5b5035919050565b6000806040838503121561566257600080fd5b8235915060208301356154b181615f43565b600080600080600060a0868803121561568c57600080fd5b85359450602086013561569e81615f43565b93506156ac6040870161514b565b94979396509394606081013594506080013592915050565b60008060008060008060008060008060c08b8d0312156156e357600080fd5b6156ec8b61514b565b99506156fa60208c01615137565b985060408b01356001600160401b038082111561571657600080fd5b6157228e838f016150ab565b909a50985060608d013591508082111561573b57600080fd5b6157478e838f016150ab565b909850965060808d013591508082111561576057600080fd5b61576c8e838f016150ab565b909650945060a08d013591508082111561578557600080fd5b506157928d828e016150f6565b915080935050809150509295989b9194979a5092959850565b6000602082840312156157bd57600080fd5b813561127a81615f51565b600080604083850312156157db57600080fd5b82516157e681615f51565b60208401519092506154b181615f51565b81835260006020808501808196508560051b810191508460005b8781101561587a5782840389528135601e1988360301811261583257600080fd5b870180356001600160401b0381111561584a57600080fd5b80360389131561585957600080fd5b6158668682898501615887565b9a87019a9550505090840190600101615811565b5091979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526158c8816020860160208601615e7b565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b600082516158fe818460208701615e7b565b9190910192915050565b600080835481600182811c91508083168061592457607f831692505b602080841082141561594457634e487b7160e01b86526022600452602486fd5b818015615958576001811461596957615996565b60ff19861689528489019650615996565b60008a81526020902060005b8681101561598e5781548b820152908501908301615975565b505084890196505b509498975050505050505050565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a060808301526159dd60a083018486615887565b98975050505050505050565b6080808252810188905260008960a08301825b8b811015615a2a576001600160a01b03615a158461508f565b168252602092830192909101906001016159fc565b5083810360208581019190915289825291508990820160005b8a811015615a71578235615a5681615f51565b6001600160601b031682529183019190830190600101615a43565b508481036040860152615a8581898b6157f7565b925050508281036060840152615a9c818587615887565b9b9a5050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615aec5783516001600160a01b031683529284019291840191600101615ac7565b50909695505050505050565b60808101818360005b6004811015615b225781511515835260209283019290910190600101615b01565b50505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015615b8057603f19888603018452615b6e8583516158b0565b94509285019290850190600101615b52565b5092979650505050505050565b60208152600061127a60208301846158b0565b6020808252600d908201526c217472616e7366657261626c6560981b604082015260600190565b6020808252600990820152681c99595b9d1c985b9d60ba1b604082015260600190565b6020808252600a9082015269217369676e61746f727960b01b604082015260600190565b63ffffffff87811682528681166020830152851660408201526001600160601b0384811660608301528316608082015260c060a082018190526000906159dd908301846158b0565b6000808335601e19843603018112615c6d57600080fd5b8301803591506001600160401b03821115615c8757600080fd5b6020019150368190038213156150ef57600080fd5b604051601f8201601f191681016001600160401b0381118282101715615cc457615cc4615f2d565b604052919050565b60006001600160401b03821115615ce557615ce5615f2d565b50601f01601f191660200190565b60008219821115615d0657615d06615f01565b500190565b60006001600160601b03808316818516808303821115615d2d57615d2d615f01565b01949350505050565b600082615d5357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615d7257615d72615f01565b500290565b600082821015615d8957615d89615f01565b500390565b60006001600160601b0383811690831681811015615dae57615dae615f01565b039392505050565b60006001600160401b0380841115615dd057615dd0615f2d565b8360051b6020615de1818301615c9c565b8681528181019086368582011115615df857600080fd5b600094505b88851015615e6f57803586811115615e1457600080fd5b880136601f820112615e2557600080fd5b8035615e3361560282615ccc565b8181523687838501011115615e4757600080fd5b8187840188830137600091810187019190915284525060019490940193918301918301615dfd565b50979650505050505050565b60005b83811015615e96578181015183820152602001615e7e565b83811115615ea5576000848401525b50505050565b600181811c90821680615ebf57607f821691505b60208210811415615ee057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615efa57615efa615f01565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610e5557600080fd5b6001600160601b0381168114610e5557600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122082841cc57dfe433915481cf8225900e6e45a71ae330c30781643354a1a4f0b1164736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000000044261616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044241414c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000003ab458634910aad20ef5f1c8ee96f1d6ac549190000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a200000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca000000000000000000000000ced608aa29bb92185d9b6340adcbfa263dae075b000000000000000000000000d26a3f686d43f2a62ba9eae2ff77e9f516d945b900000000000000000000000015c6ac4cf1b5e49c44332fb0a1043ccab19db80a000000000000000000000000775af9b7c214fe8792ab5f5da61a8708591d517e000000000000000000000000bf42c05bd8302a4d2efd0cdf66fc33d8123887bf00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000021e19e0c9bab2400000

-----Decoded View---------------
Arg [0] : _sharesPaused (bool): True
Arg [1] : _gracePeriod (uint32): 500
Arg [2] : _minVotingPeriod (uint32): 300
Arg [3] : _maxVotingPeriod (uint32): 500
Arg [4] : _name (string): Baal
Arg [5] : _symbol (string): BAAL
Arg [6] : _guildTokens (address[]): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919
Arg [7] : _shamans (address[]): 0x0000000000000000000000000000000000000000
Arg [8] : _summoners (address[]): 0x1C0Aa8cCD568d90d61659F060D1bFb1e6f855A20,0x7136fbDdD4DFfa2369A9283B6E90A040318011Ca,0xCED608Aa29bB92185D9b6340Adcbfa263DAe075b,0xd26a3F686D43f2A62BA9eaE2ff77e9f516d945B9,0x15C6AC4Cf1b5E49c44332Fb0a1043Ccab19db80a,0x775aF9b7c214Fe8792aB5f5da61a8708591d517E,0xBF42C05Bd8302a4d2EFd0cdf66Fc33D8123887bF
Arg [9] : _loot (uint96[]): 0,0,0,0,0,0,0
Arg [10] : _shares (uint96[]): 10000000000000000000000,10000000000000000000000,10000000000000000000000,10000000000000000000000,10000000000000000000000,10000000000000000000000,10000000000000000000000

-----Encoded View---------------
44 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [2] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [5] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [6] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000380
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000480
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [12] : 4261616c00000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [14] : 4241414c00000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [16] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [17] : 00000000000000000000000003ab458634910aad20ef5f1c8ee96f1d6ac54919
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [21] : 0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20
Arg [22] : 0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca
Arg [23] : 000000000000000000000000ced608aa29bb92185d9b6340adcbfa263dae075b
Arg [24] : 000000000000000000000000d26a3f686d43f2a62ba9eae2ff77e9f516d945b9
Arg [25] : 00000000000000000000000015c6ac4cf1b5e49c44332fb0a1043ccab19db80a
Arg [26] : 000000000000000000000000775af9b7c214fe8792ab5f5da61a8708591d517e
Arg [27] : 000000000000000000000000bf42c05bd8302a4d2efd0cdf66fc33d8123887bf
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [35] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [36] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [37] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000
Arg [38] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000
Arg [39] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000
Arg [40] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000
Arg [41] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000
Arg [42] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000
Arg [43] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000


Deployed Bytecode Sourcemap

668:45509:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3849:43;;;;;;;;;;-1:-1:-1;3849:43:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;2071:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3755:41::-;;;;;;;;;;-1:-1:-1;3755:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3755:41:0;;;;;;;;;;-1:-1:-1;;;;;35623:39:1;;;35605:58;;35694:2;35679:18;;35672:34;;;;35578:18;3755:41:0;35433:279:1;25661:322:0;;;;;;;;;;-1:-1:-1;25661:322:0;;;;;:::i;:::-;;:::i;:::-;;;21919:14:1;;21912:22;21894:41;;21882:2;21867:18;25661:322:0;21754:187:1;689:22:0;;;;;;;;;;-1:-1:-1;689:22:0;;;;;;;;3233:66;;;;;;;;;;-1:-1:-1;3233:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3233:66:0;;-1:-1:-1;;;;;3233:66:0;;;;;;;34718:10:1;34706:23;;;34688:42;;-1:-1:-1;;;;;34766:39:1;;;34761:2;34746:18;;34739:67;34661:18;3233:66:0;34518:294:1;1808:29:0;;;;;;;;;;-1:-1:-1;1808:29:0;;;;-1:-1:-1;;;1808:29:0;;;;;;;;;33803:10:1;33791:23;;;33773:42;;33761:2;33746:18;1808:29:0;33629:192:1;39071:187:0;;;;;;;;;;-1:-1:-1;39071:187:0;;;;;:::i;:::-;-1:-1:-1;;;;39183:16:0;39071:187;-1:-1:-1;;;;39071:187:0;;;;-1:-1:-1;;;;;;24385:33:1;;;24367:52;;24355:2;24340:18;39071:187:0;24223:202:1;1374:25:0;;;;;;;;;;-1:-1:-1;1374:25:0;;;;-1:-1:-1;;;1374:25:0;;-1:-1:-1;;;;;1374:25:0;;;;;;-1:-1:-1;;;;;35169:39:1;;;35151:58;;35139:2;35124:18;1374:25:0;35006:209:1;1482:31:0;;;;;;;;;;-1:-1:-1;1482:31:0;;;;-1:-1:-1;;;1482:31:0;;;;;;812:24;;;;;;;;;;-1:-1:-1;812:24:0;;;;;;;;;;;1015:36;;;;;;;;;;;;1049:2;1015:36;;;;;34989:4:1;34977:17;;;34959:36;;34947:2;34932:18;1015:36:0;34817:184:1;36685:113:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4132:41::-;;;;;;;;;;-1:-1:-1;4132:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12407:1055;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;35952:15:1;;;35934:34;;36004:15;;;;35999:2;35984:18;;35977:43;35862:18;12407:1055:0;35717:309:1;3496:64:0;;;;;;;;;;-1:-1:-1;3496:64:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3496:64:0;;;;;;-1:-1:-1;;;;;16232:55:1;;;16214:74;;16202:2;16187:18;3496:64:0;16068:226:1;26113:97:0;;;;;;;;;;-1:-1:-1;26113:97:0;;;;;:::i;:::-;;:::i;:::-;;32094:814;;;;;;;;;;-1:-1:-1;32094:814:0;;;;;:::i;:::-;;:::i;3942:49::-;;;;;;;;;;-1:-1:-1;3942:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17169:1136;;;;;;;;;;-1:-1:-1;17169:1136:0;;;;;:::i;:::-;;:::i;37874:330::-;;;;;;;;;;-1:-1:-1;37874:330:0;;;;;:::i;:::-;;:::i;:::-;;;33593:25:1;;;33581:2;33566:18;37874:330:0;33447:177:1;1279:23:0;;;;;;;;;;-1:-1:-1;1279:23:0;;;;;;;-1:-1:-1;;;;;1279:23:0;;;3370:69;;;;;;;;;;-1:-1:-1;3370:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;3100:64;;;;;;;;;;-1:-1:-1;3100:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;28314:1250;;;;;;;;;;-1:-1:-1;28314:1250:0;;;;;:::i;:::-;;:::i;35492:1038::-;;;;;;;;;;-1:-1:-1;35492:1038:0;;;;;:::i;:::-;;:::i;18789:1835::-;;;;;;;;;;-1:-1:-1;18789:1835:0;;;;;:::i;:::-;;:::i;3619:61::-;;;;;;;;;;-1:-1:-1;3619:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;1690:29;;;;;;;;;;-1:-1:-1;1690:29:0;;;;-1:-1:-1;;;1690:29:0;;;;;;31341:313;;;;;;;;;;-1:-1:-1;31341:313:0;;;;;:::i;:::-;;:::i;2137:20::-;;;;;;;;;;;;;:::i;16161:709::-;;;;;;;;;;-1:-1:-1;16161:709:0;;;;;:::i;:::-;;:::i;30586:575::-;;;;;;;;;;-1:-1:-1;30586:575:0;;;;;:::i;:::-;;:::i;29822:440::-;;;;;;;;;;-1:-1:-1;29822:440:0;;;;;:::i;:::-;;:::i;1599:25::-;;;;;;;;;;-1:-1:-1;1599:25:0;;;;;;;;14014:1969;;;;;;;;;;-1:-1:-1;14014:1969:0;;;;;:::i;:::-;;:::i;38382:599::-;;;;;;;;;;-1:-1:-1;38382:599:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37068:138::-;;;;;;;;;;-1:-1:-1;37068:138:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34974:242::-;;;;;;;;;;-1:-1:-1;34974:242:0;;;;;:::i;:::-;;:::i;39642:236::-;;;;;;;;;;-1:-1:-1;39642:236:0;;;;;:::i;:::-;-1:-1:-1;;;;39788:16:0;39642:236;-1:-1:-1;;;;;;;39642:236:0;26673:1119;;;;;;;;;;-1:-1:-1;26673:1119:0;;;;;:::i;:::-;;:::i;33193:1502::-;;;;;;;;;;-1:-1:-1;33193:1502:0;;;;;:::i;:::-;;:::i;37457:222::-;;;;;;;;;;-1:-1:-1;37457:222:0;;;;;:::i;:::-;;:::i;1926:25::-;;;;;;;;;;;;;;;;2971:64;;;;;;;;;;-1:-1:-1;2971:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;20905:1099;;;;;;;;;;-1:-1:-1;20905:1099:0;;;;;:::i;:::-;;:::i;39347:200::-;;;;;;;;;;-1:-1:-1;39347:200:0;;;;;:::i;:::-;-1:-1:-1;;;;39466:16:0;39347:200;-1:-1:-1;;;;;39347:200:0;3849:43;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3849:43:0;;;;;-1:-1:-1;;;3849:43:0;;;;;;-1:-1:-1;;;;;;;;3849:43:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2071:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25661:322::-;25756:10;25721:12;25746:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;25746:25:0;;;;;;;;;;:34;;;25829:32;25721:12;;25746:25;;25829:32;;;;25774:6;33593:25:1;;33581:2;33566:18;;33447:177;25829:32:0;;;;;;;;-1:-1:-1;25927:4:0;;25661:322;-1:-1:-1;;25661:322:0:o;36685:113::-;36734:23;36779:11;36770:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36770:20:0;;;;;;;;;;;;;;;;;;;;;;;36685:113;:::o;12407:1055::-;12569:14;12585:16;6205:6;;6215:1;6205:11;6197:32;;;;-1:-1:-1;;;6197:32:0;;;;;;;:::i;:::-;;;;;;;;;6250:1;6241:6;:10;-1:-1:-1;;;;;12622:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;12614:34;;;::::0;-1:-1:-1;;;12614:34:0;;27221:2:1;12614:34:0::1;::::0;::::1;27203:21:1::0;27260:1;27240:18;;;27233:29;-1:-1:-1;;;27278:18:1;;;27271:37;27325:18;;12614:34:0::1;27019:330:1::0;12614:34:0::1;12723:72;::::0;-1:-1:-1;;;;;;12723:72:0;;12770:10:::1;12723:72;::::0;::::1;17817:74:1::0;-1:-1:-1;;;;;17972:15:1;;;17952:18;;;17945:43;18024:15;;18004:18;;;17997:43;-1:-1:-1;;;;;12723:28:0;::::1;::::0;::::1;::::0;12759:9:::1;::::0;17790:18:1;;12723:72:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12700:95:::0;;-1:-1:-1;12700:95:0;-1:-1:-1;12848:607:0;::::1;;;-1:-1:-1::0;;;;;12904:12:0;::::1;::::0;12900:48:::1;;12918:30;12928:10;12940:7;12918:9;:30::i;:::-;-1:-1:-1::0;;;;;13011:14:0;::::1;::::0;13007:54:::1;;13027:34;13039:10;13051:9;13027:11;:34::i;:::-;12848:607;;;-1:-1:-1::0;;;;;13204:12:0;::::1;::::0;13200:48:::1;;13218:30;13228:10;13240:7;13218:9;:30::i;:::-;-1:-1:-1::0;;;;;13318:14:0;::::1;::::0;13314:54:::1;;13334:34;13346:10;13358:9;13334:11;:34::i;:::-;6284:1:::0;6275:6;:10;12407:1055;;;;-1:-1:-1;12407:1055:0;-1:-1:-1;;;12407:1055:0:o;26113:97::-;26170:32;26180:10;26192:9;26170;:32::i;:::-;26113:97;:::o;32094:814::-;32241:12;32266:8;32277:23;32286:5;32293:6;32277:8;:23::i;:::-;32266:34;-1:-1:-1;32319:8:0;32311:33;;;;-1:-1:-1;;;32311:33:0;;24856:2:1;32311:33:0;;;24838:21:1;24895:2;24875:18;;;24868:30;-1:-1:-1;;;24914:18:1;;;24907:43;24967:18;;32311:33:0;24654:337:1;32311:33:0;32365:38;32379:5;32386:8;32396:6;32365:13;:38::i;:::-;32426:23;32453:8;-1:-1:-1;;;;;32453:13:0;32490:10;32502;32514:5;32521:6;32529:3;32534:4;;32467:72;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32467:72:0;;;;;;;;;;;32453:87;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32424:116;;;32602:17;32633:10;32622:33;;;;;;;;;;;;:::i;:::-;32602:53;;32687:45;32674:9;:58;32666:85;;;;-1:-1:-1;;;32666:85:0;;29584:2:1;32666:85:0;;;29566:21:1;29623:2;29603:18;;;29596:30;-1:-1:-1;;;29642:18:1;;;29635:45;29697:18;;32666:85:0;29382:339:1;32666:85:0;32802:63;32820:5;32827:8;32845:4;32852:12;32861:3;32852:6;:12;:::i;:::-;32802:17;:63::i;:::-;-1:-1:-1;32896:4:0;;32094:814;-1:-1:-1;;;;;;;;32094:814:0:o;17169:1136::-;6205:6;;6215:1;6205:11;6197:32;;;;-1:-1:-1;;;6197:32:0;;;;;;;:::i;:::-;6250:1;6241:6;:10;17252:21:::1;17276:19:::0;;;:9:::1;:19;::::0;;;;17395:17;;17276:19;;17252:21;17369:44:::1;::::0;17383:10:::1;::::0;-1:-1:-1;;;17395:17:0;::::1;;;17369:13;:44::i;:::-;17507:15:::0;;17352:61;;-1:-1:-1;17526:15:0::1;-1:-1:-1::0;;;17507:15:0;;::::1;;;:34;;17499:51;;;::::0;-1:-1:-1;;;17499:51:0;;32980:2:1;17499:51:0::1;::::0;::::1;32962:21:1::0;33019:1;32999:18;;;32992:29;-1:-1:-1;;;33037:18:1;;;33030:35;33082:18;;17499:51:0::1;32778:328:1::0;17499:51:0::1;17616:10;17608:19;::::0;;;:7:::1;:19;::::0;;;;;;;:35;;;:25:::1;;:35:::0;;;;;;::::1;;17607:36;17599:53;;;::::0;-1:-1:-1;;;17599:53:0;;29928:2:1;17599:53:0::1;::::0;::::1;29910:21:1::0;29967:1;29947:18;;;29940:29;-1:-1:-1;;;29985:18:1;;;29978:35;30030:18;;17599:53:0::1;29726:328:1::0;17599:53:0::1;17734:8;17730:332;;;17828:24:::0;;-1:-1:-1;;;;;;;;17828:24:0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;;-1:-1:-1::0;;;;;;;;17828:24:0;;::::1;;::::0;;17880:10:::1;17828:13;17872:19:::0;;;:7:::1;:19;::::0;;;;-1:-1:-1;17872:39:0::1;:50:::0;;;17730:332:::1;;;18023:12;::::0;::::1;:23:::0;;-1:-1:-1;;;;;18023:23:0;;::::1;::::0;::::1;;-1:-1:-1::0;;;;;;18023:23:0;;::::1;;::::0;;17730:332:::1;18101:10;18093:19;::::0;;;:7:::1;:19;::::0;;;;;;;:35;;;:25:::1;;:35:::0;;;;;;:42;;-1:-1:-1;;18093:42:0::1;18131:4;18093:42;::::0;;18215:51;;-1:-1:-1;;;;;35169:39:1;;35151:58;;18215:51:0;::::1;;::::0;18093:35;;18101:10;;18215:51:::1;::::0;35124:18:1;18215:51:0::1;;;;;;;-1:-1:-1::0;;6284:1:0;6275:6;:10;-1:-1:-1;;17169:1136:0:o;37874:330::-;38002:49;;;38045:4;38002:49;;;;16214:74:1;;;;38002:49:0;;;;;;;;;;16187:18:1;;;;38002:49:0;;;;;;;-1:-1:-1;;;;;38002:49:0;-1:-1:-1;;;38002:49:0;;;37985:67;;37934:8;;;;-1:-1:-1;;;;;37985:16:0;;;:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37955:97;;;38130:11;38119:31;;;;;;;;;;;;:::i;:::-;38113:37;37874:330;-1:-1:-1;;;37874:330:0:o;28314:1250::-;28519:23;2248:77;28599:4;28583:22;;;;;;:::i;:::-;;;;;;;;;;28555:81;;;;23272:25:1;;;;23313:18;;;23306:34;28607:13:0;23356:18:1;;;23349:34;28630:4:0;23399:18:1;;;;23392:83;;;;28555:81:0;;;;;;;;;;23244:19:1;;;28555:81:0;;28545:92;;;;;;-1:-1:-1;;;;;28800:13:0;;;-1:-1:-1;28800:13:0;;;:6;:13;;;;;:15;;;;;;;;2556:86;28748:78;;;22231:25:1;22333:18;;;22326:43;;;;22405:15;;;22385:18;;;22378:43;-1:-1:-1;;;;;22457:39:1;;22437:18;;;22430:67;22513:19;;;22506:35;22557:19;;;;22550:35;;;28748:78:0;;;;;;;;;;22203:19:1;;;28748:78:0;;;28738:89;;;;;;;;;;-1:-1:-1;;;28903:57:0;;;15929:27:1;15972:11;;;15965:27;;;16008:12;;;16001:28;;;28545:92:0;;-1:-1:-1;28738:89:0;-1:-1:-1;16045:12:1;;28903:57:0;;;-1:-1:-1;;28903:57:0;;;;;;;;;28893:68;;28903:57;28893:68;;;;29019:17;29039:26;;;;;;;;;24047:25:1;;;24120:4;24108:17;;24088:18;;;24081:45;;;;24142:18;;;24135:34;;;24185:18;;;24178:34;;;28893:68:0;;-1:-1:-1;29019:17:0;29039:26;;24019:19:1;;29039:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29039:26:0;;-1:-1:-1;;29039:26:0;;;-1:-1:-1;;;;;;;29122:23:0;;29114:45;;;;-1:-1:-1;;;29114:45:0;;;;;;;:::i;:::-;29224:5;-1:-1:-1;;;;;29211:18:0;:9;-1:-1:-1;;;;;29211:18:0;;29203:41;;;;-1:-1:-1;;;29203:41:0;;31288:2:1;29203:41:0;;;31270:21:1;31327:2;31307:18;;;31300:30;-1:-1:-1;;;31346:18:1;;;31339:41;31397:18;;29203:41:0;31086:335:1;29203:41:0;28692:592;;;29331:8;29312:15;:27;;29304:46;;;;-1:-1:-1;;;29304:46:0;;28577:2:1;29304:46:0;;;28559:21:1;28616:1;28596:18;;;28589:29;-1:-1:-1;;;28634:18:1;;;28627:37;28681:18;;29304:46:0;28375:330:1;29304:46:0;-1:-1:-1;;;;;29406:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;-1:-1:-1;;;;;29406:34:0;;;;;;29489:32;;35151:58:1;;;29489:32:0;;35124:18:1;29489:32:0;;;;;;;28508:1056;28314:1250;;;;;;;:::o;35492:1038::-;35569:12;35614:15;35602:9;:27;35594:50;;;;-1:-1:-1;;;35594:50:0;;30261:2:1;35594:50:0;;;30243:21:1;30300:2;30280:18;;;30273:30;-1:-1:-1;;;30319:18:1;;;30312:41;30370:18;;35594:50:0;30059:335:1;35594:50:0;-1:-1:-1;;;;;35685:23:0;;35665:17;35685:23;;;:14;:23;;;;;;35723:17;35719:31;;35749:1;35742:8;;;;;35719:31;-1:-1:-1;;;;;35800:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;35821:16:0;;35800:38;;;;;;;:52;;;:65;-1:-1:-1;35796:139:0;;-1:-1:-1;;;;;35891:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;35912:16:0;;;35891:38;;;;;;:44;-1:-1:-1;;;;;;;;35891:44:0;;;;;-1:-1:-1;35884:51:0;;35796:139;-1:-1:-1;;;;;35955:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:37;;;:49;-1:-1:-1;35951:63:0;;;36013:1;36006:8;;;;;35951:63;36029:10;-1:-1:-1;;36072:16:0;;36103:353;36118:5;36110;:13;36103:353;;;-1:-1:-1;;;;;36227:20:0;;36144:11;36227:20;;;:11;:20;;;;;;;;36184:1;36167:13;;;36166:19;36158:27;;36227:28;;;;;;;;;;36204:51;;;;;;;;;;;;;;;-1:-1:-1;;;36204:51:0;;;-1:-1:-1;;;;;36204:51:0;;;;;;;;;36278:29;;36274:166;;;36316:8;;;;-1:-1:-1;36309:15:0;;-1:-1:-1;;;;36309:15:0;36274:166;36353:16;;:28;;;-1:-1:-1;36349:91:0;;;36391:6;36383:14;;36349:91;;;36439:1;36430:6;:10;36422:18;;36349:91;36125:331;;36103:353;;;-1:-1:-1;;;;;;36478:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;:33;-1:-1:-1;;;36478:33:0;;-1:-1:-1;;;;;36478:33:0;;-1:-1:-1;;35492:1038:0;;;;;:::o;18789:1835::-;6205:6;;6215:1;6205:11;6197:32;;;;-1:-1:-1;;;6197:32:0;;;;;;;:::i;:::-;6250:1;6241:6;:10;18966:21:::1;18990:19:::0;;;:9:::1;:19;::::0;;;;;19130:22;;18990:19;;18966:21;2248:77:::1;::::0;19130:22:::1;::::0;19146:4:::1;::::0;19130:22:::1;:::i;:::-;;::::0;;;;;::::1;::::0;;19102:81:::1;::::0;;::::1;23272:25:1::0;;;;23313:18;;;23306:34;19154:13:0::1;23356:18:1::0;;;23349:34;19177:4:0::1;23399:18:1::0;;;;23392:83;;;;19102:81:0;;;;;;;;;;23244:19:1;;;19102:81:0;;19092:92;;;;::::1;::::0;2725:47:::1;19260:45:::0;;;23682:25:1;23723:18;;;23716:34;;;23793:14;;23786:22;23766:18;;;;23759:50;;;;19260:45:0;;;;;;;;;;23655:18:1;;;19260:45:0;;;19250:56;;;;;::::1;::::0;-1:-1:-1;;;19378:57:0;;;15929:27:1;15972:11;;;15965:27;;;16008:12;;;16001:28;;;19092:92:0;;-1:-1:-1;;;16045:12:1;;19378:57:0::1;::::0;;-1:-1:-1;;19378:57:0;;::::1;::::0;;;;;;19368:68;;19378:57:::1;19368:68:::0;;::::1;::::0;19490:17:::1;19510:26:::0;;;;;::::1;::::0;;;24047:25:1;;;24120:4;24108:17;;24088:18;;;24081:45;;;;24142:18;;;24135:34;;;24185:18;;;24178:34;;;19368:68:0;;-1:-1:-1;19490:17:0;19510:26:::1;::::0;24019:19:1;;19510:26:0::1;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19510:26:0::1;::::0;-1:-1:-1;;19510:26:0;;;-1:-1:-1;;;;;;;19599:23:0;::::1;19591:45;;;;-1:-1:-1::0;;;19591:45:0::1;;;;;;;:::i;:::-;19728:17:::0;;19686:14:::1;::::0;19703:43:::1;::::0;19717:9;;-1:-1:-1;;;19728:17:0;::::1;;;19703:13;:43::i;:::-;19840:15:::0;;19686:60;;-1:-1:-1;19859:15:0::1;-1:-1:-1::0;;;19840:15:0;;::::1;;;:34;;19832:51;;;::::0;-1:-1:-1;;;19832:51:0;;32980:2:1;19832:51:0::1;::::0;::::1;32962:21:1::0;33019:1;32999:18;;;32992:29;-1:-1:-1;;;33037:18:1;;;33030:35;33082:18;;19832:51:0::1;32778:328:1::0;19832:51:0::1;-1:-1:-1::0;;;;;19941:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;;;;:34;;;:24:::1;;:34:::0;;;;;;::::1;;19940:35;19932:52;;;::::0;-1:-1:-1;;;19932:52:0;;29928:2:1;19932:52:0::1;::::0;::::1;29910:21:1::0;29967:1;29947:18;;;29940:29;-1:-1:-1;;;29985:18:1;;;29978:35;30030:18;;19932:52:0::1;29726:328:1::0;19932:52:0::1;20066:8;20062:313;;;20160:24:::0;;-1:-1:-1;;;;;;;;20160:24:0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;;-1:-1:-1::0;;;;;;;;20160:24:0;;::::1;;::::0;;-1:-1:-1;;;;;20186:18:0;::::1;20160:13;20186:18:::0;;;:7:::1;:18;::::0;;;;-1:-1:-1;20186:38:0::1;:49:::0;;;20062:313:::1;;;20336:12;::::0;::::1;:23:::0;;-1:-1:-1;;;;;20336:23:0;;::::1;::::0;::::1;;-1:-1:-1::0;;;;;;20336:23:0;;::::1;;::::0;;20062:313:::1;-1:-1:-1::0;;;;;20406:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;;;;:34;;;:24:::1;;:34:::0;;;;;;:41;;-1:-1:-1;;20406:41:0::1;20443:4;20406:41;::::0;;20535:50;;-1:-1:-1;;;;;35169:39:1;;35151:58;;20535:50:0;::::1;;::::0;20406:34;;:18;;20535:50:::1;::::0;35124:18:1;20535:50:0::1;;;;;;;-1:-1:-1::0;;6284:1:0;6275:6;:10;-1:-1:-1;;;;;;;;;18789:1835:0:o;31341:313::-;31419:10;;;;31418:11;31410:36;;;;-1:-1:-1;;;31410:36:0;;;;;;;:::i;:::-;31475:10;31467:19;;;;:7;:19;;;;;:34;;31495:6;;31467:19;:34;;31495:6;;-1:-1:-1;;;;;31467:34:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;31467:34:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31547:11:0;;-1:-1:-1;31547:11:0;;;:7;:11;;;;;;;;;:26;;-1:-1:-1;;;;;;31547:26:0;;;;;;;;;;;;31610:36;;35169:39:1;;;35151:58;;31547:11:0;;-1:-1:-1;31623:10:0;;31610:36;;35124:18:1;31610:36:0;;;;;;;;31341:313;;:::o;2137:20::-;;;;;;;:::i;16161:709::-;6205:6;;6215:1;6205:11;6197:32;;;;-1:-1:-1;;;6197:32:0;;;;;;;:::i;:::-;6250:1;6241:6;:10;16234:21:::1;16258:19:::0;;;:9:::1;:19;::::0;;;;;;;16352:10:::1;16342:21:::0;;:9:::1;:21:::0;;;;;;;16334:45:::1;;;::::0;-1:-1:-1;;;16334:45:0;;29249:2:1;16334:45:0::1;::::0;::::1;29231:21:1::0;29288:1;29268:18;;;29261:29;-1:-1:-1;;;29306:18:1;;;29299:37;29353:18;;16334:45:0::1;29047:330:1::0;16334:45:0::1;16452:17:::0;;::::1;;16444:40;;;::::0;-1:-1:-1;;;16444:40:0;;25874:2:1;16444:40:0::1;::::0;::::1;25856:21:1::0;25913:1;25893:18;;;25886:29;-1:-1:-1;;;25931:18:1;;;25924:36;25977:18;;16444:40:0::1;25672:329:1::0;16444:40:0::1;16532:17:::0;;-1:-1:-1;;;16532:17:0;::::1;;;:22:::0;16524:43:::1;;;::::0;-1:-1:-1;;;16524:43:0;;31965:2:1;16524:43:0::1;::::0;::::1;31947:21:1::0;32004:1;31984:18;;;31977:29;-1:-1:-1;;;32022:18:1;;;32015:39;32071:18;;16524:43:0::1;31763:332:1::0;16524:43:0::1;16629::::0;;::::1;16656:15;16629:43:::0;;::::1;-1:-1:-1::0;;;16629:43:0::1;16762:17:::0;;;;;;;16736:43;::::1;16718:61:::0;;::::1;-1:-1:-1::0;;;16718:61:0::1;-1:-1:-1::0;;16718:61:0;;;-1:-1:-1;;16718:61:0;;;;;;;::::1;::::0;;16808:54:::1;::::0;16836:8;;16824:10:::1;::::0;16808:54:::1;::::0;16629:17:::1;::::0;16808:54:::1;-1:-1:-1::0;;6284:1:0;6275:6;:10;16161:709::o;30586:575::-;30667:12;30701;;;;;;;30700:13;30692:38;;;;-1:-1:-1;;;30692:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30755:15:0;;;;;;:9;:15;;;;;;;;30771:10;30755:27;;;;;;;;-1:-1:-1;;30755:45:0;30751:115;;-1:-1:-1;;;;;30817:15:0;;;;;;:9;:15;;;;;;;;30833:10;30817:27;;;;;;;:37;;-1:-1:-1;;;;;30817:37:0;;;:15;:37;;;;;:::i;:::-;;;;-1:-1:-1;;30751:115:0;-1:-1:-1;;;;;30886:15:0;;;;;;:9;:15;;;;;:25;;-1:-1:-1;;;;;30886:25:0;;;:15;:25;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30957:13:0;;;;;;;:9;:13;;;;;;;;:23;;-1:-1:-1;;;;;30957:23:0;;;;;31027:15;;;;;:9;:15;;;;;;;31044:13;;;;;;31012:54;;31027:15;;;;31044:13;30974:6;31012:14;:54::i;:::-;31092:26;;-1:-1:-1;;;;;35169:39:1;;35151:58;;-1:-1:-1;;;;;31092:26:0;;;;;;;;-1:-1:-1;;;;;;;;;;;31092:26:0;35139:2:1;35124:18;31092:26:0;;;;;;;-1:-1:-1;31149:4:0;;30586:575;-1:-1:-1;;;30586:575:0:o;29822:440::-;29885:12;29919;;;;;;;29918:13;29910:38;;;;-1:-1:-1;;;29910:38:0;;;;;;;:::i;:::-;29979:10;29969:21;;;;:9;:21;;;;;:31;;-1:-1:-1;;;;;29969:31:0;;;:21;:31;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30046:13:0;;;;;;;:9;:13;;;;;;;;:23;;-1:-1:-1;;;;;30046:23:0;;;;;30126:10;30116:21;;:9;:21;;;;;;;30139:13;;;;;;30101:60;;30116:21;;;;30139:13;30063:6;30101:14;:60::i;:::-;30187:32;;-1:-1:-1;;;;;35169:39:1;;35151:58;;-1:-1:-1;;;;;30187:32:0;;;30196:10;;-1:-1:-1;;;;;;;;;;;30187:32:0;35139:2:1;35124:18;30187:32:0;35006:209:1;14014:1969:0;14264:13;6205:6;;6215:1;6205:11;6197:32;;;;-1:-1:-1;;;6197:32:0;;;;;;;:::i;:::-;6250:1;6241:6;:10;14298:15:::1;::::0;:31:::1;::::0;;::::1;-1:-1:-1::0;;;14298:15:0;;::::1;;:31;::::0;::::1;::::0;:66:::1;;-1:-1:-1::0;14349:15:0::1;::::0;::::1;-1:-1:-1::0;;;14349:15:0;;::::1;::::0;::::1;14333:31:::0;;::::1;;;14298:66;14290:91;;;::::0;-1:-1:-1;;;14290:91:0;;25532:2:1;14290:91:0::1;::::0;::::1;25514:21:1::0;25571:2;25551:18;;;25544:30;-1:-1:-1;;;25590:18:1;;;25583:43;25643:18;;14290:91:0::1;25330:337:1::0;14290:91:0::1;14459:2;14446:15:::0;::::1;;14438:36;;;::::0;-1:-1:-1;;;14438:36:0;;31628:2:1;14438:36:0::1;::::0;::::1;31610:21:1::0;31667:1;31647:18;;;31640:29;-1:-1:-1;;;31685:18:1;;;31678:39;31734:18;;14438:36:0::1;31426:332:1::0;14438:36:0::1;14581:1;14573:4;:9;;;;14565:26;;;::::0;-1:-1:-1;;;14565:26:0;;26888:2:1;14565:26:0::1;::::0;::::1;26870:21:1::0;26927:1;26907:18;;;26900:29;-1:-1:-1;;;26945:18:1;;;26938:35;26990:18;;14565:26:0::1;26686:328:1::0;14565:26:0::1;14642:20;;:::i;:::-;14743:4;14729:5;14735:4;14729:11;;;;;;;;;:::i;:::-;:18:::0;::::1;;:11;::::0;;::::1;;:18:::0;14815:9:::1;::::0;::::1;14823:1;14815:9;14811:402;;;14861:1;14845:17:::0;::::1;14841:217;;;14903:15;::::0;-1:-1:-1;;;14903:15:0;::::1;;;14891:5:::0;;14897:1:::1;14891:5:::0;:8:::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14891:27:0::1;;;14883:47;;;::::0;-1:-1:-1;;;14883:47:0;;33313:2:1;14883:47:0::1;::::0;::::1;33295:21:1::0;33352:1;33332:18;;;33325:29;-1:-1:-1;;;33370:18:1;;;33363:38;33418:18;;14883:47:0::1;33111:331:1::0;14883:47:0::1;14811:402;;14841:217;14972:1;14956:17:::0;::::1;14952:106;;;15014:15;::::0;;-1:-1:-1;;;15014:15:0;::::1;;;::::0;15002:5;;;;:8;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15002:27:0::1;;;14994:48;;;::::0;-1:-1:-1;;;14994:48:0;;27556:2:1;14994:48:0::1;::::0;::::1;27538:21:1::0;27595:1;27575:18;;;27568:29;-1:-1:-1;;;27613:18:1;;;27606:39;27662:18;;14994:48:0::1;27354:332:1::0;14811:402:0::1;15098:25:::0;;::::1;:56:::0;::::1;;;-1:-1:-1::0;15127:27:0;;::::1;15098:56;15090:81;;;::::0;-1:-1:-1;;;15090:81:0;;27893:2:1;15090:81:0::1;::::0;::::1;27875:21:1::0;27932:2;27912:18;;;27905:30;-1:-1:-1;;;27951:18:1;;;27944:43;28004:18;;15090:81:0::1;27691:337:1::0;15090:81:0::1;15297:10;15233:16;15287:21:::0;;;:9:::1;:21;::::0;;;;;:26;15283:50:::1;;-1:-1:-1::0;15329:4:0::1;15283:50;15401:13;:15:::0;;::::1;;::::0;;15489:333:::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;15633:11:::0;:41:::1;;15673:1;15633:41;;;15654:15;15633:41;15489:333;;;;;;15694:11;:56;;15749:1;15694:56;;;15734:12;15715:15;15708:38;15694:56;15489:333;;;;;;15770:1;-1:-1:-1::0;;;;;15489:333:0::1;;;;;15773:1;-1:-1:-1::0;;;;;15489:333:0::1;;;;;15776:5;15489:333;;;;15783:2;;15489:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;15489:333:0;;;-1:-1:-1;15489:333:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;::::1;::::0;;;15787:5;;;;;;15489:333;::::1;::::0;15787:5;;15489:333;15787:5;15489:333;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;15489:333:0;;;-1:-1:-1;15489:333:0::1;;;15794:4:::0;;15489:333:::1;:::i;:::-;;;;;15800:7;;15489:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;15489:333:0;;;;-1:-1:-1;;15472:13:0::1;::::0;;15462:24;;:9:::1;:24;::::0;;;;;;;;:360;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;15462:360:0;;;;;;;-1:-1:-1;;;15462:360:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;15462:360:0;-1:-1:-1;;;15462:360:0;;;::::1;;-1:-1:-1::0;;;;;;;;15462:360:0;;;;;-1:-1:-1;;;;;;;;15462:360:0;;::::1;;;::::0;;::::1;::::0;::::1;::::0;-1:-1:-1;15462:360:0;::::1;::::0;;-1:-1:-1;;;;;;15462:360:0::1;::::0;;;::::1;;::::0;;::::1;::::0;::::1;::::0;:24;;-1:-1:-1;15462:360:0::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;15462:360:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;15462:360:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;15462:360:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;15462:360:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;;;15890:12;15859:70;;15880:8;15874:4;15859:70;;;15904:2;;15908:5;;15915:4;;15921:7;;15859:70;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;6284:1:0;6275:6;:10;14014:1969;;-1:-1:-1;;;;;;;;;;14014:1969:0:o;38382:599::-;38442:22;38499:4;-1:-1:-1;;;;;38487:24:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38477:34;;38552:9;38547:416;38567:15;;;38547:416;;;38609:12;;38654:4;38673;;38678:1;38673:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;38646:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38608:73;;;;38705:7;38700:210;;38757:2;38741:6;:13;:18;38737:32;;;38761:8;;;38737:32;38825:4;38817:6;38813:17;38803:27;;38872:6;38861:28;;;;;;;;;;;;:::i;:::-;38854:36;;-1:-1:-1;;;38854:36:0;;;;;;;;:::i;38700:210::-;38941:6;38928:7;38936:1;38928:10;;;;;;;;:::i;:::-;;;;;;;;;;:19;-1:-1:-1;;38584:3:0;;38547:416;;;;38382:599;;;;:::o;37068:138::-;37132:20;;:::i;:::-;37173:19;;;;:9;:19;;;;;;37165:33;;;;;;;;;;37173:25;;;;;37165:33;;37173:25;;37165:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37165:33:0;;37068:138;-1:-1:-1;;;;;;;37068:138:0:o;34974:242::-;-1:-1:-1;;;;;35084:23:0;;35039:12;35084:23;;;:14;:23;;;;;;35138:17;:68;;35205:1;35138:68;;;-1:-1:-1;;;;;35158:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;35179:16:0;;35158:38;;;;;;;:44;-1:-1:-1;;;;;;;;35158:44:0;;;;35130:76;34974:242;-1:-1:-1;;;34974:242:0:o;26673:1119::-;26859:23;2248:77;26939:4;26923:22;;;;;;:::i;:::-;;;;;;;;;;26895:81;;;;23272:25:1;;;;23313:18;;;23306:34;26947:13:0;23356:18:1;;;23349:34;26970:4:0;23399:18:1;;;;23392:83;;;;26895:81:0;;;;;;;;;;23244:19:1;;;26895:81:0;;26885:92;;;;;;2408:65;27053:59;;;22827:25:1;-1:-1:-1;;;;;22888:55:1;;22868:18;;;22861:83;22960:18;;;22953:34;;;23003:18;;;;22996:34;;;27053:59:0;;;;;;;;;;22799:19:1;;;27053:59:0;;;27043:70;;;;;;;-1:-1:-1;;;27185:57:0;;;15929:27:1;15972:11;;;15965:27;;;16008:12;;;16001:28;;;26885:92:0;;-1:-1:-1;;;16045:12:1;;27185:57:0;;;-1:-1:-1;;27185:57:0;;;;;;;;;27175:68;;27185:57;27175:68;;;;27297:17;27317:26;;;;;;;;;24047:25:1;;;24120:4;24108:17;;24088:18;;;24081:45;;;;24142:18;;;24135:34;;;24185:18;;;24178:34;;;27175:68:0;;-1:-1:-1;27297:17:0;27317:26;;24019:19:1;;27317:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27317:26:0;;-1:-1:-1;;27317:26:0;;;-1:-1:-1;;;;;;;27410:23:0;;27402:45;;;;-1:-1:-1;;;27402:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27529:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;27520:28;;27512:46;;;;-1:-1:-1;;;27512:46:0;;25198:2:1;27512:46:0;;;25180:21:1;25237:1;25217:18;;;25210:29;-1:-1:-1;;;25255:18:1;;;25248:36;25301:18;;27512:46:0;24996:329:1;27512:46:0;27651:8;27632:15;:27;;27624:46;;;;-1:-1:-1;;;27624:46:0;;28577:2:1;27624:46:0;;;28559:21:1;28616:1;28596:18;;;28589:29;-1:-1:-1;;;28634:18:1;;;28627:37;28681:18;;27624:46:0;28375:330:1;27624:46:0;27730:31;27740:9;27751;27730;:31::i;:::-;26848:944;;;;26673:1119;;;;;;:::o;33193:1502::-;6205:6;;6215:1;6205:11;6197:32;;;;-1:-1:-1;;;6197:32:0;;;;;;;:::i;:::-;6250:1;6241:6;:10;33322::::1;33304:50;33314:19:::0;;;:7:::1;:19;::::0;;;;;;;:39:::1;;::::0;33304:50;;:9:::1;:50:::0;;;;;:61;-1:-1:-1;;;33304:61:0;::::1;;;:66:::0;33296:87:::1;;;::::0;-1:-1:-1;;;33296:87:0;;26551:2:1;33296:87:0::1;::::0;::::1;26533:21:1::0;26590:1;26570:18;;;26563:29;-1:-1:-1;;;26608:18:1;;;26601:39;26657:18;;33296:87:0::1;26349:332:1::0;33296:87:0::1;33472:6;33467:720;33484:11;:18:::0;33480:22;::::1;33467:720;;;33526:24;33554:11;33566:1;33554:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;33580:49:::1;::::0;;33623:4:::1;33580:49;::::0;;::::1;16214:74:1::0;;;;33580:49:0;;;;;;;;;;16187:18:1;;;;33580:49:0;;;;::::1;::::0;;-1:-1:-1;;;;;33580:49:0::1;-1:-1:-1::0;;;33580:49:0::1;::::0;;33554:76;-1:-1:-1;;;;;33554:14:0;;::::1;::::0;:76:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33524:106;;;33696:12;33722:11;33711:31;;;;;;;;;;;;:::i;:::-;33818:21;33899:9:::0;;33696:46;;-1:-1:-1;33818:21:0;33885:23:::1;::::0;-1:-1:-1;;;;;33899:9:0;;::::1;::::0;::::1;::::0;-1:-1:-1;;;33885:11:0;::::1;;:23;:::i;:::-;-1:-1:-1::0;;;;;33842:67:0::1;33873:7:::0;33844:25:::1;33857:12:::0;33844:10;:25:::1;:::i;:::-;-1:-1:-1::0;;;;;33843:37:0::1;;;;;:::i;:::-;33842:67;;;;:::i;:::-;33818:91:::0;-1:-1:-1;33976:21:0;;33972:204:::1;;34075:51;34089:11;34101:1;34089:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34089:14:0::1;34105:2:::0;34109:16;34075:13:::1;:51::i;:::-;33509:678;;;33504:3;;;;;:::i;:::-;;;;33467:720;;;-1:-1:-1::0;;;;;;34211:15:0;::::1;::::0;34207:155:::1;;34265:33;34275:10;34287;34265:9;:33::i;:::-;-1:-1:-1::0;;;;;34386:17:0;::::1;::::0;34382:186:::1;;34442:37;34454:10;34466:12;34442:11;:37::i;:::-;34593:50;::::0;-1:-1:-1;;;;;16232:55:1;;16214:74;;-1:-1:-1;;;;;34593:50:0;;::::1;::::0;;;::::1;::::0;34602:10:::1;::::0;34593:50:::1;::::0;16202:2:1;16187:18;34593:50:0::1;;;;;;;-1:-1:-1::0;;6284:1:0;6275:6;:10;-1:-1:-1;33193:1502:0:o;37457:222::-;37518:8;37554:17;;37574:5;;37545:26;;-1:-1:-1;;;37554:17:0;;;;37545:6;:26;:::i;:::-;:34;;;;:::i;20905:1099::-;6205:6;;6215:1;6205:11;6197:32;;;;-1:-1:-1;;;6197:32:0;;;;;;;:::i;:::-;6250:1;6241:6;:10;;;20978:21:::1;21002:19:::0;;;:9:::1;:19;::::0;;;;;;;21080:32;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;21080:32:0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;21080:32:0;::::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;21080:32:0;;::::1;-1:-1:-1::0;;;;;21080:32:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;21002:19;;21080:32:::1;::::0;21002:19;;21080:32;21002:19;;21080:32;;;;;;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21080:32:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;21080:32:0::1;-1:-1:-1::0;;;;;21080:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:16;:32::i;:::-;-1:-1:-1::0;21201:12:0::1;::::0;::::1;::::0;21185:13;;-1:-1:-1;;;;;21201:12:0;;::::1;-1:-1:-1::0;;;21185:13:0;;::::1;::::0;;::::1;:28;21181:142;;;21291:25;::::0;;;:15:::1;:25;::::0;;;;:32;;-1:-1:-1;;21291:32:0::1;21319:4;21291:32;::::0;;21181:142:::1;21404:10;::::0;::::1;:13:::0;::::1;;21400:333;;;21419:27;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;21419:27:0;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;21419:27:0;::::1;;::::0;;;;-1:-1:-1;;;21419:27:0;::::1;-1:-1:-1::0;;;;;21419:27:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;21419:27:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21419:27:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;21419:27:0::1;-1:-1:-1::0;;;;;21419:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:21;:27::i;:::-;21400:333;;;21505:10;::::0;::::1;:13:::0;::::1;::::0;::::1;;;21501:232;;;21520:27;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;21520:27:0;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;21520:27:0;::::1;;::::0;;;;-1:-1:-1;;;21520:27:0;::::1;-1:-1:-1::0;;;;;21520:27:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;21520:27:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21520:27:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;21520:27:0::1;-1:-1:-1::0;;;;;21520:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:21;:27::i;21501:232::-;21606:10;::::0;::::1;:13:::0;;;::::1;;;21602:131;;;21621:27;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;21621:27:0;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;21621:27:0;::::1;;::::0;;;;-1:-1:-1;;;21621:27:0;::::1;-1:-1:-1::0;;;;;21621:27:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;21621:27:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21621:27:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;21621:27:0::1;-1:-1:-1::0;;;;;21621:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:21;:27::i;21602:131::-;21703:30;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;21703:30:0;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;21703:30:0;::::1;;::::0;;;;-1:-1:-1;;;21703:30:0;::::1;-1:-1:-1::0;;;;;21703:30:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;21703:30:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21703:30:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;21703:30:0::1;-1:-1:-1::0;;;;;21703:30:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:24;:30::i;:::-;21800:19;::::0;;;:9:::1;:19;::::0;;;;21793:26;;-1:-1:-1;;;;;;21793:26:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;21793:26:0::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;;21800:19:0;21793:26:::1;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;-1:-1:-1::0;;21915:25:0::1;::::0;21931:8;;21915:25:::1;::::0;;;::::1;-1:-1:-1::0;;6284:1:0;6275:6;:10;20905:1099::o;43158:433::-;43250:11;;43272:20;-1:-1:-1;;;43250:11:0;;;-1:-1:-1;;;;;43250:11:0;;;:18;;:42;;43246:327;;-1:-1:-1;;;;;43313:11:0;;;;;;:7;:11;;;;;;;;:24;;-1:-1:-1;;;;;;43313:24:0;;-1:-1:-1;;;;;43313:24:0;;;;;;;;;;;43398:17;;-1:-1:-1;;43398:17:0;;;;;;;;;;;;;;;;;;;43482:34;;35169:39:1;;;35151:58;;43482:34:0;;35124:18:1;43482:34:0;35006:209:1;43246:327:0;43158:433;;:::o;43656:568::-;43752:11;;43776:20;-1:-1:-1;;;43752:11:0;;;-1:-1:-1;;;;;43752:11:0;;;:20;;:44;;43748:458;;-1:-1:-1;;;;;43817:13:0;;;;;;;:9;:13;;;;;;;;:23;;-1:-1:-1;;;;;43817:23:0;;;;;;;;;43903:21;;-1:-1:-1;;;;43903:21:0;;-1:-1:-1;;;43903:21:0;;;;;;;;;;;;;;;44015:9;:13;;;;;;43988:49;;44015:13;43817:23;43988:14;:49::i;:::-;44093:32;;-1:-1:-1;;;;;35169:39:1;;35151:58;;-1:-1:-1;;;;;44093:32:0;;;44110:1;;-1:-1:-1;;;;;;;;;;;44093:32:0;35139:2:1;35124:18;44093:32:0;35006:209:1;42204:351:0;-1:-1:-1;;;;;42269:13:0;;;;;;:7;:13;;;;;:26;;42291:4;;42269:13;:26;;42291:4;;-1:-1:-1;;;;;42269:26:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;42269:26:0;;;;;;;;;;;;;;;-1:-1:-1;42380:17:0;;-1:-1:-1;;42380:17:0;;;;;;;;;;;;;;;;;;;;42470:36;;35169:39:1;;;35151:58;;-1:-1:-1;;;;;;;42470:36:0;;;;;35139:2:1;35124:18;42470:36:0;35006:209:1;42617:478:0;-1:-1:-1;;;;;42686:15:0;;;;;;:9;:15;;;;;:25;;-1:-1:-1;;;;;42686:25:0;;;:15;:25;;;;;:::i;:::-;;;;-1:-1:-1;;42798:11:0;:21;;-1:-1:-1;;;;;;;;42798:21:0;;;;;;;;;;;;-1:-1:-1;;;;42798:21:0;;;;;;-1:-1:-1;;;;;42904:15:0;;;;;:9;:15;;;;;;42889:51;;42904:15;;;42813:6;42889:14;:51::i;:::-;42988:34;;-1:-1:-1;;;;;35169:39:1;;35151:58;;43011:1:0;;-1:-1:-1;;;;;42988:34:0;;;-1:-1:-1;;;;;;;;;;;42988:34:0;35139:2:1;35124:18;42988:34:0;35006:209:1;40018:356:0;-1:-1:-1;;;;;40120:20:0;;;40094:23;40120:20;;;:9;:20;;;;;;;;;;40161:32;;;-1:-1:-1;;;;;;40161:32:0;;;;;;40264:9;:20;;;;;;;40120;;;40214:72;;40120:20;;40184:9;;40214:14;:72::i;:::-;40356:9;-1:-1:-1;;;;;40312:54:0;40339:15;-1:-1:-1;;;;;40312:54:0;40328:9;-1:-1:-1;;;;;40312:54:0;;;;;;;;;;;40083:291;40018:356;;:::o;45295:361::-;45424:46;;;-1:-1:-1;;;;;17509:55:1;;;45424:46:0;;;17491:74:1;17581:18;;;;17574:34;;;45424:46:0;;;;;;;;;;17464:18:1;;;;45424:46:0;;;;;;;-1:-1:-1;;;;;45424:46:0;-1:-1:-1;;;45424:46:0;;;45413:58;;-1:-1:-1;;;;45413:10:0;;;;:58;;45424:46;45413:58;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45377:94;;;;45519:7;:57;;;;-1:-1:-1;45531:11:0;;:16;;:44;;;45562:4;45551:24;;;;;;;;;;;;:::i;:::-;45511:84;;;;-1:-1:-1;;;45511:84:0;;32636:2:1;45511:84:0;;;32618:21:1;32675:2;32655:18;;;32648:30;-1:-1:-1;;;32694:18:1;;;32687:45;32749:18;;45511:84:0;32434:339:1;45511:84:0;45366:290;;45295:361;;;:::o;45773:401::-;45920:52;;;-1:-1:-1;;;;;16580:15:1;;;45920:52:0;;;16562:34:1;16632:15;;;16612:18;;;16605:43;16664:18;;;;16657:34;;;45920:52:0;;;;;;;;;;16474:18:1;;;;45920:52:0;;;;;;;-1:-1:-1;;;;;45920:52:0;-1:-1:-1;;;45920:52:0;;;45909:64;;-1:-1:-1;;;;45909:10:0;;;;:64;;45920:52;45909:64;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45873:100;;;;46033:7;:57;;;;-1:-1:-1;46045:11:0;;:16;;:44;;;46076:4;46065:24;;;;;;;;;;;;:::i;:::-;46025:88;;;;-1:-1:-1;;;46025:88:0;;30601:2:1;46025:88:0;;;30583:21:1;30640:2;30620:18;;;30613:30;-1:-1:-1;;;30659:18:1;;;30652:49;30718:18;;46025:88:0;30399:343:1;46025:88:0;45862:312;;45773:401;;;;:::o;40460:938::-;40589:6;-1:-1:-1;;;;;40579:16:0;:6;-1:-1:-1;;;;;40579:16:0;;;:31;;;;-1:-1:-1;;;;;;40599:11:0;;;;40579:31;40575:805;;;-1:-1:-1;;;;;40635:20:0;;;40631:351;;-1:-1:-1;;;;;40697:22:0;;40680:14;40697:22;;;:14;:22;;;;;;;40761:14;:61;;40821:1;40761:61;;;-1:-1:-1;;;;;40778:19:0;;;;;;:11;:19;;;;;;;;-1:-1:-1;;40798:13:0;;40778:34;;;;;;;:40;-1:-1:-1;;;40778:40:0;;-1:-1:-1;;;;;40778:40:0;40761:61;40742:80;-1:-1:-1;40864:18:0;;;40905:57;40922:6;40930:9;40742:80;40864:18;40905:16;:57::i;:::-;40657:325;;;40631:351;-1:-1:-1;;;;;41018:20:0;;;41014:351;;-1:-1:-1;;;;;41080:22:0;;41063:14;41080:22;;;:14;:22;;;;;;;41144:14;:61;;41204:1;41144:61;;;-1:-1:-1;;;;;41161:19:0;;;;;;:11;:19;;;;;;;;-1:-1:-1;;41181:13:0;;41161:34;;;;;;;:40;-1:-1:-1;;;41161:40:0;;-1:-1:-1;;;;;41161:40:0;41144:61;41125:80;-1:-1:-1;41247:18:0;;;41288:57;41305:6;41313:9;41125:80;41247:18;41288:16;:57::i;41014:351::-;40460:938;;;:::o;44303:879::-;44388:10;44456:13;;44444:8;:25;;44436:43;;;;-1:-1:-1;;;44436:43:0;;25874:2:1;44436:43:0;;;25856:21:1;25913:1;25893:18;;;25886:29;-1:-1:-1;;;25931:18:1;;;25924:36;25977:18;;44436:43:0;25672:329:1;44436:43:0;-1:-1:-1;;44538:12:0;;44528:23;;;;:9;:23;;;;;:34;-1:-1:-1;;;44528:34:0;;;;:39;44520:65;;;;-1:-1:-1;;;44520:65:0;;26208:2:1;44520:65:0;;;26190:21:1;26247:2;26227:18;;;26220:30;-1:-1:-1;;;26266:18:1;;;26259:44;26320:18;;44520:65:0;26006:338:1;44520:65:0;44662:19;;;;:9;:19;;;;;:30;-1:-1:-1;;;44662:30:0;;;;44654:56;;;;-1:-1:-1;;;44654:56:0;;26551:2:1;44654:56:0;;;26533:21:1;26590:1;26570:18;;;26563:29;-1:-1:-1;;;26608:18:1;;;26601:39;26657:18;;44654:56:0;26349:332:1;44654:56:0;44805:14;;;;;;;44801:31;;;-1:-1:-1;44828:4:0;44821:11;;44801:31;44903:11;;44917:1;;-1:-1:-1;;;44903:11:0;;-1:-1:-1;;;;;44903:11:0;:15;-1:-1:-1;;;;;44887:31:0;:4;:13;;;-1:-1:-1;;;;;44887:31:0;;44883:48;;;-1:-1:-1;44927:4:0;44920:11;;44883:48;45017:11;;44999:15;;;;45032;45017:11;;;;44999:29;;;:48;;;;;44991:66;;;;-1:-1:-1;;;44991:66:0;;32302:2:1;44991:66:0;;;32284:21:1;32341:1;32321:18;;;32314:29;-1:-1:-1;;;32359:18:1;;;32352:36;32405:18;;44991:66:0;32100:329:1;44991:66:0;-1:-1:-1;45114:4:0;44303:879;;;;:::o;22084:300::-;22186:6;22181:154;22198:4;:7;;;:14;22194:1;:18;22181:154;;;22237:4;:7;;;22245:1;22237:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;22237:15:0;22259:4;:10;;;22270:1;22259:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;22237:98:0;22322:4;:9;;;22332:1;22322:12;;;;;;;;:::i;:::-;;;;;;;22237:98;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22214:3:0;;22181:154;;22464:659;22566:6;22561:544;22578:4;:7;;;:14;22574:1;:18;22561:544;;;22622:4;:9;;;22632:1;22622:12;;;;;;;;:::i;:::-;;;;;;;:19;22645:1;22622:24;22618:472;;;22671:38;22683:4;:7;;;22691:1;22683:10;;;;;;;;:::i;:::-;;;;;;;22695:4;:10;;;22706:1;22695:13;;;;;;;;:::i;:::-;;;;;;;22671:11;:38::i;:::-;22618:472;;;22790:21;22821:9;:21;22831:4;:7;;;22839:1;22831:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;22821:21:0;-1:-1:-1;;;;;22821:21:0;;;;;;;;;;;;;22790:53;;22892:39;22904:4;:7;;;22912:1;22904:10;;;;;;;;:::i;:::-;;;;;;;22916:14;22892:11;:39::i;:::-;23006:37;23016:4;:7;;;23024:1;23016:10;;;;;;;;:::i;:::-;;;;;;;23028:14;23006:9;:37::i;:::-;22767:323;22618:472;22594:3;;22561:544;;23246:1140;23332:10;;;;:17;23384:1;23374:11;;23370:1009;;;23406:4;:10;;;23417:1;23406:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23406:18:0;23423:1;23406:18;23402:63;;23451:4;:10;;;23462:1;23451:13;;;;;;;;:::i;:::-;;;;;;;23426:15;;:39;;;;;;;;;;;;;;;;;;43158:433;;:::o;23370:1009::-;23547:6;23557:1;23547:11;23543:836;;;23579:4;:10;;;23590:1;23579:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23579:18:0;23596:1;23579:18;23575:63;;23624:4;:10;;;23635:1;23624:13;;;;;;;;:::i;:::-;;;;;;;23599:15;;:39;;;;;;;;;;;;;;;;;;43158:433;;:::o;23543:836::-;23720:6;23730:1;23720:11;23716:663;;;23752:4;:10;;;23763:1;23752:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23752:18:0;23769:1;23752:18;23748:59;;23793:4;:10;;;23804:1;23793:13;;;;;;;;:::i;:::-;;;;;;;23772:11;;:35;;;;;;;;;;;;;;;;;;43158:433;;:::o;23716:663::-;23882:6;23892:1;23882:11;23878:501;;;23914:4;:10;;;23925:1;23914:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23914:18:0;23931:1;23914:18;23910:65;;23961:4;:10;;;23972:1;23961:13;;;;;;;;:::i;:::-;;;;;;;23934:17;;:41;;;;;;;;;;;;;;;;;;43158:433;;:::o;23878:501::-;24051:6;24061:1;24051:11;24047:332;;;24079:4;:10;;;24090:1;24079:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24079:18:0;24096:1;24079:18;:59;;-1:-1:-1;;24121:10:0;:17;;-1:-1:-1;;24121:17:0;24134:4;24121:17;;;40460:938::o;24079:59::-;-1:-1:-1;;24113:5:0;24100:18;;-1:-1:-1;;24100:18:0;;;43158:433::o;24047:332::-;24217:6;24227:1;24217:11;24213:166;;;24245:4;:10;;;24256:1;24245:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24245:18:0;24262:1;24245:18;:63;;24289:12;:19;;-1:-1:-1;;24289:19:0;;;;;40460:938;;:::o;24245:63::-;-1:-1:-1;;24281:5:0;24266:20;;-1:-1:-1;;24266:20:0;;;23246:1140::o;24507:942::-;24612:6;24607:824;24624:4;:7;;;:14;24620:1;:18;24607:824;;;24668:4;:10;;;24679:1;24668:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24668:18:0;24685:1;24668:18;:46;;;;;24690:4;:9;;;24700:1;24690:12;;;;;;;;:::i;:::-;;;;;;;:19;24713:1;24690:24;24668:46;24664:752;;;24813:4;24791:7;:19;24799:4;:7;;;24807:1;24799:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24791:19:0;-1:-1:-1;;;;;24791:19:0;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;24664:752;;;24890:4;:10;;;24901:1;24890:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24890:18:0;24907:1;24890:18;:46;;;;;24912:4;:9;;;24922:1;24912:12;;;;;;;;:::i;:::-;;;;;;;:19;24935:1;24912:24;;24890:46;24886:530;;;25046:5;25024:7;:19;25032:4;:7;;;25040:1;25032:10;;;;;;;;:::i;24886:530::-;25129:4;:10;;;25140:1;25129:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;25129:18:0;25146:1;25129:18;;:46;;;;;25151:4;:9;;;25161:1;25151:12;;;;;;;;:::i;:::-;;;;;;;:19;25174:1;25151:24;25129:46;25125:291;;;25267:11;:18;1198:3;25267:43;25263:77;;25312:11;25329:4;:7;;;25337:1;25329:10;;;;;;;;:::i;:::-;;;;;;;;;;;;25312:28;;;;;;;-1:-1:-1;25312:28:0;;;;;;;;;;-1:-1:-1;;;;;;25312:28:0;-1:-1:-1;;;;;25312:28:0;;;;;;;;;25263:77;24640:3;;24607:824;;41484:660;41627:15;41693:17;;;;;:88;;-1:-1:-1;;;;;;41714:22:0;;;;;;:11;:22;;;;;;;;-1:-1:-1;;41737:16:0;;41714:40;;;;;;;:54;:67;;;;:54;;:67;41693:88;41689:360;;;-1:-1:-1;;;;;41802:22:0;;;;;;:11;:22;;;;;;;;-1:-1:-1;;41825:16:0;;41802:40;;;;;;;:57;;-1:-1:-1;;41802:57:0;-1:-1:-1;;;;;;;;41802:57:0;;;;;;41689:360;;;41939:31;;;;;;;;;;;;;;-1:-1:-1;;;;;41939:31:0;;;;;;;;;;-1:-1:-1;;;;;41900:22:0;;-1:-1:-1;41900:22:0;;;:11;:22;;;;;:36;;;;;;;;:70;;;;;;;;;-1:-1:-1;;;41900:70:0;-1:-1:-1;;41900:70:0;;;;;;;;;;;;;;;;;;41989:25;;:14;:25;;;;41900:70;42017:16;;41989:44;;41689:360;42085:51;;;-1:-1:-1;;;;;35952:15:1;;;35934:34;;36004:15;;35999:2;35984:18;;35977:43;-1:-1:-1;;;;;42085:51:0;;;;;35862:18:1;42085:51:0;;;;;;;41590:554;41484:660;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:367::-;278:8;288:6;342:3;335:4;327:6;323:17;319:27;309:55;;360:1;357;350:12;309:55;-1:-1:-1;383:20:1;;-1:-1:-1;;;;;415:30:1;;412:50;;;458:1;455;448:12;412:50;495:4;487:6;483:17;471:29;;555:3;548:4;538:6;535:1;531:14;523:6;519:27;515:38;512:47;509:67;;;572:1;569;562:12;509:67;215:367;;;;;:::o;587:347::-;638:8;648:6;702:3;695:4;687:6;683:17;679:27;669:55;;720:1;717;710:12;669:55;-1:-1:-1;743:20:1;;-1:-1:-1;;;;;775:30:1;;772:50;;;818:1;815;808:12;772:50;855:4;847:6;843:17;831:29;;907:3;900:4;891:6;883;879:19;875:30;872:39;869:59;;;924:1;921;914:12;939:163;1006:20;;1066:10;1055:22;;1045:33;;1035:61;;1092:1;1089;1082:12;1107:156;1173:20;;1233:4;1222:16;;1212:27;;1202:55;;1253:1;1250;1243:12;1268:186;1327:6;1380:2;1368:9;1359:7;1355:23;1351:32;1348:52;;;1396:1;1393;1386:12;1348:52;1419:29;1438:9;1419:29;:::i;1459:260::-;1527:6;1535;1588:2;1576:9;1567:7;1563:23;1559:32;1556:52;;;1604:1;1601;1594:12;1556:52;1627:29;1646:9;1627:29;:::i;:::-;1617:39;;1675:38;1709:2;1698:9;1694:18;1675:38;:::i;:::-;1665:48;;1459:260;;;;;:::o;1724:1210::-;1884:6;1892;1900;1908;1916;1924;1932;1940;1993:3;1981:9;1972:7;1968:23;1964:33;1961:53;;;2010:1;2007;2000:12;1961:53;2033:29;2052:9;2033:29;:::i;:::-;2023:39;;2081:38;2115:2;2104:9;2100:18;2081:38;:::i;:::-;2071:48;;2170:2;2159:9;2155:18;2142:32;-1:-1:-1;;;;;2234:2:1;2226:6;2223:14;2220:34;;;2250:1;2247;2240:12;2220:34;2289:70;2351:7;2342:6;2331:9;2327:22;2289:70;:::i;:::-;2378:8;;-1:-1:-1;2263:96:1;-1:-1:-1;2466:2:1;2451:18;;2438:32;;-1:-1:-1;2482:16:1;;;2479:36;;;2511:1;2508;2501:12;2479:36;2550:72;2614:7;2603:8;2592:9;2588:24;2550:72;:::i;:::-;2641:8;;-1:-1:-1;2524:98:1;-1:-1:-1;2729:3:1;2714:19;;2701:33;;-1:-1:-1;2746:16:1;;;2743:36;;;2775:1;2772;2765:12;2743:36;;2814:60;2866:7;2855:8;2844:9;2840:24;2814:60;:::i;:::-;1724:1210;;;;-1:-1:-1;1724:1210:1;;-1:-1:-1;1724:1210:1;;;;;;2893:8;-1:-1:-1;;;1724:1210:1:o;2939:626::-;3036:6;3044;3052;3060;3068;3121:3;3109:9;3100:7;3096:23;3092:33;3089:53;;;3138:1;3135;3128:12;3089:53;3161:29;3180:9;3161:29;:::i;:::-;3151:39;;3209:38;3243:2;3232:9;3228:18;3209:38;:::i;:::-;3199:48;;3294:2;3283:9;3279:18;3266:32;3256:42;;3349:2;3338:9;3334:18;3321:32;-1:-1:-1;;;;;3368:6:1;3365:30;3362:50;;;3408:1;3405;3398:12;3362:50;3447:58;3497:7;3488:6;3477:9;3473:22;3447:58;:::i;:::-;2939:626;;;;-1:-1:-1;2939:626:1;;-1:-1:-1;3524:8:1;;3421:84;2939:626;-1:-1:-1;;;2939:626:1:o;3570:695::-;3676:6;3684;3692;3700;3708;3716;3769:3;3757:9;3748:7;3744:23;3740:33;3737:53;;;3786:1;3783;3776:12;3737:53;3809:29;3828:9;3809:29;:::i;:::-;3799:39;;3857:38;3891:2;3880:9;3876:18;3857:38;:::i;:::-;3847:48;;3942:2;3931:9;3927:18;3914:32;3904:42;;3993:2;3982:9;3978:18;3965:32;3955:42;;4048:3;4037:9;4033:19;4020:33;-1:-1:-1;;;;;4068:6:1;4065:30;4062:50;;;4108:1;4105;4098:12;4062:50;4147:58;4197:7;4188:6;4177:9;4173:22;4147:58;:::i;:::-;3570:695;;;;-1:-1:-1;3570:695:1;;-1:-1:-1;3570:695:1;;4224:8;;3570:695;-1:-1:-1;;;3570:695:1:o;4270:393::-;4346:6;4354;4362;4415:2;4403:9;4394:7;4390:23;4386:32;4383:52;;;4431:1;4428;4421:12;4383:52;4454:29;4473:9;4454:29;:::i;:::-;4444:39;;4502:38;4536:2;4525:9;4521:18;4502:38;:::i;:::-;4492:48;;4590:2;4579:9;4575:18;4562:32;4603:30;4627:5;4603:30;:::i;:::-;4652:5;4642:15;;;4270:393;;;;;:::o;4668:671::-;4778:6;4786;4794;4802;4810;4818;4826;4879:3;4867:9;4858:7;4854:23;4850:33;4847:53;;;4896:1;4893;4886:12;4847:53;4919:29;4938:9;4919:29;:::i;:::-;4909:39;;4967:38;5001:2;4990:9;4986:18;4967:38;:::i;:::-;4957:48;;5055:2;5044:9;5040:18;5027:32;5068:30;5092:5;5068:30;:::i;:::-;5117:5;-1:-1:-1;5169:2:1;5154:18;;5141:32;;-1:-1:-1;5192:37:1;5224:3;5209:19;;5192:37;:::i;:::-;5182:47;;5276:3;5265:9;5261:19;5248:33;5238:43;;5328:3;5317:9;5313:19;5300:33;5290:43;;4668:671;;;;;;;;;;:::o;5344:254::-;5412:6;5420;5473:2;5461:9;5452:7;5448:23;5444:32;5441:52;;;5489:1;5486;5479:12;5441:52;5512:29;5531:9;5512:29;:::i;:::-;5502:39;5588:2;5573:18;;;;5560:32;;-1:-1:-1;;;5344:254:1:o;5603:531::-;5705:6;5713;5721;5729;5737;5745;5798:3;5786:9;5777:7;5773:23;5769:33;5766:53;;;5815:1;5812;5805:12;5766:53;5838:29;5857:9;5838:29;:::i;:::-;5828:39;;5914:2;5903:9;5899:18;5886:32;5876:42;;5965:2;5954:9;5950:18;5937:32;5927:42;;5988:36;6020:2;6009:9;6005:18;5988:36;:::i;:::-;5978:46;;6071:3;6060:9;6056:19;6043:33;6033:43;;6123:3;6112:9;6108:19;6095:33;6085:43;;5603:531;;;;;;;;:::o;6139:319::-;6206:6;6214;6267:2;6255:9;6246:7;6242:23;6238:32;6235:52;;;6283:1;6280;6273:12;6235:52;6306:29;6325:9;6306:29;:::i;:::-;6296:39;;6385:2;6374:9;6370:18;6357:32;6398:30;6422:5;6398:30;:::i;:::-;6447:5;6437:15;;;6139:319;;;;;:::o;6463:458::-;6538:6;6546;6554;6607:2;6595:9;6586:7;6582:23;6578:32;6575:52;;;6623:1;6620;6613:12;6575:52;6646:29;6665:9;6646:29;:::i;:::-;6636:39;;6725:2;6714:9;6710:18;6697:32;6738:30;6762:5;6738:30;:::i;6926:594::-;7007:6;7015;7023;7031;7084:3;7072:9;7063:7;7059:23;7055:33;7052:53;;;7101:1;7098;7091:12;7052:53;7124:29;7143:9;7124:29;:::i;:::-;7114:39;;7203:2;7192:9;7188:18;7175:32;7216:30;7240:5;7216:30;:::i;:::-;7265:5;-1:-1:-1;7322:2:1;7307:18;;7294:32;7335;7294;7335;:::i;:::-;7386:7;-1:-1:-1;7445:2:1;7430:18;;7417:32;7458:30;7417:32;7458:30;:::i;:::-;6926:594;;;;-1:-1:-1;6926:594:1;;-1:-1:-1;;6926:594:1:o;7525:448::-;7622:6;7630;7683:2;7671:9;7662:7;7658:23;7654:32;7651:52;;;7699:1;7696;7689:12;7651:52;7739:9;7726:23;-1:-1:-1;;;;;7764:6:1;7761:30;7758:50;;;7804:1;7801;7794:12;7758:50;7843:70;7905:7;7896:6;7885:9;7881:22;7843:70;:::i;:::-;7932:8;;7817:96;;-1:-1:-1;7525:448:1;-1:-1:-1;;;;7525:448:1:o;7978:245::-;8045:6;8098:2;8086:9;8077:7;8073:23;8069:32;8066:52;;;8114:1;8111;8104:12;8066:52;8146:9;8140:16;8165:28;8187:5;8165:28;:::i;8228:184::-;8298:6;8351:2;8339:9;8330:7;8326:23;8322:32;8319:52;;;8367:1;8364;8357:12;8319:52;-1:-1:-1;8390:16:1;;8228:184;-1:-1:-1;8228:184:1:o;8417:635::-;8497:6;8550:2;8538:9;8529:7;8525:23;8521:32;8518:52;;;8566:1;8563;8556:12;8518:52;8599:9;8593:16;-1:-1:-1;;;;;8624:6:1;8621:30;8618:50;;;8664:1;8661;8654:12;8618:50;8687:22;;8740:4;8732:13;;8728:27;-1:-1:-1;8718:55:1;;8769:1;8766;8759:12;8718:55;8798:2;8792:9;8823:48;8839:31;8867:2;8839:31;:::i;:::-;8823:48;:::i;:::-;8894:2;8887:5;8880:17;8934:7;8929:2;8924;8920;8916:11;8912:20;8909:33;8906:53;;;8955:1;8952;8945:12;8906:53;8968:54;9019:2;9014;9007:5;9003:14;8998:2;8994;8990:11;8968:54;:::i;:::-;9041:5;8417:635;-1:-1:-1;;;;;8417:635:1:o;9057:180::-;9116:6;9169:2;9157:9;9148:7;9144:23;9140:32;9137:52;;;9185:1;9182;9175:12;9137:52;-1:-1:-1;9208:23:1;;9057:180;-1:-1:-1;9057:180:1:o;9431:309::-;9496:6;9504;9557:2;9545:9;9536:7;9532:23;9528:32;9525:52;;;9573:1;9570;9563:12;9525:52;9609:9;9596:23;9586:33;;9669:2;9658:9;9654:18;9641:32;9682:28;9704:5;9682:28;:::i;9745:517::-;9835:6;9843;9851;9859;9867;9920:3;9908:9;9899:7;9895:23;9891:33;9888:53;;;9937:1;9934;9927:12;9888:53;9973:9;9960:23;9950:33;;10033:2;10022:9;10018:18;10005:32;10046:28;10068:5;10046:28;:::i;:::-;10093:5;-1:-1:-1;10117:36:1;10149:2;10134:18;;10117:36;:::i;:::-;9745:517;;;;-1:-1:-1;10107:46:1;;10200:2;10185:18;;10172:32;;-1:-1:-1;10251:3:1;10236:19;10223:33;;9745:517;-1:-1:-1;;9745:517:1:o;10267:1531::-;10471:6;10479;10487;10495;10503;10511;10519;10527;10535;10543;10596:3;10584:9;10575:7;10571:23;10567:33;10564:53;;;10613:1;10610;10603:12;10564:53;10636:27;10653:9;10636:27;:::i;:::-;10626:37;;10682;10715:2;10704:9;10700:18;10682:37;:::i;:::-;10672:47;;10770:2;10759:9;10755:18;10742:32;-1:-1:-1;;;;;10834:2:1;10826:6;10823:14;10820:34;;;10850:1;10847;10840:12;10820:34;10889:70;10951:7;10942:6;10931:9;10927:22;10889:70;:::i;:::-;10978:8;;-1:-1:-1;10863:96:1;-1:-1:-1;11066:2:1;11051:18;;11038:32;;-1:-1:-1;11082:16:1;;;11079:36;;;11111:1;11108;11101:12;11079:36;11150:72;11214:7;11203:8;11192:9;11188:24;11150:72;:::i;:::-;11241:8;;-1:-1:-1;11124:98:1;-1:-1:-1;11329:3:1;11314:19;;11301:33;;-1:-1:-1;11346:16:1;;;11343:36;;;11375:1;11372;11365:12;11343:36;11414:72;11478:7;11467:8;11456:9;11452:24;11414:72;:::i;:::-;11505:8;;-1:-1:-1;11388:98:1;-1:-1:-1;11593:3:1;11578:19;;11565:33;;-1:-1:-1;11610:16:1;;;11607:36;;;11639:1;11636;11629:12;11607:36;;11678:60;11730:7;11719:8;11708:9;11704:24;11678:60;:::i;:::-;11652:86;;11757:8;11747:18;;;11784:8;11774:18;;;10267:1531;;;;;;;;;;;;;:::o;11803:245::-;11861:6;11914:2;11902:9;11893:7;11889:23;11885:32;11882:52;;;11930:1;11927;11920:12;11882:52;11969:9;11956:23;11988:30;12012:5;11988:30;:::i;12053:381::-;12130:6;12138;12191:2;12179:9;12170:7;12166:23;12162:32;12159:52;;;12207:1;12204;12197:12;12159:52;12239:9;12233:16;12258:30;12282:5;12258:30;:::i;:::-;12357:2;12342:18;;12336:25;12307:5;;-1:-1:-1;12370:32:1;12336:25;12370:32;:::i;12439:1030::-;12546:6;12541:3;12534:19;12516:3;12572:4;12613:2;12608:3;12604:12;12638:11;12665;12658:18;;12715:6;12712:1;12708:14;12701:5;12697:26;12685:38;;12746:5;12769:1;12779:664;12793:6;12790:1;12787:13;12779:664;;;12864:5;12858:4;12854:16;12849:3;12842:29;12923:6;12910:20;13013:2;13009:7;13001:5;12985:14;12981:26;12977:40;12957:18;12953:65;12943:93;;13032:1;13029;13022:12;12943:93;13064:30;;13123:21;;-1:-1:-1;;;;;13160:32:1;;13157:52;;;13205:1;13202;13195:12;13157:52;13256:8;13240:14;13236:29;13229:5;13225:41;13222:61;;;13279:1;13276;13269:12;13222:61;13304:59;13358:4;13348:8;13343:2;13334:7;13330:16;13304:59;:::i;:::-;13421:12;;;;13296:67;-1:-1:-1;;;13386:15:1;;;;12815:1;12808:9;12779:664;;;-1:-1:-1;13459:4:1;;12439:1030;-1:-1:-1;;;;;;;12439:1030:1:o;13474:266::-;13562:6;13557:3;13550:19;13614:6;13607:5;13600:4;13595:3;13591:14;13578:43;-1:-1:-1;13666:1:1;13641:16;;;13659:4;13637:27;;;13630:38;;;;13722:2;13701:15;;;-1:-1:-1;;13697:29:1;13688:39;;;13684:50;;13474:266::o;13745:257::-;13786:3;13824:5;13818:12;13851:6;13846:3;13839:19;13867:63;13923:6;13916:4;13911:3;13907:14;13900:4;13893:5;13889:16;13867:63;:::i;:::-;13984:2;13963:15;-1:-1:-1;;13959:29:1;13950:39;;;;13991:4;13946:50;;13745:257;-1:-1:-1;;13745:257:1:o;14007:271::-;14190:6;14182;14177:3;14164:33;14146:3;14216:16;;14241:13;;;14216:16;14007:271;-1:-1:-1;14007:271:1:o;14283:274::-;14412:3;14450:6;14444:13;14466:53;14512:6;14507:3;14500:4;14492:6;14488:17;14466:53;:::i;:::-;14535:16;;;;;14283:274;-1:-1:-1;;14283:274:1:o;14562:1104::-;14692:3;14721:1;14754:6;14748:13;14784:3;14806:1;14834:9;14830:2;14826:18;14816:28;;14894:2;14883:9;14879:18;14916;14906:61;;14960:4;14952:6;14948:17;14938:27;;14906:61;14986:2;15034;15026:6;15023:14;15003:18;15000:38;14997:165;;;-1:-1:-1;;;15061:33:1;;15117:4;15114:1;15107:15;15147:4;15068:3;15135:17;14997:165;15178:18;15205:104;;;;15323:1;15318:323;;;;15171:470;;15205:104;-1:-1:-1;;15238:24:1;;15226:37;;15283:16;;;;-1:-1:-1;15205:104:1;;15318:323;37416:1;37409:14;;;37453:4;37440:18;;15416:1;15430:165;15444:6;15441:1;15438:13;15430:165;;;15522:14;;15509:11;;;15502:35;15565:16;;;;15459:10;;15430:165;;;15434:3;;15624:6;15619:3;15615:16;15608:23;;15171:470;-1:-1:-1;15657:3:1;;14562:1104;-1:-1:-1;;;;;;;;14562:1104:1:o;16702:610::-;16934:4;-1:-1:-1;;;;;17044:2:1;17036:6;17032:15;17021:9;17014:34;17096:2;17088:6;17084:15;17079:2;17068:9;17064:18;17057:43;;17136:6;17131:2;17120:9;17116:18;17109:34;17179:6;17174:2;17163:9;17159:18;17152:34;17223:3;17217;17206:9;17202:19;17195:32;17244:62;17301:3;17290:9;17286:19;17278:6;17270;17244:62;:::i;:::-;17236:70;16702:610;-1:-1:-1;;;;;;;;16702:610:1:o;18051:1697::-;18503:3;18516:22;;;18488:19;;18573:22;;;18455:4;18653:6;18626:3;18611:19;;18455:4;18687:258;18701:6;18698:1;18695:13;18687:258;;;-1:-1:-1;;;;;18766:26:1;18785:6;18766:26;:::i;:::-;18762:75;18750:88;;18861:4;18920:15;;;;18885:12;;;;18723:1;18716:9;18687:258;;;-1:-1:-1;19004:19:1;;;18964:4;18984:18;;;18977:47;;;;19058:19;;;18964:4;-1:-1:-1;19132:6:1;;19095:12;;19158:1;19168:301;19184:6;19179:3;19176:15;19168:301;;;19263:8;19250:22;19285:30;19309:5;19285:30;:::i;:::-;-1:-1:-1;;;;;19342:38:1;19328:53;;19442:17;;;;19403:14;;;;19210:1;19201:11;19168:301;;;19172:3;19516:9;19509:5;19505:21;19500:2;19489:9;19485:18;19478:49;19550:67;19611:5;19603:6;19595;19550:67;:::i;:::-;19536:81;;;;19665:9;19657:6;19653:22;19648:2;19637:9;19633:18;19626:50;19693:49;19735:6;19727;19719;19693:49;:::i;:::-;19685:57;18051:1697;-1:-1:-1;;;;;;;;;;;18051:1697:1:o;19753:681::-;19924:2;19976:21;;;20046:13;;19949:18;;;20068:22;;;19895:4;;19924:2;20147:15;;;;20121:2;20106:18;;;19895:4;20190:218;20204:6;20201:1;20198:13;20190:218;;;20269:13;;-1:-1:-1;;;;;20265:62:1;20253:75;;20383:15;;;;20348:12;;;;20226:1;20219:9;20190:218;;;-1:-1:-1;20425:3:1;;19753:681;-1:-1:-1;;;;;;19753:681:1:o;20439:505::-;20613:3;20598:19;;20602:9;20694:6;20571:4;20728:210;20742:4;20739:1;20736:11;20728:210;;;20815:13;;20808:21;20801:29;20789:42;;20854:4;20878:12;;;;20913:15;;;;20762:1;20755:9;20728:210;;;20732:3;;;20439:505;;;;:::o;20949:800::-;21109:4;21138:2;21178;21167:9;21163:18;21208:2;21197:9;21190:21;21231:6;21266;21260:13;21297:6;21289;21282:22;21335:2;21324:9;21320:18;21313:25;;21397:2;21387:6;21384:1;21380:14;21369:9;21365:30;21361:39;21347:53;;21435:2;21427:6;21423:15;21456:1;21466:254;21480:6;21477:1;21474:13;21466:254;;;21573:2;21569:7;21557:9;21549:6;21545:22;21541:36;21536:3;21529:49;21601:39;21633:6;21624;21618:13;21601:39;:::i;:::-;21591:49;-1:-1:-1;21698:12:1;;;;21663:15;;;;21502:1;21495:9;21466:254;;;-1:-1:-1;21737:6:1;;20949:800;-1:-1:-1;;;;;;;20949:800:1:o;24430:219::-;24579:2;24568:9;24561:21;24542:4;24599:44;24639:2;24628:9;24624:18;24616:6;24599:44;:::i;28033:337::-;28235:2;28217:21;;;28274:2;28254:18;;;28247:30;-1:-1:-1;;;28308:2:1;28293:18;;28286:43;28361:2;28346:18;;28033:337::o;28710:332::-;28912:2;28894:21;;;28951:1;28931:18;;;28924:29;-1:-1:-1;;;28984:2:1;28969:18;;28962:39;29033:2;29018:18;;28710:332::o;30747:334::-;30949:2;30931:21;;;30988:2;30968:18;;;30961:30;-1:-1:-1;;;31022:2:1;31007:18;;31000:40;31072:2;31057:18;;30747:334::o;33826:687::-;34097:10;34134:15;;;34116:34;;34186:15;;;34181:2;34166:18;;34159:43;34238:15;;34233:2;34218:18;;34211:43;-1:-1:-1;;;;;34335:15:1;;;34330:2;34315:18;;34308:43;34388:15;;34382:3;34367:19;;34360:44;34441:3;34435;34420:19;;34413:32;;;34068:4;;34462:45;;34487:19;;34479:6;34462:45;:::i;36343:521::-;36420:4;36426:6;36486:11;36473:25;36580:2;36576:7;36565:8;36549:14;36545:29;36541:43;36521:18;36517:68;36507:96;;36599:1;36596;36589:12;36507:96;36626:33;;36678:20;;;-1:-1:-1;;;;;;36710:30:1;;36707:50;;;36753:1;36750;36743:12;36707:50;36786:4;36774:17;;-1:-1:-1;36817:14:1;36813:27;;;36803:38;;36800:58;;;36854:1;36851;36844:12;36869:275;36940:2;36934:9;37005:2;36986:13;;-1:-1:-1;;36982:27:1;36970:40;;-1:-1:-1;;;;;37025:34:1;;37061:22;;;37022:62;37019:88;;;37087:18;;:::i;:::-;37123:2;37116:22;36869:275;;-1:-1:-1;36869:275:1:o;37149:186::-;37197:4;-1:-1:-1;;;;;37222:6:1;37219:30;37216:56;;;37252:18;;:::i;:::-;-1:-1:-1;37318:2:1;37297:15;-1:-1:-1;;37293:29:1;37324:4;37289:40;;37149:186::o;37469:128::-;37509:3;37540:1;37536:6;37533:1;37530:13;37527:39;;;37546:18;;:::i;:::-;-1:-1:-1;37582:9:1;;37469:128::o;37602:244::-;37641:3;-1:-1:-1;;;;;37722:2:1;37719:1;37715:10;37752:2;37749:1;37745:10;37783:3;37779:2;37775:12;37770:3;37767:21;37764:47;;;37791:18;;:::i;:::-;37827:13;;37602:244;-1:-1:-1;;;;37602:244:1:o;37851:217::-;37891:1;37917;37907:132;;37961:10;37956:3;37952:20;37949:1;37942:31;37996:4;37993:1;37986:15;38024:4;38021:1;38014:15;37907:132;-1:-1:-1;38053:9:1;;37851:217::o;38073:168::-;38113:7;38179:1;38175;38171:6;38167:14;38164:1;38161:21;38156:1;38149:9;38142:17;38138:45;38135:71;;;38186:18;;:::i;:::-;-1:-1:-1;38226:9:1;;38073:168::o;38246:125::-;38286:4;38314:1;38311;38308:8;38305:34;;;38319:18;;:::i;:::-;-1:-1:-1;38356:9:1;;38246:125::o;38376:237::-;38415:4;-1:-1:-1;;;;;38520:10:1;;;;38490;;38542:12;;;38539:38;;;38557:18;;:::i;:::-;38594:13;;38376:237;-1:-1:-1;;;38376:237:1:o;38618:1269::-;38754:9;-1:-1:-1;;;;;38829:2:1;38821:6;38818:14;38815:40;;;38835:18;;:::i;:::-;38881:6;38878:1;38874:14;38907:4;38931:28;38955:2;38951;38947:11;38931:28;:::i;:::-;38993:19;;;39028:12;;;;39060:5;39096:14;39080;;;39077:34;39074:54;;;39124:1;39121;39114:12;39074:54;39146:1;39137:10;;39156:698;39170:6;39167:1;39164:13;39156:698;;;39251:3;39238:17;39287:2;39274:11;39271:19;39268:39;;;39303:1;39300;39293:12;39268:39;39330:23;;39395:14;39388:4;39380:13;;39376:34;39366:62;;39424:1;39421;39414:12;39366:62;39464:2;39451:16;39493:48;39509:31;39537:2;39509:31;:::i;39493:48::-;39568:2;39561:5;39554:17;39612:14;39607:2;39602;39598;39594:11;39590:20;39587:40;39584:60;;;39640:1;39637;39630:12;39584:60;39699:2;39694;39690;39686:11;39681:2;39674:5;39670:14;39657:45;39747:1;39726:14;;;39722:23;;39715:34;;;;39762:18;;-1:-1:-1;39192:1:1;39185:9;;;;;39800:12;;;;39832;;39156:698;;;-1:-1:-1;39876:5:1;38618:1269;-1:-1:-1;;;;;;;38618:1269:1:o;39892:258::-;39964:1;39974:113;39988:6;39985:1;39982:13;39974:113;;;40064:11;;;40058:18;40045:11;;;40038:39;40010:2;40003:10;39974:113;;;40105:6;40102:1;40099:13;40096:48;;;40140:1;40131:6;40126:3;40122:16;40115:27;40096:48;;39892:258;;;:::o;40155:380::-;40234:1;40230:12;;;;40277;;;40298:61;;40352:4;40344:6;40340:17;40330:27;;40298:61;40405:2;40397:6;40394:14;40374:18;40371:38;40368:161;;;40451:10;40446:3;40442:20;40439:1;40432:31;40486:4;40483:1;40476:15;40514:4;40511:1;40504:15;40368:161;;40155:380;;;:::o;40540:135::-;40579:3;-1:-1:-1;;40600:17:1;;40597:43;;;40620:18;;:::i;:::-;-1:-1:-1;40667:1:1;40656:13;;40540:135::o;40680:127::-;40741:10;40736:3;40732:20;40729:1;40722:31;40772:4;40769:1;40762:15;40796:4;40793:1;40786:15;40944:127;41005:10;41000:3;40996:20;40993:1;40986:31;41036:4;41033:1;41026:15;41060:4;41057:1;41050:15;41076:127;41137:10;41132:3;41128:20;41125:1;41118:31;41168:4;41165:1;41158:15;41192:4;41189:1;41182:15;41208:118;41294:5;41287:13;41280:21;41273:5;41270:32;41260:60;;41316:1;41313;41306:12;41331:137;-1:-1:-1;;;;;41409:5:1;41405:38;41398:5;41395:49;41385:77;;41458:1;41455;41448:12

Swarm Source

ipfs://82841cc57dfe433915481cf8225900e6e45a71ae330c30781643354a1a4f0b11
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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