ETH Price: $3,333.70 (-0.51%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Ceva Update Prop...114055132020-12-07 11:54:291493 days ago1607342069IN
0xbb902B56...c1316ae4B
0 ETH0.0061870619.00000145
Ceva Whitelist M...114054772020-12-07 11:48:171493 days ago1607341697IN
0xbb902B56...c1316ae4B
0 ETH0.0009916222
Ceva Whitelist P...114054732020-12-07 11:47:371493 days ago1607341657IN
0xbb902B56...c1316ae4B
0 ETH0.0014890422
Founder Develope...114054712020-12-07 11:47:171493 days ago1607341637IN
0xbb902B56...c1316ae4B
0 ETH0.0010039222
Ceva Whitelist F...114054712020-12-07 11:47:171493 days ago1607341637IN
0xbb902B56...c1316ae4B
0 ETH0.0010579522
Property Id114054712020-12-07 11:47:171493 days ago1607341637IN
0xbb902B56...c1316ae4B
0 ETH0.0009484822
Founder Develope...114054602020-12-07 11:44:211493 days ago1607341461IN
0xbb902B56...c1316ae4B
0 ETH0.0010039222
Ceva Whitelist F...114054582020-12-07 11:44:121493 days ago1607341452IN
0xbb902B56...c1316ae4B
0 ETH0.0010579522
Ceva Whitelist F...114054582020-12-07 11:44:121493 days ago1607341452IN
0xbb902B56...c1316ae4B
0 ETH0.0010579522
Admin Whitelist ...114054502020-12-07 11:42:351493 days ago1607341355IN
0xbb902B56...c1316ae4B
0 ETH0.0010606422
Admin Whitelist ...114054502020-12-07 11:42:351493 days ago1607341355IN
0xbb902B56...c1316ae4B
0 ETH0.0010606422
Admin Initial Se...114054372020-12-07 11:39:331493 days ago1607341173IN
0xbb902B56...c1316ae4B
0 ETH0.0069025222

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AVEC

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-07
*/

pragma solidity^0.6.0;

/*
* Equitable Builds Inc presents..
* ====================================*
*        _____ ___ _______ ______     *
*       |  _  |  ||  |  __|   __|     *
*       |     |  |  |  __|   |__      *
*       |__|__|_____|____|_____|      *
*                                     *
*        _____ __________ ______      *
*       |     |   | | | ||   __|      *
*       |  |  |     | | ||__   |      *
*       |_____|_|___|___||_____|      *
*                                     *
*        _____ ____________ ___       *
*       |     |  |  |   | ||  |       *
*       |  |  |  |  |     ||  |       *
*       |_____|_|_|_|_|___||__|       *
*                                     *
* ====================================*
*/

contract AVEC{

    /*=================================

    =            MODIFIERS            =

    =================================*/

    //verify caller address members_ = true

    modifier onlyMembers(address _customerAddress) {

        require(

                // is the customer in the member whitelist?

                members_[_customerAddress] == true

            );

            // execute

        _;

    }

    //verify caller address founderdevelopers_ = true

    modifier onlyFounderDevelopers(address _customerAddress) {

        require(

                // is the customer in the Founder Developer whitelist?

                founderdevelopers_[_customerAddress] == true

            );

            // execute

        _;

    }

    //verify caller address ceva_ = true

    modifier onlyCEVA(address _customerAddress) {

        require(

                // is the customer in the ceva whitelist?

                ceva_[_customerAddress] == true

            );

            // execute

        _;

    }

    //verify caller address ceva_ = true
    
    modifier onlyAdministrator(address _customerAddress){

        require(

            administrators[_customerAddress] == true

            );

        _;

    }

    /*==============================

    =            EVENTS            =

    ==============================*/

    //Emit and Event to the blockcahin for AVECtoONUS
    
    event AVECtoONUS(

        address indexed MemberAddress,

        uint256 tokensConverted

    );

    //Emit and Event to the blockcahin for ONUStoAVEC
    
    event ONUStoAVEC(

        address indexed MemberAddress,

        uint256 tokensConverted

    );

    //Emit and Event to the blockcahin for OnWithdraw
    
    event OnWithdraw(

        address indexed MemberAddress,

        uint256 tokensWithdrawn,

        uint8 envelopeNumber

    );

    //Emit and Event to the blockcahin for Transfer
    // ERC20

    event Transfer(

        address indexed from,

        address indexed to,

        uint256 value

    );

    //Emit and Event to the blockcahin for PropertyTransfer
    
    event PropertyTransfer(

        address indexed from,

        address indexed to,

        uint256 value,

        bytes32 property

    );

    //Emit and Event to the blockcahin for Burn
    
    event Burn(

        address indexed from,

        uint256 tokens,

        uint256 propertyValue

    );

    // ERC20
    //Emit and Event to the blockcahin for Approval
    
    event Approval(

        address indexed _owner,

        address indexed _spender,

        uint256 _value

    );

    //Emit and Event to the blockcahin for PropertyValuation
    
    event PropertyValuation(

        address indexed from,

        bytes32 _propertyUniqueID,

        uint256 propertyValue

    );

    //Emit and Event to the blockcahin for PropertyWhitelisted
    
    event PropertyWhitelisted(

        address indexed from,

        bytes32 _propertyUniqueID,

        bool _trueFalse

    );

    //Emit and Event to the blockcahin for MemberWhitelisted
    
    event MemberWhitelisted(

        address indexed from,

        address indexed to,

        bool _trueFalse

    );

    //Emit and Event to the blockcahin for FounderDeveloperWhitelisted
    
    event FounderDeveloperWhitelisted(

        address indexed from,

        address indexed to,

        bool _trueFalse

    );

    //Emit and Event to the blockcahin for CEVAWhitelisted
    
    event CEVAWhitelisted(

        address indexed from,

        address indexed to,

        bool _trueFalse

    );

    //Emit and Event to the blockcahin for AdminWhitelisted
    
    event AdminWhitelisted(

        address indexed from,

        address indexed to,

        bool _trueFalse

    );

    /*=====================================

    =            CONFIGURABLES            =

    =====================================*/

    string public name = "AlternateVirtualEquityCredits";
    
    string public symbol = "AVEC";

    uint8 public decimals = 18;
    
    //Setting to change for whoaaddress_

    address internal whoaaddress_ = 0x314d0ED76d866826C809fb6a51d63642b2E9eC3e;
    
    //Global porfolio owner address
    
    address internal whoaaddressValue_ = 0x314d0ED76d866826C809fb6a51d63642b2E9eC3e;
    
    //Setting to change for whoamaintenanceaddress_

    address internal whoamaintenanceaddress_ = 0x2722B426B11978c29660e8395a423Ccb93AE0403;
    
    //Setting to change for whoarewardsaddress_

    address internal whoarewardsaddress_ = 0xA9d241b568DF9E8A7Ec9e44737f29a8Ee00bfF53;
    
    //Setting to change for cevaaddress_

    address internal cevaaddress_ = 0xdE281c22976dE2E9b3f4F87bEB60aE9E67DFf5C4;
    
    //Setting to change for credibleyouaddress_

    address internal credibleyouaddress_ = 0xc9c1Ffd6B4014232Ef474Daa4CA1506A6E39Be89;
    
    //Setting to change for techaddress_

    address internal techaddress_ = 0xB6148C62e6A6d48f41241D01e3C4841139144ABa;
    
    //Setting to change for existcryptoaddress_

    address internal existholdingsaddress_ = 0xac1B6580a175C1f2a4e3220A24e6f65fF3AB8A03;
    
    //Setting to change for existcryptoaddress_

    address internal existcryptoaddress_ = 0xb8C098eE976f1162aD277936a5D1BCA7a8Fe61f5;

    // members address whitelist archive

    mapping(address => bool) internal members_;

    // founder developers whitelist address archive

    mapping(address => bool) internal founderdevelopers_;

    // ceva whitelist address archive

    mapping(address => bool) internal ceva_;

    // administrator list (see above on what they can do)

    mapping(address => bool) internal administrators;

    // setting for allowance function determines amount of tokens address can spend from mapped address

    mapping (address => mapping (address => uint256)) private _allowed;

    // array mapping the mint request whitelist to keep track of all mint requests approved or disapproved by ceva
    
    mapping (address => mapping(bytes32 => bool)) internal mintrequestwhitelist_;
    
    // array mapping the burn request whitelist to keep track of all the token burnings made by ceva

    mapping (address => mapping(bytes32 => bool)) internal burnrequestwhitelist_;
    
    // array mapping the property whitelist to keep track of all properties on the platform

    mapping (address => mapping(bytes32 => bool)) internal propertywhitelist_;
    
    // array mapping the property Balance Ledger of a members current properties

    mapping (bytes32 => mapping(address => uint256)) internal propertyBalanceLedger_;
    
    // array mapping the property Last Known Value for members current properties

    mapping (bytes32 => mapping(address => uint256)) internal propertyLastKnownValue_;
    
    // array mapping the property value to keep track current property value 

    mapping (address => mapping(bytes32 => uint256)) internal propertyvalue_;
    
    // array mapping the old property value to keep track of the value previous to the current ceva value adjustment

    mapping (address => mapping(bytes32 => uint256)) internal propertyvalueOld_;
    
    // array mapping the property Price Update Count for a Members current properties

    mapping (address => mapping(bytes32 => uint256)) internal propertyPriceUpdateCountMember_;
    
    // array mapping the property Price Updates of the Asset to keep track of the number of times its been update
    
    mapping(bytes32 => uint256) internal propertyPriceUpdateCountAsset_;
    
    // array mapping the property Global Balance to keep track of all AVEC that is available for conversion into ONUS on a specific property

    mapping(bytes32 => uint256) internal propertyGlobalBalance_;
    
    // array mapping the property Owner to keep track of all related properties

    mapping(bytes32 => address) internal propertyOwner_;
    
    // array mapping the last Minting Price of any given minted property

    mapping(bytes32 => uint256) internal lastMintingPrice_;
    
    // array mapping the transfering Property id of members intended as a setting to move the different kinds of token value

    mapping(address => bytes32) internal transferingPropertyid_;
    
    // array mapping the working Property id's of founder developers and ceva to keep track of currently related working Property id's

    mapping(address => bytes32) internal workingPropertyid_;
    
    // array mapping the working Mint Request id's to keep track of all related working Mint Request id's

    mapping(address => bytes32) internal workingMintRequestid_;
    
    // array mapping the working Burn Request id's to keep track of all related working Burn Request id's

    mapping(address => bytes32) internal workingBurnRequestid_;

   /*================================

    =            DATASETS            =

    ================================*/
    
    //mapping the value of a wallets token balance ledger

    mapping(address => uint256) internal tokenBalanceLedger_ ;
    
    //mapping the amount of deposits a wallet has received for the purpose of 
    //valuating the amount of dividends they are entitled to for their respective envelope hold shareholds

    mapping(address => uint256) internal mintingDepositsOf_;
    
    //mapping to compare against the minting deposits of an address in order to determine amount of 
    //dividends they are enitled to

    mapping(address => uint256) internal amountCirculated_;

    mapping(address => uint256) internal taxesFeeTotalWithdrawn_;

    mapping(address => uint256) internal taxesPreviousWithdrawn_;

    mapping(address => uint256) internal taxesFeeSharehold_;

    mapping(address => uint256) internal insuranceFeeTotalWithdrawn_;

    mapping(address => uint256) internal insurancePreviousWithdrawn_;

    mapping(address => uint256) internal insuranceFeeSharehold_;

    mapping(address => uint256) internal maintenanceFeeTotalWithdrawn_;

    mapping(address => uint256) internal maintenancePreviousWithdrawn_;

    mapping(address => uint256) internal maintenanceFeeSharehold_;

    mapping(address => uint256) internal waECOFeeTotalWithdrawn_;

    mapping(address => uint256) internal waECOPreviousWithdrawn_;

    mapping(address => uint256) internal waECOFeeSharehold_;

    mapping(address => uint256) internal holdoneTotalWithdrawn_;

    mapping(address => uint256) internal holdonePreviousWithdrawn_;

    mapping(address => uint256) internal holdoneSharehold_;

    mapping(address => uint256) internal holdtwoTotalWithdrawn_;

    mapping(address => uint256) internal holdtwoPreviousWithdrawn_;

    mapping(address => uint256) internal holdtwoSharehold_;

    mapping(address => uint256) internal holdthreeTotalWithdrawn_;

    mapping(address => uint256) internal holdthreePreviousWithdrawn_;

    mapping(address => uint256) internal holdthreeSharehold_;

    mapping(address => uint256) internal rewardsTotalWithdrawn_;

    mapping(address => uint256) internal rewardsPreviousWithdrawn_;

    mapping(address => uint256) internal rewardsSharehold_;

    mapping(address => uint256) internal techTotalWithdrawn_;

    mapping(address => uint256) internal techPreviousWithdrawn_;

    mapping(address => uint256) internal techSharehold_;

    mapping(address => uint256) internal existholdingsTotalWithdrawn_;

    mapping(address => uint256) internal existholdingsPreviousWithdrawn_;

    mapping(address => uint256) internal existholdingsSharehold_;

    mapping(address => uint256) internal existcryptoTotalWithdrawn_;

    mapping(address => uint256) internal existcryptoPreviousWithdrawn_;

    mapping(address => uint256) internal existcryptoSharehold_;

    mapping(address => uint256) internal whoaTotalWithdrawn_;

    mapping(address => uint256) internal whoaPreviousWithdrawn_;

    mapping(address => uint256) internal whoaSharehold_;

    mapping(address => uint256) internal credibleyouTotalWithdrawn_;

    mapping(address => uint256) internal credibleyouPreviousWithdrawn_;

    mapping(address => uint256) internal credibleyouSharehold_;
    
    //mapping to keep track of number of whitelisted proofs on different events

    mapping(address => uint256) internal numberofmintingrequestswhitelisted_;

    mapping(address => uint256) internal numberofpropertieswhitelisted_;

    mapping(address => uint256) internal numberofburnrequestswhitelisted_;
    
    //mapping to keep track of transfering from wallet to ensure values arent changed during crucial processes

    mapping(address => uint256) internal transferingFromWallet_;
    
    //mapping to keeep track of the transfer type IE AVEC/ONUS/OMNI = 1/2/3
    
    mapping(address => uint8) internal transferType_;
    
    //property id that represents ONUS tokens property balance ledgers
    
    bytes32 internal onusCode_ = 0x676c6f62616c0000000000000000000000000000000000000000000000000000;
    
    //property id that represents OMNI tokens property balance ledgers
    
    bytes32 internal omniCode_ = 0x4f4d4e4900000000000000000000000000000000000000000000000000000000;
    
    //Total supply variable to keep track of all token minting
    
    uint256 public totalSupply;
    
    //Total Amount of Holds in existence

    uint256 internal feeTotalHolds_;
    
    //The total deposited over time into the global fee ledger

    uint256 internal globalFeeLedger_;
    
    //The total number of holds in each envelope

    uint256 internal taxesfeeTotalHolds_;

    uint256 internal insurancefeeTotalHolds_;

    uint256 internal maintencancefeeTotalHolds_;

    uint256 internal waECOfeeTotalHolds_;

    uint256 internal holdonefeeTotalHolds_;

    uint256 internal holdtwofeeTotalHolds_;

    uint256 internal holdthreefeeTotalHolds_;

    uint256 internal rewardsfeeTotalHolds_;

    uint256 internal techfeeTotalHolds_;

    uint256 internal existholdingsfeeTotalHolds_;

    uint256 internal existcryptofeeTotalHolds_;

    uint256 internal whoafeeTotalHolds_;

    uint256 internal credibleyoufeeTotalHolds_;

    /*=======================================

    =            MEMBER FUNCTIONS            =

    =======================================*/

    /*

    * -- APPLICATION ENTRY POINTS --

    */

    constructor()

        public

    {

    }

    /*

    * -- APPLICATION ENTRY POINTS --

    */

    function adminInitialSet()

        public

    {

        // add the first users
        
        propertyOwner_[0x676c6f62616c0000000000000000000000000000000000000000000000000000] = whoaaddress_;

        //James Admin

        administrators[0xA9873d93db3BCA9F68aDfEAb226Fa9189641069A] 
        = true;

        //Brenden Admin

        administrators[0x27851761A8fBC03f57965b42528B39af07cdC42b] 
        = true;

        members_[0x314d0ED76d866826C809fb6a51d63642b2E9eC3e] 
        = true;

        members_[0x2722B426B11978c29660e8395a423Ccb93AE0403] 
        = true;

        members_[0x27851761A8fBC03f57965b42528B39af07cdC42b] 
        = true;

        members_[0xA9873d93db3BCA9F68aDfEAb226Fa9189641069A] 
        = true;

        members_[0xdE281c22976dE2E9b3f4F87bEB60aE9E67DFf5C4] 
        = true;

        members_[0xc9c1Ffd6B4014232Ef474Daa4CA1506A6E39Be89] 
        = true;

        members_[0xac1B6580a175C1f2a4e3220A24e6f65fF3AB8A03] 
        = true;

        members_[0xB6148C62e6A6d48f41241D01e3C4841139144ABa] 
        = true;

        members_[0xb8C098eE976f1162aD277936a5D1BCA7a8Fe61f5] 
        = true;

        members_[0xA9d241b568DF9E8A7Ec9e44737f29a8Ee00bfF53] 
        = true;

        members_[0x27851761A8fBC03f57965b42528B39af07cdC42b] 
        = true;

        members_[0xa1Ff1474e0a5db4801E426289DB485b456de7882] 
        = true;



    }
    
    /*

    * -- APPLICATION ENTRY POINTS --

    */

    //Function to adjust corporate wallet address only usable by admin
    
    function adminGenesis(address _existcryptoaddress, address _existhooldingsaddress, address _techaddress,

        address _credibleyouaddress, address _cevaaddress, address _whoaddress, address _whoarewardsaddress, address _whoamaintenanceaddress)

        public

        onlyAdministrator(msg.sender)

    {

        require(administrators[msg.sender], "AdminFalse");

        // adds the _whoaddress input as the current whoa address

        whoaaddress_ 
        = _whoaddress;

        // adds the _whoamaintenanceaddress input as the current whoa maintenence address

        whoamaintenanceaddress_ 
        = _whoamaintenanceaddress;

        // adds the _whoarewardsaddress input as the current whoa rewards address

        whoarewardsaddress_ 
        = _whoarewardsaddress;

        // adds the )cevaaddress_ input as the current ceva address

        cevaaddress_ 
        = _cevaaddress;

        // adds the _credibleyouaddress input as the current credible you address

        credibleyouaddress_ 
        = _credibleyouaddress;

        // adds the _techaddress input as the current tech address

        techaddress_ 
        = _techaddress;

        // adds the __existhooldingsaddress input as the current exist holdings address

        existholdingsaddress_ 
        = _existhooldingsaddress;

        // adds the _existcryptoaddress input as the current exist crypto address

        existcryptoaddress_ 
        = _existcryptoaddress;
        
        numberofburnrequestswhitelisted_[msg.sender] 
        = 0;

        numberofpropertieswhitelisted_[msg.sender] 
        = 0;

        numberofmintingrequestswhitelisted_[msg.sender] 
        = 0;

    }

    /**

     * Function for member to purchase a founder developer license.
     * the fucntion checks if the member has have the required amount of tokens
     * as well as checking if both founder developers are in fact founder developers
     * along with ceva as an additional measure of verification.

     */

    function memberBuyFounderDeveloperLicense(address _founderDeveloperOne, address _founderDeveloperTwo, address _ceva)

        public

        onlyMembers(msg.sender)

        returns(bool _success)

    {

        require(founderdevelopers_[_founderDeveloperOne] == true 
        && ceva_[_ceva] == true 
        && founderdevelopers_[_founderDeveloperTwo] == true);

        // setup data

            address _customerAddress 
            = msg.sender;

            uint256 _licenseprice 
            = 1000 * 1e18;

            if(tokenBalanceLedger_[_customerAddress] > _licenseprice){

                propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][_ceva] 
                = (_licenseprice / 5) + propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][_ceva];

                tokenBalanceLedger_[_ceva] = tokenBalanceLedger_[_ceva] 
                + (_licenseprice / 5);

                propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][_founderDeveloperOne] 
                =  (_licenseprice / 5) + propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][_founderDeveloperOne];

                tokenBalanceLedger_[_founderDeveloperOne] = tokenBalanceLedger_[_founderDeveloperOne] + (_licenseprice / 5);

                propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][_founderDeveloperTwo] 
                =  (_licenseprice / 10) + propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][_founderDeveloperTwo];

                tokenBalanceLedger_[_founderDeveloperTwo] = tokenBalanceLedger_[_founderDeveloperTwo] 
                + (_licenseprice / 10);

                propertyBalanceLedger_[transferingPropertyid_[_customerAddress]][_customerAddress] 
                = propertyBalanceLedger_[transferingPropertyid_[_customerAddress]][_customerAddress] - _licenseprice;

                tokenBalanceLedger_[_customerAddress] 
                = tokenBalanceLedger_[_customerAddress] - _licenseprice;

                founderdevelopers_[_customerAddress] 
                = true;

                return true;

            } else {

                return false;

        }

    }

    /**
     * withdraw an envelope hold shareholders specific envelope dividends based on the chosen number
     * 1 = Taxes Envelope
     * 2 = Insurance Envelope
     * 3 = Maintenance Envelope
     * 4 = Wealth Architect Equity Coin Operator Envelope
     * 5 = Hold One Envelope
     * 6 = Hold Two Envelope
     * 7 = Hold Three Envelope
     * 8 = Rewards Envelope(OMNI)
     * 9 = Tech Envelope
     * 10 = Exist Holdings Envelope
     * 11 = Exist Crypto Envelope
     * 12 = WHOA Envelope
     * 13 = Credible You Envelope
     */

    function memberWithdrawDividends(uint8 _envelopeNumber)

        public

        onlyMembers(msg.sender)

    {

        // setup data

        address _customerAddress 
        = msg.sender;

        uint256 _dividends;

        if(_envelopeNumber == 1){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            taxesFeeTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 2){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            insuranceFeeTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 3){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            maintenanceFeeTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 4){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            waECOFeeTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 5){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            holdoneTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 6){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            holdtwoTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 7){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            holdthreeTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 8){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            rewardsTotalWithdrawn_[_customerAddress] 
            +=  _dividends;
            
            propertyBalanceLedger_[0x4f4d4e4900000000000000000000000000000000000000000000000000000000][_customerAddress] 
            +=  _dividends;

            tokenBalanceLedger_[_customerAddress] = tokenBalanceLedger_[_customerAddress] +_dividends;

        } else if(_envelopeNumber == 9){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            techTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 10){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            existholdingsTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 11){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            existcryptoTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 12){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            whoaTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        } else if(_envelopeNumber == 13){

            _dividends 
            = checkDividendsOf(msg.sender, _envelopeNumber);

            credibleyouTotalWithdrawn_[_customerAddress] 
            +=  _dividends;

        }

        // update dividend tracker
        if(_envelopeNumber != 8){
            propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][_customerAddress] 
            +=  _dividends;
        }
        tokenBalanceLedger_[_customerAddress] = tokenBalanceLedger_[_customerAddress] +_dividends;

        // fire event

        emit OnWithdraw(_customerAddress, _dividends, _envelopeNumber);

    }
    /**

     * Transfer tokens from the caller to a new holder.

     * Remember, there's a 2% fee here as well. members only

     */

    function transfer(address _toAddress, uint256 _amountOfTokens)

        public
        
        returns(bool)

    {
        transferingFromWallet_[msg.sender] = 1;
        
        uint256 _fee = _amountOfTokens / 50;
        
        _amountOfTokens += _fee;
        
        require(_amountOfTokens <= propertyBalanceLedger_[transferingPropertyid_[msg.sender]][msg.sender], "Not Enough Token");
        
        _amountOfTokens -= _fee;
        
        if(transferType_[msg.sender] == 1){
        
            require(members_[_toAddress] == true && members_[msg.sender], "Not a member");
            
        }
        
        updateRollingPropertyValueMember(_toAddress, transferingPropertyid_[msg.sender]);
        
        uint256 _value 
        = _amountOfTokens + _fee;
        
        address _ownerAddress 
        = propertyOwner_[transferingPropertyid_[msg.sender]];

        uint256 _divideby 
        = ((((propertyLastKnownValue_[transferingPropertyid_[msg.sender]][msg.sender] * 1e18) / 100) * 1000000) / propertyBalanceLedger_[transferingPropertyid_[msg.sender]][msg.sender]);

        uint256 _propertyValue 
        = ((propertyvalue_[_ownerAddress][transferingPropertyid_[msg.sender]] * 1e18) / 100) * 1000000;

        uint256 _pCalculate 
        = _propertyValue / _divideby;
            
        propertyBalanceLedger_[transferingPropertyid_[msg.sender]][msg.sender] 
        = _pCalculate - _value;
        
        propertyPriceUpdateCountMember_[msg.sender][transferingPropertyid_[msg.sender]] 
        = propertyPriceUpdateCountAsset_[transferingPropertyid_[msg.sender]];

        propertyLastKnownValue_[transferingPropertyid_[msg.sender]][msg.sender] 
        = propertyvalue_[_ownerAddress][transferingPropertyid_[msg.sender]];

        tokenBalanceLedger_[_toAddress] 
        = tokenBalanceLedger_[_toAddress] + _amountOfTokens;

        tokenBalanceLedger_[msg.sender] 
        -= _value ;

        propertyBalanceLedger_[transferingPropertyid_[msg.sender]][_toAddress] 
        = propertyBalanceLedger_[transferingPropertyid_[msg.sender]][_toAddress] + _amountOfTokens;

        updateEquityRents(_amountOfTokens);
        
        transferingFromWallet_[msg.sender] = 0;
        
        emit Transfer(msg.sender, _toAddress, _value);
        
        return true;
    }

    /**

     * Convert AVEC into ONUS

     */

    function memberConvertAVECtoONUS(uint256 tokens)

        public

    {

        bytes32 _propertyUniqueID 
        = transferingPropertyid_[msg.sender];

        uint256 _propertyBalanceLedger 
        = propertyBalanceLedger_[_propertyUniqueID][msg.sender];

        uint256 _value 
        = tokens;

        updateRollingPropertyValueMember(msg.sender, _propertyUniqueID);

        if(_propertyBalanceLedger >= _value 
        && transferingFromWallet_[msg.sender] == 0){

            // make sure we have the requested tokens
            // setup
            uint256 cValue;
            
            cValue = (propertyvalue_[propertyOwner_[_propertyUniqueID]][_propertyUniqueID] * 1e18) / 100;
            require(members_[msg.sender] == true 
            && tokens > 0, "Member or GlobalBalance");

            transferingFromWallet_[msg.sender] 
            = 1;

            //Exchange tokens

            propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][msg.sender] 
            += tokens;
            
            propertyBalanceLedger_[_propertyUniqueID][msg.sender] 
            -= tokens;
            
            propertyGlobalBalance_[_propertyUniqueID] 
            += tokens;
            
            propertyLastKnownValue_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][msg.sender] 
            = propertyvalue_[propertyOwner_[0x676c6f62616c0000000000000000000000000000000000000000000000000000]][_propertyUniqueID];


            transferingFromWallet_[msg.sender] = 0;

            emit AVECtoONUS(msg.sender, _value);

        } else {

            _value 
            = 0;

            emit AVECtoONUS(msg.sender, _value);

        }

    }

    /**

     * Convert ONUS into AVEC

     */

    function memberConvertONUSintoAVEC(uint256 tokens)

        public

        onlyMembers(msg.sender)

    {

        bytes32 _propertyUniqueID 
        = transferingPropertyid_[msg.sender];

        uint256 _propertyBalanceLedger 
        = ((propertyvalue_[propertyOwner_[_propertyUniqueID]][_propertyUniqueID] * 1e18) / 100) - propertyGlobalBalance_[_propertyUniqueID];

        uint256 _value 
        = tokens;

        updateRollingPropertyValueMember(msg.sender, _propertyUniqueID);

        if(_propertyBalanceLedger >= _value 
        && transferingFromWallet_[msg.sender] == 0){

            // make sure we have the requested tokens
            // setup

            require(members_[msg.sender] == true 
            && tokens > 0);

            transferingFromWallet_[msg.sender] 
            = 1;

            //Exchange tokens

            propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][msg.sender] 
            -= tokens;
            propertyBalanceLedger_[_propertyUniqueID][msg.sender] 
            += tokens;
            propertyGlobalBalance_[_propertyUniqueID] 
            -= tokens;
            propertyLastKnownValue_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][msg.sender] 
            = propertyvalue_[whoaaddressValue_][0x676c6f62616c0000000000000000000000000000000000000000000000000000];


            transferingFromWallet_[msg.sender] = 0;

            emit ONUStoAVEC(msg.sender, _value);
            

        } else {

            _value = 0;

            emit ONUStoAVEC(msg.sender, _value);

        }

    }

    //make an approved transfer from another wallet the transfer will verify 
    //based on the transfering ID of the from address input by the user
    
    function transferFrom(address from, address to, uint256 tokens)

        public

        onlyMembers(msg.sender)

        returns(bool)

    {

        bytes32 _propertyUniqueID 
        = transferingPropertyid_[from];

        uint256 _propertyBalanceLedger 
        = propertyBalanceLedger_[_propertyUniqueID][from];

        uint256 _value 
        = tokens + (tokens / 50);

        updateRollingPropertyValueMember(from, _propertyUniqueID);

        if(_propertyBalanceLedger >= _value){

            // setup

            address _customerAddress = msg.sender;

            // make sure we have the requested tokens

            require(members_[to] == true 
            && tokens > 0 
            &&from != to 
            && _value <= _allowed[from][msg.sender] 
            && msg.sender != from 
            && transferingFromWallet_[msg.sender] == 0);

            transferingFromWallet_[msg.sender] 
            = 1;

            updateEquityRents(tokens);

            //Exchange tokens

            tokenBalanceLedger_[to] 
            = tokenBalanceLedger_[to] + tokens;

            tokenBalanceLedger_[from] 
            -= tokens + (tokens / 50);

            propertyLastKnownValue_[_propertyUniqueID][msg.sender] 
            = propertyvalue_[propertyOwner_[_propertyUniqueID]][_propertyUniqueID];

            //Reduce Approval Amount

            _allowed[from][msg.sender] 
            -= tokens;

            amountCirculated_[from] 
            += _value;

            transferingFromWallet_[msg.sender] 
            = 0;

            address _ownerAddress 
            = propertyOwner_[_propertyUniqueID];

            address _holderAddress 
            = to;

            uint256 _divideby 
            = ((((propertyLastKnownValue_[_propertyUniqueID][_holderAddress] * 1e18) / 100) * 1000000) / _propertyBalanceLedger);

            uint256 _propertyValue 
            = ((propertyvalue_[_ownerAddress][_propertyUniqueID] * 1e18) / 100) * 1000000;

            uint256 _pCalculate 
            = _propertyValue / _divideby;

            propertyBalanceLedger_[_propertyUniqueID][_holderAddress] 
            = _pCalculate + tokens;

            propertyPriceUpdateCountMember_[_holderAddress][_propertyUniqueID] 
            = propertyPriceUpdateCountAsset_[_propertyUniqueID];

            propertyLastKnownValue_[_propertyUniqueID][_holderAddress] 
            = lastMintingPrice_[_propertyUniqueID];
            
            propertyBalanceLedger_[_propertyUniqueID][to] 
            = propertyBalanceLedger_[_propertyUniqueID][to] + tokens;

            transferingFromWallet_[msg.sender] 
            = 0;

            emit Transfer(_customerAddress, to, _value);

            return true;

        } else {

            return false;

        }

    }

    //approve another wallet to spend an amount of funds distributed based on 
    //the transfering ID you have set at the time they call the transfeFrom 
    //function that will check if you have the available funds in your 
    //currently selected property
    
    function approve(address spender, uint256 value)

        public

        onlyMembers(msg.sender)

        returns (bool) {

        require(spender != address(0));

        _allowed[msg.sender][spender] 
        = value;

        emit Approval(msg.sender, spender, value);

        return true;

    }

    // ------------------------------------------------------------------------

    // Returns the amount of tokens approved by the owner that can be

    // transferred to the spender's account

    // ------------------------------------------------------------------------

    function allowance(address tokenOwner, address spender)

        public

        onlyMembers(msg.sender)

        view returns (uint remaining) {

        return _allowed[tokenOwner][spender];

    }

     /**

     * fucntion to clear the value of a title using a ceva whitelisted account when redemption clause is called.

     */

    function cevaClearTitle(uint256 _propertyValue, address _clearFrom)

        public

        onlyCEVA(msg.sender)

        returns(bool)

    {

        uint256 _amountOfTokens = ((_propertyValue * 1e18) / 100);
        
        uint256 _difference = _amountOfTokens - propertyBalanceLedger_[workingPropertyid_[msg.sender]][propertyOwner_[workingPropertyid_[msg.sender]]];
        
        if(workingPropertyid_[msg.sender] != 0x676c6f62616c0000000000000000000000000000000000000000000000000000){

            require(burnrequestwhitelist_[_clearFrom][transferingPropertyid_[msg.sender]] == true 
            && propertywhitelist_[propertyOwner_[workingPropertyid_[msg.sender]]][workingPropertyid_[msg.sender]] == true 
            && _difference <= propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][whoaaddress_] 
            && _amountOfTokens >= 0);

            //Burn Tokens

            totalSupply
            -= _amountOfTokens;

            // take tokens out of stockpile

            //Exchange tokens

            propertyvalue_[whoaaddressValue_][0x676c6f62616c0000000000000000000000000000000000000000000000000000] 
            -= (propertyGlobalBalance_[workingPropertyid_[msg.sender]] * 100) / 1e18;

            tokenBalanceLedger_[propertyOwner_[workingPropertyid_[msg.sender]]] 
            -= propertyBalanceLedger_[workingPropertyid_[msg.sender]][propertyOwner_[workingPropertyid_[msg.sender]]];
            
            propertyBalanceLedger_[workingPropertyid_[msg.sender]][propertyOwner_[workingPropertyid_[msg.sender]]]
            = 0;
            
            propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][whoaaddress_]
            -= _amountOfTokens - propertyBalanceLedger_[workingPropertyid_[msg.sender]][propertyOwner_[workingPropertyid_[msg.sender]]];

            // returns bool true

            emit Burn(msg.sender, _amountOfTokens, _propertyValue);



            return true;

        } else {

            return false;

        }

    }

    /**

     * Transfer fee sharehold from the caller to a new holder based on envelope number see memberWithdrawDividends() 1-13 envelope names.

     */

    function memberSellFeeSharehold(address _toAddress, uint256 _amount, uint8 _envelopeNumber)

        public

        onlyMembers(msg.sender)

        returns(bool)

    {

        if(_amount > 0 
        && _envelopeNumber == 1){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress 
            = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= taxesFeeSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                taxesPreviousWithdrawn_[_toAddress] 
                += (taxesFeeTotalWithdrawn_[_customerAddress] / taxesFeeSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                taxesFeeSharehold_[_toAddress] 
                += _amount;

                taxesFeeSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 2){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress 
            = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= insuranceFeeSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                insurancePreviousWithdrawn_[_toAddress] 
                += (insuranceFeeTotalWithdrawn_[_customerAddress] / insuranceFeeSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                insuranceFeeSharehold_[_toAddress] 
                += _amount;

                insuranceFeeSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 3){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress 
            = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= maintenanceFeeSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                maintenancePreviousWithdrawn_[_toAddress] 
                += (maintenanceFeeTotalWithdrawn_[_customerAddress] / maintenanceFeeSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                maintenanceFeeSharehold_[_toAddress] 
                += _amount;

                maintenanceFeeSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 4){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress 
            = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= waECOFeeSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                waECOPreviousWithdrawn_[_toAddress] 
                += (waECOFeeTotalWithdrawn_[_customerAddress] / waECOFeeSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                waECOFeeSharehold_[_toAddress] 
                += _amount;

                waECOFeeSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 5){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress 
            = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= holdoneSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                holdonePreviousWithdrawn_[_toAddress] 
                += (holdoneTotalWithdrawn_[_customerAddress] / holdoneSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                holdoneSharehold_[_toAddress] 
                += _amount;

                holdoneSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 6){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= holdtwoSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                holdtwoPreviousWithdrawn_[_toAddress] 
                += (holdtwoTotalWithdrawn_[_customerAddress] / holdtwoSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                holdtwoSharehold_[_toAddress] 
                += _amount;

                holdtwoSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 && _envelopeNumber == 7){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress 
            = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= holdthreeSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                holdthreePreviousWithdrawn_[_toAddress] 
                += (holdthreeTotalWithdrawn_[_customerAddress] / holdthreeSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                holdthreeSharehold_[_toAddress] 
                += _amount;

                holdthreeSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 8){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress 
            = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= rewardsSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                rewardsPreviousWithdrawn_[_toAddress] 
                += (rewardsTotalWithdrawn_[_customerAddress] / rewardsSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                rewardsSharehold_[_toAddress] 
                += _amount;

                rewardsSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 9){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= techSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                techPreviousWithdrawn_[_toAddress] 
                += (techTotalWithdrawn_[_customerAddress] / techSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                techSharehold_[_toAddress] 
                += _amount;

                techSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 10){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress 
            = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= existholdingsSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                existholdingsPreviousWithdrawn_[_toAddress] 
                += (existholdingsTotalWithdrawn_[_customerAddress] / existholdingsSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                existholdingsSharehold_[_toAddress] 
                += _amount;

                existholdingsSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 11){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= existcryptoSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                existcryptoPreviousWithdrawn_[_toAddress] 
                += (existcryptoTotalWithdrawn_[_customerAddress] / existcryptoSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                existcryptoSharehold_[_toAddress] 
                += _amount;

                existcryptoSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 12){

            require(members_[_toAddress] == true);

        // setup

         address _customerAddress = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= whoaSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                whoaPreviousWithdrawn_[_toAddress] 
                += (whoaTotalWithdrawn_[_customerAddress] / whoaSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                whoaSharehold_[_toAddress] 
                += _amount;

                whoaSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else if(_amount > 0 
        && _envelopeNumber == 13){

            require(members_[_toAddress] == true);

        // setup

            address _customerAddress = msg.sender;

        // make sure we have the requested sharehold

            require(_amount <= credibleyouSharehold_[_customerAddress] 
            && _amount >= 0 
            && _toAddress != _customerAddress);

        //Update fee sharehold previous withdrawals   

                credibleyouPreviousWithdrawn_[_toAddress] 
                += (credibleyouTotalWithdrawn_[_customerAddress] / credibleyouSharehold_[_customerAddress]) * _amount;

        //Exchange sharehold

                credibleyouSharehold_[_toAddress] 
                += _amount;

                credibleyouSharehold_[_customerAddress] 
                -= _amount;

                return true;

        } else {

            return false;

        }

    }

    /**

     * Check and address to see if it has CEVA privileges or not

     */

    function checkCEVA(address _identifier)

        public

        view

        returns(bool)

    {

        if(ceva_[_identifier] == true){

            return true;

        } else {

            return false;

        }

    }

    /**

     * Check a property to see its value

     */

    function checkPropertyValue(address _ownerAddress, bytes32 _propertyUniqueID)

        public

        view

        returns(uint256)

    {

        if(propertyvalue_[_ownerAddress][_propertyUniqueID] >= 0){

            return propertyvalue_[_ownerAddress][_propertyUniqueID];

        } else {

            return 0;

        }

    }

    /**

     * Check a property to see its owner

     */

    function checkPropertyOwner(bytes32 _propertyUniqueID)

        public

        view

        returns(address)

    {

        return propertyOwner_[_propertyUniqueID];

    }
    
    /**

     * Check a property to see a related wallets last known value

     */

    function checkPropertyLastKnownValue(bytes32 _propertyUniqueID, address _memberWalletAddress)

        public

        view

        returns(uint256)

    {

        return propertyLastKnownValue_[_propertyUniqueID][_memberWalletAddress];

    }

    /**

     * Check an address for its current transfering propety id

     */

    function checkTransferingPropertyID(address _ownerAddress)

        public

        view

        returns(bytes32)

    {

        if(_ownerAddress == msg.sender){

            return transferingPropertyid_[msg.sender];

        } else {

            return transferingPropertyid_[_ownerAddress];

        }

    }

    /**

     * Check the globalFeeLedger_

     */

    function checkGlobalFeeLedger()

        public

        view

        returns(uint256)

    {

        if(globalFeeLedger_ >= 0){

            return globalFeeLedger_;

        } else {

            return 0;

        }

    }

    /**

     * Check an address to see if it has member privileges

     */

    function checkMember(address _identifier)

        public

        view

        returns(bool)

    {

        if(members_[_identifier] == true){

            return true;

        } else {

            return false;

        }

    }

    /**

     * Check an address to see is its got founder developer privileges

     */

    function checkFounderDeveloper(address _identifier)

        public

        view

        returns(bool)

    {

        if(founderdevelopers_[_identifier] == true){

            return true;

        } else {

            return false;

        }

    }

    /**

     * Check an address to see if it has admin privileges

     */

    function checkAdmin(address _identifier)

        public

        view

        returns(bool)

    {

        if(administrators[_identifier] == true){

            return true;

        } else {

            return false;

        }

    }

    /*----------  ADMINISTRATOR ONLY FUNCTIONS  ----------*/

    /**

     * whitelist Admins admin only

     */

    function adminWhitelistAdministrator(address _identifier, bool _status)

        public

        onlyAdministrator(msg.sender)

    {

        require(msg.sender != _identifier);

            administrators[_identifier] 
            = _status;

            emit AdminWhitelisted(msg.sender, _identifier, _status);

    }

    /**

     *entrypoint to whitelist ceva_ admin only

     */

    function adminWhitelistCEVA(address _identifier, bool _status)

        public

        onlyAdministrator(msg.sender)

    {

        require(msg.sender != _identifier, "Invalid address");

            ceva_[_identifier] 
            = _status;

            numberofburnrequestswhitelisted_[msg.sender] 
            = 0;

            numberofpropertieswhitelisted_[msg.sender] 
            = 0;

            numberofmintingrequestswhitelisted_[msg.sender] 
            = 0;

            emit CEVAWhitelisted(msg.sender, _identifier, _status);

    }

    /**

     * Whitelist a Mint Request that has been confirmed on the site.. ceva only

     */

    function cevaWhitelistMintRequest(address _ownerAddress, bool _trueFalse, bytes32 _mintingRequestUniqueid)

        public

        onlyCEVA(msg.sender)

        returns(bool)

    {

        if(_mintingRequestUniqueid == workingPropertyid_[msg.sender]){

            require(msg.sender != _ownerAddress);

            mintrequestwhitelist_[_ownerAddress][_mintingRequestUniqueid] 
            = _trueFalse;

            return true;

        } else {

            return false;

        }

    }

    /**

     * Whitelist a Burn Request that has been confirmed on the site.. ceva only

     */

    function cevaWhitelistBurnRequest(address _ownerAddress, bool _trueFalse, bytes32 _burnrequestUniqueID)

        public

        onlyCEVA(msg.sender)

        returns(bool)

    {

        if(_burnrequestUniqueID == workingBurnRequestid_[msg.sender]){

            require(msg.sender != _ownerAddress);

            burnrequestwhitelist_[_ownerAddress][_burnrequestUniqueID] 
            = _trueFalse;

            return true;

        } else {

            return false;

        }

    }



    /**

     * Whitelist a Property that has been confirmed on the site.. ceva only

     */

    function cevaWhitelistProperty(address _ownerAddress, bool _trueFalse, bytes32 _propertyUniqueID)

        public

        onlyCEVA(msg.sender)

        returns(bool)

    {

        if(_trueFalse = true){

            require(workingPropertyid_[msg.sender] == _propertyUniqueID);

            propertywhitelist_[_ownerAddress][_propertyUniqueID] 
            = _trueFalse;

            propertyOwner_[_propertyUniqueID] 
            = _ownerAddress;

            lastMintingPrice_[_propertyUniqueID] 
            = 0 + ((lastMintingPrice_[_propertyUniqueID] + 1) - 1);
            
            propertyPriceUpdateCountAsset_[_propertyUniqueID] 
            += 0;

            emit PropertyWhitelisted(msg.sender, _propertyUniqueID, _trueFalse);

            return true;

        } else {

            propertywhitelist_[_ownerAddress][_propertyUniqueID] 
            = _trueFalse;

            lastMintingPrice_[_propertyUniqueID] 
            = 0 + ((lastMintingPrice_[_propertyUniqueID] + 1) - 1);

            return false;

        }

    }

    /**

     * Adjust a property value used by ceva for valuation events.. ceva only

     */

    function cevaUpdatePropertyValue(address _ownerAddress, uint256 _propertyValue)

        public

        onlyCEVA(msg.sender)

        returns(uint256, uint8)

    {

        require(propertywhitelist_[_ownerAddress][workingPropertyid_[msg.sender]] = true 
        && _propertyValue >= 0 
        && workingPropertyid_[msg.sender] != 0x676c6f62616c0000000000000000000000000000000000000000000000000000);

            if(_ownerAddress != msg.sender){

                propertyvalueOld_[_ownerAddress][workingPropertyid_[msg.sender]] 
                = propertyvalue_[_ownerAddress][workingPropertyid_[msg.sender]];
                
                if(propertyPriceUpdateCountAsset_[0x676c6f62616c0000000000000000000000000000000000000000000000000000] == 0 && propertyGlobalBalance_[workingPropertyid_[msg.sender]] == 0){
                    
                    propertyvalueOld_[_ownerAddress][workingPropertyid_[msg.sender]] 
                    = _propertyValue;
                    
                    propertyGlobalBalance_[workingPropertyid_[msg.sender]] += 1;
                }
                    
                propertyvalue_[_ownerAddress][workingPropertyid_[msg.sender]] 
                = _propertyValue;
                    
                uint256 _pCalculate 
                = (((propertyvalueOld_[_ownerAddress][workingPropertyid_[msg.sender]] * 1e18) / 100) * 1000000) / propertyGlobalBalance_[workingPropertyid_[msg.sender]];
                    
                uint256 _qCalculate 
                = ((( propertyvalue_[_ownerAddress][workingPropertyid_[msg.sender]] * 1e18) / 100) * 1000000) / _pCalculate;
                
                uint256 _propertyGlobalBalanceOld
                = propertyGlobalBalance_[workingPropertyid_[msg.sender]] ;
                    
                propertyGlobalBalance_[workingPropertyid_[msg.sender]] 
                = _qCalculate;
                    
                uint256 _globalFeeLedgerOld
                = propertyvalue_[whoaaddressValue_][0x676c6f62616c0000000000000000000000000000000000000000000000000000];
                
                propertyvalue_[whoaaddressValue_][0x676c6f62616c0000000000000000000000000000000000000000000000000000] 
                = (propertyvalue_[whoaaddressValue_][0x676c6f62616c0000000000000000000000000000000000000000000000000000] + (propertyGlobalBalance_[workingPropertyid_[msg.sender]] * 100) / 1e18) 
                - (_propertyGlobalBalanceOld * 100) / 1e18;
                
                uint256 _globalFeeLedger
                = (((_globalFeeLedgerOld * 1e18) / 100) * 1000000) / globalFeeLedger_;
                
                globalFeeLedger_
                = (((propertyvalue_[whoaaddressValue_][0x676c6f62616c0000000000000000000000000000000000000000000000000000]  * 1e18) / 100) * 1000000) / _globalFeeLedger;
                    
                lastMintingPrice_[workingPropertyid_[msg.sender]] 
                = _propertyValue;
                
                propertyvalue_[_ownerAddress][workingPropertyid_[msg.sender]] 
                = _propertyValue;
                
                uint256 _pValue 
                = propertyvalue_[_ownerAddress][workingPropertyid_[msg.sender]];
                
                uint256 _pValueOld 
                = propertyvalueOld_[_ownerAddress][workingPropertyid_[msg.sender]];
                
                propertyvalue_[_ownerAddress][workingPropertyid_[msg.sender]] 
                = (_pValue + _propertyValue) - _pValueOld;

                propertyPriceUpdateCountAsset_[workingPropertyid_[msg.sender]] 
                += 1;
                
                propertyPriceUpdateCountAsset_[0x676c6f62616c0000000000000000000000000000000000000000000000000000] 
                += 1;
                
                totalSupply 
                = (totalSupply - ((propertyvalueOld_[_ownerAddress][workingPropertyid_[msg.sender]] * 1e18) / 100)) + ((propertyvalue_[_ownerAddress][workingPropertyid_[msg.sender]] * 1e18) / 100);

                emit PropertyValuation(msg.sender, workingPropertyid_[msg.sender], propertyvalue_[propertyOwner_[workingPropertyid_[msg.sender]]][workingPropertyid_[msg.sender]]);

                return (propertyvalue_[propertyOwner_[workingPropertyid_[msg.sender]]][workingPropertyid_[msg.sender]], 1);

            } else {

                return (propertyvalue_[propertyOwner_[workingPropertyid_[msg.sender]]][workingPropertyid_[msg.sender]], 2);

            }

    }

    //update a members last known property value in order to keep supply current based on previously unknown value adjustments made by ceva
    
    function updateRollingPropertyValueMember(address _holderAddress, bytes32 _propertyUniqueId)

        internal

    {

        address _ownerAddress 
        = propertyOwner_[_propertyUniqueId];

        uint256 _propertyBalanceLedger 
        = propertyBalanceLedger_[_propertyUniqueId][_holderAddress];

        if(propertyPriceUpdateCountAsset_[_propertyUniqueId] > propertyPriceUpdateCountMember_[_holderAddress][_propertyUniqueId] 
        && propertyPriceUpdateCountMember_[_holderAddress][_propertyUniqueId] == 0) {
            
            propertyLastKnownValue_[_propertyUniqueId][_holderAddress] 
            = propertyvalue_[_ownerAddress][_propertyUniqueId];

            propertyPriceUpdateCountMember_[_holderAddress][_propertyUniqueId] 
            = propertyPriceUpdateCountAsset_[_propertyUniqueId];
            
        } else if(propertyPriceUpdateCountAsset_[_propertyUniqueId] > propertyPriceUpdateCountMember_[_holderAddress][_propertyUniqueId]){
            
            uint256 _divideby 
            = ((((propertyLastKnownValue_[_propertyUniqueId][_holderAddress] * 1e18) / 100) * 1000000) / _propertyBalanceLedger);

            uint256 _propertyValue 
            = ((propertyvalue_[_ownerAddress][_propertyUniqueId] * 1e18) / 100) * 1000000;

            uint256 _pCalculate 
            = _propertyValue / _divideby;

            propertyBalanceLedger_[_propertyUniqueId][_holderAddress] 
            = _pCalculate;
            
            tokenBalanceLedger_[_holderAddress] 
            = (tokenBalanceLedger_[_holderAddress] + _pCalculate) - _propertyBalanceLedger;

            propertyPriceUpdateCountMember_[_holderAddress][_propertyUniqueId] 
            = propertyPriceUpdateCountAsset_[_propertyUniqueId];
            
            propertyLastKnownValue_[_propertyUniqueId][_holderAddress] 
            = propertyvalue_[_ownerAddress][_propertyUniqueId];
            
        } else {
            return;
        }

    }

    //manual function to update a property balance ledger for a specific wallet in order to see new balance 
    //before calling other functions that auto update property balance ledgers after ceva value adjustments
    
    function memberUpdateRollingPropertyValue(address _holderAddress, bytes32 _propertyUniqueId)

        public

        onlyMembers(msg.sender)

        returns(uint8)

    {

        address _ownerAddress 
        = propertyOwner_[_propertyUniqueId];

        if(propertyPriceUpdateCountAsset_[_propertyUniqueId] != propertyPriceUpdateCountMember_[_holderAddress][_propertyUniqueId]

        && propertyBalanceLedger_[_propertyUniqueId][_holderAddress] > 0){

            require(propertywhitelist_[_ownerAddress][_propertyUniqueId] = true);

            assert(propertyvalue_[_ownerAddress][_propertyUniqueId] > 0);

            updateRollingPropertyValueMember(_holderAddress,_propertyUniqueId);

            return 1;

        } else {

            return 2;

        }

    }

    /*----------  FOUNDER DEVELOPER ONLY FUNCTIONS  ----------*/

    // Mint an amount of tokens to an address

    // using the minting request unique ID, and property unique ID set by the founder developer

    function founderDeveloperMintAVEC(uint256 _founderDeveloperFee, address _toAddress, address _holdOne, address _holdTwo, address _holdThree,

        uint256 _propertyValue, address _commissionFounderDeveloper)

        public

        onlyFounderDevelopers(msg.sender)

    {
        bytes32 _propertyUniqueID = workingPropertyid_[msg.sender];
        
        bytes32 _mintingRequestUniqueid = workingMintRequestid_[msg.sender];
        
        uint256 _amountOfTokens 
        = (_propertyValue * 1e18) / 100;

        if(_propertyValue == propertyvalue_[propertyOwner_[_propertyUniqueID]][_propertyUniqueID]){

        // data setup
            
            require(members_[_toAddress] == true 
            
            && _founderDeveloperFee >= 20001 
            
            && _founderDeveloperFee <= 100000 
            
            && msg.sender != _toAddress 
            
            && _propertyUniqueID == workingPropertyid_[msg.sender]

            && _mintingRequestUniqueid == workingMintRequestid_[msg.sender]);

            // add tokens to the pool

            updateHoldsandSupply(_amountOfTokens);

            // credit founder developer fee

            propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][_commissionFounderDeveloper] 
            += (_amountOfTokens * 1000) / _founderDeveloperFee;

            tokenBalanceLedger_[_commissionFounderDeveloper] 
            = tokenBalanceLedger_[_commissionFounderDeveloper] + (_amountOfTokens * 1000) / _founderDeveloperFee;

            //credit Envelope Fee Shareholds

            creditFeeSharehold(_amountOfTokens, _toAddress, _holdOne, _holdTwo, _holdThree);

            // credit tech feeSharehold_    ;

            uint256 _techFee 
            = (_amountOfTokens * 100) / 25000;

            propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][techaddress_] 
            += _techFee;

            propertyvalue_[whoaaddressValue_][0x676c6f62616c0000000000000000000000000000000000000000000000000000] 
            += (_amountOfTokens * 100000000000) / 1111234581620;

            tokenBalanceLedger_[techaddress_] 
            = tokenBalanceLedger_[techaddress_] + _techFee;

            uint256 _whoaFees 
            = (_amountOfTokens * 100000000000000) / 2500000000000625;

            uint256 _fee 
            = (_amountOfTokens * (1000 * 100000)) / (_founderDeveloperFee * 100000);

            // add tokens to the _toAddress

            propertyBalanceLedger_[_propertyUniqueID][_toAddress] 
            = propertyBalanceLedger_[_propertyUniqueID][_toAddress] + ((_amountOfTokens - _whoaFees)- _fee);

            tokenBalanceLedger_[_toAddress] 
            = tokenBalanceLedger_[_toAddress] + ((_amountOfTokens - _whoaFees)- _fee);

            mintingDepositsOf_[_toAddress] 
            += ((_amountOfTokens - _whoaFees)- _fee);

            propertyGlobalBalance_[_propertyUniqueID] 
            += _whoaFees + _fee;

            // whoa fee

            propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][whoaaddress_] 
            += _whoaFees - _techFee;
            
            tokenBalanceLedger_[whoaaddress_] 
            += _whoaFees - _techFee;

            // fire event

            emit Transfer(msg.sender, _toAddress, _amountOfTokens);

        } else {

            // fire event

            _amountOfTokens 
            = 0;

            emit Transfer(msg.sender, _toAddress, _amountOfTokens);

        }

    }
    
    function globalReplace()
        
        public
        
    {
        if(ceva_[msg.sender] == true && propertywhitelist_[propertyOwner_[workingPropertyid_[msg.sender]]][workingPropertyid_[msg.sender]]){

            uint256 _amountOfTokens = (propertyvalue_[propertyOwner_[workingPropertyid_[msg.sender]]][workingPropertyid_[msg.sender]] * 1e18) / 100;
            
            propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][whoaaddress_] 
            += _amountOfTokens;
            
            propertyGlobalBalance_[workingPropertyid_[msg.sender]] += _amountOfTokens;

            propertyvalue_[whoaaddressValue_][0x676c6f62616c0000000000000000000000000000000000000000000000000000] 
            += (_amountOfTokens * 100) / 1e18;

            tokenBalanceLedger_[whoaaddress_] 
            += _amountOfTokens;

            // fire event

            emit Transfer(msg.sender, whoaaddress_, _amountOfTokens);
        }
    }

    /**

     * choose the property id that you will be working on ceva/Founder Developer

     */

    function propertyId(address _ownerAddress, bytes32 _propertyUniqueId)

        public

        returns(bool)

    {

        if(members_[_ownerAddress] == true){

            workingPropertyid_[msg.sender] 
            = _propertyUniqueId;

            return true;

        } else {

            return false;

        }

    }

    /**

     * Select a specific property unique id to swap its AVEC when calling the transfer function.

     */

    function swapType(bytes32 _propertyUniqueID, uint8 _tokenType)

        public

        returns(bytes32, uint8)

    {

        if(transferingFromWallet_[msg.sender] == 0 && _tokenType <= 3 && _tokenType >= 1){
            
            updateRollingPropertyValueMember(msg.sender, _propertyUniqueID);
            
            transferingPropertyid_[msg.sender] 
            = _propertyUniqueID;
            
            transferType_[msg.sender]
            = _tokenType;

            return (transferingPropertyid_[msg.sender], _tokenType);
        } else {
            return (transferingPropertyid_[msg.sender], _tokenType);
        }



    }

    /**

     * choose the whitelisted minting request you want to work workingMintRequestid_
     * 
     * founder developer only

     */

    function founderDeveloperMintingRequest(address _ownerAddress, bytes32 _mintingRequestUniqueid)

        public

        onlyFounderDevelopers(msg.sender)

        returns(bool)

    {

        require(mintrequestwhitelist_[_ownerAddress][_mintingRequestUniqueid] = true);

            if(members_[_ownerAddress] == true){

                workingMintRequestid_[msg.sender] 
                = _mintingRequestUniqueid;

                return true;

            } else {

                return false;

            }

    }

    /**

     * select the burn request id you would like to use for the clear title function
     * 
     * ceva only

     */

    function cevaBurnRequestId(address _ownerAddress, bytes32 _propertyUniqueID, uint256 _propertyValue)

        public

        onlyCEVA(msg.sender)

        returns(bytes32)

    {

        require(burnrequestwhitelist_[_ownerAddress][_propertyUniqueID] = true);

            if(members_[_ownerAddress] == true){

                workingPropertyid_[msg.sender] = _propertyUniqueID;

                numberofburnrequestswhitelisted_[msg.sender] 
                += 1;

                emit PropertyValuation(msg.sender, _propertyUniqueID, _propertyValue);

                return _propertyUniqueID;

            } else {

                numberofmintingrequestswhitelisted_[msg.sender] 
                -= 1;

                _propertyValue = 0;

                return _propertyUniqueID;

            }

    }

    //Function to Convert Bytes32 codes into a string.
    
    function bytes32ToString(bytes32 _bytes32)

    public

    view

    onlyMembers(msg.sender)

    returns (string memory) {

        uint8 i = 0;

        while(i < 32 && _bytes32[i] != 0) {

            i++;

        }

        bytes memory bytesArray = new bytes(i);

        for (i = 0; i < 32 && _bytes32[i] != 0; i++) {

            bytesArray[i] = _bytes32[i];

        }

        return string(bytesArray);

    }

    //function to convert strings into bytes32 code
    
    function stringToBytes32(string memory source)

    public

    view

    onlyMembers(msg.sender)

    returns (bytes32 result) {

    bytes memory tempEmptyStringTest = bytes(source);

    if (tempEmptyStringTest.length == 0) {

        return 0x0;

    }



    assembly {

        result := mload(add(source, 32))

    }

    }

    /**

     * Whitelist a Founder Developer ceva only

     */

    function cevaWhitelistFounderDeveloper(address _identifier, bool _status)

        public

        onlyCEVA(msg.sender)

    {

            founderdevelopers_[_identifier] = _status;

            numberofburnrequestswhitelisted_[_identifier] = 0;

            numberofpropertieswhitelisted_[_identifier] = 0;

            numberofmintingrequestswhitelisted_[_identifier] = 0;

            emit FounderDeveloperWhitelisted(msg.sender, _identifier, _status);

    }

    //check the property id of an address used on ceva/founder developer
    
    function checkPropertyIDOf(address _user)

        public

        view

        returns(bytes32)

    {

        return workingPropertyid_[_user];

    }
    
    //check the available avec you can acquire on a specific property using onus
    
    function checkAvailableAVEC(bytes32 _propertyUniqueID)

        public

        view

        returns(uint256)

    {

        uint256 _availableAVEC = propertyGlobalBalance_[_propertyUniqueID];
        
        return _availableAVEC;

    }
    
    //check ceva addresses current burn request id
    
    function checkBurnRequestIDOf(address _user)

        public

        view

        returns(bytes32)

    {

        return workingBurnRequestid_[_user];

    }
    
    //check the mint id of a founder developer

    function checkMintIDOf(address _user)

        public

        view

        returns(bytes32)

    {

        return workingMintRequestid_[_user];

    }

    /**

     * whitelist a member founder developer only

     */

    function founderDeveloperWhitelistMember(address _identifier, bool _status)

        public

        onlyFounderDevelopers(msg.sender)

    {

        require(msg.sender != _identifier);

            members_[_identifier] = _status;

            emit MemberWhitelisted(msg.sender, _identifier, _status);

    }

    /*----------  HELPERS AND CALCULATORS  ----------*/

    /**

     * Retrieve the tokens owned by the caller without 18 zeros of decimal.

     */

    function tokensNoDecimals()

        view

        public

        returns(uint256)

    {

        address _customerAddress = msg.sender;

        uint256 _tokens =  (balanceOf(_customerAddress) / 1e18);

        if(_tokens >= 1){

            return _tokens;

        } else {

            return 0;

        }

    }
    
    //retrieve the balance of a specific address this balance is the total
    //combined value of all property balance ledgers onus tokens and omni tokens

    function balanceOf(address _owner)

        view

        public

        returns(uint256)

    {

        return tokenBalanceLedger_[_owner];

    }
    
    //retrieve the balance of a specific address this balance is the total
    //combined value of all property balance ledgers onus tokens and omni tokens

    function checkOnusBalanceOf(address _owner)

        view

        public

        returns(uint256)

    {

        return propertyBalanceLedger_[0x676c6f62616c0000000000000000000000000000000000000000000000000000][_owner];

    }

    //check the property balance of a specific wallet and property pair using wallet address and property unique id
    
    function checkPropertyBalanceOf(address _wallet, bytes32 _propertyUniqueID)

        view

        public

        returns(uint256)

    {

        return propertyBalanceLedger_[_propertyUniqueID][_wallet];

    }
    
    //check the dividends still not withdrawn by a specific wallet using the 
    //wallet address and evelope number of the envelope you are currently auditing

    function checkDividendsOf(address _customerAddress, uint8 _envelopeNumber)

        view

        public

        returns(uint256)

    {

        if(_envelopeNumber == 1){

            uint256 _dividendPershare 
            = ((globalFeeLedger_ / 2) / 8) / taxesfeeTotalHolds_;

            uint256 _taxesSharehold 
            = taxesFeeSharehold_[_customerAddress];

            uint256 _pCalculate 
            = ((_dividendPershare * _taxesSharehold) -

            (taxesFeeTotalWithdrawn_[_customerAddress] + taxesPreviousWithdrawn_[_customerAddress])) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 2){

            uint256 _dividendPershare 
            = ((globalFeeLedger_ / 2) / 8) / insurancefeeTotalHolds_;

            uint256 _insuranceSharehold 
            = insuranceFeeSharehold_[_customerAddress];

            uint256 _pCalculate 
            = (((_dividendPershare + 0) * (_insuranceSharehold + 0)) -

            ((insuranceFeeTotalWithdrawn_[_customerAddress] + 0) + (insurancePreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 3){

            uint256 _dividendPershare 
            = ((globalFeeLedger_ / 2) / 8) / maintencancefeeTotalHolds_;

            uint256 _maintenanceSharehold 
            = maintenanceFeeSharehold_[_customerAddress];

            uint256 _pCalculate 
            = (((_dividendPershare + 0) * (_maintenanceSharehold + 0)) -

            ((maintenanceFeeTotalWithdrawn_[_customerAddress] + 0) + (maintenancePreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 4){

            uint256 _dividendPershare 
            = ((globalFeeLedger_ / 2) / 8) / waECOfeeTotalHolds_;

            uint256 _waECOSharehold 
            = waECOFeeSharehold_[_customerAddress];

            uint256 _pCalculate 
            = (((_dividendPershare + 0) * (_waECOSharehold + 0)) -

            ((waECOFeeTotalWithdrawn_[_customerAddress] + 0) + (waECOPreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 5){

            uint256 _dividendPershare 
            = ((globalFeeLedger_ / 2) / 8) / holdonefeeTotalHolds_;

            uint256 _holdOneSharehold 
            = holdoneSharehold_[_customerAddress];

            uint256 _pCalculate 
            = (((_dividendPershare) * (_holdOneSharehold)) -

            ((holdoneTotalWithdrawn_[_customerAddress]) + (holdonePreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 6){

            uint256 _dividendPershare 
            = ((globalFeeLedger_ / 2) / 8) / holdtwofeeTotalHolds_;

            uint256 _holdtwoSharehold 
            = holdtwoSharehold_[_customerAddress];

            uint256 _pCalculate 
            = (((_dividendPershare + 0) * (_holdtwoSharehold + 0)) -

            ((holdtwoTotalWithdrawn_[_customerAddress] + 0) + (holdtwoPreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 7){

            uint256 _dividendPershare 
            = ((globalFeeLedger_ / 2) / 8) / holdthreefeeTotalHolds_;

            uint256 _holdthreeSharehold 
            = holdthreeSharehold_[_customerAddress];

            uint256 _pCalculate 
            = (((_dividendPershare + 0) * (_holdthreeSharehold + 0)) -

            ((holdthreeTotalWithdrawn_[_customerAddress] + 0) + (holdthreePreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 8){

            uint256 _dividendPershare = ((globalFeeLedger_ / 2) / 8) / rewardsfeeTotalHolds_;

            uint256 _rewardsSharehold = rewardsSharehold_[_customerAddress];

            uint256 _pCalculate =  (((_dividendPershare + 0) * (_rewardsSharehold + 0)) -

            ((rewardsTotalWithdrawn_[_customerAddress] + 0) + (rewardsPreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 9){

            uint256 _dividendPershare 
            = (((globalFeeLedger_ / 2) / 5) * 2) / techfeeTotalHolds_;

            uint256 _techSharehold 
            = techSharehold_[_customerAddress];

            uint256 _pCalculate 
            = (((_dividendPershare + 0) * (_techSharehold + 0)) -

            ((techTotalWithdrawn_[_customerAddress] + 0) + (techPreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 10){

            uint256 _dividendPershare = (((globalFeeLedger_ / 2) / 5) + (globalFeeLedger_ / 40)) / existholdingsfeeTotalHolds_;

            uint256 _existholdingsSharehold = existholdingsSharehold_[_customerAddress];

            uint256 _pCalculate =  (((_dividendPershare + 0) * (_existholdingsSharehold + 0)) -

            ((existholdingsTotalWithdrawn_[_customerAddress] + 0) + (existholdingsPreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 11){

            uint256 _dividendPershare 
            = ((globalFeeLedger_ / 2) / 8) / existcryptofeeTotalHolds_;

            uint256 _existcryptoSharehold 
            = existcryptoSharehold_[_customerAddress];

            uint256 _pCalculate 
            = (((_dividendPershare + 0) * (_existcryptoSharehold + 0)) -

            ((existcryptoTotalWithdrawn_[_customerAddress] + 0) + (existcryptoPreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 12){

            uint256 _dividendPershare 
            = ((globalFeeLedger_ / 2) / 8) / whoafeeTotalHolds_;

            uint256 _whoaSharehold 
            = whoaSharehold_[_customerAddress];

            uint256 _pCalculate 
            = (((_dividendPershare + 0) * (_whoaSharehold + 0)) -

            ((whoaTotalWithdrawn_[_customerAddress] + 0) + (whoaPreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else if(_envelopeNumber == 13){

            uint256 _dividendPershare 
            = ((globalFeeLedger_ / 2) / 8) / credibleyoufeeTotalHolds_;

            uint256 _credibleyouSharehold 
            = credibleyouSharehold_[_customerAddress];

            uint256 _pCalculate 
            = (((_dividendPershare + 0) * (_credibleyouSharehold + 0)) -

            ((credibleyouTotalWithdrawn_[_customerAddress] + 0) + (credibleyouPreviousWithdrawn_[_customerAddress] + 0))) /

            ((mintingDepositsOf_[_customerAddress] + 1) / (amountCirculated_[_customerAddress] + 1));

            return _pCalculate;

        } else {

            return 0;

        }

    }

    /**

     * check the sharehold an address has of a specific hold envelope

     */

    function checkShareHoldOf(address _customerAddress, uint8 _envelopeNumber)

        view

        public

        returns(uint256, uint8)

    {



        if(_envelopeNumber == 1){

            return (taxesFeeSharehold_[_customerAddress], 1);

        } else if(_envelopeNumber == 2){

            return (insuranceFeeSharehold_[_customerAddress], 2);

        } else if(_envelopeNumber == 3){

            return (maintenanceFeeSharehold_[_customerAddress], 3);

        } else if(_envelopeNumber == 4){

            return (waECOFeeSharehold_[_customerAddress], 4);

        } else if(_envelopeNumber == 5){

            return (holdoneSharehold_[_customerAddress], 5);

        } else if(_envelopeNumber == 6){

            return (holdtwoSharehold_[_customerAddress], 6);

        } else if(_envelopeNumber == 7){

            return (holdthreeSharehold_[_customerAddress], 7);

        } else if(_envelopeNumber == 8){

            return (rewardsSharehold_[_customerAddress], 8);

        } else if(_envelopeNumber == 9){

            return (techSharehold_[_customerAddress], 9);

        } else if(_envelopeNumber == 10){

            return (existholdingsSharehold_[_customerAddress], 10);

        } else if(_envelopeNumber == 11){

            return (existcryptoSharehold_[_customerAddress], 11);

        } else if(_envelopeNumber == 12){

            return (whoaSharehold_[_customerAddress], 12);

        } else if(_envelopeNumber == 13){

            return (credibleyouSharehold_[_customerAddress], 13);

        } else {

            return (0, 0);

        }

    }


    /*==========================================

    =            INTERNAL FUNCTIONS            =

    ==========================================*/

    /**

     * Update totals holds of all envelopes and total supply of all enevelopes.

     */

    function updateHoldsandSupply(uint256 _amountOfTokens)

        internal

        returns(bool)

    {

        totalSupply 
        = totalSupply + _amountOfTokens;

        taxesfeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + taxesfeeTotalHolds_;

        insurancefeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + insurancefeeTotalHolds_;

        maintencancefeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + maintencancefeeTotalHolds_;

        waECOfeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + waECOfeeTotalHolds_;

        holdonefeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + holdonefeeTotalHolds_;

        holdtwofeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + holdtwofeeTotalHolds_;

        holdthreefeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + holdthreefeeTotalHolds_;

        rewardsfeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + rewardsfeeTotalHolds_;

        techfeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + techfeeTotalHolds_;

        existholdingsfeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + existholdingsfeeTotalHolds_;

        existcryptofeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + existcryptofeeTotalHolds_;

        whoafeeTotalHolds_ 
        = (_amountOfTokens / 1e18) + whoafeeTotalHolds_;

        credibleyoufeeTotalHolds_
        = (_amountOfTokens / 1e18) + credibleyoufeeTotalHolds_;

        feeTotalHolds_ 
        = ((_amountOfTokens / 1e18)* 13) + feeTotalHolds_;

        return true;

    }

    //adds tokens to the global fee ledger for distribution betweens envelope hold shareholders
    
    function updateEquityRents(uint256 _amountOfTokens)

        internal

        returns(bool)

    {

        if(_amountOfTokens > 0){

            globalFeeLedger_ 
            = globalFeeLedger_ + (_amountOfTokens / 50);

            return true;

        } else {

            _amountOfTokens = 0;

            return false;

        }

    }

    //credits envelope hold shareholds to respective envelope chosen during minting process
    
    function creditFeeSharehold(uint256 _amountOfTokens, address _owner, address _toAddress, address _toAddresstwo, address _toAddressthree)

        internal

        returns(bool)

    {

        taxesFeeSharehold_[_owner] 
        += _amountOfTokens / 1e18;

        insuranceFeeSharehold_[_owner] 
        += _amountOfTokens / 1e18;

        maintenanceFeeSharehold_[whoamaintenanceaddress_] 
        += _amountOfTokens / 1e18;

        waECOFeeSharehold_[_owner] 
        += _amountOfTokens / 1e18;

        holdoneSharehold_[_toAddress] 
        += _amountOfTokens / 1e18;

        holdtwoSharehold_[_toAddresstwo] 
        += _amountOfTokens / 1e18;

        holdthreeSharehold_[_toAddressthree] 
        += _amountOfTokens / 1e18;

        rewardsSharehold_[whoarewardsaddress_] 
        += _amountOfTokens / 1e18;

        techSharehold_[techaddress_] 
        += _amountOfTokens / 1e18;

        existholdingsSharehold_[existholdingsaddress_] 
        += _amountOfTokens / 1e18;

        existcryptoSharehold_[existcryptoaddress_] 
        += _amountOfTokens / 1e18;

        whoaSharehold_[whoaaddress_]
        += _amountOfTokens / 1e18;

        credibleyouSharehold_[credibleyouaddress_] 
        += _amountOfTokens / 1e18;

        return true;

    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"MemberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensConverted","type":"uint256"}],"name":"AVECtoONUS","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bool","name":"_trueFalse","type":"bool"}],"name":"AdminWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"propertyValue","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bool","name":"_trueFalse","type":"bool"}],"name":"CEVAWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bool","name":"_trueFalse","type":"bool"}],"name":"FounderDeveloperWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bool","name":"_trueFalse","type":"bool"}],"name":"MemberWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"MemberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensConverted","type":"uint256"}],"name":"ONUStoAVEC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"MemberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensWithdrawn","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"envelopeNumber","type":"uint8"}],"name":"OnWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"property","type":"bytes32"}],"name":"PropertyTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"bytes32","name":"_propertyUniqueID","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"propertyValue","type":"uint256"}],"name":"PropertyValuation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"bytes32","name":"_propertyUniqueID","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"_trueFalse","type":"bool"}],"name":"PropertyWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_existcryptoaddress","type":"address"},{"internalType":"address","name":"_existhooldingsaddress","type":"address"},{"internalType":"address","name":"_techaddress","type":"address"},{"internalType":"address","name":"_credibleyouaddress","type":"address"},{"internalType":"address","name":"_cevaaddress","type":"address"},{"internalType":"address","name":"_whoaddress","type":"address"},{"internalType":"address","name":"_whoarewardsaddress","type":"address"},{"internalType":"address","name":"_whoamaintenanceaddress","type":"address"}],"name":"adminGenesis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminInitialSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_identifier","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"adminWhitelistAdministrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_identifier","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"adminWhitelistCEVA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_bytes32","type":"bytes32"}],"name":"bytes32ToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"bytes32","name":"_propertyUniqueID","type":"bytes32"},{"internalType":"uint256","name":"_propertyValue","type":"uint256"}],"name":"cevaBurnRequestId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_propertyValue","type":"uint256"},{"internalType":"address","name":"_clearFrom","type":"address"}],"name":"cevaClearTitle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"uint256","name":"_propertyValue","type":"uint256"}],"name":"cevaUpdatePropertyValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"bool","name":"_trueFalse","type":"bool"},{"internalType":"bytes32","name":"_burnrequestUniqueID","type":"bytes32"}],"name":"cevaWhitelistBurnRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_identifier","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"cevaWhitelistFounderDeveloper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"bool","name":"_trueFalse","type":"bool"},{"internalType":"bytes32","name":"_mintingRequestUniqueid","type":"bytes32"}],"name":"cevaWhitelistMintRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"bool","name":"_trueFalse","type":"bool"},{"internalType":"bytes32","name":"_propertyUniqueID","type":"bytes32"}],"name":"cevaWhitelistProperty","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_identifier","type":"address"}],"name":"checkAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_propertyUniqueID","type":"bytes32"}],"name":"checkAvailableAVEC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"checkBurnRequestIDOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_identifier","type":"address"}],"name":"checkCEVA","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"},{"internalType":"uint8","name":"_envelopeNumber","type":"uint8"}],"name":"checkDividendsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_identifier","type":"address"}],"name":"checkFounderDeveloper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkGlobalFeeLedger","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_identifier","type":"address"}],"name":"checkMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"checkMintIDOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"checkOnusBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bytes32","name":"_propertyUniqueID","type":"bytes32"}],"name":"checkPropertyBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"checkPropertyIDOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_propertyUniqueID","type":"bytes32"},{"internalType":"address","name":"_memberWalletAddress","type":"address"}],"name":"checkPropertyLastKnownValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_propertyUniqueID","type":"bytes32"}],"name":"checkPropertyOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"bytes32","name":"_propertyUniqueID","type":"bytes32"}],"name":"checkPropertyValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"},{"internalType":"uint8","name":"_envelopeNumber","type":"uint8"}],"name":"checkShareHoldOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"}],"name":"checkTransferingPropertyID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_founderDeveloperFee","type":"uint256"},{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"address","name":"_holdOne","type":"address"},{"internalType":"address","name":"_holdTwo","type":"address"},{"internalType":"address","name":"_holdThree","type":"address"},{"internalType":"uint256","name":"_propertyValue","type":"uint256"},{"internalType":"address","name":"_commissionFounderDeveloper","type":"address"}],"name":"founderDeveloperMintAVEC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"bytes32","name":"_mintingRequestUniqueid","type":"bytes32"}],"name":"founderDeveloperMintingRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_identifier","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"founderDeveloperWhitelistMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"globalReplace","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_founderDeveloperOne","type":"address"},{"internalType":"address","name":"_founderDeveloperTwo","type":"address"},{"internalType":"address","name":"_ceva","type":"address"}],"name":"memberBuyFounderDeveloperLicense","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"memberConvertAVECtoONUS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"memberConvertONUSintoAVEC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint8","name":"_envelopeNumber","type":"uint8"}],"name":"memberSellFeeSharehold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holderAddress","type":"address"},{"internalType":"bytes32","name":"_propertyUniqueId","type":"bytes32"}],"name":"memberUpdateRollingPropertyValue","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_envelopeNumber","type":"uint8"}],"name":"memberWithdrawDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"bytes32","name":"_propertyUniqueId","type":"bytes32"}],"name":"propertyId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"source","type":"string"}],"name":"stringToBytes32","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_propertyUniqueID","type":"bytes32"},{"internalType":"uint8","name":"_tokenType","type":"uint8"}],"name":"swapType","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensNoDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60c0604052601d60808190527f416c7465726e6174655669727475616c4571756974794372656469747300000060a0908152620000409160009190620001cb565b50604080518082019091526004808252634156454360e01b60209092019182526200006e91600191620001cb565b506002805474314d0ed76d866826c809fb6a51d63642b2e9ec3e00610100600160a81b031960ff1990921660121791909116179055600380546001600160a01b031990811673314d0ed76d866826c809fb6a51d63642b2e9ec3e17909155600480548216732722b426b11978c29660e8395a423ccb93ae040317905560058054821673a9d241b568df9e8a7ec9e44737f29a8ee00bff5317905560068054821673de281c22976de2e9b3f4f87beb60ae9e67dff5c417905560078054821673c9c1ffd6b4014232ef474daa4ca1506a6e39be8917905560088054821673b6148c62e6a6d48f41241d01e3c4841139144aba17905560098054821673ac1b6580a175c1f2a4e3220a24e6f65ff3ab8a03179055600a805490911673b8c098ee976f1162ad277936a5d1bca7a8fe61f51790556519db1bd8985b60d21b604f55634f4d4e4960e01b605055348015620001c457600080fd5b5062000270565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200020e57805160ff19168380011785556200023e565b828001600101855582156200023e579182015b828111156200023e57825182559160200191906001019062000221565b506200024c92915062000250565b5090565b6200026d91905b808211156200024c576000815560010162000257565b90565b615f1080620002806000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c80635ed0063a1161019d578063b2a044aa116100e9578063dd62ed3e116100a2578063f02338371161007c578063f023383714610bba578063f3af266414610be6578063f574f04b14610c1e578063fa8de8ef14610c265761030c565b8063dd62ed3e14610b2c578063de006a0914610b5a578063edf8786114610b865761030c565b8063b2a044aa146109c3578063bc4aa86e146109e0578063c3c8e42714610a0c578063c9abf23214610a32578063cfb5192814610a60578063d6fe81ae14610b065761030c565b80639026dee8116101565780639c4c5e76116101305780639c4c5e7614610934578063a9059cbb14610969578063aaf2e5d814610995578063ac5ed7b7146109bb5761030c565b80639026dee8146108e95780639201de551461090f57806395d89b411461092c5761030c565b80635ed0063a146107cd57806361541ea0146107f357806370a082311461085257806380d3c46e14610878578063822454611461089e57806387a39673146108cc5761030c565b80631cda9e591161025c57806331a8743c11610215578063385e14c9116101ef578063385e14c9146106ea5780634215ca041461073c5780635290b321146107705780635a9ee20c1461079e5761030c565b806331a8743c1461064f57806331d28df11461068357806332cc3aad146106cd5761030c565b80631cda9e591461056257806323b872dd1461058e5780632403ba53146105c45780632aea5807146105fd5780632cf06ba814610629578063313ce567146106315761030c565b80630989d589116102c957806310a5d828116102a357806310a5d828146104e257806312a72d021461050857806315bc5ab51461053457806318160ddd1461055a5761030c565b80630989d589146104885780630ad2ae9b146104905780630dc7faa2146104c25761030c565b806301c4e0941461031157806304738f591461034157806306fdde0314610379578063076ccb8f146103f657806308c2de9514610436578063095ea7b31461045c575b600080fd5b61033f6004803603604081101561032757600080fd5b506001600160a01b0381351690602001351515610c52565b005b6103676004803603602081101561035757600080fd5b50356001600160a01b0316610cf2565b60408051918252519081900360200190f35b610381610d11565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103bb5781810151838201526020016103a3565b50505050905090810190601f1680156103e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104226004803603604081101561040c57600080fd5b506001600160a01b038135169060200135610d9f565b604080519115158252519081900360200190f35b6104226004803603602081101561044c57600080fd5b50356001600160a01b0316610e31565b6104226004803603604081101561047257600080fd5b506001600160a01b038135169060200135610e67565b61033f610f06565b610367600480360360608110156104a657600080fd5b506001600160a01b038135169060208101359060400135611062565b61033f600480360360208110156104d857600080fd5b503560ff16611156565b610367600480360360208110156104f857600080fd5b50356001600160a01b0316611549565b6103676004803603604081101561051e57600080fd5b506001600160a01b038135169060200135611564565b6103676004803603602081101561054a57600080fd5b50356001600160a01b031661158e565b6103676115b6565b6103676004803603604081101561057857600080fd5b506001600160a01b0381351690602001356115bc565b610422600480360360608110156105a457600080fd5b506001600160a01b038135811691602081013590911690604001356115ed565b6105e1600480360360208110156105da57600080fd5b5035611b6e565b604080516001600160a01b039092168252519081900360200190f35b6104226004803603604081101561061357600080fd5b50803590602001356001600160a01b0316611b89565b610367611e1d565b610639611e24565b6040805160ff9092168252519081900360200190f35b6104226004803603606081101561066557600080fd5b506001600160a01b0381351690602081013515159060400135611e2d565b6106b26004803603604081101561069957600080fd5b5080356001600160a01b0316906020013560ff16611ebf565b6040805192835260ff90911660208301528051918290030190f35b610367600480360360208110156106e357600080fd5b5035612126565b61033f600480360360e081101561070057600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a08201359160c0013516612138565b6104226004803603606081101561075257600080fd5b506001600160a01b03813516906020810135151590604001356125c8565b61033f6004803603604081101561078657600080fd5b506001600160a01b0381351690602001351515612651565b610367600480360360408110156107b457600080fd5b5080356001600160a01b0316906020013560ff16612746565b610367600480360360208110156107e357600080fd5b50356001600160a01b0316613004565b61033f600480360361010081101561080a57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c082013581169160e001351661301f565b6103676004803603602081101561086857600080fd5b50356001600160a01b0316613156565b6103676004803603602081101561088e57600080fd5b50356001600160a01b0316613170565b61033f600480360360408110156108b457600080fd5b506001600160a01b03813516906020013515156131b8565b61033f600480360360208110156108e257600080fd5b5035613251565b610422600480360360208110156108ff57600080fd5b50356001600160a01b031661344c565b6103816004803603602081101561092557600080fd5b503561347a565b6103816135ad565b6104226004803603606081101561094a57600080fd5b5080356001600160a01b0316906020810135906040013560ff16613607565b6104226004803603604081101561097f57600080fd5b506001600160a01b038135169060200135614368565b610422600480360360208110156109ab57600080fd5b50356001600160a01b03166148b3565b61033f6148e1565b61033f600480360360208110156109d957600080fd5b5035614b6a565b610367600480360360408110156109f657600080fd5b50803590602001356001600160a01b0316614db3565b61042260048036036020811015610a2257600080fd5b50356001600160a01b0316614ddb565b61033f60048036036040811015610a4857600080fd5b506001600160a01b0381351690602001351515614e09565b61036760048036036020811015610a7657600080fd5b810190602081018135640100000000811115610a9157600080fd5b820183602082011115610aa357600080fd5b80359060200191846001830284011164010000000083111715610ac557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550614ea2945050505050565b6106b260048036036040811015610b1c57600080fd5b508035906020013560ff16614ee2565b61036760048036036040811015610b4257600080fd5b506001600160a01b0381358116916020013516614f6e565b6106b260048036036040811015610b7057600080fd5b506001600160a01b038135169060200135614fbf565b61042260048036036060811015610b9c57600080fd5b506001600160a01b03813516906020810135151590604001356156c4565b61063960048036036040811015610bd057600080fd5b506001600160a01b038135169060200135615798565b61042260048036036060811015610bfc57600080fd5b506001600160a01b03813581169160208101358216916040909101351661588f565b610367615a2f565b61042260048036036040811015610c3c57600080fd5b506001600160a01b038135169060200135615a6b565b336000818152600d602052604090205460ff161515600114610c7357600080fd5b6001600160a01b0383166000818152600c60209081526040808320805460ff1916871515908117909155604c8352818420849055604b8352818420849055604a83528184209390935580519283525133927f5a842b33eae3a18762b9b885e1bd64b7a1bb439d3c4cb4e45d09adf0fbbf5c2c92908290030190a3505050565b6001600160a01b0381166000908152601d60205260409020545b919050565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d975780601f10610d6c57610100808354040283529160200191610d97565b820191906000526020600020905b815481529060010190602001808311610d7a57829003601f168201915b505050505081565b336000818152600c602052604081205490919060ff161515600114610dc357600080fd5b6001600160a01b03841660008181526010602090815260408083208784528252808320805460ff19166001908117909155938352600b90915290205460ff1615151415610e2557336000908152601e6020526040902083905560019150610e2a565b600091505b5092915050565b6001600160a01b0381166000908152600d602052604081205460ff16151560011415610e5f57506001610d0c565b506000610d0c565b336000818152600b602052604081205490919060ff161515600114610e8b57600080fd5b6001600160a01b038416610e9e57600080fd5b336000818152600f602090815260408083206001600160a01b03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b336000908152600d602052604090205460ff1615156001148015610f625750336000908152601d6020908152604080832054808452601a8352818420546001600160a01b031684526012835281842090845290915290205460ff165b1561106057336000818152601d602090815260408083208054808552601a8452828520546001600160a01b039081168652601580865284872092875291855283862054600280546101009081900484168952600080516020615e9b833981519152885286892080546064670de0b6b3a764000095860281900491820190925596548a5260198952878a2080548801905560035485168a529488528689206519db1bd8985b60d21b8a5288528689208054958702939093049094019091558054839004821687528580529584902080548401905594548351838152935192969190049094169392600080516020615ebb833981519152928290030190a3505b565b336000818152600d602052604081205490919060ff16151560011461108657600080fd5b6001600160a01b03851660008181526011602090815260408083208884528252808320805460ff19166001908117909155938352600b90915290205460ff161515141561113157336000818152601d60209081526040808320889055604c82529182902080546001019055815187815290810186905281517fbb5f3a98b075980e08be27de702c2bb71c59930a36b0d28fbaf0030a9b714959929181900390910190a283915061114e565b336000908152604a60205260408120805460001901905592508391505b509392505050565b336000818152600b602052604090205460ff16151560011461117757600080fd5b336000600160ff851614156111b5576111903385612746565b6001600160a01b038316600090815260236020526040902080548201905590506114af565b8360ff16600214156111f0576111cb3385612746565b6001600160a01b038316600090815260266020526040902080548201905590506114af565b8360ff166003141561122b576112063385612746565b6001600160a01b038316600090815260296020526040902080548201905590506114af565b8360ff1660041415611266576112413385612746565b6001600160a01b0383166000908152602c6020526040902080548201905590506114af565b8360ff16600514156112a15761127c3385612746565b6001600160a01b0383166000908152602f6020526040902080548201905590506114af565b8360ff16600614156112dc576112b73385612746565b6001600160a01b038316600090815260326020526040902080548201905590506114af565b8360ff1660071415611317576112f23385612746565b6001600160a01b038316600090815260356020526040902080548201905590506114af565b8360ff166008141561138c5761132d3385612746565b6001600160a01b03831660009081526038602090815260408083208054850190557fc130dae904bad8b2e58e4eecb0fbb7871f491d9f0cb4d3e42d842886f7822c0e8252808320805485019055908052902080548201905590506114af565b8360ff16600914156113c7576113a23385612746565b6001600160a01b0383166000908152603b6020526040902080548201905590506114af565b8360ff16600a1415611402576113dd3385612746565b6001600160a01b0383166000908152603e6020526040902080548201905590506114af565b8360ff16600b141561143d576114183385612746565b6001600160a01b038316600090815260416020526040902080548201905590506114af565b8360ff16600c1415611478576114533385612746565b6001600160a01b038316600090815260446020526040902080548201905590506114af565b8360ff16600d14156114af5761148e3385612746565b6001600160a01b038316600090815260476020526040902080548201905590505b8360ff166008146114e6576001600160a01b0382166000908152600080516020615e9b833981519152602052604090208054820190555b6001600160a01b03821660008181526020808052604091829020805485019055815184815260ff88169181019190915281517f19df082c3c3f174884f7819415ba70fca9a7b1ab31aaba84818e516bf5fe6f01929181900390910190a250505050565b6001600160a01b03166000908152601f602052604090205490565b60008181526013602090815260408083206001600160a01b03861684529091529020545b92915050565b6001600160a01b03166000908152600080516020615e9b833981519152602052604090205490565b60515481565b6001600160a01b0382166000908152601560209081526040808320848452909152902054611588565b506000611588565b336000818152600b602052604081205490919060ff16151560011461161157600080fd5b6001600160a01b0385166000818152601c602090815260408083205480845260138352818420948452939091529020546032850485016116518884615aab565b808210611b62576001600160a01b0387166000908152600b6020526040902054339060ff16151560011480156116875750600087115b80156116a55750876001600160a01b0316896001600160a01b031614155b80156116d457506001600160a01b0389166000908152600f602090815260408083203384529091529020548211155b80156116e95750336001600160a01b038a1614155b80156117025750336000908152604d6020526040902054155b61170b57600080fd5b336000908152604d602052604090206001905561172787615ccc565b506001600160a01b03881660009081526020805260409020805488019055603287048701602060008b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254039250508190555060156000601a600087815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600085815260200190815260200160002054601460008681526020019081526020016000206000336001600160a01b03166001600160a01b031681526020019081526020016000208190555086600f60008b6001600160a01b03166001600160a01b031681526020019081526020016000206000336001600160a01b03166001600160a01b031681526020019081526020016000206000828254039250508190555081602260008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825401925050819055506000604d6000336001600160a01b03166001600160a01b03168152602001908152602001600020819055506000601a600086815260200190815260200160002060009054906101000a90046001600160a01b0316905060008990506000856064601460008a81526020019081526020016000206000856001600160a01b03166001600160a01b0316815260200190815260200160002054670de0b6b3a7640000028161194557fe5b04620f4240028161195257fe5b6001600160a01b03851660009081526015602090815260408083208c845290915281205492909104925090606490670de0b6b3a76400000204620f4240029050600082828161199d57fe5b0490508b8101601360008b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002081905550601860008a81526020019081526020016000205460176000866001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002081905550601b60008a815260200190815260200160002054601460008b81526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020819055508b601360008b815260200190815260200160002060008f6001600160a01b03166001600160a01b031681526020019081526020016000205401601360008b815260200190815260200160002060008f6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000604d6000336001600160a01b03166001600160a01b03168152602001908152602001600020819055508c6001600160a01b0316866001600160a01b0316600080516020615ebb833981519152896040518082815260200191505060405180910390a360019a5050505050505050505061114e565b6000945050505061114e565b6000908152601a60205260409020546001600160a01b031690565b336000818152600d602052604081205490919060ff161515600114611bad57600080fd5b336000818152601d602081815260408084205480855260138352818520601a8452828620546001600160a01b0316865283529084205494909352526064670de0b6b3a7640000870204918203906519db1bd8985b60d21b14611e12576001600160a01b0385166000908152601160209081526040808320338452601c835281842054845290915290205460ff1615156001148015611c885750336000908152601d6020908152604080832054808452601a8352818420546001600160a01b031684526012835281842090845290915290205460ff1615156001145b8015611cc0575060025461010090046001600160a01b03166000908152600080516020615e9b83398151915260205260409020548111155b8015611cca575060015b611cd357600080fd5b605180548390039055336000818152601d602090815260408083208054845260198352818420546003546001600160a01b039081168652601585528386206519db1bd8985b60d21b875285528386208054670de0b6b3a7640000606490940293909304909203909155815485526013808552838620601a8087528588205484168852908652848720548680528588208054919091039055835487528186528487208187528588205484168852865284872087905592548652845282852091845282852054811685529083528184205460025461010090049091168452600080516020615e9b8339815191528352928190208054938703909303909255815185815290810189905281517f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a929181900390910190a2600193505050610e2a565b600093505050610e2a565b6053545b90565b60025460ff1681565b336000818152600d602052604081205490919060ff161515600114611e5157600080fd5b336000908152601f6020526040902054831415611eb657336001600160a01b0386161415611e7e57600080fd5b6001600160a01b03851660009081526011602090815260408083208684529091529020805460ff19168515151790556001915061114e565b6000915061114e565b6000808260ff1660011415611ef05750506001600160a01b038216600090815260256020526040902054600161211f565b8260ff1660021415611f1e5750506001600160a01b038216600090815260286020526040902054600261211f565b8260ff1660031415611f4c5750506001600160a01b0382166000908152602b6020526040902054600361211f565b8260ff1660041415611f7a5750506001600160a01b0382166000908152602e6020526040902054600461211f565b8260ff1660051415611fa85750506001600160a01b038216600090815260316020526040902054600561211f565b8260ff1660061415611fd65750506001600160a01b038216600090815260346020526040902054600661211f565b8260ff16600714156120045750506001600160a01b038216600090815260376020526040902054600761211f565b8260ff16600814156120325750506001600160a01b0382166000908152603a6020526040902054600861211f565b8260ff16600914156120605750506001600160a01b0382166000908152603d6020526040902054600961211f565b8260ff16600a141561208e5750506001600160a01b038216600090815260406020819052902054600a61211f565b8260ff16600b14156120bc5750506001600160a01b038216600090815260436020526040902054600b61211f565b8260ff16600c14156120ea5750506001600160a01b038216600090815260466020526040902054600c61211f565b8260ff16600d14156121185750506001600160a01b038216600090815260496020526040902054600d61211f565b5060009050805b9250929050565b60009081526019602052604090205490565b336000818152600c602052604090205460ff16151560011461215957600080fd5b336000908152601d6020908152604080832054601e835281842054818552601a8452828520546001600160a01b03168552601584528285208286529093529220546064670de0b6b3a764000087020490861415612589576001600160a01b038a166000908152600b602052604090205460ff16151560011480156121df5750614e218b10155b80156121ee5750620186a08b11155b80156122035750336001600160a01b038b1614155b801561221d5750336000908152601d602052604090205483145b80156122375750336000908152601e602052604090205482145b61224057600080fd5b61224981615cf2565b508a816103e8028161225757fe5b6001600160a01b0387166000908152600080516020615e9b8339815191526020526040902080549290910490910190558a6103e882028161229457fe5b6001600160a01b0387166000908152602080526040902080549290910490910190556122c3818b8b8b8b615d82565b50600880546001600160a01b039081166000908152600080516020615e9b8339815191526020908152604080832080546161a8606489020490810190915560035485168452601583528184206519db1bd8985b60d21b855283528184208054650102babe147464174876e8008a02040190559454909316825280529081208054830190556608e1bc9bf04271655af3107a400084020490620186a08e026305f5e10085028161236e57fe5b04905080828503036013600088815260200190815260200160002060008f6001600160a01b03166001600160a01b0316815260200190815260200160002054016013600088815260200190815260200160002060008f6001600160a01b03166001600160a01b03168152602001908152602001600020819055508082850303602060008f6001600160a01b03166001600160a01b031681526020019081526020016000205401602060008f6001600160a01b03166001600160a01b03168152602001908152602001600020819055508082850303602160008f6001600160a01b03166001600160a01b03168152602001908152602001600020600082825401925050819055508082016019600088815260200190815260200160002060008282540192505081905550828203601360006519db1bd8985b60d21b60001b81526020019081526020016000206000600260019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206000828254019250508190555082820360206000600260019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600082825401925050819055508c6001600160a01b0316336001600160a01b0316600080516020615ebb833981519152866040518082815260200191505060405180910390a35050506125bb565b5060408051600080825291516001600160a01b038c16913391600080516020615ebb8339815191529181900360200190a35b5050505050505050505050565b336000818152600d602052604081205490919060ff1615156001146125ec57600080fd5b336000908152601d6020526040902054831415611eb657336001600160a01b038616141561261957600080fd5b6001600160a01b03851660009081526010602090815260408083208684529091529020805460ff19168515151790556001915061114e565b336000818152600e602052604090205460ff16151560011461267257600080fd5b336001600160a01b03841614156126c2576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b0383166000818152600d60209081526040808320805460ff191687151590811790915533808552604c8452828520859055604b8452828520859055604a845282852094909455815190815290517fd562498d05096e8752446b22351f39f5127bc5a0b49757ff3a3d5fbadc0cb42d929181900390910190a3505050565b60008160ff16600114156127fe576000605454600860026053548161276757fe5b048161276f57fe5b048161277757fe5b6001600160a01b03861660009081526025602090815260408083205460228352818420546021909352908320549490930494509192909160019081019101816127bc57fe5b6001600160a01b03881660009081526024602090815260408083205460239092529091205492909104910184840203816127f257fe5b04935061158892505050565b8160ff16600214156128a8576000605554600860026053548161281d57fe5b048161282557fe5b048161282d57fe5b6001600160a01b038616600090815260286020908152604080832054602283528184205460219093529083205494909304945091929091600190810191018161287257fe5b6001600160a01b03881660009081526027602090815260408083205460269092529091205492909104910184840203816127f257fe5b8160ff166003141561295257600060565460086002605354816128c757fe5b04816128cf57fe5b04816128d757fe5b6001600160a01b0386166000908152602b6020908152604080832054602283528184205460219093529083205494909304945091929091600190810191018161291c57fe5b6001600160a01b0388166000908152602a602090815260408083205460299092529091205492909104910184840203816127f257fe5b8160ff16600414156129fc576000605754600860026053548161297157fe5b048161297957fe5b048161298157fe5b6001600160a01b0386166000908152602e602090815260408083205460228352818420546021909352908320549490930494509192909160019081019101816129c657fe5b6001600160a01b0388166000908152602d6020908152604080832054602c9092529091205492909104910184840203816127f257fe5b8160ff1660051415612aa65760006058546008600260535481612a1b57fe5b0481612a2357fe5b0481612a2b57fe5b6001600160a01b0386166000908152603160209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612a7057fe5b6001600160a01b038816600090815260306020908152604080832054602f9092529091205492909104910184840203816127f257fe5b8160ff1660061415612b505760006059546008600260535481612ac557fe5b0481612acd57fe5b0481612ad557fe5b6001600160a01b0386166000908152603460209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612b1a57fe5b6001600160a01b03881660009081526033602090815260408083205460329092529091205492909104910184840203816127f257fe5b8160ff1660071415612bfa576000605a546008600260535481612b6f57fe5b0481612b7757fe5b0481612b7f57fe5b6001600160a01b0386166000908152603760209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612bc457fe5b6001600160a01b03881660009081526036602090815260408083205460359092529091205492909104910184840203816127f257fe5b8160ff1660081415612ca4576000605b546008600260535481612c1957fe5b0481612c2157fe5b0481612c2957fe5b6001600160a01b0386166000908152603a60209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612c6e57fe5b6001600160a01b03881660009081526039602090815260408083205460389092529091205492909104910184840203816127f257fe5b8160ff1660091415612d51576000605c546005600260535481612cc357fe5b0481612ccb57fe5b0460020281612cd657fe5b6001600160a01b0386166000908152603d60209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612d1b57fe5b6001600160a01b0388166000908152603c6020908152604080832054603b9092529091205492909104910184840203816127f257fe5b8160ff16600a1415612e06576000605d54602860535481612d6e57fe5b046005600260535481612d7d57fe5b0481612d8557fe5b040181612d8e57fe5b6001600160a01b0386166000908152604060208181528183205460228252828420546021909252918320549490930494509290916001908101910181612dd057fe5b6001600160a01b0388166000908152603f6020908152604080832054603e9092529091205492909104910184840203816127f257fe5b8160ff16600b1415612eb0576000605e546008600260535481612e2557fe5b0481612e2d57fe5b0481612e3557fe5b6001600160a01b0386166000908152604360209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612e7a57fe5b6001600160a01b03881660009081526042602090815260408083205460419092529091205492909104910184840203816127f257fe5b8160ff16600c1415612f5a576000605f546008600260535481612ecf57fe5b0481612ed757fe5b0481612edf57fe5b6001600160a01b0386166000908152604660209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612f2457fe5b6001600160a01b03881660009081526045602090815260408083205460449092529091205492909104910184840203816127f257fe5b8160ff16600d14156115e55760006060546008600260535481612f7957fe5b0481612f8157fe5b0481612f8957fe5b6001600160a01b0386166000908152604960209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612fce57fe5b6001600160a01b03881660009081526048602090815260408083205460479092529091205492909104910184840203816127f257fe5b6001600160a01b03166000908152601e602052604090205490565b336000818152600e602052604090205460ff16151560011461304057600080fd5b336000908152600e602052604090205460ff16613091576040805162461bcd60e51b815260206004820152600a60248201526941646d696e46616c736560b01b604482015290519081900360640190fd5b5060028054610100600160a81b0319166101006001600160a01b0395861602179055600480546001600160a01b03199081169285169290921790556005805482169284169290921790915560068054821693831693909317909255600780548316938216939093179092556008805482169383169390931790925560098054831693821693909317909255600a805490911692909116919091179055336000908152604c60209081526040808320839055604b8252808320839055604a909152812055565b6001600160a01b0316600090815260208052604090205490565b60006001600160a01b0382163314156131995750336000908152601c6020526040902054610d0c565b506001600160a01b0381166000908152601c6020526040902054610d0c565b336000818152600c602052604090205460ff1615156001146131d957600080fd5b336001600160a01b03841614156131ef57600080fd5b6001600160a01b0383166000818152600b6020908152604091829020805460ff19168615159081179091558251908152915133927f8cfdbf9b02b83c1504c3c6c0ebf7f515b071b2103b37b52fba37a39a23d33b0392908290030190a3505050565b336000818152600b602052604090205460ff16151560011461327257600080fd5b336000908152601c60209081526040808320548084526019835281842054601a8452828520546001600160a01b03168552601584528285208286529093529083205490929190606490670de0b6b3a76400000204039050836132d43384615aab565b8082101580156132f15750336000908152604d6020526040902054155b1561340b57336000908152600b602052604090205460ff161515600114801561331a5750600085115b61332357600080fd5b336000818152604d6020818152604080842060018155600080516020615e9b833981519152835281852080548c9003905588855260138352818520868652835281852080548c0190558885526019835281852080548c900390556003546001600160a01b03168552601583528185206519db1bd8985b60d21b86528352818520548686527f1cfd05295e1e2807b17860e3f753be2d73e143637c711d96503fa979b987fe6584528286205592825292909155815184815291517fdae8fce77474c1d5a6dabb90c77dc8185f2dfa9229889ddb3f9791d408b66d9a9281900390910190a2613445565b50604080516000808252915133917fdae8fce77474c1d5a6dabb90c77dc8185f2dfa9229889ddb3f9791d408b66d9a919081900360200190a25b5050505050565b6001600160a01b0381166000908152600e602052604081205460ff16151560011415610e5f57506001610d0c565b336000818152600b60205260409020546060919060ff16151560011461349f57600080fd5b60005b60208160ff161080156134d05750838160ff16602081106134bf57fe5b1a60f81b6001600160f81b03191615155b156134dd576001016134a2565b60608160ff1667ffffffffffffffff811180156134f957600080fd5b506040519080825280601f01601f191660200182016040528015613524576020820181803683370190505b509050600091505b60208260ff1610801561355a5750848260ff166020811061354957fe5b1a60f81b6001600160f81b03191615155b156135a357848260ff166020811061356e57fe5b1a60f81b818360ff168151811061358157fe5b60200101906001600160f81b031916908160001a90535060019091019061352c565b9250505b50919050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d975780601f10610d6c57610100808354040283529160200191610d97565b336000818152600b602052604081205490919060ff16151560011461362b57600080fd5b60008411801561363e57508260ff166001145b15613730576001600160a01b0385166000908152600b602052604090205460ff16151560011461366d57600080fd5b33600081815260256020526040902054851180159061368a575060015b80156136a85750806001600160a01b0316866001600160a01b031614155b6136b157600080fd5b6001600160a01b038116600090815260256020908152604080832054602390925290912054869190816136e057fe5b6001600160a01b038981166000908152602460209081526040808320805496909504969096029094019092556025909252828120805489019055921682529020805485900390556001915061114e565b60008411801561374357508260ff166002145b15613835576001600160a01b0385166000908152600b602052604090205460ff16151560011461377257600080fd5b33600081815260286020526040902054851180159061378f575060015b80156137ad5750806001600160a01b0316866001600160a01b031614155b6137b657600080fd5b6001600160a01b038116600090815260286020908152604080832054602690925290912054869190816137e557fe5b6001600160a01b038981166000908152602760209081526040808320805496909504969096029094019092556028909252828120805489019055921682529020805485900390556001915061114e565b60008411801561384857508260ff166003145b1561393a576001600160a01b0385166000908152600b602052604090205460ff16151560011461387757600080fd5b336000818152602b60205260409020548511801590613894575060015b80156138b25750806001600160a01b0316866001600160a01b031614155b6138bb57600080fd5b6001600160a01b0381166000908152602b6020908152604080832054602990925290912054869190816138ea57fe5b6001600160a01b038981166000908152602a6020908152604080832080549690950496909602909401909255602b909252828120805489019055921682529020805485900390556001915061114e565b60008411801561394d57508260ff166004145b15613a3f576001600160a01b0385166000908152600b602052604090205460ff16151560011461397c57600080fd5b336000818152602e60205260409020548511801590613999575060015b80156139b75750806001600160a01b0316866001600160a01b031614155b6139c057600080fd5b6001600160a01b0381166000908152602e6020908152604080832054602c90925290912054869190816139ef57fe5b6001600160a01b038981166000908152602d6020908152604080832080549690950496909602909401909255602e909252828120805489019055921682529020805485900390556001915061114e565b600084118015613a5257508260ff166005145b15613b44576001600160a01b0385166000908152600b602052604090205460ff161515600114613a8157600080fd5b336000818152603160205260409020548511801590613a9e575060015b8015613abc5750806001600160a01b0316866001600160a01b031614155b613ac557600080fd5b6001600160a01b038116600090815260316020908152604080832054602f9092529091205486919081613af457fe5b6001600160a01b038981166000908152603060209081526040808320805496909504969096029094019092556031909252828120805489019055921682529020805485900390556001915061114e565b600084118015613b5757508260ff166006145b15613c49576001600160a01b0385166000908152600b602052604090205460ff161515600114613b8657600080fd5b336000818152603460205260409020548511801590613ba3575060015b8015613bc15750806001600160a01b0316866001600160a01b031614155b613bca57600080fd5b6001600160a01b03811660009081526034602090815260408083205460329092529091205486919081613bf957fe5b6001600160a01b038981166000908152603360209081526040808320805496909504969096029094019092556034909252828120805489019055921682529020805485900390556001915061114e565b600084118015613c5c57508260ff166007145b15613d4e576001600160a01b0385166000908152600b602052604090205460ff161515600114613c8b57600080fd5b336000818152603760205260409020548511801590613ca8575060015b8015613cc65750806001600160a01b0316866001600160a01b031614155b613ccf57600080fd5b6001600160a01b03811660009081526037602090815260408083205460359092529091205486919081613cfe57fe5b6001600160a01b038981166000908152603660209081526040808320805496909504969096029094019092556037909252828120805489019055921682529020805485900390556001915061114e565b600084118015613d6157508260ff166008145b15613e53576001600160a01b0385166000908152600b602052604090205460ff161515600114613d9057600080fd5b336000818152603a60205260409020548511801590613dad575060015b8015613dcb5750806001600160a01b0316866001600160a01b031614155b613dd457600080fd5b6001600160a01b0381166000908152603a602090815260408083205460389092529091205486919081613e0357fe5b6001600160a01b03898116600090815260396020908152604080832080549690950496909602909401909255603a909252828120805489019055921682529020805485900390556001915061114e565b600084118015613e6657508260ff166009145b15613f58576001600160a01b0385166000908152600b602052604090205460ff161515600114613e9557600080fd5b336000818152603d60205260409020548511801590613eb2575060015b8015613ed05750806001600160a01b0316866001600160a01b031614155b613ed957600080fd5b6001600160a01b0381166000908152603d6020908152604080832054603b9092529091205486919081613f0857fe5b6001600160a01b038981166000908152603c6020908152604080832080549690950496909602909401909255603d909252828120805489019055921682529020805485900390556001915061114e565b600084118015613f6b57508260ff16600a145b15614059576001600160a01b0385166000908152600b602052604090205460ff161515600114613f9a57600080fd5b336000818152604060208190529020548511801590613fb7575060015b8015613fd55750806001600160a01b0316866001600160a01b031614155b613fde57600080fd5b6001600160a01b03811660009081526040602081815281832054603e9091529120548691908161400a57fe5b6001600160a01b038981166000908152603f602090815260408083208054969095049690960290940190925591839052828120805489019055921682529020805485900390556001915061114e565b60008411801561406c57508260ff16600b145b1561415e576001600160a01b0385166000908152600b602052604090205460ff16151560011461409b57600080fd5b3360008181526043602052604090205485118015906140b8575060015b80156140d65750806001600160a01b0316866001600160a01b031614155b6140df57600080fd5b6001600160a01b0381166000908152604360209081526040808320546041909252909120548691908161410e57fe5b6001600160a01b038981166000908152604260209081526040808320805496909504969096029094019092556043909252828120805489019055921682529020805485900390556001915061114e565b60008411801561417157508260ff16600c145b15614263576001600160a01b0385166000908152600b602052604090205460ff1615156001146141a057600080fd5b3360008181526046602052604090205485118015906141bd575060015b80156141db5750806001600160a01b0316866001600160a01b031614155b6141e457600080fd5b6001600160a01b0381166000908152604660209081526040808320546044909252909120548691908161421357fe5b6001600160a01b038981166000908152604560209081526040808320805496909504969096029094019092556046909252828120805489019055921682529020805485900390556001915061114e565b60008411801561427657508260ff16600d145b15611eb6576001600160a01b0385166000908152600b602052604090205460ff1615156001146142a557600080fd5b3360008181526049602052604090205485118015906142c2575060015b80156142e05750806001600160a01b0316866001600160a01b031614155b6142e957600080fd5b6001600160a01b0381166000908152604960209081526040808320546047909252909120548691908161431857fe5b6001600160a01b038981166000908152604860209081526040808320805496909504969096029094019092556049909252828120805489019055921682529020805485900390556001915061114e565b336000818152604d6020908152604080832060019055601c825280832054835260138252808320938352929052908120546032830492830192908311156143e9576040805162461bcd60e51b815260206004820152601060248201526f2737ba1022b737bab3b4102a37b5b2b760811b604482015290519081900360640190fd5b336000908152604e6020526040902054928190039260ff1660011415614485576001600160a01b0384166000908152600b602052604090205460ff16151560011480156144455750336000908152600b602052604090205460ff165b614485576040805162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b2b6b132b960a11b604482015290519081900360640190fd5b336000908152601c60205260409020546144a0908590615aab565b336000818152601c6020908152604080832054808452601a835281842054601384528285208686528452828520549185526014845282852095855294909252822054848701936001600160a01b0316929190606490670de0b6b3a76400000204620f4240028161450c57fe5b6001600160a01b0384166000908152601560209081526040808320338452601c835281842054845290915281205492909104925090606490670de0b6b3a76400000204620f4240029050600082828161456157fe5b04905084810360136000601c6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000206000336001600160a01b03166001600160a01b031681526020019081526020016000208190555060186000601c6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000205460176000336001600160a01b03166001600160a01b031681526020019081526020016000206000601c6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000208190555060156000856001600160a01b03166001600160a01b031681526020019081526020016000206000601c6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000205460146000601c6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000206000336001600160a01b03166001600160a01b031681526020019081526020016000208190555087602060008b6001600160a01b03166001600160a01b031681526020019081526020016000205401602060008b6001600160a01b03166001600160a01b03168152602001908152602001600020819055508460206000336001600160a01b03166001600160a01b03168152602001908152602001600020600082825403925050819055508760136000601c6000336001600160a01b03166001600160a01b0316815260200190815260200160002054815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020540160136000601c6000336001600160a01b03166001600160a01b0316815260200190815260200160002054815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000208190555061486388615ccc565b50336000818152604d6020908152604080832092909255815188815291516001600160a01b038d169392600080516020615ebb83398151915292908290030190a350600198975050505050505050565b6001600160a01b0381166000908152600b602052604081205460ff16151560011415610e5f57506001610d0c565b6002547f8adaf30a32e175223a541ea69cb2b09c2c40a4d36e64529c0f6beadb1c53c39a80546101009092046001600160a01b03166001600160a01b03199092169190911790557f06bf4f473cd4d79aeae5cc8a0fd75c96c8059dbaf2acb4ee39656932ba19d088805460ff1990811660019081179092557fb59699a9cea9f863f36e0a923ebfd5f0847e8fb1fe47054d2d6153b45dfa8a9a8054821683179055600b6020527fc45d82828750119522c9307dff926298e79e42dc1ca6db7b577de46b8dc0eee380548216831790557fcfdfa7a74fc69c8acf707c0e03a2554a8f00d00256a00a3dea229280c13857e980548216831790557f4b267af3f0dfbd536d7896a46bb5d26bbbe9d2eb0a055c030795afbd71401cef80547fee753d54f10e412ae5c0c9c28e15517f8be876c9fc4a5258e3a1a4fe4ef494e180548416851790557f414c01b0e1c457381b945f39ecdc404df7574df9f5532096d38bcf7cc2f124a680548416851790557fa5a82e149ce51ab04b4fe1e6c1748f7b8d0abf93d935bcd091955094674f54e180548416851790557fbc69becb0584bcf7ba8ff96e8f832bcaf67a100ed011a4ccdfe7316623e6cf7480548416851790557fb80ece3fab54663a86e760d03e27704c916ecf1cf28942dbe1c0a0d7059864a280548416851790557f485614bb00bf0bcdac2415f00acee3b8efbe61d3bbec9efc7012a8047e28354380548416851790557f7ac182010849aa3a3a110ddca0183dad74dc4eea98579c3dcec398209a212f3380548416851790558216831782168317905573a1ff1474e0a5db4801e426289db485b456de78826000527f99cce137e674a1cebb7eda315c06102539f6384af5d215fda3b212ced31f629f80549091169091179055565b336000818152601c6020908152604080832054808452601383528184208585529092529091205490918390614b9f9084615aab565b808210158015614bbc5750336000908152604d6020526040902054155b15614d73576000838152601a60209081526040808320546001600160a01b0316835260158252808320868452909152812054606490670de0b6b3a764000002336000908152600b6020526040902054919004915060ff1615156001148015614c245750600085115b614c75576040805162461bcd60e51b815260206004820152601760248201527f4d656d626572206f7220476c6f62616c42616c616e6365000000000000000000604482015290519081900360640190fd5b336000818152604d6020818152604080842060018155600080516020615e9b833981519152835281852080548c01905589855260138352818520868652835281852080548c900390558985526019835281852080548c0190557f8adaf30a32e175223a541ea69cb2b09c2c40a4d36e64529c0f6beadb1c53c39a546001600160a01b03168552601583528185208a86528352818520548686527f1cfd05295e1e2807b17860e3f753be2d73e143637c711d96503fa979b987fe6584528286205592825292909155815185815291517ff7b36fc0cca27666847afc93af0117fec37ce4f9ebc576a0e44d0de76e02e4f19281900390910190a250614dad565b50604080516000808252915133917ff7b36fc0cca27666847afc93af0117fec37ce4f9ebc576a0e44d0de76e02e4f1919081900360200190a25b50505050565b60009182526014602090815260408084206001600160a01b0393909316845291905290205490565b6001600160a01b0381166000908152600c602052604081205460ff16151560011415610e5f57506001610d0c565b336000818152600e602052604090205460ff161515600114614e2a57600080fd5b336001600160a01b0384161415614e4057600080fd5b6001600160a01b0383166000818152600e6020908152604091829020805460ff19168615159081179091558251908152915133927f8a13a3fa731d6813da1e5db0e97f4533f20e170440daff4893342b5ac23dfbf092908290030190a3505050565b336000818152600b602052604081205490919060ff161515600114614ec657600080fd5b82518390614ed85750600091506135a7565b5050506020015190565b336000908152604d60205260408120548190158015614f05575060038360ff1611155b8015614f15575060018360ff1610155b15614f5657614f243385615aab565b5050336000908152601c60208181526040808420868155604e83529320805460ff191660ff861617905552548161211f565b5050336000908152601c60205260409020548161211f565b336000818152600b602052604081205490919060ff161515600114614f9257600080fd5b50506001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b336000818152600d60205260408120549091829160ff161515600114614fe457600080fd5b336000908152601d60209081526040808320546001600160a01b038916845260128352818420818552909252909120805460ff19166519db1bd8985b60d21b90921415918217905561503557600080fd5b6001600160a01b038516331461567c576001600160a01b0385166000818152601560209081526040808320338452601d835281842054808552908352818420549484526016835281842090845282528220929092556519db1bd8985b60d21b9052601890527f5e9c3923fcbb6c6646f9350fb33018bda332eb599a8c05e055499c2065cf0cfc541580156150e35750336000908152601d602090815260408083205483526019909152902054155b1561512c576001600160a01b0385166000908152601660209081526040808320338452601d83528184208054855290835281842088905554835260199091529020805460010190555b6001600160a01b0385166000818152601560209081526040808320338452601d83528184208054855290835281842089905554808452601983528184205494845260168352818420908452909152812054909190606490670de0b6b3a76400000204620f4240028161519a57fe5b6001600160a01b0388166000908152601560209081526040808320338452601d8352818420548452909152812054929091049250908290606490670de0b6b3a76400000204620f424002816151eb57fe5b336000908152601d60209081526040808320805484526019808452828520805497909604958690556003546001600160a01b03168552601584528285206519db1bd8985b60d21b80875281865284872080549454885292865293862054938652909352670de0b6b3a764000060648088028290049381028290048301939093039093556053549496509391840204620f4240028161528557fe5b6003546001600160a01b031660009081526015602090815260408083206519db1bd8985b60d21b845290915290205491900491508190606490670de0b6b3a76400000204620f424002816152d557fe5b0460538190555088601b6000601d6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000208190555088601560008c6001600160a01b03166001600160a01b031681526020019081526020016000206000601d6000336001600160a01b03166001600160a01b03168152602001908152602001600020548152602001908152602001600020819055506000601560008c6001600160a01b03166001600160a01b031681526020019081526020016000206000601d6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000205490506000601660008d6001600160a01b03166001600160a01b031681526020019081526020016000206000601d6000336001600160a01b03166001600160a01b03168152602001908152602001600020548152602001908152602001600020549050808b830103601560008e6001600160a01b03166001600160a01b031681526020019081526020016000206000601d6000336001600160a01b03166001600160a01b0316815260200190815260200160002054815260200190815260200160002081905550600160186000601d6000336001600160a01b03166001600160a01b03168152602001908152602001600020548152602001908152602001600020600082825401925050819055506001601860006519db1bd8985b60d21b60001b8152602001908152602001600020600082825401925050819055506064601560008e6001600160a01b03166001600160a01b031681526020019081526020016000206000601d6000336001600160a01b03166001600160a01b0316815260200190815260200160002054815260200190815260200160002054670de0b6b3a7640000028161558157fe5b6001600160a01b038e8116600090815260166020908152604080832033808552601d84528285208054865291845282852054605180546064670de0b6b3a76400009093029290920490910398909704979097019095559354808352601a8252848320549093168252601581528382208383528152908390205483519283529082015281517fbb5f3a98b075980e08be27de702c2bb71c59930a36b0d28fbaf0030a9b714959929181900390910190a25050336000908152601d6020908152604080832054808452601a8352818420546001600160a01b03168452601583528184209084529091529020549750600196506156bc945050505050565b336000908152601d6020908152604080832054808452601a8352818420546001600160a01b03168452601583528184209084529091529020549250600291505b509250929050565b336000818152600d602052604081205490919060ff1615156001146156e857600080fd5b60019350336000908152601d6020526040902054831461570757600080fd5b6001600160a01b03851660008181526012602090815260408083208784528252808320805460ff1916891515908117909155601a83529281902080546001600160a01b03191690941790935560188152825186815290810191909152815133927f215e8044146f1415ce2971887d448a2a573c47c3c1179eda369be24ad7e511b6928290030190a26001915061114e565b336000818152600b602052604081205490919060ff1615156001146157bc57600080fd5b6000838152601a60209081526040808320546001600160a01b038881168552601784528285208886528452828520546018909452919093205492169114801590615827575060008481526013602090815260408083206001600160a01b038916845290915290205415155b15615885576001600160a01b03811660008181526012602090815260408083208884528252808320805460ff19166001179055928252601581528282208783529052205461587157fe5b61587b8585615aab565b6001925050610e2a565b6002925050610e2a565b336000818152600b602052604081205490919060ff1615156001146158b357600080fd5b6001600160a01b0385166000908152600c602052604090205460ff16151560011480156158fd57506001600160a01b0383166000908152600d602052604090205460ff1615156001145b801561592657506001600160a01b0384166000908152600c602052604090205460ff1615156001145b61592f57600080fd5b336000818152602080526040902054683635c9adc5dea0000090811015615a24576001600160a01b038581166000908152600080516020615e9b833981519152602081815260408084208054600588049081019091558280528185208054820190558c86168552838352818520805482019055828052818520805490910190558a851684529181528183208054600a87049081019091558180528284208054909101905594909216808252601c855282822054825260138552828220908252845281812080548490039055838052818120805493909303909255600c90925220805460ff19166001908117909155915061114e565b60009350505061114e565b60003381670de0b6b3a7640000615a4583613156565b81615a4c57fe5b04905060018110615a60579150611e219050565b600092505050611e21565b6001600160a01b0382166000908152600b602052604081205460ff161515600114156115e55750336000908152601d602052604090208190556001611588565b6000818152601a6020908152604080832054601383528184206001600160a01b0387811686529084528285205460178552838620878752855283862054601890955292909420549316929091108015615b2557506001600160a01b0384166000908152601760209081526040808320868452909152902054155b15615b86576001600160a01b0380831660009081526015602090815260408083208784528252808320546014835281842094891680855294835281842055868352601882528083205493835260178252808320878452909152902055614dad565b6001600160a01b03841660009081526017602090815260408083208684528252808320546018909252909120541115614dad5760008381526014602090815260408083206001600160a01b03881684529091528120548290606490670de0b6b3a76400000204620f42400281615bf857fe5b6001600160a01b038516600090815260156020908152604080832089845290915281205492909104925090606490670de0b6b3a76400000204620f42400290506000828281615c4357fe5b60008881526013602090815260408083206001600160a01b03808e16808652918452828520969095049586905582805281842080549096018a90039095558a83526018825280832054858452601783528184208c85528352818420559289168252601581528282208a835281528282205460148252838320948352939052205550614dad915050565b60008115615ce7575060538054603283040190556001610d0c565b506000905080610d0c565b605180548201905560548054670de0b6b3a7640000909204918201905560558054820190556056805482019055605780548201905560588054820190556059805482019055605a805482019055605b805482019055605c805482019055605d805482019055605e805482019055605f805482019055606080548201905560528054600d9092029091019055600190565b6001600160a01b0393841660008181526025602090815260408083208054670de0b6b3a7640000909a04998a0190556028825280832080548a01905560045488168352602b825280832080548a019055928252602e815282822080548901905594861681526031855281812080548801905592851683526034845280832080548701905590841682526037835280822080548601905560055484168252603a835280822080548601905560085484168252603d835280822080548601905560095484168252808352808220805486019055600a5484168252604383528082208054860190556002546101009004841682526046835280822080548601905560075490931681526049909152208054909101905560019056fe7ccbd7b43422367c669064a1bbe3e6dab76b21a28a5b8782baec8892f4516fa8ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122095dc0c7b1ff41291792765e97a9611a19f8b80125522de60a30b0e68542be87064736f6c63430006060033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061030c5760003560e01c80635ed0063a1161019d578063b2a044aa116100e9578063dd62ed3e116100a2578063f02338371161007c578063f023383714610bba578063f3af266414610be6578063f574f04b14610c1e578063fa8de8ef14610c265761030c565b8063dd62ed3e14610b2c578063de006a0914610b5a578063edf8786114610b865761030c565b8063b2a044aa146109c3578063bc4aa86e146109e0578063c3c8e42714610a0c578063c9abf23214610a32578063cfb5192814610a60578063d6fe81ae14610b065761030c565b80639026dee8116101565780639c4c5e76116101305780639c4c5e7614610934578063a9059cbb14610969578063aaf2e5d814610995578063ac5ed7b7146109bb5761030c565b80639026dee8146108e95780639201de551461090f57806395d89b411461092c5761030c565b80635ed0063a146107cd57806361541ea0146107f357806370a082311461085257806380d3c46e14610878578063822454611461089e57806387a39673146108cc5761030c565b80631cda9e591161025c57806331a8743c11610215578063385e14c9116101ef578063385e14c9146106ea5780634215ca041461073c5780635290b321146107705780635a9ee20c1461079e5761030c565b806331a8743c1461064f57806331d28df11461068357806332cc3aad146106cd5761030c565b80631cda9e591461056257806323b872dd1461058e5780632403ba53146105c45780632aea5807146105fd5780632cf06ba814610629578063313ce567146106315761030c565b80630989d589116102c957806310a5d828116102a357806310a5d828146104e257806312a72d021461050857806315bc5ab51461053457806318160ddd1461055a5761030c565b80630989d589146104885780630ad2ae9b146104905780630dc7faa2146104c25761030c565b806301c4e0941461031157806304738f591461034157806306fdde0314610379578063076ccb8f146103f657806308c2de9514610436578063095ea7b31461045c575b600080fd5b61033f6004803603604081101561032757600080fd5b506001600160a01b0381351690602001351515610c52565b005b6103676004803603602081101561035757600080fd5b50356001600160a01b0316610cf2565b60408051918252519081900360200190f35b610381610d11565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103bb5781810151838201526020016103a3565b50505050905090810190601f1680156103e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104226004803603604081101561040c57600080fd5b506001600160a01b038135169060200135610d9f565b604080519115158252519081900360200190f35b6104226004803603602081101561044c57600080fd5b50356001600160a01b0316610e31565b6104226004803603604081101561047257600080fd5b506001600160a01b038135169060200135610e67565b61033f610f06565b610367600480360360608110156104a657600080fd5b506001600160a01b038135169060208101359060400135611062565b61033f600480360360208110156104d857600080fd5b503560ff16611156565b610367600480360360208110156104f857600080fd5b50356001600160a01b0316611549565b6103676004803603604081101561051e57600080fd5b506001600160a01b038135169060200135611564565b6103676004803603602081101561054a57600080fd5b50356001600160a01b031661158e565b6103676115b6565b6103676004803603604081101561057857600080fd5b506001600160a01b0381351690602001356115bc565b610422600480360360608110156105a457600080fd5b506001600160a01b038135811691602081013590911690604001356115ed565b6105e1600480360360208110156105da57600080fd5b5035611b6e565b604080516001600160a01b039092168252519081900360200190f35b6104226004803603604081101561061357600080fd5b50803590602001356001600160a01b0316611b89565b610367611e1d565b610639611e24565b6040805160ff9092168252519081900360200190f35b6104226004803603606081101561066557600080fd5b506001600160a01b0381351690602081013515159060400135611e2d565b6106b26004803603604081101561069957600080fd5b5080356001600160a01b0316906020013560ff16611ebf565b6040805192835260ff90911660208301528051918290030190f35b610367600480360360208110156106e357600080fd5b5035612126565b61033f600480360360e081101561070057600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a08201359160c0013516612138565b6104226004803603606081101561075257600080fd5b506001600160a01b03813516906020810135151590604001356125c8565b61033f6004803603604081101561078657600080fd5b506001600160a01b0381351690602001351515612651565b610367600480360360408110156107b457600080fd5b5080356001600160a01b0316906020013560ff16612746565b610367600480360360208110156107e357600080fd5b50356001600160a01b0316613004565b61033f600480360361010081101561080a57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c082013581169160e001351661301f565b6103676004803603602081101561086857600080fd5b50356001600160a01b0316613156565b6103676004803603602081101561088e57600080fd5b50356001600160a01b0316613170565b61033f600480360360408110156108b457600080fd5b506001600160a01b03813516906020013515156131b8565b61033f600480360360208110156108e257600080fd5b5035613251565b610422600480360360208110156108ff57600080fd5b50356001600160a01b031661344c565b6103816004803603602081101561092557600080fd5b503561347a565b6103816135ad565b6104226004803603606081101561094a57600080fd5b5080356001600160a01b0316906020810135906040013560ff16613607565b6104226004803603604081101561097f57600080fd5b506001600160a01b038135169060200135614368565b610422600480360360208110156109ab57600080fd5b50356001600160a01b03166148b3565b61033f6148e1565b61033f600480360360208110156109d957600080fd5b5035614b6a565b610367600480360360408110156109f657600080fd5b50803590602001356001600160a01b0316614db3565b61042260048036036020811015610a2257600080fd5b50356001600160a01b0316614ddb565b61033f60048036036040811015610a4857600080fd5b506001600160a01b0381351690602001351515614e09565b61036760048036036020811015610a7657600080fd5b810190602081018135640100000000811115610a9157600080fd5b820183602082011115610aa357600080fd5b80359060200191846001830284011164010000000083111715610ac557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550614ea2945050505050565b6106b260048036036040811015610b1c57600080fd5b508035906020013560ff16614ee2565b61036760048036036040811015610b4257600080fd5b506001600160a01b0381358116916020013516614f6e565b6106b260048036036040811015610b7057600080fd5b506001600160a01b038135169060200135614fbf565b61042260048036036060811015610b9c57600080fd5b506001600160a01b03813516906020810135151590604001356156c4565b61063960048036036040811015610bd057600080fd5b506001600160a01b038135169060200135615798565b61042260048036036060811015610bfc57600080fd5b506001600160a01b03813581169160208101358216916040909101351661588f565b610367615a2f565b61042260048036036040811015610c3c57600080fd5b506001600160a01b038135169060200135615a6b565b336000818152600d602052604090205460ff161515600114610c7357600080fd5b6001600160a01b0383166000818152600c60209081526040808320805460ff1916871515908117909155604c8352818420849055604b8352818420849055604a83528184209390935580519283525133927f5a842b33eae3a18762b9b885e1bd64b7a1bb439d3c4cb4e45d09adf0fbbf5c2c92908290030190a3505050565b6001600160a01b0381166000908152601d60205260409020545b919050565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d975780601f10610d6c57610100808354040283529160200191610d97565b820191906000526020600020905b815481529060010190602001808311610d7a57829003601f168201915b505050505081565b336000818152600c602052604081205490919060ff161515600114610dc357600080fd5b6001600160a01b03841660008181526010602090815260408083208784528252808320805460ff19166001908117909155938352600b90915290205460ff1615151415610e2557336000908152601e6020526040902083905560019150610e2a565b600091505b5092915050565b6001600160a01b0381166000908152600d602052604081205460ff16151560011415610e5f57506001610d0c565b506000610d0c565b336000818152600b602052604081205490919060ff161515600114610e8b57600080fd5b6001600160a01b038416610e9e57600080fd5b336000818152600f602090815260408083206001600160a01b03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b336000908152600d602052604090205460ff1615156001148015610f625750336000908152601d6020908152604080832054808452601a8352818420546001600160a01b031684526012835281842090845290915290205460ff165b1561106057336000818152601d602090815260408083208054808552601a8452828520546001600160a01b039081168652601580865284872092875291855283862054600280546101009081900484168952600080516020615e9b833981519152885286892080546064670de0b6b3a764000095860281900491820190925596548a5260198952878a2080548801905560035485168a529488528689206519db1bd8985b60d21b8a5288528689208054958702939093049094019091558054839004821687528580529584902080548401905594548351838152935192969190049094169392600080516020615ebb833981519152928290030190a3505b565b336000818152600d602052604081205490919060ff16151560011461108657600080fd5b6001600160a01b03851660008181526011602090815260408083208884528252808320805460ff19166001908117909155938352600b90915290205460ff161515141561113157336000818152601d60209081526040808320889055604c82529182902080546001019055815187815290810186905281517fbb5f3a98b075980e08be27de702c2bb71c59930a36b0d28fbaf0030a9b714959929181900390910190a283915061114e565b336000908152604a60205260408120805460001901905592508391505b509392505050565b336000818152600b602052604090205460ff16151560011461117757600080fd5b336000600160ff851614156111b5576111903385612746565b6001600160a01b038316600090815260236020526040902080548201905590506114af565b8360ff16600214156111f0576111cb3385612746565b6001600160a01b038316600090815260266020526040902080548201905590506114af565b8360ff166003141561122b576112063385612746565b6001600160a01b038316600090815260296020526040902080548201905590506114af565b8360ff1660041415611266576112413385612746565b6001600160a01b0383166000908152602c6020526040902080548201905590506114af565b8360ff16600514156112a15761127c3385612746565b6001600160a01b0383166000908152602f6020526040902080548201905590506114af565b8360ff16600614156112dc576112b73385612746565b6001600160a01b038316600090815260326020526040902080548201905590506114af565b8360ff1660071415611317576112f23385612746565b6001600160a01b038316600090815260356020526040902080548201905590506114af565b8360ff166008141561138c5761132d3385612746565b6001600160a01b03831660009081526038602090815260408083208054850190557fc130dae904bad8b2e58e4eecb0fbb7871f491d9f0cb4d3e42d842886f7822c0e8252808320805485019055908052902080548201905590506114af565b8360ff16600914156113c7576113a23385612746565b6001600160a01b0383166000908152603b6020526040902080548201905590506114af565b8360ff16600a1415611402576113dd3385612746565b6001600160a01b0383166000908152603e6020526040902080548201905590506114af565b8360ff16600b141561143d576114183385612746565b6001600160a01b038316600090815260416020526040902080548201905590506114af565b8360ff16600c1415611478576114533385612746565b6001600160a01b038316600090815260446020526040902080548201905590506114af565b8360ff16600d14156114af5761148e3385612746565b6001600160a01b038316600090815260476020526040902080548201905590505b8360ff166008146114e6576001600160a01b0382166000908152600080516020615e9b833981519152602052604090208054820190555b6001600160a01b03821660008181526020808052604091829020805485019055815184815260ff88169181019190915281517f19df082c3c3f174884f7819415ba70fca9a7b1ab31aaba84818e516bf5fe6f01929181900390910190a250505050565b6001600160a01b03166000908152601f602052604090205490565b60008181526013602090815260408083206001600160a01b03861684529091529020545b92915050565b6001600160a01b03166000908152600080516020615e9b833981519152602052604090205490565b60515481565b6001600160a01b0382166000908152601560209081526040808320848452909152902054611588565b506000611588565b336000818152600b602052604081205490919060ff16151560011461161157600080fd5b6001600160a01b0385166000818152601c602090815260408083205480845260138352818420948452939091529020546032850485016116518884615aab565b808210611b62576001600160a01b0387166000908152600b6020526040902054339060ff16151560011480156116875750600087115b80156116a55750876001600160a01b0316896001600160a01b031614155b80156116d457506001600160a01b0389166000908152600f602090815260408083203384529091529020548211155b80156116e95750336001600160a01b038a1614155b80156117025750336000908152604d6020526040902054155b61170b57600080fd5b336000908152604d602052604090206001905561172787615ccc565b506001600160a01b03881660009081526020805260409020805488019055603287048701602060008b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254039250508190555060156000601a600087815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600085815260200190815260200160002054601460008681526020019081526020016000206000336001600160a01b03166001600160a01b031681526020019081526020016000208190555086600f60008b6001600160a01b03166001600160a01b031681526020019081526020016000206000336001600160a01b03166001600160a01b031681526020019081526020016000206000828254039250508190555081602260008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825401925050819055506000604d6000336001600160a01b03166001600160a01b03168152602001908152602001600020819055506000601a600086815260200190815260200160002060009054906101000a90046001600160a01b0316905060008990506000856064601460008a81526020019081526020016000206000856001600160a01b03166001600160a01b0316815260200190815260200160002054670de0b6b3a7640000028161194557fe5b04620f4240028161195257fe5b6001600160a01b03851660009081526015602090815260408083208c845290915281205492909104925090606490670de0b6b3a76400000204620f4240029050600082828161199d57fe5b0490508b8101601360008b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002081905550601860008a81526020019081526020016000205460176000866001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002081905550601b60008a815260200190815260200160002054601460008b81526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020819055508b601360008b815260200190815260200160002060008f6001600160a01b03166001600160a01b031681526020019081526020016000205401601360008b815260200190815260200160002060008f6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000604d6000336001600160a01b03166001600160a01b03168152602001908152602001600020819055508c6001600160a01b0316866001600160a01b0316600080516020615ebb833981519152896040518082815260200191505060405180910390a360019a5050505050505050505061114e565b6000945050505061114e565b6000908152601a60205260409020546001600160a01b031690565b336000818152600d602052604081205490919060ff161515600114611bad57600080fd5b336000818152601d602081815260408084205480855260138352818520601a8452828620546001600160a01b0316865283529084205494909352526064670de0b6b3a7640000870204918203906519db1bd8985b60d21b14611e12576001600160a01b0385166000908152601160209081526040808320338452601c835281842054845290915290205460ff1615156001148015611c885750336000908152601d6020908152604080832054808452601a8352818420546001600160a01b031684526012835281842090845290915290205460ff1615156001145b8015611cc0575060025461010090046001600160a01b03166000908152600080516020615e9b83398151915260205260409020548111155b8015611cca575060015b611cd357600080fd5b605180548390039055336000818152601d602090815260408083208054845260198352818420546003546001600160a01b039081168652601585528386206519db1bd8985b60d21b875285528386208054670de0b6b3a7640000606490940293909304909203909155815485526013808552838620601a8087528588205484168852908652848720548680528588208054919091039055835487528186528487208187528588205484168852865284872087905592548652845282852091845282852054811685529083528184205460025461010090049091168452600080516020615e9b8339815191528352928190208054938703909303909255815185815290810189905281517f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a929181900390910190a2600193505050610e2a565b600093505050610e2a565b6053545b90565b60025460ff1681565b336000818152600d602052604081205490919060ff161515600114611e5157600080fd5b336000908152601f6020526040902054831415611eb657336001600160a01b0386161415611e7e57600080fd5b6001600160a01b03851660009081526011602090815260408083208684529091529020805460ff19168515151790556001915061114e565b6000915061114e565b6000808260ff1660011415611ef05750506001600160a01b038216600090815260256020526040902054600161211f565b8260ff1660021415611f1e5750506001600160a01b038216600090815260286020526040902054600261211f565b8260ff1660031415611f4c5750506001600160a01b0382166000908152602b6020526040902054600361211f565b8260ff1660041415611f7a5750506001600160a01b0382166000908152602e6020526040902054600461211f565b8260ff1660051415611fa85750506001600160a01b038216600090815260316020526040902054600561211f565b8260ff1660061415611fd65750506001600160a01b038216600090815260346020526040902054600661211f565b8260ff16600714156120045750506001600160a01b038216600090815260376020526040902054600761211f565b8260ff16600814156120325750506001600160a01b0382166000908152603a6020526040902054600861211f565b8260ff16600914156120605750506001600160a01b0382166000908152603d6020526040902054600961211f565b8260ff16600a141561208e5750506001600160a01b038216600090815260406020819052902054600a61211f565b8260ff16600b14156120bc5750506001600160a01b038216600090815260436020526040902054600b61211f565b8260ff16600c14156120ea5750506001600160a01b038216600090815260466020526040902054600c61211f565b8260ff16600d14156121185750506001600160a01b038216600090815260496020526040902054600d61211f565b5060009050805b9250929050565b60009081526019602052604090205490565b336000818152600c602052604090205460ff16151560011461215957600080fd5b336000908152601d6020908152604080832054601e835281842054818552601a8452828520546001600160a01b03168552601584528285208286529093529220546064670de0b6b3a764000087020490861415612589576001600160a01b038a166000908152600b602052604090205460ff16151560011480156121df5750614e218b10155b80156121ee5750620186a08b11155b80156122035750336001600160a01b038b1614155b801561221d5750336000908152601d602052604090205483145b80156122375750336000908152601e602052604090205482145b61224057600080fd5b61224981615cf2565b508a816103e8028161225757fe5b6001600160a01b0387166000908152600080516020615e9b8339815191526020526040902080549290910490910190558a6103e882028161229457fe5b6001600160a01b0387166000908152602080526040902080549290910490910190556122c3818b8b8b8b615d82565b50600880546001600160a01b039081166000908152600080516020615e9b8339815191526020908152604080832080546161a8606489020490810190915560035485168452601583528184206519db1bd8985b60d21b855283528184208054650102babe147464174876e8008a02040190559454909316825280529081208054830190556608e1bc9bf04271655af3107a400084020490620186a08e026305f5e10085028161236e57fe5b04905080828503036013600088815260200190815260200160002060008f6001600160a01b03166001600160a01b0316815260200190815260200160002054016013600088815260200190815260200160002060008f6001600160a01b03166001600160a01b03168152602001908152602001600020819055508082850303602060008f6001600160a01b03166001600160a01b031681526020019081526020016000205401602060008f6001600160a01b03166001600160a01b03168152602001908152602001600020819055508082850303602160008f6001600160a01b03166001600160a01b03168152602001908152602001600020600082825401925050819055508082016019600088815260200190815260200160002060008282540192505081905550828203601360006519db1bd8985b60d21b60001b81526020019081526020016000206000600260019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206000828254019250508190555082820360206000600260019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600082825401925050819055508c6001600160a01b0316336001600160a01b0316600080516020615ebb833981519152866040518082815260200191505060405180910390a35050506125bb565b5060408051600080825291516001600160a01b038c16913391600080516020615ebb8339815191529181900360200190a35b5050505050505050505050565b336000818152600d602052604081205490919060ff1615156001146125ec57600080fd5b336000908152601d6020526040902054831415611eb657336001600160a01b038616141561261957600080fd5b6001600160a01b03851660009081526010602090815260408083208684529091529020805460ff19168515151790556001915061114e565b336000818152600e602052604090205460ff16151560011461267257600080fd5b336001600160a01b03841614156126c2576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b0383166000818152600d60209081526040808320805460ff191687151590811790915533808552604c8452828520859055604b8452828520859055604a845282852094909455815190815290517fd562498d05096e8752446b22351f39f5127bc5a0b49757ff3a3d5fbadc0cb42d929181900390910190a3505050565b60008160ff16600114156127fe576000605454600860026053548161276757fe5b048161276f57fe5b048161277757fe5b6001600160a01b03861660009081526025602090815260408083205460228352818420546021909352908320549490930494509192909160019081019101816127bc57fe5b6001600160a01b03881660009081526024602090815260408083205460239092529091205492909104910184840203816127f257fe5b04935061158892505050565b8160ff16600214156128a8576000605554600860026053548161281d57fe5b048161282557fe5b048161282d57fe5b6001600160a01b038616600090815260286020908152604080832054602283528184205460219093529083205494909304945091929091600190810191018161287257fe5b6001600160a01b03881660009081526027602090815260408083205460269092529091205492909104910184840203816127f257fe5b8160ff166003141561295257600060565460086002605354816128c757fe5b04816128cf57fe5b04816128d757fe5b6001600160a01b0386166000908152602b6020908152604080832054602283528184205460219093529083205494909304945091929091600190810191018161291c57fe5b6001600160a01b0388166000908152602a602090815260408083205460299092529091205492909104910184840203816127f257fe5b8160ff16600414156129fc576000605754600860026053548161297157fe5b048161297957fe5b048161298157fe5b6001600160a01b0386166000908152602e602090815260408083205460228352818420546021909352908320549490930494509192909160019081019101816129c657fe5b6001600160a01b0388166000908152602d6020908152604080832054602c9092529091205492909104910184840203816127f257fe5b8160ff1660051415612aa65760006058546008600260535481612a1b57fe5b0481612a2357fe5b0481612a2b57fe5b6001600160a01b0386166000908152603160209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612a7057fe5b6001600160a01b038816600090815260306020908152604080832054602f9092529091205492909104910184840203816127f257fe5b8160ff1660061415612b505760006059546008600260535481612ac557fe5b0481612acd57fe5b0481612ad557fe5b6001600160a01b0386166000908152603460209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612b1a57fe5b6001600160a01b03881660009081526033602090815260408083205460329092529091205492909104910184840203816127f257fe5b8160ff1660071415612bfa576000605a546008600260535481612b6f57fe5b0481612b7757fe5b0481612b7f57fe5b6001600160a01b0386166000908152603760209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612bc457fe5b6001600160a01b03881660009081526036602090815260408083205460359092529091205492909104910184840203816127f257fe5b8160ff1660081415612ca4576000605b546008600260535481612c1957fe5b0481612c2157fe5b0481612c2957fe5b6001600160a01b0386166000908152603a60209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612c6e57fe5b6001600160a01b03881660009081526039602090815260408083205460389092529091205492909104910184840203816127f257fe5b8160ff1660091415612d51576000605c546005600260535481612cc357fe5b0481612ccb57fe5b0460020281612cd657fe5b6001600160a01b0386166000908152603d60209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612d1b57fe5b6001600160a01b0388166000908152603c6020908152604080832054603b9092529091205492909104910184840203816127f257fe5b8160ff16600a1415612e06576000605d54602860535481612d6e57fe5b046005600260535481612d7d57fe5b0481612d8557fe5b040181612d8e57fe5b6001600160a01b0386166000908152604060208181528183205460228252828420546021909252918320549490930494509290916001908101910181612dd057fe5b6001600160a01b0388166000908152603f6020908152604080832054603e9092529091205492909104910184840203816127f257fe5b8160ff16600b1415612eb0576000605e546008600260535481612e2557fe5b0481612e2d57fe5b0481612e3557fe5b6001600160a01b0386166000908152604360209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612e7a57fe5b6001600160a01b03881660009081526042602090815260408083205460419092529091205492909104910184840203816127f257fe5b8160ff16600c1415612f5a576000605f546008600260535481612ecf57fe5b0481612ed757fe5b0481612edf57fe5b6001600160a01b0386166000908152604660209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612f2457fe5b6001600160a01b03881660009081526045602090815260408083205460449092529091205492909104910184840203816127f257fe5b8160ff16600d14156115e55760006060546008600260535481612f7957fe5b0481612f8157fe5b0481612f8957fe5b6001600160a01b0386166000908152604960209081526040808320546022835281842054602190935290832054949093049450919290916001908101910181612fce57fe5b6001600160a01b03881660009081526048602090815260408083205460479092529091205492909104910184840203816127f257fe5b6001600160a01b03166000908152601e602052604090205490565b336000818152600e602052604090205460ff16151560011461304057600080fd5b336000908152600e602052604090205460ff16613091576040805162461bcd60e51b815260206004820152600a60248201526941646d696e46616c736560b01b604482015290519081900360640190fd5b5060028054610100600160a81b0319166101006001600160a01b0395861602179055600480546001600160a01b03199081169285169290921790556005805482169284169290921790915560068054821693831693909317909255600780548316938216939093179092556008805482169383169390931790925560098054831693821693909317909255600a805490911692909116919091179055336000908152604c60209081526040808320839055604b8252808320839055604a909152812055565b6001600160a01b0316600090815260208052604090205490565b60006001600160a01b0382163314156131995750336000908152601c6020526040902054610d0c565b506001600160a01b0381166000908152601c6020526040902054610d0c565b336000818152600c602052604090205460ff1615156001146131d957600080fd5b336001600160a01b03841614156131ef57600080fd5b6001600160a01b0383166000818152600b6020908152604091829020805460ff19168615159081179091558251908152915133927f8cfdbf9b02b83c1504c3c6c0ebf7f515b071b2103b37b52fba37a39a23d33b0392908290030190a3505050565b336000818152600b602052604090205460ff16151560011461327257600080fd5b336000908152601c60209081526040808320548084526019835281842054601a8452828520546001600160a01b03168552601584528285208286529093529083205490929190606490670de0b6b3a76400000204039050836132d43384615aab565b8082101580156132f15750336000908152604d6020526040902054155b1561340b57336000908152600b602052604090205460ff161515600114801561331a5750600085115b61332357600080fd5b336000818152604d6020818152604080842060018155600080516020615e9b833981519152835281852080548c9003905588855260138352818520868652835281852080548c0190558885526019835281852080548c900390556003546001600160a01b03168552601583528185206519db1bd8985b60d21b86528352818520548686527f1cfd05295e1e2807b17860e3f753be2d73e143637c711d96503fa979b987fe6584528286205592825292909155815184815291517fdae8fce77474c1d5a6dabb90c77dc8185f2dfa9229889ddb3f9791d408b66d9a9281900390910190a2613445565b50604080516000808252915133917fdae8fce77474c1d5a6dabb90c77dc8185f2dfa9229889ddb3f9791d408b66d9a919081900360200190a25b5050505050565b6001600160a01b0381166000908152600e602052604081205460ff16151560011415610e5f57506001610d0c565b336000818152600b60205260409020546060919060ff16151560011461349f57600080fd5b60005b60208160ff161080156134d05750838160ff16602081106134bf57fe5b1a60f81b6001600160f81b03191615155b156134dd576001016134a2565b60608160ff1667ffffffffffffffff811180156134f957600080fd5b506040519080825280601f01601f191660200182016040528015613524576020820181803683370190505b509050600091505b60208260ff1610801561355a5750848260ff166020811061354957fe5b1a60f81b6001600160f81b03191615155b156135a357848260ff166020811061356e57fe5b1a60f81b818360ff168151811061358157fe5b60200101906001600160f81b031916908160001a90535060019091019061352c565b9250505b50919050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d975780601f10610d6c57610100808354040283529160200191610d97565b336000818152600b602052604081205490919060ff16151560011461362b57600080fd5b60008411801561363e57508260ff166001145b15613730576001600160a01b0385166000908152600b602052604090205460ff16151560011461366d57600080fd5b33600081815260256020526040902054851180159061368a575060015b80156136a85750806001600160a01b0316866001600160a01b031614155b6136b157600080fd5b6001600160a01b038116600090815260256020908152604080832054602390925290912054869190816136e057fe5b6001600160a01b038981166000908152602460209081526040808320805496909504969096029094019092556025909252828120805489019055921682529020805485900390556001915061114e565b60008411801561374357508260ff166002145b15613835576001600160a01b0385166000908152600b602052604090205460ff16151560011461377257600080fd5b33600081815260286020526040902054851180159061378f575060015b80156137ad5750806001600160a01b0316866001600160a01b031614155b6137b657600080fd5b6001600160a01b038116600090815260286020908152604080832054602690925290912054869190816137e557fe5b6001600160a01b038981166000908152602760209081526040808320805496909504969096029094019092556028909252828120805489019055921682529020805485900390556001915061114e565b60008411801561384857508260ff166003145b1561393a576001600160a01b0385166000908152600b602052604090205460ff16151560011461387757600080fd5b336000818152602b60205260409020548511801590613894575060015b80156138b25750806001600160a01b0316866001600160a01b031614155b6138bb57600080fd5b6001600160a01b0381166000908152602b6020908152604080832054602990925290912054869190816138ea57fe5b6001600160a01b038981166000908152602a6020908152604080832080549690950496909602909401909255602b909252828120805489019055921682529020805485900390556001915061114e565b60008411801561394d57508260ff166004145b15613a3f576001600160a01b0385166000908152600b602052604090205460ff16151560011461397c57600080fd5b336000818152602e60205260409020548511801590613999575060015b80156139b75750806001600160a01b0316866001600160a01b031614155b6139c057600080fd5b6001600160a01b0381166000908152602e6020908152604080832054602c90925290912054869190816139ef57fe5b6001600160a01b038981166000908152602d6020908152604080832080549690950496909602909401909255602e909252828120805489019055921682529020805485900390556001915061114e565b600084118015613a5257508260ff166005145b15613b44576001600160a01b0385166000908152600b602052604090205460ff161515600114613a8157600080fd5b336000818152603160205260409020548511801590613a9e575060015b8015613abc5750806001600160a01b0316866001600160a01b031614155b613ac557600080fd5b6001600160a01b038116600090815260316020908152604080832054602f9092529091205486919081613af457fe5b6001600160a01b038981166000908152603060209081526040808320805496909504969096029094019092556031909252828120805489019055921682529020805485900390556001915061114e565b600084118015613b5757508260ff166006145b15613c49576001600160a01b0385166000908152600b602052604090205460ff161515600114613b8657600080fd5b336000818152603460205260409020548511801590613ba3575060015b8015613bc15750806001600160a01b0316866001600160a01b031614155b613bca57600080fd5b6001600160a01b03811660009081526034602090815260408083205460329092529091205486919081613bf957fe5b6001600160a01b038981166000908152603360209081526040808320805496909504969096029094019092556034909252828120805489019055921682529020805485900390556001915061114e565b600084118015613c5c57508260ff166007145b15613d4e576001600160a01b0385166000908152600b602052604090205460ff161515600114613c8b57600080fd5b336000818152603760205260409020548511801590613ca8575060015b8015613cc65750806001600160a01b0316866001600160a01b031614155b613ccf57600080fd5b6001600160a01b03811660009081526037602090815260408083205460359092529091205486919081613cfe57fe5b6001600160a01b038981166000908152603660209081526040808320805496909504969096029094019092556037909252828120805489019055921682529020805485900390556001915061114e565b600084118015613d6157508260ff166008145b15613e53576001600160a01b0385166000908152600b602052604090205460ff161515600114613d9057600080fd5b336000818152603a60205260409020548511801590613dad575060015b8015613dcb5750806001600160a01b0316866001600160a01b031614155b613dd457600080fd5b6001600160a01b0381166000908152603a602090815260408083205460389092529091205486919081613e0357fe5b6001600160a01b03898116600090815260396020908152604080832080549690950496909602909401909255603a909252828120805489019055921682529020805485900390556001915061114e565b600084118015613e6657508260ff166009145b15613f58576001600160a01b0385166000908152600b602052604090205460ff161515600114613e9557600080fd5b336000818152603d60205260409020548511801590613eb2575060015b8015613ed05750806001600160a01b0316866001600160a01b031614155b613ed957600080fd5b6001600160a01b0381166000908152603d6020908152604080832054603b9092529091205486919081613f0857fe5b6001600160a01b038981166000908152603c6020908152604080832080549690950496909602909401909255603d909252828120805489019055921682529020805485900390556001915061114e565b600084118015613f6b57508260ff16600a145b15614059576001600160a01b0385166000908152600b602052604090205460ff161515600114613f9a57600080fd5b336000818152604060208190529020548511801590613fb7575060015b8015613fd55750806001600160a01b0316866001600160a01b031614155b613fde57600080fd5b6001600160a01b03811660009081526040602081815281832054603e9091529120548691908161400a57fe5b6001600160a01b038981166000908152603f602090815260408083208054969095049690960290940190925591839052828120805489019055921682529020805485900390556001915061114e565b60008411801561406c57508260ff16600b145b1561415e576001600160a01b0385166000908152600b602052604090205460ff16151560011461409b57600080fd5b3360008181526043602052604090205485118015906140b8575060015b80156140d65750806001600160a01b0316866001600160a01b031614155b6140df57600080fd5b6001600160a01b0381166000908152604360209081526040808320546041909252909120548691908161410e57fe5b6001600160a01b038981166000908152604260209081526040808320805496909504969096029094019092556043909252828120805489019055921682529020805485900390556001915061114e565b60008411801561417157508260ff16600c145b15614263576001600160a01b0385166000908152600b602052604090205460ff1615156001146141a057600080fd5b3360008181526046602052604090205485118015906141bd575060015b80156141db5750806001600160a01b0316866001600160a01b031614155b6141e457600080fd5b6001600160a01b0381166000908152604660209081526040808320546044909252909120548691908161421357fe5b6001600160a01b038981166000908152604560209081526040808320805496909504969096029094019092556046909252828120805489019055921682529020805485900390556001915061114e565b60008411801561427657508260ff16600d145b15611eb6576001600160a01b0385166000908152600b602052604090205460ff1615156001146142a557600080fd5b3360008181526049602052604090205485118015906142c2575060015b80156142e05750806001600160a01b0316866001600160a01b031614155b6142e957600080fd5b6001600160a01b0381166000908152604960209081526040808320546047909252909120548691908161431857fe5b6001600160a01b038981166000908152604860209081526040808320805496909504969096029094019092556049909252828120805489019055921682529020805485900390556001915061114e565b336000818152604d6020908152604080832060019055601c825280832054835260138252808320938352929052908120546032830492830192908311156143e9576040805162461bcd60e51b815260206004820152601060248201526f2737ba1022b737bab3b4102a37b5b2b760811b604482015290519081900360640190fd5b336000908152604e6020526040902054928190039260ff1660011415614485576001600160a01b0384166000908152600b602052604090205460ff16151560011480156144455750336000908152600b602052604090205460ff165b614485576040805162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b2b6b132b960a11b604482015290519081900360640190fd5b336000908152601c60205260409020546144a0908590615aab565b336000818152601c6020908152604080832054808452601a835281842054601384528285208686528452828520549185526014845282852095855294909252822054848701936001600160a01b0316929190606490670de0b6b3a76400000204620f4240028161450c57fe5b6001600160a01b0384166000908152601560209081526040808320338452601c835281842054845290915281205492909104925090606490670de0b6b3a76400000204620f4240029050600082828161456157fe5b04905084810360136000601c6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000206000336001600160a01b03166001600160a01b031681526020019081526020016000208190555060186000601c6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000205460176000336001600160a01b03166001600160a01b031681526020019081526020016000206000601c6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000208190555060156000856001600160a01b03166001600160a01b031681526020019081526020016000206000601c6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000205460146000601c6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000206000336001600160a01b03166001600160a01b031681526020019081526020016000208190555087602060008b6001600160a01b03166001600160a01b031681526020019081526020016000205401602060008b6001600160a01b03166001600160a01b03168152602001908152602001600020819055508460206000336001600160a01b03166001600160a01b03168152602001908152602001600020600082825403925050819055508760136000601c6000336001600160a01b03166001600160a01b0316815260200190815260200160002054815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020540160136000601c6000336001600160a01b03166001600160a01b0316815260200190815260200160002054815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000208190555061486388615ccc565b50336000818152604d6020908152604080832092909255815188815291516001600160a01b038d169392600080516020615ebb83398151915292908290030190a350600198975050505050505050565b6001600160a01b0381166000908152600b602052604081205460ff16151560011415610e5f57506001610d0c565b6002547f8adaf30a32e175223a541ea69cb2b09c2c40a4d36e64529c0f6beadb1c53c39a80546101009092046001600160a01b03166001600160a01b03199092169190911790557f06bf4f473cd4d79aeae5cc8a0fd75c96c8059dbaf2acb4ee39656932ba19d088805460ff1990811660019081179092557fb59699a9cea9f863f36e0a923ebfd5f0847e8fb1fe47054d2d6153b45dfa8a9a8054821683179055600b6020527fc45d82828750119522c9307dff926298e79e42dc1ca6db7b577de46b8dc0eee380548216831790557fcfdfa7a74fc69c8acf707c0e03a2554a8f00d00256a00a3dea229280c13857e980548216831790557f4b267af3f0dfbd536d7896a46bb5d26bbbe9d2eb0a055c030795afbd71401cef80547fee753d54f10e412ae5c0c9c28e15517f8be876c9fc4a5258e3a1a4fe4ef494e180548416851790557f414c01b0e1c457381b945f39ecdc404df7574df9f5532096d38bcf7cc2f124a680548416851790557fa5a82e149ce51ab04b4fe1e6c1748f7b8d0abf93d935bcd091955094674f54e180548416851790557fbc69becb0584bcf7ba8ff96e8f832bcaf67a100ed011a4ccdfe7316623e6cf7480548416851790557fb80ece3fab54663a86e760d03e27704c916ecf1cf28942dbe1c0a0d7059864a280548416851790557f485614bb00bf0bcdac2415f00acee3b8efbe61d3bbec9efc7012a8047e28354380548416851790557f7ac182010849aa3a3a110ddca0183dad74dc4eea98579c3dcec398209a212f3380548416851790558216831782168317905573a1ff1474e0a5db4801e426289db485b456de78826000527f99cce137e674a1cebb7eda315c06102539f6384af5d215fda3b212ced31f629f80549091169091179055565b336000818152601c6020908152604080832054808452601383528184208585529092529091205490918390614b9f9084615aab565b808210158015614bbc5750336000908152604d6020526040902054155b15614d73576000838152601a60209081526040808320546001600160a01b0316835260158252808320868452909152812054606490670de0b6b3a764000002336000908152600b6020526040902054919004915060ff1615156001148015614c245750600085115b614c75576040805162461bcd60e51b815260206004820152601760248201527f4d656d626572206f7220476c6f62616c42616c616e6365000000000000000000604482015290519081900360640190fd5b336000818152604d6020818152604080842060018155600080516020615e9b833981519152835281852080548c01905589855260138352818520868652835281852080548c900390558985526019835281852080548c0190557f8adaf30a32e175223a541ea69cb2b09c2c40a4d36e64529c0f6beadb1c53c39a546001600160a01b03168552601583528185208a86528352818520548686527f1cfd05295e1e2807b17860e3f753be2d73e143637c711d96503fa979b987fe6584528286205592825292909155815185815291517ff7b36fc0cca27666847afc93af0117fec37ce4f9ebc576a0e44d0de76e02e4f19281900390910190a250614dad565b50604080516000808252915133917ff7b36fc0cca27666847afc93af0117fec37ce4f9ebc576a0e44d0de76e02e4f1919081900360200190a25b50505050565b60009182526014602090815260408084206001600160a01b0393909316845291905290205490565b6001600160a01b0381166000908152600c602052604081205460ff16151560011415610e5f57506001610d0c565b336000818152600e602052604090205460ff161515600114614e2a57600080fd5b336001600160a01b0384161415614e4057600080fd5b6001600160a01b0383166000818152600e6020908152604091829020805460ff19168615159081179091558251908152915133927f8a13a3fa731d6813da1e5db0e97f4533f20e170440daff4893342b5ac23dfbf092908290030190a3505050565b336000818152600b602052604081205490919060ff161515600114614ec657600080fd5b82518390614ed85750600091506135a7565b5050506020015190565b336000908152604d60205260408120548190158015614f05575060038360ff1611155b8015614f15575060018360ff1610155b15614f5657614f243385615aab565b5050336000908152601c60208181526040808420868155604e83529320805460ff191660ff861617905552548161211f565b5050336000908152601c60205260409020548161211f565b336000818152600b602052604081205490919060ff161515600114614f9257600080fd5b50506001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b336000818152600d60205260408120549091829160ff161515600114614fe457600080fd5b336000908152601d60209081526040808320546001600160a01b038916845260128352818420818552909252909120805460ff19166519db1bd8985b60d21b90921415918217905561503557600080fd5b6001600160a01b038516331461567c576001600160a01b0385166000818152601560209081526040808320338452601d835281842054808552908352818420549484526016835281842090845282528220929092556519db1bd8985b60d21b9052601890527f5e9c3923fcbb6c6646f9350fb33018bda332eb599a8c05e055499c2065cf0cfc541580156150e35750336000908152601d602090815260408083205483526019909152902054155b1561512c576001600160a01b0385166000908152601660209081526040808320338452601d83528184208054855290835281842088905554835260199091529020805460010190555b6001600160a01b0385166000818152601560209081526040808320338452601d83528184208054855290835281842089905554808452601983528184205494845260168352818420908452909152812054909190606490670de0b6b3a76400000204620f4240028161519a57fe5b6001600160a01b0388166000908152601560209081526040808320338452601d8352818420548452909152812054929091049250908290606490670de0b6b3a76400000204620f424002816151eb57fe5b336000908152601d60209081526040808320805484526019808452828520805497909604958690556003546001600160a01b03168552601584528285206519db1bd8985b60d21b80875281865284872080549454885292865293862054938652909352670de0b6b3a764000060648088028290049381028290048301939093039093556053549496509391840204620f4240028161528557fe5b6003546001600160a01b031660009081526015602090815260408083206519db1bd8985b60d21b845290915290205491900491508190606490670de0b6b3a76400000204620f424002816152d557fe5b0460538190555088601b6000601d6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000208190555088601560008c6001600160a01b03166001600160a01b031681526020019081526020016000206000601d6000336001600160a01b03166001600160a01b03168152602001908152602001600020548152602001908152602001600020819055506000601560008c6001600160a01b03166001600160a01b031681526020019081526020016000206000601d6000336001600160a01b03166001600160a01b031681526020019081526020016000205481526020019081526020016000205490506000601660008d6001600160a01b03166001600160a01b031681526020019081526020016000206000601d6000336001600160a01b03166001600160a01b03168152602001908152602001600020548152602001908152602001600020549050808b830103601560008e6001600160a01b03166001600160a01b031681526020019081526020016000206000601d6000336001600160a01b03166001600160a01b0316815260200190815260200160002054815260200190815260200160002081905550600160186000601d6000336001600160a01b03166001600160a01b03168152602001908152602001600020548152602001908152602001600020600082825401925050819055506001601860006519db1bd8985b60d21b60001b8152602001908152602001600020600082825401925050819055506064601560008e6001600160a01b03166001600160a01b031681526020019081526020016000206000601d6000336001600160a01b03166001600160a01b0316815260200190815260200160002054815260200190815260200160002054670de0b6b3a7640000028161558157fe5b6001600160a01b038e8116600090815260166020908152604080832033808552601d84528285208054865291845282852054605180546064670de0b6b3a76400009093029290920490910398909704979097019095559354808352601a8252848320549093168252601581528382208383528152908390205483519283529082015281517fbb5f3a98b075980e08be27de702c2bb71c59930a36b0d28fbaf0030a9b714959929181900390910190a25050336000908152601d6020908152604080832054808452601a8352818420546001600160a01b03168452601583528184209084529091529020549750600196506156bc945050505050565b336000908152601d6020908152604080832054808452601a8352818420546001600160a01b03168452601583528184209084529091529020549250600291505b509250929050565b336000818152600d602052604081205490919060ff1615156001146156e857600080fd5b60019350336000908152601d6020526040902054831461570757600080fd5b6001600160a01b03851660008181526012602090815260408083208784528252808320805460ff1916891515908117909155601a83529281902080546001600160a01b03191690941790935560188152825186815290810191909152815133927f215e8044146f1415ce2971887d448a2a573c47c3c1179eda369be24ad7e511b6928290030190a26001915061114e565b336000818152600b602052604081205490919060ff1615156001146157bc57600080fd5b6000838152601a60209081526040808320546001600160a01b038881168552601784528285208886528452828520546018909452919093205492169114801590615827575060008481526013602090815260408083206001600160a01b038916845290915290205415155b15615885576001600160a01b03811660008181526012602090815260408083208884528252808320805460ff19166001179055928252601581528282208783529052205461587157fe5b61587b8585615aab565b6001925050610e2a565b6002925050610e2a565b336000818152600b602052604081205490919060ff1615156001146158b357600080fd5b6001600160a01b0385166000908152600c602052604090205460ff16151560011480156158fd57506001600160a01b0383166000908152600d602052604090205460ff1615156001145b801561592657506001600160a01b0384166000908152600c602052604090205460ff1615156001145b61592f57600080fd5b336000818152602080526040902054683635c9adc5dea0000090811015615a24576001600160a01b038581166000908152600080516020615e9b833981519152602081815260408084208054600588049081019091558280528185208054820190558c86168552838352818520805482019055828052818520805490910190558a851684529181528183208054600a87049081019091558180528284208054909101905594909216808252601c855282822054825260138552828220908252845281812080548490039055838052818120805493909303909255600c90925220805460ff19166001908117909155915061114e565b60009350505061114e565b60003381670de0b6b3a7640000615a4583613156565b81615a4c57fe5b04905060018110615a60579150611e219050565b600092505050611e21565b6001600160a01b0382166000908152600b602052604081205460ff161515600114156115e55750336000908152601d602052604090208190556001611588565b6000818152601a6020908152604080832054601383528184206001600160a01b0387811686529084528285205460178552838620878752855283862054601890955292909420549316929091108015615b2557506001600160a01b0384166000908152601760209081526040808320868452909152902054155b15615b86576001600160a01b0380831660009081526015602090815260408083208784528252808320546014835281842094891680855294835281842055868352601882528083205493835260178252808320878452909152902055614dad565b6001600160a01b03841660009081526017602090815260408083208684528252808320546018909252909120541115614dad5760008381526014602090815260408083206001600160a01b03881684529091528120548290606490670de0b6b3a76400000204620f42400281615bf857fe5b6001600160a01b038516600090815260156020908152604080832089845290915281205492909104925090606490670de0b6b3a76400000204620f42400290506000828281615c4357fe5b60008881526013602090815260408083206001600160a01b03808e16808652918452828520969095049586905582805281842080549096018a90039095558a83526018825280832054858452601783528184208c85528352818420559289168252601581528282208a835281528282205460148252838320948352939052205550614dad915050565b60008115615ce7575060538054603283040190556001610d0c565b506000905080610d0c565b605180548201905560548054670de0b6b3a7640000909204918201905560558054820190556056805482019055605780548201905560588054820190556059805482019055605a805482019055605b805482019055605c805482019055605d805482019055605e805482019055605f805482019055606080548201905560528054600d9092029091019055600190565b6001600160a01b0393841660008181526025602090815260408083208054670de0b6b3a7640000909a04998a0190556028825280832080548a01905560045488168352602b825280832080548a019055928252602e815282822080548901905594861681526031855281812080548801905592851683526034845280832080548701905590841682526037835280822080548601905560055484168252603a835280822080548601905560085484168252603d835280822080548601905560095484168252808352808220805486019055600a5484168252604383528082208054860190556002546101009004841682526046835280822080548601905560075490931681526049909152208054909101905560019056fe7ccbd7b43422367c669064a1bbe3e6dab76b21a28a5b8782baec8892f4516fa8ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122095dc0c7b1ff41291792765e97a9611a19f8b80125522de60a30b0e68542be87064736f6c63430006060033

Deployed Bytecode Sourcemap

768:90684:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;768:90684:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;74009:481:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;74009:481:0;;;;;;;;;;:::i;:::-;;74578:166;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;74578:166:0;-1:-1:-1;;;;;74578:166:0;;:::i;:::-;;;;;;;;;;;;;;;;4951:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4951:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71453:547;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;71453:547:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;50547:249;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;50547:249:0;-1:-1:-1;;;;;50547:249:0;;:::i;35548:319::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;35548:319:0;;;;;;;;:::i;69033:998::-;;;:::i;72145:842::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;72145:842:0;;;;;;;;;;;;;:::i;22281:3831::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22281:3831:0;;;;:::i;75169:172::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;75169:172:0;-1:-1:-1;;;;;75169:172:0;;:::i;77362:225::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;77362:225:0;;;;;;;;:::i;76990:241::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;76990:241:0;-1:-1:-1;;;;;76990:241:0;;:::i;14433:26::-;;;:::i;50870:357::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;50870:357:0;;;;;;;;:::i;32379:2889::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;32379:2889:0;;;;;;;;;;;;;;;;;:::i;51301:187::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;51301:187:0;;:::i;:::-;;;;-1:-1:-1;;;;;51301:187:0;;;;;;;;;;;;;;36517:2117;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36517:2117:0;;;;;;-1:-1:-1;;;;;36517:2117:0;;:::i;52345:247::-;;;:::i;5054:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;55533:515;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;55533:515:0;;;;;;;;;;;;;;;:::i;86071:1657::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;86071:1657:0;;-1:-1:-1;;;;;86071:1657:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;74844:255;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;74844:255:0;;:::i;65366:3655::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;65366:3655:0;;;-1:-1:-1;;;;;65366:3655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;54899:521::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;54899:521:0;;;;;;;;;;;;;;;:::i;54213:573::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;54213:573:0;;;;;;;;;;:::i;77764:8204::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;77764:8204:0;;-1:-1:-1;;;;;77764:8204:0;;;;;;;;:::i;75403:165::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;75403:165:0;-1:-1:-1;;;;;75403:165:0;;:::i;17253:1741::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17253:1741:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;76657:161::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;76657:161:0;-1:-1:-1;;;;;76657:161:0;;:::i;51944:334::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;51944:334:0;-1:-1:-1;;;;;51944:334:0;;:::i;75650:324::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;75650:324:0;;;;;;;;;;:::i;30549:1664::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30549:1664:0;;:::i;53407:259::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;53407:259:0;-1:-1:-1;;;;;53407:259:0;;:::i;73057:449::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;73057:449:0;;:::i;5016:29::-;;;:::i;38805:11644::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38805:11644:0;;-1:-1:-1;;;;;38805:11644:0;;;;;;;;;;;;;:::i;26263:2376::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;26263:2376:0;;;;;;;;:::i;52684:254::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;52684:254:0;-1:-1:-1;;;;;52684:254:0;;:::i;15673:1430::-;;;:::i;28702:1784::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28702:1784:0;;:::i;51591:257::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;51591:257:0;;;;;;-1:-1:-1;;;;;51591:257:0;;:::i;53042:274::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;53042:274:0;-1:-1:-1;;;;;53042:274:0;;:::i;53798:335::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;53798:335:0;;;;;;;;;;:::i;73573:356::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;73573:356:0;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;73573:356:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;73573:356:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;73573:356:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;73573:356:0;;-1:-1:-1;73573:356:0;;-1:-1:-1;;;;;73573:356:0:i;70624:671::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;70624:671:0;;;;;;;;;:::i;36161:209::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;36161:209:0;;;;;;;;;;:::i;57359:4576::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;57359:4576:0;;;;;;;;:::i;56161:1088::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;56161:1088:0;;;;;;;;;;;;;;;:::i;64333:809::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;64333:809:0;;;;;;;;:::i;19328:2386::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;19328:2386:0;;;;;;;;;;;;;;;;;;;:::i;76142:343::-;;;:::i;70145:349::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;70145:349:0;;;;;;;;:::i;74009:481::-;74121:10;1764:23;;;;:5;:23;;;;;;;;:31;;:23;:31;1675:137;;12:1:-1;9;2:12;1675:137:0;-1:-1:-1;;;;;74157:31:0;::::1;;::::0;;;:18:::1;:31;::::0;;;;;;;:41;;-1:-1:-1;;74157:41:0::1;::::0;::::1;;::::0;;::::1;::::0;;;74215:32:::1;:45:::0;;;;;:49;;;74281:30:::1;:43:::0;;;;;:47;;;74345:35:::1;:48:::0;;;;;:52;;;;74419:61;;;;;;74447:10:::1;::::0;74419:61:::1;::::0;;;;;;;::::1;74009:481:::0;;;:::o;74578:166::-;-1:-1:-1;;;;;74709:25:0;;74673:7;74709:25;;;:18;:25;;;;;;74578:166;;;;:::o;4951:52::-;;;;;;;;;;;;;;;-1:-1:-1;;4951:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;71453:547::-;71600:10;71631:4;1455:36;;;:18;:36;;;;;;71631:4;;71600:10;1455:36;;:44;;:36;:44;1353:163;;12:1:-1;9;2:12;1353:163:0;-1:-1:-1;;;;;71665:36:0;::::1;;::::0;;;:21:::1;:36;::::0;;;;;;;:61;;;;;;;;:68;;-1:-1:-1;;71665:68:0::1;71729:4;71665:68:::0;;::::1;::::0;;;71754:23;;;:8:::1;:23:::0;;;;;;::::1;;:31;;;71751:240;;;71829:10;71807:33;::::0;;;:21:::1;:33;::::0;;;;:77;;;71912:4:::1;::::0;-1:-1:-1;71905:11:0::1;;71751:240;71968:5;71961:12;;71751:240;71453:547:::0;;;;;:::o;50547:249::-;-1:-1:-1;;;;;50669:18:0;;50640:4;50669:18;;;:5;:18;;;;;;;;:26;;:18;:26;50666:121;;;-1:-1:-1;50720:4:0;50713:11;;50666:121;-1:-1:-1;50768:5:0;50761:12;;35548:319;35638:10;35670:4;1117:26;;;:8;:26;;;;;;35670:4;;35638:10;1117:26;;:34;;:26;:34;1026:142;;12:1:-1;9;2:12;1026:142:0;-1:-1:-1;;;;;35697:21:0;::::1;35689:30;;12:1:-1;9::::0;2:12:::1;35689:30:0;35741:10;35732:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;35732:29:0;::::1;::::0;;;;;;;;;;:47;;;35797:36;;;;;;;35732:29;;35741:10;35797:36:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;35853:4:0::1;::::0;35548:319;-1:-1:-1;;;35548:319:0:o;69033:998::-;69119:10;69113:17;;;;:5;:17;;;;;;;;:25;;:17;:25;:127;;;;-1:-1:-1;69195:10:0;69142:66;69176:30;;;:18;:30;;;;;;;;;69161:46;;;:14;:46;;;;;;-1:-1:-1;;;;;69161:46:0;69142:66;;:18;:66;;;;;:98;;;;;;;;;;;69113:127;69110:914;;;69334:10;69258:23;69315:30;;;:18;:30;;;;;;;;;;69300:46;;;:14;:46;;;;;;-1:-1:-1;;;;;69300:46:0;;;69285:62;;:14;:62;;;;;;:94;;;;;;;;;;69513:12;;;;;;;;;;69422:104;;-1:-1:-1;;;;;;;;;;;69422:104:0;;;;;:137;;69390:3;69382:4;69285:101;;;69284:109;;;69422:137;;;;;;69611:30;;69588:54;;:22;:54;;;;;:73;;;;;;69693:17;;;;69678:33;;;;;;;;-1:-1:-1;;;69678:101:0;;;;;;;:149;;69798:21;;;69797:30;;;;69678:149;;;;;;69864:12;;;;;;;69844:33;;;;;;;;;:66;;;;;;69982:12;;69961:51;;;;;;;69284:109;;69982:12;;;;;;;69334:10;-1:-1:-1;;;;;;;;;;;69961:51:0;;;;;;;69110:914;;69033:998::o;72145:842::-;72284:10;72315:7;1764:23;;;:5;:23;;;;;;72315:7;;72284:10;1764:23;;:31;;:23;:31;1675:137;;12:1:-1;9;2:12;1675:137:0;-1:-1:-1;;;;;72352:36:0;::::1;;::::0;;;:21:::1;:36;::::0;;;;;;;:55;;;;;;;;:62;;-1:-1:-1;;72352:62:0::1;72410:4;72352:62:::0;;::::1;::::0;;;72435:23;;;:8:::1;:23:::0;;;;;;::::1;;:31;;;72432:546;;;72507:10;72488:30;::::0;;;:18:::1;:30;::::0;;;;;;;:50;;;72559:32:::1;:44:::0;;;;;;:67;;72625:1:::1;72559:67;::::0;;72652:64;;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;72744:17;72737:24;;;;72432:546;72842:10;72806:47;::::0;;;:35:::1;:47;::::0;;;;:70;;-1:-1:-1;;72806:70:0;;;:47;-1:-1:-1;72943:17:0;;-1:-1:-1;72432:546:0::1;72145:842:::0;;;;;;:::o;22281:3831::-;22378:10;1117:26;;;;:8;:26;;;;;;;;:34;;:26;:34;1026:142;;12:1:-1;9;2:12;1026:142:0;22472:10:::1;22435:24;22548:1;22529:20;::::0;::::1;;22526:3141;;;22594:45;22611:10;22623:15;22594:16;:45::i;:::-;-1:-1:-1::0;;;;;22656:41:0;::::1;;::::0;;;:23:::1;:41;::::0;;;;:70;;;::::1;::::0;;22567:72;-1:-1:-1;22526:3141:0::1;;;22749:15;:20;;22768:1;22749:20;22746:2921;;;22814:45;22831:10;22843:15;22814:16;:45::i;:::-;-1:-1:-1::0;;;;;22876:45:0;::::1;;::::0;;;:27:::1;:45;::::0;;;;:74;;;::::1;::::0;;22787:72;-1:-1:-1;22746:2921:0::1;;;22973:15;:20;;22992:1;22973:20;22970:2697;;;23038:45;23055:10;23067:15;23038:16;:45::i;:::-;-1:-1:-1::0;;;;;23100:47:0;::::1;;::::0;;;:29:::1;:47;::::0;;;;:76;;;::::1;::::0;;23011:72;-1:-1:-1;22970:2697:0::1;;;23199:15;:20;;23218:1;23199:20;23196:2471;;;23264:45;23281:10;23293:15;23264:16;:45::i;:::-;-1:-1:-1::0;;;;;23326:41:0;::::1;;::::0;;;:23:::1;:41;::::0;;;;:70;;;::::1;::::0;;23237:72;-1:-1:-1;23196:2471:0::1;;;23419:15;:20;;23438:1;23419:20;23416:2251;;;23484:45;23501:10;23513:15;23484:16;:45::i;:::-;-1:-1:-1::0;;;;;23546:40:0;::::1;;::::0;;;:22:::1;:40;::::0;;;;:69;;;::::1;::::0;;23457:72;-1:-1:-1;23416:2251:0::1;;;23638:15;:20;;23657:1;23638:20;23635:2032;;;23703:45;23720:10;23732:15;23703:16;:45::i;:::-;-1:-1:-1::0;;;;;23765:40:0;::::1;;::::0;;;:22:::1;:40;::::0;;;;:69;;;::::1;::::0;;23676:72;-1:-1:-1;23635:2032:0::1;;;23857:15;:20;;23876:1;23857:20;23854:1813;;;23922:45;23939:10;23951:15;23922:16;:45::i;:::-;-1:-1:-1::0;;;;;23984:42:0;::::1;;::::0;;;:24:::1;:42;::::0;;;;:71;;;::::1;::::0;;23895:72;-1:-1:-1;23854:1813:0::1;;;24078:15;:20;;24097:1;24078:20;24075:1592;;;24143:45;24160:10;24172:15;24143:16;:45::i;:::-;-1:-1:-1::0;;;;;24205:40:0;::::1;;::::0;;;:22:::1;:40;::::0;;;;;;;:69;;;::::1;::::0;;24303:90;:108;;;;;:137;;;::::1;::::0;;24497:37;;;;;;;:49;::::1;24457:89:::0;;24205:69;-1:-1:-1;24075:1592:0::1;;;24569:15;:20;;24588:1;24569:20;24566:1101;;;24634:45;24651:10;24663:15;24634:16;:45::i;:::-;-1:-1:-1::0;;;;;24696:37:0;::::1;;::::0;;;:19:::1;:37;::::0;;;;:66;;;::::1;::::0;;24607:72;-1:-1:-1;24566:1101:0::1;;;24785:15;:21;;24804:2;24785:21;24782:885;;;24851:45;24868:10;24880:15;24851:16;:45::i;:::-;-1:-1:-1::0;;;;;24913:46:0;::::1;;::::0;;;:28:::1;:46;::::0;;;;:75;;;::::1;::::0;;24824:72;-1:-1:-1;24782:885:0::1;;;25011:15;:21;;25030:2;25011:21;25008:659;;;25077:45;25094:10;25106:15;25077:16;:45::i;:::-;-1:-1:-1::0;;;;;25139:44:0;::::1;;::::0;;;:26:::1;:44;::::0;;;;:73;;;::::1;::::0;;25050:72;-1:-1:-1;25008:659:0::1;;;25235:15;:21;;25254:2;25235:21;25232:435;;;25301:45;25318:10;25330:15;25301:16;:45::i;:::-;-1:-1:-1::0;;;;;25363:37:0;::::1;;::::0;;;:19:::1;:37;::::0;;;;:66;;;::::1;::::0;;25274:72;-1:-1:-1;25232:435:0::1;;;25452:15;:21;;25471:2;25452:21;25449:218;;;25518:45;25535:10;25547:15;25518:16;:45::i;:::-;-1:-1:-1::0;;;;;25580:44:0;::::1;;::::0;;;:26:::1;:44;::::0;;;;:73;;;::::1;::::0;;25491:72;-1:-1:-1;25449:218:0::1;25718:15;:20;;25737:1;25718:20;25715:188;;-1:-1:-1::0;;;;;25754:108:0;::::1;:90;:108:::0;;;-1:-1:-1;;;;;;;;;;;25754:90:0::1;:108:::0;:90;:108;;:137;;;::::1;::::0;;25715:188:::1;-1:-1:-1::0;;;;;25953:37:0;::::1;;::::0;;;:19:::1;:37:::0;;;;;;;;;;:49;::::1;25913:89:::0;;26045:57;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;1207:1;;22281:3831:::0;;:::o;75169:172::-;-1:-1:-1;;;;;75303:28:0;75267:7;75303:28;;;:21;:28;;;;;;;75169:172::o;77362:225::-;77491:7;77527:41;;;:22;:41;;;;;;;;-1:-1:-1;;;;;77527:50:0;;;;;;;;;;77362:225;;;;;:::o;76990:241::-;-1:-1:-1;;;;;77123:98:0;77087:7;77123:98;;;-1:-1:-1;;;;;;;;;;;77123:90:0;:98;:90;:98;;;;76990:241::o;14433:26::-;;;;:::o;50870:357::-;-1:-1:-1;;;;;51033:29:0;;51001:7;51033:29;;;:14;:29;;;;;;;;51111:48;;;;;;;;;51104:55;;51030:188;-1:-1:-1;51203:1:0;51196:8;;32379:2889;32484:10;32515:4;1117:26;;;:8;:26;;;;;;32515:4;;32484:10;1117:26;;:34;;:26;:34;1026:142;;12:1:-1;9;2:12;1026:142:0;-1:-1:-1;;;;;32579:28:0;::::1;32541:25;32579:28:::0;;;:22:::1;:28;::::0;;;;;;;;32663:41;;;:22:::1;:41:::0;;;;;:47;;;;;;;;;;32769:2:::1;32760:11:::0;::::1;32750:22:::0;::::1;32785:57;32579:28:::0;;32785:32:::1;:57::i;:::-;32884:6;32858:22;:32;32855:2404;;-1:-1:-1::0;;;;;33051:12:0;::::1;32932:24;33051:12:::0;;;:8:::1;:12;::::0;;;;;32959:10:::1;::::0;33051:12:::1;;:20;;:12:::0;:20:::1;:48:::0;::::1;;;;33098:1;33089:6;:10;33051:48;:75;;;;;33124:2;-1:-1:-1::0;;;;;33116:10:0::1;:4;-1:-1:-1::0;;;;;33116:10:0::1;;;33051:75;:129;;;;-1:-1:-1::0;;;;;;33154:14:0;::::1;;::::0;;;:8:::1;:14;::::0;;;;;;;33169:10:::1;33154:26:::0;;;;;;;;33144:36;::::1;;33051:129;:165;;;;-1:-1:-1::0;33198:10:0::1;-1:-1:-1::0;;;;;33198:18:0;::::1;;;33051:165;:222;;;;-1:-1:-1::0;33257:10:0::1;33234:34;::::0;;;:22:::1;:34;::::0;;;;;:39;33051:222:::1;33043:231;;12:1:-1;9::::0;2:12:::1;33043:231:0;33314:10;33291:34;::::0;;;:22:::1;:34;::::0;;;;33342:1:::1;33291:52:::0;;33360:25:::1;33378:6:::0;33360:17:::1;:25::i;:::-;-1:-1:-1::0;;;;;;33475:23:0;::::1;;::::0;;;:19:::1;:23:::0;;;;;;;:32;::::1;33435:72:::0;;33586:2:::1;33501:6:::0;33577:11:::1;33567:6;:22;33524:19;:25;33544:4;-1:-1:-1::0;;;;;33524:25:0::1;-1:-1:-1::0;;;;;33524:25:0::1;;;;;;;;;;;;;:65;;;;;;;;;;;33677:14;:49;33692:14;:33;33707:17;33692:33;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;33692:33:0::1;-1:-1:-1::0;;;;;33677:49:0::1;-1:-1:-1::0;;;;;33677:49:0::1;;;;;;;;;;;;:68;33727:17;33677:68;;;;;;;;;;;;33606:23;:42;33630:17;33606:42;;;;;;;;;;;:54;33649:10;-1:-1:-1::0;;;;;33606:54:0::1;-1:-1:-1::0;;;;;33606:54:0::1;;;;;;;;;;;;:139;;;;33846:6;33802:8;:14;33811:4;-1:-1:-1::0;;;;;33802:14:0::1;-1:-1:-1::0;;;;;33802:14:0::1;;;;;;;;;;;;:26;33817:10;-1:-1:-1::0;;;;;33802:26:0::1;-1:-1:-1::0;;;;;33802:26:0::1;;;;;;;;;;;;;:50;;;;;;;;;;;33910:6;33869:17;:23;33887:4;-1:-1:-1::0;;;;;33869:23:0::1;-1:-1:-1::0;;;;;33869:23:0::1;;;;;;;;;;;;;:47;;;;;;;;;;;33984:1;33933:22;:34;33956:10;-1:-1:-1::0;;;;;33933:34:0::1;-1:-1:-1::0;;;;;33933:34:0::1;;;;;;;;;;;;:52;;;;34002:21;34040:14;:33;34055:17;34040:33;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;34040:33:0::1;34002:71;;34090:22;34129:2;34090:41;;34148:17;34273:22;34255:3;34186:23;:42;34210:17;34186:42;;;;;;;;;;;:58;34229:14;-1:-1:-1::0;;;;;34186:58:0::1;-1:-1:-1::0;;;;;34186:58:0::1;;;;;;;;;;;;;34247:4;34186:65;34185:73;;;;;;34262:7;34184:85;34183:112;;;;;-1:-1:-1::0;;;;;34354:29:0;::::1;34313:22;34354:29:::0;;;:14:::1;:29;::::0;;;;;;;:48;;;;;;;;;34183:112;;;::::1;::::0;-1:-1:-1;34313:22:0;34413:3:::1;::::0;34405:4:::1;34354:55;34353:63;34420:7;34352:75;34313:114;;34444:19;34497:9;34480:14;:26;;;;;;34444:62;;34611:6;34597:11;:20;34523:22;:41;34546:17;34523:41;;;;;;;;;;;:57;34565:14;-1:-1:-1::0;;;;;34523:57:0::1;-1:-1:-1::0;;;;;34523:57:0::1;;;;;;;;;;;;:94;;;;34717:30;:49;34748:17;34717:49;;;;;;;;;;;;34634:31;:47;34666:14;-1:-1:-1::0;;;;;34634:47:0::1;-1:-1:-1::0;;;;;34634:47:0::1;;;;;;;;;;;;:66;34682:17;34634:66;;;;;;;;;;;:132;;;;34858:17;:36;34876:17;34858:36;;;;;;;;;;;;34783:23;:42;34807:17;34783:42;;;;;;;;;;;:58;34826:14;-1:-1:-1::0;;;;;34783:58:0::1;-1:-1:-1::0;;;;;34783:58:0::1;;;;;;;;;;;;:111;;;;35033:6;34985:22;:41;35008:17;34985:41;;;;;;;;;;;:45;35027:2;-1:-1:-1::0;;;;;34985:45:0::1;-1:-1:-1::0;;;;;34985:45:0::1;;;;;;;;;;;;;:54;34923:22;:41;34946:17;34923:41;;;;;;;;;;;:45;34965:2;-1:-1:-1::0;;;;;34923:45:0::1;-1:-1:-1::0;;;;;34923:45:0::1;;;;;;;;;;;;:116;;;;35107:1;35056:22;:34;35079:10;-1:-1:-1::0;;;;;35056:34:0::1;-1:-1:-1::0;;;;;35056:34:0::1;;;;;;;;;;;;:52;;;;35157:2;-1:-1:-1::0;;;;;35130:38:0::1;35139:16;-1:-1:-1::0;;;;;35130:38:0::1;-1:-1:-1::0;;;;;;;;;;;35161:6:0::1;35130:38;;;;;;;;;;;;;;;;;;35192:4;35185:11;;;;;;;;;;;;;32855:2404;35240:5;35233:12;;;;;;;51301:187:::0;51409:7;51445:33;;;:14;:33;;;;;;-1:-1:-1;;;;;51445:33:0;;51301:187::o;36517:2117::-;36623:10;36654:4;1764:23;;;:5;:23;;;;;;36654:4;;36623:10;1764:23;;:31;;:23;:31;1675:137;;12:1:-1;9;2:12;1675:137:0;36840:10:::1;36680:23;36821:30:::0;;;:18:::1;:30;::::0;;;;;;;;36798:54;;;:22:::1;:54:::0;;;;;36853:14:::1;:46:::0;;;;;;-1:-1:-1;;;;;36853:46:0::1;36798:102:::0;;;;;;;;36924:30;;;;;36733:3:::1;36725:4;36708:21:::0;::::1;36707:29;::::0;36780:120;::::1;::::0;-1:-1:-1;;;36924:100:0::1;36921:1704;;-1:-1:-1::0;;;;;37050:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;;;;37107:10:::1;37084:34:::0;;:22:::1;:34:::0;;;;;;37050:69;;;;;;;;::::1;;:77;;:69:::0;:77:::1;:201:::0;::::1;;;-1:-1:-1::0;37198:10:0::1;37145:66;37179:30:::0;;;:18:::1;:30;::::0;;;;;;;;37164:46;;;:14:::1;:46:::0;;;;;;-1:-1:-1;;;;;37164:46:0::1;37145:66:::0;;:18:::1;:66:::0;;;;;:98;;;;;;;;;::::1;;:106;;37164:46:::0;37145:106:::1;37050:201;:338;;;;-1:-1:-1::0;37375:12:0::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;37375:12:0::1;37284:90;:104:::0;;;-1:-1:-1;;;;;;;;;;;37284:90:0::1;:104:::0;:90;:104;;;37269:119;::::1;;37050:338;:376;;;;-1:-1:-1::0;37406:20:0;37050:376:::1;37042:385;;12:1:-1;9::::0;2:12:::1;37042:385:0;37473:11;:43:::0;;;;::::1;::::0;;37775:10:::1;-1:-1:-1::0;37756:30:0;;;:18:::1;:30;::::0;;;;;;;;;37733:54;;:22:::1;:54:::0;;;;;;37628:17:::1;::::0;-1:-1:-1;;;;;37628:17:0;;::::1;37613:33:::0;;:14:::1;:33:::0;;;;;-1:-1:-1;;;37613:101:0;;;;;;;:188;;37797:4:::1;37790:3;37733:60:::0;;::::1;37732:69:::0;;;::::1;37613:188:::0;;::::1;::::0;;;37926:30;;37903:54;;:22:::1;:54:::0;;;;;;37958:14:::1;:46:::0;;;;;;;;::::1;37903:102:::0;;;;;;;;;37818:67;;;;;;:187;;;;;::::1;::::0;;38057:30;;38034:54;;;;;;;;38089:46;;;;;;;;::::1;38034:102:::0;;;;;;;:119;;;38344:30;;38321:54;;;;;;;38376:46;;;;;;;;::::1;38321:102:::0;;;;;;;;;38273:12:::1;::::0;37628:17:::1;38273:12:::0;::::1;::::0;;::::1;38182:104:::0;;-1:-1:-1;;;;;;;;;;;38182:104:0;;;;;;:241;;38303:120;;::::1;38182:241:::0;;::::1;::::0;;;38481:49;;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;38558:4;38551:11;;;;;;36921:1704;38606:5;38599:12;;;;;;52345:247:::0;52508:16;;52459:124;52345:247;:::o;5054:26::-;;;;;;:::o;55533:515::-;55675:10;55706:4;1764:23;;;:5;:23;;;;;;55706:4;;55675:10;1764:23;;:31;;:23;:31;1675:137;;12:1:-1;9;2:12;1675:137:0;55781:10:::1;55759:33;::::0;;;:21:::1;:33;::::0;;;;;55735:57;::::1;55732:307;;;55818:10;-1:-1:-1::0;;;;;55818:27:0;::::1;;;55810:36;;12:1:-1;9::::0;2:12:::1;55810:36:0;-1:-1:-1::0;;;;;55863:36:0;::::1;;::::0;;;:21:::1;:36;::::0;;;;;;;:58;;;;;;;;:85;;-1:-1:-1;;55863:85:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;55965:11:0::1;;55732:307;56020:5;56013:12;;;;86071:1657:::0;86199:7;86208:5;86242:15;:20;;86261:1;86242:20;86239:1480;;;-1:-1:-1;;;;;;;86288:36:0;;;;;;:18;:36;;;;;;86326:1;86280:48;;86239:1480;86351:15;:20;;86370:1;86351:20;86348:1371;;;-1:-1:-1;;;;;;;86397:40:0;;;;;;:22;:40;;;;;;86439:1;86389:52;;86348:1371;86464:15;:20;;86483:1;86464:20;86461:1258;;;-1:-1:-1;;;;;;;86510:42:0;;;;;;:24;:42;;;;;;86554:1;86502:54;;86461:1258;86579:15;:20;;86598:1;86579:20;86576:1143;;;-1:-1:-1;;;;;;;86625:36:0;;;;;;:18;:36;;;;;;86663:1;86617:48;;86576:1143;86688:15;:20;;86707:1;86688:20;86685:1034;;;-1:-1:-1;;;;;;;86734:35:0;;;;;;:17;:35;;;;;;86771:1;86726:47;;86685:1034;86796:15;:20;;86815:1;86796:20;86793:926;;;-1:-1:-1;;;;;;;86842:35:0;;;;;;:17;:35;;;;;;86879:1;86834:47;;86793:926;86904:15;:20;;86923:1;86904:20;86901:818;;;-1:-1:-1;;;;;;;86950:37:0;;;;;;:19;:37;;;;;;86989:1;86942:49;;86901:818;87014:15;:20;;87033:1;87014:20;87011:708;;;-1:-1:-1;;;;;;;87060:35:0;;;;;;:17;:35;;;;;;87097:1;87052:47;;87011:708;87122:15;:20;;87141:1;87122:20;87119:600;;;-1:-1:-1;;;;;;;87168:32:0;;;;;;:14;:32;;;;;;87202:1;87160:44;;87119:600;87227:15;:21;;87246:2;87227:21;87224:495;;;-1:-1:-1;;;;;;;87274:41:0;;;;;;:23;:41;;;;;;;87317:2;87266:54;;87224:495;87343:15;:21;;87362:2;87343:21;87340:379;;;-1:-1:-1;;;;;;;87390:39:0;;;;;;:21;:39;;;;;;87431:2;87382:52;;87340:379;87457:15;:21;;87476:2;87457:21;87454:265;;;-1:-1:-1;;;;;;;87504:32:0;;;;;;:14;:32;;;;;;87538:2;87496:45;;87454:265;87564:15;:21;;87583:2;87564:21;87561:158;;;-1:-1:-1;;;;;;;87611:39:0;;;;;;:21;:39;;;;;;87652:2;87603:52;;87561:158;-1:-1:-1;87700:1:0;;-1:-1:-1;87700:1:0;87561:158;86071:1657;;;;;:::o;74844:255::-;74952:7;75006:41;;;:22;:41;;;;;;;74844:255::o;65366:3655::-;65629:10;1455:36;;;;:18;:36;;;;;;;;:44;;:36;:44;1353:163;;12:1:-1;9;2:12;1353:163:0;65706:10:::1;65659:25;65687:30:::0;;;:18:::1;:30;::::0;;;;;;;;65772:21:::1;:33:::0;;;;;;65940;;;:14:::1;:33:::0;;;;;;-1:-1:-1;;;;;65940:33:0::1;65925:49:::0;;:14:::1;:49:::0;;;;;:68;;;;;;;;;65888:3:::1;65880:4;65863:21:::0;::::1;65862:29;::::0;65907:86;::::1;65904:3108;;;-1:-1:-1::0;;;;;66056:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;:89:::0;::::1;;;;66140:5;66116:20;:29;;66056:89;:151;;;;;66201:6;66177:20;:30;;66056:151;:207;;;;-1:-1:-1::0;66239:10:0::1;-1:-1:-1::0;;;;;66239:24:0;::::1;;;66056:207;:290;;;;-1:-1:-1::0;66335:10:0::1;66316:30;::::0;;;:18:::1;:30;::::0;;;;;66295:51;::::1;66056:290;:369;;;;-1:-1:-1::0;66414:10:0::1;66392:33;::::0;;;:21:::1;:33;::::0;;;;;66365:60;::::1;66056:369;66048:378;;12:1:-1;9::::0;2:12:::1;66048:378:0;66484:37;66505:15;66484:20;:37::i;:::-;;66749:20;66723:15;66741:4;66723:22;66722:47;;;;;-1:-1:-1::0;;;;;66585:119:0;::::1;:90;:119:::0;;;-1:-1:-1;;;;;;;;;;;66585:90:0::1;:119:::0;:90;:119;;:184;;66722:47;;;::::1;66585:184:::0;;::::1;::::0;;66929:20;66921:4:::1;66903:22:::0;::::1;66929:20:::0;66902:47:::1;;;;-1:-1:-1::0;;;;;66851:48:0;::::1;;::::0;;;:19:::1;:48:::0;;;;;;;66902:47;;;::::1;66851:98:::0;;::::1;66786:163:::0;;67014:79:::1;67033:15:::0;67050:10;67062:8;67072;67082:10;67014:18:::1;:79::i;:::-;-1:-1:-1::0;67331:12:0::1;::::0;;-1:-1:-1;;;;;67331:12:0;;::::1;67159:16;67240:104:::0;;;-1:-1:-1;;;;;;;;;;;67240:90:0::1;:104:::0;;;:90;:104;;;:130;;67218:5:::1;67211:3;67193:21:::0;::::1;67192:31;67240:130:::0;;::::1;::::0;;;67402:17:::1;::::0;;::::1;67387:33:::0;;:14:::1;:33:::0;;;;;-1:-1:-1;;;67387:101:0;;;;;;;:167;;67541:13:::1;67525:12;67507:30:::0;::::1;67506:48;67387:167;::::0;;67641:12;;;;::::1;67621:33:::0;;;;;;;;;:44;::::1;67571:94:::0;;67754:16:::1;67735:15;67717:33:::0;::::1;67716:54;::::0;67878:6:::1;67855:29:::0;::::1;67836:13;67817:33:::0;::::1;67855:29:::0;67816:69:::1;;;;;67787:98;;68107:4;68095:9;68077:15;:27;68076:35;68019:22;:41;68042:17;68019:41;;;;;;;;;;;:53;68061:10;-1:-1:-1::0;;;;;68019:53:0::1;-1:-1:-1::0;;;;;68019:53:0::1;;;;;;;;;;;;;:93;67949:22;:41;67972:17;67949:41;;;;;;;;;;;:53;67991:10;-1:-1:-1::0;;;;;67949:53:0::1;-1:-1:-1::0;;;;;67949:53:0::1;;;;;;;;;;;;:163;;;;68243:4;68231:9;68213:15;:27;68212:35;68177:19;:31;68197:10;-1:-1:-1::0;;;;;68177:31:0::1;-1:-1:-1::0;;;;;68177:31:0::1;;;;;;;;;;;;;:71;68129:19;:31;68149:10;-1:-1:-1::0;;;;;68129:31:0::1;-1:-1:-1::0;;;;;68129:31:0::1;;;;;;;;;;;;:119;;;;68345:4;68333:9;68315:15;:27;68314:35;68265:18;:30;68284:10;-1:-1:-1::0;;;;;68265:30:0::1;-1:-1:-1::0;;;;;68265:30:0::1;;;;;;;;;;;;;:85;;;;;;;;;;;68438:4;68426:9;:16;68367:22;:41;68390:17;68367:41;;;;;;;;;;;;:75;;;;;;;;;;;68620:8;68608:9;:20;68486:22;:90;-1:-1:-1::0;;;68486:90:0::1;;;;;;;;;;;;;:104;68577:12;;;;;;;;;-1:-1:-1::0;;;;;68577:12:0::1;-1:-1:-1::0;;;;;68486:104:0::1;-1:-1:-1::0;;;;;68486:104:0::1;;;;;;;;;;;;;:142;;;;;;;;;;;68720:8;68708:9;:20;68657:19;:33;68677:12;;;;;;;;;-1:-1:-1::0;;;;;68677:12:0::1;-1:-1:-1::0;;;;;68657:33:0::1;-1:-1:-1::0;;;;;68657:33:0::1;;;;;;;;;;;;;:71;;;;;;;;;;;68800:10;-1:-1:-1::0;;;;;68779:49:0::1;68788:10;-1:-1:-1::0;;;;;68779:49:0::1;-1:-1:-1::0;;;;;;;;;;;68812:15:0::1;68779:49;;;;;;;;;;;;;;;;;;65904:3108;;;;;;-1:-1:-1::0;68949:49:0::1;::::0;;68926:1:::1;68949:49:::0;;;;;-1:-1:-1;;;;;68949:49:0;::::1;::::0;68958:10:::1;::::0;-1:-1:-1;;;;;;;;;;;68949:49:0;;;;::::1;::::0;;::::1;65904:3108;1555:1;;;65366:3655:::0;;;;;;;;:::o;54899:521::-;55044:10;55075:4;1764:23;;;:5;:23;;;;;;55075:4;;55044:10;1764:23;;:31;;:23;:31;1675:137;;12:1:-1;9;2:12;1675:137:0;55150:10:::1;55131:30;::::0;;;:18:::1;:30;::::0;;;;;55104:57;::::1;55101:310;;;55187:10;-1:-1:-1::0;;;;;55187:27:0;::::1;;;55179:36;;12:1:-1;9::::0;2:12:::1;55179:36:0;-1:-1:-1::0;;;;;55232:36:0;::::1;;::::0;;;:21:::1;:36;::::0;;;;;;;:61;;;;;;;;:88;;-1:-1:-1;;55232:88:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;55337:11:0::1;;54213:573:::0;54323:10;2007:32;;;;:14;:32;;;;;;;;:40;;:32;:40;1983:81;;12:1:-1;9;2:12;1983:81:0;54363:10:::1;-1:-1:-1::0;;;;;54363:25:0;::::1;;;54355:53;;;::::0;;-1:-1:-1;;;54355:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;54355:53:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;54425:18:0;::::1;;::::0;;;:5:::1;:18;::::0;;;;;;;:42;;-1:-1:-1;;54425:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;54517:10:::1;54484:44:::0;;;:32:::1;:44:::0;;;;;:62;;;54563:30:::1;:42:::0;;;;;:60;;;54640:35:::1;:47:::0;;;;;:65;;;;54727:49;;;;;;;::::1;::::0;;;;;;;;;::::1;54213:573:::0;;;:::o;77764:8204::-;77892:7;77924:15;:20;;77943:1;77924:20;77921:8038;;;77962:25;78035:19;;78030:1;78025;78006:16;;:20;;;;;;78005:26;;;;;;78004:50;;;;;-1:-1:-1;;;;;78111:36:0;;78071:23;78111:36;;;:18;:36;;;;;;;;;78409:17;:35;;;;;;78364:18;:36;;;;;;;78004:50;;;;;-1:-1:-1;78111:36:0;;78071:23;;78447:1;78409:39;;;;78364:40;78409:39;78363:86;;;;-1:-1:-1;;;;;78301:41:0;;;;;;:23;:41;;;;;;;;;78257:23;:41;;;;;;;78363:86;;;;;78257:85;78202:35;;;78201:142;78363:86;78200:250;;;;;;-1:-1:-1;78467:18:0;;-1:-1:-1;;;78467:18:0;77921:8038;78508:15;:20;;78527:1;78508:20;78505:7454;;;78546:25;78619:23;;78614:1;78609;78590:16;;:20;;;;;;78589:26;;;;;;78588:54;;;;;-1:-1:-1;;;;;78703:40:0;;78659:27;78703:40;;;:22;:40;;;;;;;;;79041:17;:35;;;;;;78996:18;:36;;;;;;;78588:54;;;;;-1:-1:-1;78703:40:0;;78659:27;;79079:1;79041:39;;;;78996:40;79041:39;78995:86;;;;-1:-1:-1;;;;;78924:45:0;;;;;;:27;:45;;;;;;;;;78870:27;:45;;;;;;;78995:86;;;;;78869:105;78798:51;;;78797:178;78995:86;78796:286;;;78505:7454;79140:15;:20;;79159:1;79140:20;79137:6822;;;79178:25;79251:26;;79246:1;79241;79222:16;;:20;;;;;;79221:26;;;;;;79220:57;;;;;-1:-1:-1;;;;;79340:42:0;;79294:29;79340:42;;;:24;:42;;;;;;;;;79686:17;:35;;;;;;79641:18;:36;;;;;;;79220:57;;;;;-1:-1:-1;79340:42:0;;79294:29;;79724:1;79686:39;;;;79641:40;79686:39;79640:86;;;;-1:-1:-1;;;;;79567:47:0;;;;;;:29;:47;;;;;;;;;79511:29;:47;;;;;;;79640:86;;;;;79510:109;79437:53;;;79436:184;79640:86;79435:292;;;79137:6822;79785:15;:20;;79804:1;79785:20;79782:6177;;;79823:25;79896:19;;79891:1;79886;79867:16;;:20;;;;;;79866:26;;;;;;79865:50;;;;;-1:-1:-1;;;;;79972:36:0;;79932:23;79972:36;;;:18;:36;;;;;;;;;80294:17;:35;;;;;;80249:18;:36;;;;;;;79865:50;;;;;-1:-1:-1;79972:36:0;;79932:23;;80332:1;80294:39;;;;80249:40;80294:39;80248:86;;;;-1:-1:-1;;;;;80181:41:0;;;;;;:23;:41;;;;;;;;;80131:23;:41;;;;;;;80248:86;;;;;80130:97;80063:47;;;80062:166;80248:86;80061:274;;;79782:6177;80393:15;:20;;80412:1;80393:20;80390:5569;;;80431:25;80504:21;;80499:1;80494;80475:16;;:20;;;;;;80474:26;;;;;;80473:52;;;;;-1:-1:-1;;;;;80584:35:0;;80542:25;80584:35;;;:17;:35;;;;;;;;;80896:17;:35;;;;;;80851:18;:36;;;;;;;80473:52;;;;;-1:-1:-1;80584:35:0;;80542:25;;80934:1;80896:39;;;;80851:40;80896:39;80850:86;;;;-1:-1:-1;;;;;80781:43:0;;;;;;:25;:43;;;;;;;;;80736:22;:40;;;;;;;80850:86;;;;;80735:94;80674:41;;;80673:157;80850:86;80672:265;;;80390:5569;80995:15;:20;;81014:1;80995:20;80992:4967;;;81033:25;81106:21;;81101:1;81096;81077:16;;:20;;;;;;81076:26;;;;;;81075:52;;;;;-1:-1:-1;;;;;81186:35:0;;81144:25;81186:35;;;:17;:35;;;;;;;;;81510:17;:35;;;;;;81465:18;:36;;;;;;;81075:52;;;;;-1:-1:-1;81186:35:0;;81144:25;;81548:1;81510:39;;;;81465:40;81510:39;81464:86;;;;-1:-1:-1;;;;;81395:43:0;;;;;;:25;:43;;;;;;;;;81346:22;:40;;;;;;;81464:86;;;;;81345:98;81276:49;;;81275:169;81464:86;81274:277;;;80992:4967;81609:15;:20;;81628:1;81609:20;81606:4353;;;81647:25;81720:23;;81715:1;81710;81691:16;;:20;;;;;;81690:26;;;;;;81689:54;;;;;-1:-1:-1;;;;;81804:37:0;;81760:27;81804:37;;;:19;:37;;;;;;;;;82136:17;:35;;;;;;82091:18;:36;;;;;;;81689:54;;;;;-1:-1:-1;81804:37:0;;81760:27;;82174:1;82136:39;;;;82091:40;82136:39;82090:86;;;;-1:-1:-1;;;;;82019:45:0;;;;;;:27;:45;;;;;;;;;81968:24;:42;;;;;;;82090:86;;;;;81967:102;81896:51;;;81895:175;82090:86;81894:283;;;81606:4353;82235:15;:20;;82254:1;82235:20;82232:3727;;;82273:25;82332:21;;82327:1;82322;82303:16;;:20;;;;;;82302:26;;;;;;82301:52;;;;;-1:-1:-1;;;;;82398:35:0;;82370:25;82398:35;;;:17;:35;;;;;;;;;82709:17;:35;;;;;;82664:18;:36;;;;;;;82301:52;;;;;-1:-1:-1;82398:35:0;;82370:25;;82747:1;82709:39;;;;82664:40;82709:39;82663:86;;;;-1:-1:-1;;;;;82594:43:0;;;;;;:25;:43;;;;;;;;;82545:22;:40;;;;;;;82663:86;;;;;82544:98;82475:49;;;82474:169;82663:86;82473:277;;;82232:3727;82808:15;:20;;82827:1;82808:20;82805:3154;;;82846:25;82925:18;;82915:1;82910;82891:16;;:20;;;;;;82890:26;;;;;;82920:1;82889:32;82888:55;;;;;-1:-1:-1;;;;;82999:32:0;;82960:22;82999:32;;;:14;:32;;;;;;;;;83311:17;:35;;;;;;83266:18;:36;;;;;;;82888:55;;;;;-1:-1:-1;82999:32:0;;82960:22;;83349:1;83311:39;;;;83266:40;83311:39;83265:86;;;;-1:-1:-1;;;;;83199:40:0;;;;;;:22;:40;;;;;;;;;83153:19;:37;;;;;;;83265:86;;;;;83152:92;83086:46;;;83085:160;83265:86;83084:268;;;82805:3154;83410:15;:21;;83429:2;83410:21;83407:2552;;;83449:25;83536:27;;83529:2;83510:16;;:21;;;;;;83504:1;83499;83480:16;;:20;;;;;;83479:26;;;;;;83478:54;83477:86;;;;;-1:-1:-1;;;;;83614:41:0;;83580:31;83614:41;;;:23;:41;;;;;;;;83949:17;:35;;;;;;83904:18;:36;;;;;;;83477:86;;;;;-1:-1:-1;83614:41:0;83580:31;;83987:1;83949:39;;;;83904:40;83949:39;83903:86;;;;-1:-1:-1;;;;;83828:49:0;;;;;;:31;:49;;;;;;;;;83773:28;:46;;;;;;;83903:86;;;;;83772:110;83697:55;;;83696:187;83903:86;83695:295;;;83407:2552;84048:15;:21;;84067:2;84048:21;84045:1914;;;84087:25;84160;;84155:1;84150;84131:16;;:20;;;;;;84130:26;;;;;;84129:56;;;;;-1:-1:-1;;;;;84248:39:0;;84202:29;84248:39;;;:21;:39;;;;;;;;;84588:17;:35;;;;;;84543:18;:36;;;;;;;84129:56;;;;;-1:-1:-1;84248:39:0;;84202:29;;84626:1;84588:39;;;;84543:40;84588:39;84542:86;;;;-1:-1:-1;;;;;84469:47:0;;;;;;:29;:47;;;;;;;;;84416:26;:44;;;;;;;84542:86;;;;;84415:106;84342:53;;;84341:181;84542:86;84340:289;;;84045:1914;84687:15;:21;;84706:2;84687:21;84684:1275;;;84726:25;84799:18;;84794:1;84789;84770:16;;:20;;;;;;84769:26;;;;;;84768:49;;;;;-1:-1:-1;;;;;84873:32:0;;84834:22;84873:32;;;:14;:32;;;;;;;;;85185:17;:35;;;;;;85140:18;:36;;;;;;;84768:49;;;;;-1:-1:-1;84873:32:0;;84834:22;;85223:1;85185:39;;;;85140:40;85185:39;85139:86;;;;-1:-1:-1;;;;;85073:40:0;;;;;;:22;:40;;;;;;;;;85027:19;:37;;;;;;;85139:86;;;;;85026:92;84960:46;;;84959:160;85139:86;84958:268;;;84684:1275;85284:15;:21;;85303:2;85284:21;85281:678;;;85323:25;85396;;85391:1;85386;85367:16;;:20;;;;;;85366:26;;;;;;85365:56;;;;;-1:-1:-1;;;;;85484:39:0;;85438:29;85484:39;;;:21;:39;;;;;;;;;85824:17;:35;;;;;;85779:18;:36;;;;;;;85365:56;;;;;-1:-1:-1;85484:39:0;;85438:29;;85862:1;85824:39;;;;85779:40;85824:39;85778:86;;;;-1:-1:-1;;;;;85705:47:0;;;;;;:29;:47;;;;;;;;;85652:26;:44;;;;;;;85778:86;;;;;85651:106;85578:53;;;85577:181;85778:86;85576:289;;;75403:165;-1:-1:-1;;;;;75530:28:0;75494:7;75530:28;;;:21;:28;;;;;;;75403:165::o;17253:1741::-;17550:10;2007:32;;;;:14;:32;;;;;;;;:40;;:32;:40;1983:81;;12:1:-1;9;2:12;1983:81:0;17605:10:::1;17590:26;::::0;;;:14:::1;:26;::::0;;;;;::::1;;17582:49;;;::::0;;-1:-1:-1;;;17582:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17582:49:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;17713:12:0::1;:36:::0;;-1:-1:-1;;;;;;17713:36:0::1;;-1:-1:-1::0;;;;;17713:36:0;;::::1;;;::::0;;17855:23:::1;:59:::0;;-1:-1:-1;;;;;;17855:59:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;18012:19:::1;:51:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18147:12:::1;:37:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18282:19:::1;:51:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18416:12:::1;:37:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18557:21:::1;:56:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18711:19:::1;:51:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;18816:10:::1;-1:-1:-1::0;18783:44:0;;;:32:::1;:44;::::0;;;;;;;:58;;;18854:30:::1;:42:::0;;;;;:56;;;18923:35:::1;:47:::0;;;;;:61;17253:1741::o;76657:161::-;-1:-1:-1;;;;;76781:27:0;76745:7;76781:27;;;:19;:27;;;;;;;76657:161::o;51944:334::-;52056:7;-1:-1:-1;;;;;52088:27:0;;52105:10;52088:27;52085:184;;;-1:-1:-1;52163:10:0;52140:34;;;;:22;:34;;;;;;52133:41;;52085:184;-1:-1:-1;;;;;;52218:37:0;;;;;;:22;:37;;;;;;52211:44;;75650:324;75777:10;1455:36;;;;:18;:36;;;;;;;;:44;;:36;:44;1353:163;;12:1:-1;9;2:12;1353:163:0;75817:10:::1;-1:-1:-1::0;;;;;75817:25:0;::::1;;;75809:34;;12:1:-1;9::::0;2:12:::1;75809:34:0;-1:-1:-1::0;;;;;75860:21:0;::::1;;::::0;;;:8:::1;:21;::::0;;;;;;;;:31;;-1:-1:-1;;75860:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;75913:51;;;;;;;75931:10:::1;::::0;75913:51:::1;::::0;;;;;;;::::1;75650:324:::0;;;:::o;30549:1664::-;30641:10;1117:26;;;;:8;:26;;;;;;;;:34;;:26;:34;1026:142;;12:1:-1;9;2:12;1026:142:0;30734:10:::1;30673:25;30711:34:::0;;;:22:::1;:34;::::0;;;;;;;;30889:41;;;:22:::1;:41:::0;;;;;;30818:14:::1;:33:::0;;;;;;-1:-1:-1;;;;;30818:33:0::1;30803:49:::0;;:14:::1;:49:::0;;;;;:68;;;;;;;;;;30711:34;;30673:25;30889:41;30882:3:::1;::::0;30874:4:::1;30803:75;30802:83;30801:129;::::0;-1:-1:-1;30970:6:0;30989:63:::1;31022:10;31034:17:::0;30989:32:::1;:63::i;:::-;31094:6;31068:22;:32;;:85;;;;-1:-1:-1::0;31137:10:0::1;31114:34;::::0;;;:22:::1;:34;::::0;;;;;:39;31068:85:::1;31065:1139;;;31267:10;31258:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;:56:::0;::::1;;;;31313:1;31304:6;:10;31258:56;31250:65;;12:1:-1;9::::0;2:12:::1;31250:65:0;31355:10;31332:34;::::0;;;:22:::1;:34;::::0;;;;;;;31383:1:::1;31332:52:::0;;-1:-1:-1;;;;;;;;;;;31434:102:0;;;;;:126;;;;::::1;::::0;;31575:41;;;31434:22:::1;31575:41:::0;;;;;:53;;;;;;;;:77;;;::::1;::::0;;31667:41;;;:22:::1;:41:::0;;;;;:65;;;;::::1;::::0;;31882:17:::1;::::0;-1:-1:-1;;;;;31882:17:0::1;31867:33:::0;;:14:::1;:33:::0;;;;;-1:-1:-1;;;31867:101:0;;;;;;;;31747:103;;;:91;:103;;;;;:221;31987:34;;;:38;;;;32047:30;;;;;;;::::1;::::0;;;;;;;;::::1;31065:1139;;;-1:-1:-1::0;32160:30:0::1;::::0;;32137:1:::1;32160:30:::0;;;;;32171:10:::1;::::0;32160:30:::1;::::0;;;;;::::1;::::0;;::::1;31065:1139;1207:1;;;30549:1664:::0;;:::o;53407:259::-;-1:-1:-1;;;;;53530:27:0;;53501:4;53530:27;;;:14;:27;;;;;;;;:35;;:27;:35;53527:130;;;-1:-1:-1;53590:4:0;53583:11;;73057:449;73145:10;1117:26;;;;:8;:26;;;;;;73173:13;;73145:10;1117:26;;:34;;:26;:34;1026:142;;12:1:-1;9;2:12;1026:142:0;73201:7:::1;73225:68;73235:2;73231:1;:6;;;:26;;;;;73241:8;73250:1;73241:11;;;;;;;;;;;;-1:-1:-1::0;;;;;;73241:16:0::1;::::0;::::1;73231:26;73225:68;;;73276:3;;73225:68;;;73305:23;73341:1;73331:12;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;73331:12:0;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;21:6:-1::0;;108:14:::1;73331:12:0::0;87:42:-1::1;143:17;::::0;-1:-1;73331:12:0::1;;73305:38;;73365:1;73361:5;;73356:103;73372:2;73368:1;:6;;;:26;;;;;73378:8;73387:1;73378:11;;;;;;;;;;;;-1:-1:-1::0;;;;;;73378:16:0::1;::::0;::::1;73368:26;73356:103;;;73434:8;73443:1;73434:11;;;;;;;;;;;;73418:10;73429:1;73418:13;;;;;;;;;;;;;:27;-1:-1:-1::0;;;;;73418:27:0::1;;;;;;;;-1:-1:-1::0;73396:3:0::1;::::0;;::::1;::::0;73356:103:::1;;;73485:10:::0;-1:-1:-1;;1207:1:0::1;73057:449:::0;;;;:::o;5016:29::-;;;;;;;;;;;;;;;-1:-1:-1;;5016:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38805:11644;38938:10;38969:4;1117:26;;;:8;:26;;;;;;38969:4;;38938:10;1117:26;;:34;;:26;:34;1026:142;;12:1:-1;9;2:12;1026:142:0;39008:1:::1;38998:7;:11;:45;;;;;39023:15;:20;;39042:1;39023:20;38998:45;38995:11445;;;-1:-1:-1::0;;;;;39069:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;39061:37;;12:1:-1;9::::0;2:12:::1;39061:37:0;39176:10;39135:24;39278:36:::0;;;:18:::1;:36;::::0;;;;;39267:47;::::1;::::0;::::1;::::0;:77:::1;;-1:-1:-1::0;39332:12:0;39267:77:::1;:125;;;;;39376:16;-1:-1:-1::0;;;;;39362:30:0::1;:10;-1:-1:-1::0;;;;;39362:30:0::1;;;39267:125;39259:134;;12:1:-1;9::::0;2:12:::1;39259:134:0;-1:-1:-1::0;;;;;39574:36:0;::::1;;::::0;;;:18:::1;:36;::::0;;;;;;;;39530:23:::1;:41:::0;;;;;;;39614:7;;39574:36;;39530:80:::1;;;;-1:-1:-1::0;;;;;39472:35:0;;::::1;;::::0;;;:23:::1;:35;::::0;;;;;;;:149;;39530:80;;;::::1;39529:92:::0;;;::::1;39472:149:::0;;::::1;::::0;;;39674:18:::1;:30:::0;;;;;;:59;;;::::1;::::0;;39754:36;::::1;::::0;;;;:65;;;;::::1;::::0;;-1:-1:-1;;;39840:11:0::1;;38995:11445;39884:1;39874:7;:11;:45;;;;;39899:15;:20;;39918:1;39899:20;39874:45;39871:10569;;;-1:-1:-1::0;;;;;39945:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;39937:37;;12:1:-1;9::::0;2:12:::1;39937:37:0;40052:10;40011:24;40154:40:::0;;;:22:::1;:40;::::0;;;;;40143:51;::::1;::::0;::::1;::::0;:81:::1;;-1:-1:-1::0;40212:12:0;40143:81:::1;:129;;;;;40256:16;-1:-1:-1::0;;;;;40242:30:0::1;:10;-1:-1:-1::0;;;;;40242:30:0::1;;;40143:129;40135:138;;12:1:-1;9::::0;2:12:::1;40135:138:0;-1:-1:-1::0;;;;;40462:40:0;::::1;;::::0;;;:22:::1;:40;::::0;;;;;;;;40414:27:::1;:45:::0;;;;;;;40506:7;;40462:40;;40414:88:::1;;;;-1:-1:-1::0;;;;;40352:39:0;;::::1;;::::0;;;:27:::1;:39;::::0;;;;;;;:161;;40414:88;;;::::1;40413:100:::0;;;::::1;40352:161:::0;;::::1;::::0;;;40566:22:::1;:34:::0;;;;;;:63;;;::::1;::::0;;40650:40;::::1;::::0;;;;:69;;;;::::1;::::0;;-1:-1:-1;;;40740:11:0::1;;39871:10569;40784:1;40774:7;:11;:45;;;;;40799:15;:20;;40818:1;40799:20;40774:45;40771:9669;;;-1:-1:-1::0;;;;;40845:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;40837:37;;12:1:-1;9::::0;2:12:::1;40837:37:0;40952:10;40911:24;41054:42:::0;;;:24:::1;:42;::::0;;;;;41043:53;::::1;::::0;::::1;::::0;:83:::1;;-1:-1:-1::0;41114:12:0;41043:83:::1;:131;;;;;41158:16;-1:-1:-1::0;;;;;41144:30:0::1;:10;-1:-1:-1::0;;;;;41144:30:0::1;;;41043:131;41035:140;;12:1:-1;9::::0;2:12:::1;41035:140:0;-1:-1:-1::0;;;;;41368:42:0;::::1;;::::0;;;:24:::1;:42;::::0;;;;;;;;41318:29:::1;:47:::0;;;;;;;41414:7;;41368:42;;41318:92:::1;;;;-1:-1:-1::0;;;;;41254:41:0;;::::1;;::::0;;;:29:::1;:41;::::0;;;;;;;:167;;41318:92;;;::::1;41317:104:::0;;;::::1;41254:167:::0;;::::1;::::0;;;41474:24:::1;:36:::0;;;;;;:65;;;::::1;::::0;;41560:42;::::1;::::0;;;;:71;;;;::::1;::::0;;-1:-1:-1;;;41652:11:0::1;;40771:9669;41696:1;41686:7;:11;:45;;;;;41711:15;:20;;41730:1;41711:20;41686:45;41683:8757;;;-1:-1:-1::0;;;;;41757:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;41749:37;;12:1:-1;9::::0;2:12:::1;41749:37:0;41864:10;41823:24;41966:36:::0;;;:18:::1;:36;::::0;;;;;41955:47;::::1;::::0;::::1;::::0;:77:::1;;-1:-1:-1::0;42020:12:0;41955:77:::1;:125;;;;;42064:16;-1:-1:-1::0;;;;;42050:30:0::1;:10;-1:-1:-1::0;;;;;42050:30:0::1;;;41955:125;41947:134;;12:1:-1;9::::0;2:12:::1;41947:134:0;-1:-1:-1::0;;;;;42262:36:0;::::1;;::::0;;;:18:::1;:36;::::0;;;;;;;;42218:23:::1;:41:::0;;;;;;;42302:7;;42262:36;;42218:80:::1;;;;-1:-1:-1::0;;;;;42160:35:0;;::::1;;::::0;;;:23:::1;:35;::::0;;;;;;;:149;;42218:80;;;::::1;42217:92:::0;;;::::1;42160:149:::0;;::::1;::::0;;;42362:18:::1;:30:::0;;;;;;:59;;;::::1;::::0;;42442:36;::::1;::::0;;;;:65;;;;::::1;::::0;;-1:-1:-1;;;42528:11:0::1;;41683:8757;42572:1;42562:7;:11;:45;;;;;42587:15;:20;;42606:1;42587:20;42562:45;42559:7881;;;-1:-1:-1::0;;;;;42633:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;42625:37;;12:1:-1;9::::0;2:12:::1;42625:37:0;42740:10;42699:24;42842:35:::0;;;:17:::1;:35;::::0;;;;;42831:46;::::1;::::0;::::1;::::0;:76:::1;;-1:-1:-1::0;42895:12:0;42831:76:::1;:124;;;;;42939:16;-1:-1:-1::0;;;;;42925:30:0::1;:10;-1:-1:-1::0;;;;;42925:30:0::1;;;42831:124;42823:133;;12:1:-1;9::::0;2:12:::1;42823:133:0;-1:-1:-1::0;;;;;43138:35:0;::::1;;::::0;;;:17:::1;:35;::::0;;;;;;;;43095:22:::1;:40:::0;;;;;;;43177:7;;43138:35;;43095:78:::1;;;;-1:-1:-1::0;;;;;43035:37:0;;::::1;;::::0;;;:25:::1;:37;::::0;;;;;;;:149;;43095:78;;;::::1;43094:90:::0;;;::::1;43035:149:::0;;::::1;::::0;;;43237:17:::1;:29:::0;;;;;;:58;;;::::1;::::0;;43316:35;::::1;::::0;;;;:64;;;;::::1;::::0;;-1:-1:-1;;;43401:11:0::1;;42559:7881;43445:1;43435:7;:11;:45;;;;;43460:15;:20;;43479:1;43460:20;43435:45;43432:7008;;;-1:-1:-1::0;;;;;43506:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;43498:37;;12:1:-1;9::::0;2:12:::1;43498:37:0;43599:10;43572:24;43701:35:::0;;;:17:::1;:35;::::0;;;;;43690:46;::::1;::::0;::::1;::::0;:76:::1;;-1:-1:-1::0;43754:12:0;43690:76:::1;:124;;;;;43798:16;-1:-1:-1::0;;;;;43784:30:0::1;:10;-1:-1:-1::0;;;;;43784:30:0::1;;;43690:124;43682:133;;12:1:-1;9::::0;2:12:::1;43682:133:0;-1:-1:-1::0;;;;;43997:35:0;::::1;;::::0;;;:17:::1;:35;::::0;;;;;;;;43954:22:::1;:40:::0;;;;;;;44036:7;;43997:35;;43954:78:::1;;;;-1:-1:-1::0;;;;;43894:37:0;;::::1;;::::0;;;:25:::1;:37;::::0;;;;;;;:149;;43954:78;;;::::1;43953:90:::0;;;::::1;43894:149:::0;;::::1;::::0;;;44096:17:::1;:29:::0;;;;;;:58;;;::::1;::::0;;44175:35;::::1;::::0;;;;:64;;;;::::1;::::0;;-1:-1:-1;;;44260:11:0::1;;43432:7008;44304:1;44294:7;:11;:35;;;;;44309:15;:20;;44328:1;44309:20;44294:35;44291:6149;;;-1:-1:-1::0;;;;;44355:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;44347:37;;12:1:-1;9::::0;2:12:::1;44347:37:0;44462:10;44421:24;44564:37:::0;;;:19:::1;:37;::::0;;;;;44553:48;::::1;::::0;::::1;::::0;:78:::1;;-1:-1:-1::0;44619:12:0;44553:78:::1;:126;;;;;44663:16;-1:-1:-1::0;;;;;44649:30:0::1;:10;-1:-1:-1::0;;;;;44649:30:0::1;;;44553:126;44545:135;;12:1:-1;9::::0;2:12:::1;44545:135:0;-1:-1:-1::0;;;;;44866:37:0;::::1;;::::0;;;:19:::1;:37;::::0;;;;;;;;44821:24:::1;:42:::0;;;;;;;44907:7;;44866:37;;44821:82:::1;;;;-1:-1:-1::0;;;;;44759:39:0;;::::1;;::::0;;;:27:::1;:39;::::0;;;;;;;:155;;44821:82;;;::::1;44820:94:::0;;;::::1;44759:155:::0;;::::1;::::0;;;44967:19:::1;:31:::0;;;;;;:60;;;::::1;::::0;;45048:37;::::1;::::0;;;;:66;;;;::::1;::::0;;-1:-1:-1;;;45135:11:0::1;;44291:6149;45179:1;45169:7;:11;:45;;;;;45194:15;:20;;45213:1;45194:20;45169:45;45166:5274;;;-1:-1:-1::0;;;;;45240:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;45232:37;;12:1:-1;9::::0;2:12:::1;45232:37:0;45347:10;45306:24;45449:35:::0;;;:17:::1;:35;::::0;;;;;45438:46;::::1;::::0;::::1;::::0;:76:::1;;-1:-1:-1::0;45502:12:0;45438:76:::1;:124;;;;;45546:16;-1:-1:-1::0;;;;;45532:30:0::1;:10;-1:-1:-1::0;;;;;45532:30:0::1;;;45438:124;45430:133;;12:1:-1;9::::0;2:12:::1;45430:133:0;-1:-1:-1::0;;;;;45745:35:0;::::1;;::::0;;;:17:::1;:35;::::0;;;;;;;;45702:22:::1;:40:::0;;;;;;;45784:7;;45745:35;;45702:78:::1;;;;-1:-1:-1::0;;;;;45642:37:0;;::::1;;::::0;;;:25:::1;:37;::::0;;;;;;;:149;;45702:78;;;::::1;45701:90:::0;;;::::1;45642:149:::0;;::::1;::::0;;;45844:17:::1;:29:::0;;;;;;:58;;;::::1;::::0;;45923:35;::::1;::::0;;;;:64;;;;::::1;::::0;;-1:-1:-1;;;46008:11:0::1;;45166:5274;46052:1;46042:7;:11;:45;;;;;46067:15;:20;;46086:1;46067:20;46042:45;46039:4401;;;-1:-1:-1::0;;;;;46113:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;46105:37;;12:1:-1;9::::0;2:12:::1;46105:37:0;46206:10;46179:24;46308:32:::0;;;:14:::1;:32;::::0;;;;;46297:43;::::1;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;46358:12:0;46297:73:::1;:121;;;;;46402:16;-1:-1:-1::0;;;;;46388:30:0::1;:10;-1:-1:-1::0;;;;;46388:30:0::1;;;46297:121;46289:130;;12:1:-1;9::::0;2:12:::1;46289:130:0;-1:-1:-1::0;;;;;46595:32:0;::::1;;::::0;;;:14:::1;:32;::::0;;;;;;;;46555:19:::1;:37:::0;;;;;;;46631:7;;46595:32;;46555:72:::1;;;;-1:-1:-1::0;;;;;46498:34:0;;::::1;;::::0;;;:22:::1;:34;::::0;;;;;;;:140;;46555:72;;;::::1;46554:84:::0;;;::::1;46498:140:::0;;::::1;::::0;;;46691:14:::1;:26:::0;;;;;;:55;;;::::1;::::0;;46767:32;::::1;::::0;;;;:61;;;;::::1;::::0;;-1:-1:-1;;;46849:11:0::1;;46039:4401;46893:1;46883:7;:11;:46;;;;;46908:15;:21;;46927:2;46908:21;46883:46;46880:3560;;;-1:-1:-1::0;;;;;46955:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;46947:37;;12:1:-1;9::::0;2:12:::1;46947:37:0;47062:10;47021:24;47164:41:::0;;;:23:::1;:41;::::0;;;;;;47153:52;::::1;::::0;::::1;::::0;:82:::1;;-1:-1:-1::0;47223:12:0;47153:82:::1;:130;;;;;47267:16;-1:-1:-1::0;;;;;47253:30:0::1;:10;-1:-1:-1::0;;;;;47253:30:0::1;;;47153:130;47145:139;;12:1:-1;9::::0;2:12:::1;47145:139:0;-1:-1:-1::0;;;;;47478:41:0;::::1;;::::0;;;:23:::1;:41;::::0;;;;;;;47429:28:::1;:46:::0;;;;;;47523:7;;47478:41;;47429:90:::1;;;;-1:-1:-1::0;;;;;47363:43:0;;::::1;;::::0;;;:31:::1;:43;::::0;;;;;;;:167;;47429:90;;;::::1;47428:102:::0;;;::::1;47363:167:::0;;::::1;::::0;;;47583:35;;;;;;;:64;;;::::1;::::0;;47668:41;::::1;::::0;;;;:70;;;;::::1;::::0;;-1:-1:-1;;;47759:11:0::1;;46880:3560;47803:1;47793:7;:11;:46;;;;;47818:15;:21;;47837:2;47818:21;47793:46;47790:2650;;;-1:-1:-1::0;;;;;47865:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;47857:37;;12:1:-1;9::::0;2:12:::1;47857:37:0;47958:10;47931:24;48060:39:::0;;;:21:::1;:39;::::0;;;;;48049:50;::::1;::::0;::::1;::::0;:80:::1;;-1:-1:-1::0;48117:12:0;48049:80:::1;:128;;;;;48161:16;-1:-1:-1::0;;;;;48147:30:0::1;:10;-1:-1:-1::0;;;;;48147:30:0::1;;;48049:128;48041:137;;12:1:-1;9::::0;2:12:::1;48041:137:0;-1:-1:-1::0;;;;;48368:39:0;::::1;;::::0;;;:21:::1;:39;::::0;;;;;;;;48321:26:::1;:44:::0;;;;;;;48411:7;;48368:39;;48321:86:::1;;;;-1:-1:-1::0;;;;;48257:41:0;;::::1;;::::0;;;:29:::1;:41;::::0;;;;;;;:161;;48321:86;;;::::1;48320:98:::0;;;::::1;48257:161:::0;;::::1;::::0;;;48471:21:::1;:33:::0;;;;;;:62;;;::::1;::::0;;48554:39;::::1;::::0;;;;:68;;;;::::1;::::0;;-1:-1:-1;;;48643:11:0::1;;47790:2650;48687:1;48677:7;:11;:46;;;;;48702:15;:21;;48721:2;48702:21;48677:46;48674:1766;;;-1:-1:-1::0;;;;;48749:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;48741:37;;12:1:-1;9::::0;2:12:::1;48741:37:0;48839:10;48812:24;48941:32:::0;;;:14:::1;:32;::::0;;;;;48930:43;::::1;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;48991:12:0;48930:73:::1;:121;;;;;49035:16;-1:-1:-1::0;;;;;49021:30:0::1;:10;-1:-1:-1::0;;;;;49021:30:0::1;;;48930:121;48922:130;;12:1:-1;9::::0;2:12:::1;48922:130:0;-1:-1:-1::0;;;;;49228:32:0;::::1;;::::0;;;:14:::1;:32;::::0;;;;;;;;49188:19:::1;:37:::0;;;;;;;49264:7;;49228:32;;49188:72:::1;;;;-1:-1:-1::0;;;;;49131:34:0;;::::1;;::::0;;;:22:::1;:34;::::0;;;;;;;:140;;49188:72;;;::::1;49187:84:::0;;;::::1;49131:140:::0;;::::1;::::0;;;49324:14:::1;:26:::0;;;;;;:55;;;::::1;::::0;;49400:32;::::1;::::0;;;;:61;;;;::::1;::::0;;-1:-1:-1;;;49482:11:0::1;;48674:1766;49526:1;49516:7;:11;:46;;;;;49541:15;:21;;49560:2;49541:21;49516:46;49513:927;;;-1:-1:-1::0;;;;;49588:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;49580:37;;12:1:-1;9::::0;2:12:::1;49580:37:0;49681:10;49654:24;49783:39:::0;;;:21:::1;:39;::::0;;;;;49772:50;::::1;::::0;::::1;::::0;:80:::1;;-1:-1:-1::0;49840:12:0;49772:80:::1;:128;;;;;49884:16;-1:-1:-1::0;;;;;49870:30:0::1;:10;-1:-1:-1::0;;;;;49870:30:0::1;;;49772:128;49764:137;;12:1:-1;9::::0;2:12:::1;49764:137:0;-1:-1:-1::0;;;;;50091:39:0;::::1;;::::0;;;:21:::1;:39;::::0;;;;;;;;50044:26:::1;:44:::0;;;;;;;50134:7;;50091:39;;50044:86:::1;;;;-1:-1:-1::0;;;;;49980:41:0;;::::1;;::::0;;;:29:::1;:41;::::0;;;;;;;:161;;50044:86;;;::::1;50043:98:::0;;;::::1;49980:161:::0;;::::1;::::0;;;50194:21:::1;:33:::0;;;;;;:62;;;::::1;::::0;;50277:39;::::1;::::0;;;;:68;;;;::::1;::::0;;-1:-1:-1;;;50366:11:0::1;;26263:2376:::0;26418:10;26371:4;26395:34;;;:22;:34;;;;;;;;26432:1;26395:38;;26604:22;:34;;;;;;26581:58;;:22;:58;;;;;:70;;;;;;;;;;26487:2;26469:20;;26510:23;;;;26469:20;26562:89;;;26554:118;;;;;-1:-1:-1;;;26554:118:0;;;;;;;;;;;;-1:-1:-1;;;26554:118:0;;;;;;;;;;;;;;;26754:10;26740:25;;;;:13;:25;;;;;;26693:23;;;;;26740:25;;;:30;26737:162;;;-1:-1:-1;;;;;26804:20:0;;;;;;:8;:20;;;;;;;;:28;;:20;:28;:52;;;;-1:-1:-1;26845:10:0;26836:20;;;;:8;:20;;;;;;;;26804:52;26796:77;;;;;-1:-1:-1;;;26796:77:0;;;;;;;;;;;;-1:-1:-1;;;26796:77:0;;;;;;;;;;;;;;;26987:10;26964:34;;;;:22;:34;;;;;;26919:80;;26952:10;;26919:32;:80::i;:::-;27162:10;27020:14;27139:34;;;:22;:34;;;;;;;;;27124:50;;;:14;:50;;;;;;27321:22;:58;;;;;:70;;;;;;;;;27221:59;;;:23;:59;;;;;:71;;;;;;;;;;27047:22;;;;-1:-1:-1;;;;;27124:50:0;;27020:14;27321:70;27303:3;;27295:4;27221:78;27220:86;27310:7;27219:98;27218:173;;;;;-1:-1:-1;;;;;27442:29:0;;27405:22;27442:29;;;:14;:29;;;;;;;;27495:10;27472:34;;:22;:34;;;;;;27442:65;;;;;;;;27218:173;;;;;-1:-1:-1;27405:22:0;27518:3;;27510:4;27442:72;27441:80;27525:7;27440:92;27405:127;;27545:19;27594:9;27577:14;:26;;;;;;27545:58;;27725:6;27711:11;:20;27628:22;:58;27651:22;:34;27674:10;-1:-1:-1;;;;;27651:34:0;-1:-1:-1;;;;;27651:34:0;;;;;;;;;;;;;27628:58;;;;;;;;;;;:70;27687:10;-1:-1:-1;;;;;27628:70:0;-1:-1:-1;;;;;27628:70:0;;;;;;;;;;;;:103;;;;27844:30;:66;27875:22;:34;27898:10;-1:-1:-1;;;;;27875:34:0;-1:-1:-1;;;;;27875:34:0;;;;;;;;;;;;;27844:66;;;;;;;;;;;;27752:31;:43;27784:10;-1:-1:-1;;;;;27752:43:0;-1:-1:-1;;;;;27752:43:0;;;;;;;;;;;;:79;27796:22;:34;27819:10;-1:-1:-1;;;;;27796:34:0;-1:-1:-1;;;;;27796:34:0;;;;;;;;;;;;;27752:79;;;;;;;;;;;:158;;;;28007:14;:29;28022:13;-1:-1:-1;;;;;28007:29:0;-1:-1:-1;;;;;28007:29:0;;;;;;;;;;;;:65;28037:22;:34;28060:10;-1:-1:-1;;;;;28037:34:0;-1:-1:-1;;;;;28037:34:0;;;;;;;;;;;;;28007:65;;;;;;;;;;;;27923:23;:59;27947:22;:34;27970:10;-1:-1:-1;;;;;27947:34:0;-1:-1:-1;;;;;27947:34:0;;;;;;;;;;;;;27923:59;;;;;;;;;;;:71;27983:10;-1:-1:-1;;;;;27923:71:0;-1:-1:-1;;;;;27923:71:0;;;;;;;;;;;;:149;;;;28163:15;28129:19;:31;28149:10;-1:-1:-1;;;;;28129:31:0;-1:-1:-1;;;;;28129:31:0;;;;;;;;;;;;;:49;28085:19;:31;28105:10;-1:-1:-1;;;;;28085:31:0;-1:-1:-1;;;;;28085:31:0;;;;;;;;;;;;:93;;;;28236:6;28191:19;:31;28211:10;-1:-1:-1;;;;;28191:31:0;-1:-1:-1;;;;;28191:31:0;;;;;;;;;;;;;:51;;;;;;;;;;;28412:15;28339:22;:58;28362:22;:34;28385:10;-1:-1:-1;;;;;28362:34:0;-1:-1:-1;;;;;28362:34:0;;;;;;;;;;;;;28339:58;;;;;;;;;;;:70;28398:10;-1:-1:-1;;;;;28339:70:0;-1:-1:-1;;;;;28339:70:0;;;;;;;;;;;;;:88;28256:22;:58;28279:22;:34;28302:10;-1:-1:-1;;;;;28279:34:0;-1:-1:-1;;;;;28279:34:0;;;;;;;;;;;;;28256:58;;;;;;;;;;;:70;28315:10;-1:-1:-1;;;;;28256:70:0;-1:-1:-1;;;;;28256:70:0;;;;;;;;;;;;:171;;;;28440:34;28458:15;28440:17;:34::i;:::-;-1:-1:-1;28518:10:0;28532:1;28495:34;;;:22;:34;;;;;;;;:38;;;;28559:40;;;;;;;-1:-1:-1;;;;;28559:40:0;;;28518:10;-1:-1:-1;;;;;;;;;;;28559:40:0;;;;;;;;-1:-1:-1;28627:4:0;;26263:2376;-1:-1:-1;;;;;;;;26263:2376:0:o;52684:254::-;-1:-1:-1;;;;;52808:21:0;;52779:4;52808:21;;;:8;:21;;;;;;;;:29;;:21;:29;52805:124;;;-1:-1:-1;52862:4:0;52855:11;;15673:1430;15865:12;;15780:82;:97;;15865:12;;;;-1:-1:-1;;;;;15865:12:0;-1:-1:-1;;;;;;15780:97:0;;;;;;;;;15915:58;:75;;-1:-1:-1;;15915:75:0;;;-1:-1:-1;15915:75:0;;;;;;16030:58;:75;;;;;;;;16118:8;15780:82;16118:52;;:69;;;;;;;;16200:52;:69;;;;;;;;16282:52;:69;;16364:52;:69;;;;;;;;16446:52;:69;;;;;;;;16528:52;:69;;;;;;;;16610:52;:69;;;;;;;;16692:52;:69;;;;;;;;16774:52;:69;;;;;;;;16856:52;:69;;;;;;;;16282;;;;16938;;;;;;17029:42;-1:-1:-1;17020:52:0;;:69;;;;;;;;;;15673:1430::o;28702:1784::-;28850:10;28789:25;28827:34;;;:22;:34;;;;;;;;;28917:41;;;:22;:41;;;;;:53;;;;;;;;;;28827:34;;29010:6;;29029:63;;28827:34;29029:32;:63::i;:::-;29134:6;29108:22;:32;;:85;;;;-1:-1:-1;29177:10:0;29154:34;;;;:22;:34;;;;;;:39;29108:85;29105:1372;;;29288:14;29356:33;;;:14;:33;;;;;;;;;-1:-1:-1;;;;;29356:33:0;29341:49;;:14;:49;;;;;:68;;;;;;;;;29420:3;;29412:4;29341:75;29455:10;29446:20;;;;:8;:20;;;;;;29340:83;;;;-1:-1:-1;29446:20:0;;:28;;:20;:28;:56;;;;;29501:1;29492:6;:10;29446:56;29438:92;;;;;-1:-1:-1;;;29438:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29570:10;29547:34;;;;:22;:34;;;;;;;;29598:1;29547:52;;-1:-1:-1;;;;;;;;;;;29649:102:0;;;;;:126;;;;;;29804:41;;;29649:22;29804:41;;;;;:53;;;;;;;;:77;;;;;;;29910:41;;;:22;:41;;;;;:65;;;;;;30139:82;;-1:-1:-1;;;;;30139:82:0;30124:98;;:14;:98;;;;;:117;;;;;;;;;30004:103;;;:91;:103;;;;;:237;30260:34;;;:38;;;;30320:30;;;;;;;;;;;;;;;;;29105:1372;;;;-1:-1:-1;30433:30:0;;;30410:1;30433:30;;;;;30444:10;;30433:30;;;;;;;;;;29105:1372;28702:1784;;;;:::o;51591:257::-;51738:7;51774:42;;;:23;:42;;;;;;;;-1:-1:-1;;;;;51774:64:0;;;;;;;;;;;;;51591:257::o;53042:274::-;-1:-1:-1;;;;;53176:31:0;;53147:4;53176:31;;;:18;:31;;;;;;;;:39;;:31;:39;53173:134;;;-1:-1:-1;53240:4:0;53233:11;;53798:335;53917:10;2007:32;;;;:14;:32;;;;;;;;:40;;:32;:40;1983:81;;12:1:-1;9;2:12;1983:81:0;53957:10:::1;-1:-1:-1::0;;;;;53957:25:0;::::1;;;53949:34;;12:1:-1;9::::0;2:12:::1;53949:34:0;-1:-1:-1::0;;;;;54000:27:0;::::1;;::::0;;;:14:::1;:27;::::0;;;;;;;;:51;;-1:-1:-1;;54000:51:0::1;::::0;::::1;;::::0;;::::1;::::0;;;54073:50;;;;;;;54090:10:::1;::::0;54073:50:::1;::::0;;;;;;;::::1;53798:335:::0;;;:::o;73573:356::-;73665:10;73693:14;1117:26;;;:8;:26;;;;;;73693:14;;73665:10;1117:26;;:34;;:26;:34;1026:142;;12:1:-1;9;2:12;1026:142:0;73779:26;;73759:6;;73775:70:::1;;-1:-1:-1::0;73832:3:0::1;::::0;-1:-1:-1;73825:10:0::1;;73775:70;-1:-1:-1::0;;;73907:2:0::1;73895:15;73889:22:::0;;73573:356::o;70624:671::-;70786:10;70724:7;70763:34;;;:22;:34;;;;;;70724:7;;70763:39;:58;;;;;70820:1;70806:10;:15;;;;70763:58;:77;;;;;70839:1;70825:10;:15;;;;70763:77;70760:522;;;70870:63;70903:10;70915:17;70870:32;:63::i;:::-;-1:-1:-1;;70985:10:0;70962:34;;;;:22;:34;;;;;;;;:68;;;71059:13;:25;;;;:51;;-1:-1:-1;;71059:51:0;;;;;;;71135:34;;71059:51;71127:55;;70760:522;-1:-1:-1;;71246:10:0;71223:34;;;;:22;:34;;;;;;71259:10;71215:55;;36161:209;36258:10;36295:14;1117:26;;;:8;:26;;;;;;36295:14;;36258:10;1117:26;;:34;;:26;:34;1026:142;;12:1:-1;9;2:12;1026:142:0;-1:-1:-1;;;;;;;36331:20:0;;::::1;;::::0;;;:8:::1;:20;::::0;;;;;;;:29;;;::::1;::::0;;;;;;;;;36161:209::o;57359:4576::-;57477:10;57508:7;1764:23;;;:5;:23;;;;;;57508:7;;;;1764:23;;:31;;:23;:31;1675:137;;12:1:-1;9;2:12;1675:137:0;57690:10:::1;57671:30;::::0;;;:18:::1;:30;::::0;;;;;;;;-1:-1:-1;;;;;57552:33:0;::::1;::::0;;:18:::1;:33:::0;;;;;:65;;;;;;;;;:219;;-1:-1:-1;;57552:219:0::1;-1:-1:-1::0;;;57671:100:0;;::::1;;57552:219:::0;;::::1;::::0;;57544:228:::1;;12:1:-1;9::::0;2:12:::1;57544:228:0;-1:-1:-1::0;;;;;57792:27:0;::::1;57809:10;57792:27;57789:4137;;-1:-1:-1::0;;;;;57926:29:0;::::1;;::::0;;;:14:::1;:29;::::0;;;;;;;57975:10:::1;57956:30:::0;;:18:::1;:30:::0;;;;;;57926:61;;;;;;;;;;57841:32;;;:17:::1;:32:::0;;;;;:64;;;;;;;:146;;;;-1:-1:-1;;;58027:98:0;;:30:::1;:98:::0;;;;:103;:166;::::1;;;-1:-1:-1::0;58176:10:0::1;58134:54;58157:30:::0;;;:18:::1;:30;::::0;;;;;;;;58134:54;;:22:::1;:54:::0;;;;;;:59;58027:166:::1;58024:442;;;-1:-1:-1::0;;;;;58239:32:0;::::1;;::::0;;;:17:::1;:32;::::0;;;;;;;58291:10:::1;58272:30:::0;;:18:::1;:30:::0;;;;;;;58239:64;;;;;;;;:103;;;58410:30;58387:54;;:22:::1;:54:::0;;;;;:59;;58445:1:::1;58387:59;::::0;;58024:442:::1;-1:-1:-1::0;;;;;58506:29:0;::::1;;::::0;;;:14:::1;:29;::::0;;;;;;;58555:10:::1;58536:30:::0;;:18:::1;:30:::0;;;;;;;58506:61;;;;;;;;:96;;;58802:30;58779:54;;;:22:::1;:54:::0;;;;;;58686:32;;;:17:::1;:32:::0;;;;;:64;;;;;;;;;58506:29;;58779:54;58761:3:::1;::::0;58753:4:::1;58686:71;58685:79;58768:7;58684:91;58683:150;;;;;-1:-1:-1::0;;;;;58918:29:0;::::1;58874:19;58918:29:::0;;;:14:::1;:29;::::0;;;;;;;58967:10:::1;58948:30:::0;;:18:::1;:30:::0;;;;;;58918:61;;;;;;;;58683:150;;;::::1;::::0;-1:-1:-1;58874:19:0;58683:150;;58990:3:::1;::::0;58982:4:::1;58918:68;58916:77;58997:7;58915:89;58914:105;;;;;59151:10;59056:33;59132:30:::0;;;:18:::1;:30;::::0;;;;;;;;;59109:54;;:22:::1;:54:::0;;;;;;;;58914:105;;;::::1;59205:86:::0;;;;59394:17:::1;::::0;-1:-1:-1;;;;;59394:17:0::1;59379:33:::0;;:14:::1;:33:::0;;;;;-1:-1:-1;;;59379:101:0;;;;;;;;;;;59768:30;;59745:54;;;;;;;;;59640:101;;;;;;59871:4:::1;59864:3;59836:31:::0;;::::1;59835:40:::0;;::::1;59745:60:::0;;::::1;59744:69:::0;;::::1;59640:173:::0;::::1;59639:236:::0;;;::::1;59517:358:::0;;;60007:16:::1;::::0;58914:105;;-1:-1:-1;59379:101:0;60007:16;59959:26;::::1;59958:34;59996:7;59957:46;60007:16:::0;59956:67:::1;;;;60114:17;::::0;-1:-1:-1;;;;;60114:17:0::1;60099:33;::::0;;;:14:::1;:33;::::0;;;;;;;-1:-1:-1;;;60099:101:0;;;;;;;;59956:67;;::::1;::::0;-1:-1:-1;59956:67:0;;60212:3:::1;::::0;60204:4:::1;60099:109;60098:117;60219:7;60097:129;60096:150;;;;;;60060:16;:186;;;;60357:14;60287:17;:49;60305:18;:30;60324:10;-1:-1:-1::0;;;;;60305:30:0::1;-1:-1:-1::0;;;;;60305:30:0::1;;;;;;;;;;;;;60287:49;;;;;;;;;;;:84;;;;60490:14;60408;:29;60423:13;-1:-1:-1::0;;;;;60408:29:0::1;-1:-1:-1::0;;;;;60408:29:0::1;;;;;;;;;;;;:61;60438:18;:30;60457:10;-1:-1:-1::0;;;;;60438:30:0::1;-1:-1:-1::0;;;;;60438:30:0::1;;;;;;;;;;;;;60408:61;;;;;;;;;;;:96;;;;60541:15;60577:14;:29;60592:13;-1:-1:-1::0;;;;;60577:29:0::1;-1:-1:-1::0;;;;;60577:29:0::1;;;;;;;;;;;;:61;60607:18;:30;60626:10;-1:-1:-1::0;;;;;60607:30:0::1;-1:-1:-1::0;;;;;60607:30:0::1;;;;;;;;;;;;;60577:61;;;;;;;;;;;;60541:97;;60675:18;60714:17;:32;60732:13;-1:-1:-1::0;;;;;60714:32:0::1;-1:-1:-1::0;;;;;60714:32:0::1;;;;;;;;;;;;:64;60747:18;:30;60766:10;-1:-1:-1::0;;;;;60747:30:0::1;-1:-1:-1::0;;;;;60747:30:0::1;;;;;;;;;;;;;60714:64;;;;;;;;;;;;60675:103;;60926:10;60908:14;60898:7;:24;60897:39;60815:14;:29;60830:13;-1:-1:-1::0;;;;;60815:29:0::1;-1:-1:-1::0;;;;;60815:29:0::1;;;;;;;;;;;;:61;60845:18;:30;60864:10;-1:-1:-1::0;;;;;60845:30:0::1;-1:-1:-1::0;;;;;60845:30:0::1;;;;;;;;;;;;;60815:61;;;;;;;;;;;:121;;;;61041:1;60957:30;:62;60988:18;:30;61007:10;-1:-1:-1::0;;;;;60988:30:0::1;-1:-1:-1::0;;;;;60988:30:0::1;;;;;;;;;;;;;60957:62;;;;;;;;;;;;:85;;;;;;;;;;;61199:1;61079:30;:98;-1:-1:-1::0;;;61079:98:0::1;;;;;;;;;;;;;;:121;;;;;;;;;;;61443:3;61371:14;:29;61386:13;-1:-1:-1::0;;;;;61371:29:0::1;-1:-1:-1::0;;;;;61371:29:0::1;;;;;;;;;;;;:61;61401:18;:30;61420:10;-1:-1:-1::0;;;;;61401:30:0::1;-1:-1:-1::0;;;;;61401:30:0::1;;;;;;;;;;;;;61371:61;;;;;;;;;;;;61435:4;61371:68;61370:76;;;;;-1:-1:-1::0;;;;;61286:32:0;;::::1;;::::0;;;:17:::1;:32;::::0;;;;;;;61338:10:::1;61319:30:::0;;;:18:::1;:30:::0;;;;;;;61286:64;;;;;;;;;61270:11:::1;::::0;;61361:3:::1;61353:4;61286:71:::0;;::::1;61285:79:::0;;;::::1;61270:95:::0;;::::1;61370:76:::0;;;::::1;61269:178:::0;;;::::1;61237:210:::0;;;61503:30;;61550:46;;;:14:::1;:46:::0;;;;;;;;::::1;61535:62:::0;;:14:::1;:62:::0;;;;;:94;;;;;;;;;;61473:157;;;;;;;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;;61708:10:0::1;61659:62;61689:30:::0;;;:18:::1;:30;::::0;;;;;;;;61674:46;;;:14:::1;:46:::0;;;;;;-1:-1:-1;;;;;61674:46:0::1;61659:62:::0;;:14:::1;:62:::0;;;;;:94;;;;;;;;;;-1:-1:-1;61674:46:0;;-1:-1:-1;61651:106:0::1;::::0;-1:-1:-1;;;;;61651:106:0::1;57789:4137;61859:10;61810:62;61840:30:::0;;;:18:::1;:30;::::0;;;;;;;;61825:46;;;:14:::1;:46:::0;;;;;;-1:-1:-1;;;;;61825:46:0::1;61810:62:::0;;:14:::1;:62:::0;;;;;:94;;;;;;;;;;-1:-1:-1;61906:1:0::1;::::0;-1:-1:-1;57789:4137:0::1;57359:4576:::0;;;;;;:::o;56161:1088::-;56297:10;56328:4;1764:23;;;:5;:23;;;;;;56328:4;;56297:10;1764:23;;:31;;:23;:31;1675:137;;12:1:-1;9;2:12;1675:137:0;56370:4:::1;::::0;-1:-1:-1;56419:10:0::1;56400:30;::::0;;;:18:::1;:30;::::0;;;;;:51;::::1;56392:60;;12:1:-1;9::::0;2:12:::1;56392:60:0;-1:-1:-1::0;;;;;56469:33:0;::::1;;::::0;;;:18:::1;:33;::::0;;;;;;;:52;;;;;;;;:79;;-1:-1:-1;;56469:79:0::1;::::0;::::1;;::::0;;::::1;::::0;;;56565:14:::1;:33:::0;;;;;;:63;;-1:-1:-1;;;;;;56565:63:0::1;::::0;;::::1;::::0;;;56779:30:::1;:49:::0;;56869:62;;;;;;;::::1;::::0;;;;;;56889:10:::1;::::0;56869:62:::1;::::0;;;;;;::::1;56955:4;56948:11;;;;64333:809:::0;64467:10;64498:5;1117:26;;;:8;:26;;;;;;64498:5;;64467:10;1117:26;;:34;;:26;:34;1026:142;;12:1:-1;9;2:12;1026:142:0;64525:21:::1;64559:33:::0;;;:14:::1;:33;::::0;;;;;;;;-1:-1:-1;;;;;64661:47:0;;::::1;::::0;;:31:::1;:47:::0;;;;;:66;;;;;;;;;64608:30:::1;:49:::0;;;;;;;;64559:33;::::1;::::0;64608:119:::1;::::0;::::1;::::0;:195:::1;;-1:-1:-1::0;64802:1:0::1;64742:41:::0;;;:22:::1;:41;::::0;;;;;;;-1:-1:-1;;;;;64742:57:0;::::1;::::0;;;;;;;;:61;;64608:195:::1;64605:528;;;-1:-1:-1::0;;;;;64829:33:0;::::1;;::::0;;;:18:::1;:33;::::0;;;;;;;:52;;;;;;;;:59;;-1:-1:-1;;64829:59:0::1;64884:4;64829:59;::::0;;64913:29;;;:14:::1;:29:::0;;;;;:48;;;;;;;64906:60:::1;;;;64983:66;65016:14;65031:17;64983:32;:66::i;:::-;65073:1;65066:8;;;;;64605:528;65118:1;65111:8;;;;;19328:2386:::0;19486:10;19517:13;1117:26;;;:8;:26;;;;;;19517:13;;19486:10;1117:26;;:34;;:26;:34;1026:142;;12:1:-1;9;2:12;1026:142:0;-1:-1:-1;;;;;19560:40:0;::::1;;::::0;;;:18:::1;:40;::::0;;;;;::::1;;:48;;:40:::0;:48:::1;:82:::0;::::1;;;-1:-1:-1::0;;;;;;19622:12:0;::::1;;::::0;;;:5:::1;:12;::::0;;;;;::::1;;:20;;:12:::0;:20:::1;19560:82;:144;;;;-1:-1:-1::0;;;;;;19656:40:0;::::1;;::::0;;;:18:::1;:40;::::0;;;;;::::1;;:48;;:40:::0;:48:::1;19560:144;19552:153;;12:1:-1;9::::0;2:12:::1;19552:153:0;19788:10;19747:24;19884:37:::0;;;:19:::1;:37:::0;;;;;;19853:11:::1;::::0;19884:53;-1:-1:-1;19881:1824:0::1;;;-1:-1:-1::0;;;;;20099:97:0;;::::1;:90;:97:::0;;;-1:-1:-1;;;;;;;;;;;20099:90:0::1;:97:::0;;;:90;:97;;;;;20094:1:::1;20078:17:::0;::::1;20077:119:::0;;::::1;19959:237:::0;;;20246:26;;;;;;;;:66;::::1;20217:95:::0;;20489:112;;::::1;::::0;;;;;;;;;;20467:134;::::1;20333:268:::0;;20666:41;;;;;;;;:63;;::::1;20622:107:::0;;20907:112;;::::1;::::0;;;;;;;;;;20901:2:::1;20885:18:::0;::::1;20884:135:::0;;::::1;20750:269:::0;;;21084:41;;;;;;;;:82;;::::1;21040:126:::0;;21313:40;;;::::1;::::0;;;:22:::1;:40:::0;;;;;;21290:64;;:22:::1;:64:::0;;;;;:82;;;;;;;;;;:98;;::::1;21187:201:::0;;21467:37;;;;;;;;:53;;;::::1;21409:111:::0;;;21541:18:::1;:36:::0;;;;:61;;-1:-1:-1;;21541:61:0::1;-1:-1:-1::0;21541:61:0;;::::1;::::0;;;-1:-1:-1;;21623:11:0::1;;19881:1824;21686:5;21679:12;;;;;;76142:343:::0;76223:7;76279:10;76223:7;76352:4;76322:27;76279:10;76322:9;:27::i;:::-;:34;;;;;;76302:55;;76384:1;76373:7;:12;76370:106;;76410:7;-1:-1:-1;76403:14:0;;-1:-1:-1;76403:14:0;76370:106;76461:1;76454:8;;;;;;70145:349;-1:-1:-1;;;;;70281:23:0;;70252:4;70281:23;;;:8;:23;;;;;;;;:31;;:23;:31;70278:207;;;-1:-1:-1;70349:10:0;70330:30;;;;:18;:30;;;;;:64;;;70418:4;70411:11;;62090:2010;62223:21;62257:33;;;:14;:33;;;;;;;;;62346:22;:41;;;;;-1:-1:-1;;;;;62346:57:0;;;;;;;;;;;;62471:31;:47;;;;;:66;;;;;;;;;62419:30;:49;;;;;;;;62257:33;;;62346:57;;-1:-1:-1;62419:203:0;;;;-1:-1:-1;;;;;;62551:47:0;;;;;;:31;:47;;;;;;;;:66;;;;;;;;;:71;62419:203;62416:1675;;;-1:-1:-1;;;;;62728:29:0;;;;;;;:14;:29;;;;;;;;:48;;;;;;;;;62653:23;:42;;;;;:58;;;;;;;;;;;;:123;62876:49;;;:30;:49;;;;;;62793:47;;;:31;:47;;;;;:66;;;;;;;;:132;62416:1675;;;-1:-1:-1;;;;;63012:47:0;;;;;;:31;:47;;;;;;;;:66;;;;;;;;;62960:30;:49;;;;;;;:118;62957:1134;;;63108:17;63146:42;;;:23;:42;;;;;;;;-1:-1:-1;;;;;63146:58:0;;;;;;;;;;63233:22;;63215:3;;63207:4;63146:65;63145:73;63222:7;63144:85;63143:112;;;;;-1:-1:-1;;;;;63314:29:0;;63273:22;63314:29;;;:14;:29;;;;;;;;:48;;;;;;;;;63143:112;;;;;-1:-1:-1;63273:22:0;63373:3;;63365:4;63314:55;63313:63;63380:7;63312:75;63273:114;;63404:19;63457:9;63440:14;:26;;;;;63483:41;;;;:22;:41;;;;;;;;-1:-1:-1;;;;;63483:57:0;;;;;;;;;;;;63440:26;;;;63483:85;;;;63650:35;;;;;;;;:49;;;63649:76;;;63597:128;;;63825:49;;;:30;:49;;;;;;63742:47;;;:31;:47;;;;;:66;;;;;;;;:132;63978:29;;;;;:14;:29;;;;;:48;;;;;;;;;63903:23;:42;;;;;:58;;;;;;;:123;-1:-1:-1;62957:1134:0;;-1:-1:-1;;62957:1134:0;89664:367;89755:4;89784:19;;89781:241;;-1:-1:-1;89854:16:0;;;89892:2;89874:20;;89854:41;89821:74;;-1:-1:-1;89912:11:0;;89781:241;-1:-1:-1;89978:1:0;;-1:-1:-1;89978:1:0;89996:12;;87999:1554;88143:11;;;:29;;88119:53;;88244:19;;;88236:4;88218:22;;;88217:46;;;88185:78;;88339:23;;;88312:50;;88276:86;;88441:26;;;88414:53;;88375:92;;88539:19;;;88512:46;;88480:78;;88632:21;;;88605:48;;88571:82;;88727:21;;;88700:48;;88666:82;;88824:23;;;88797:50;;88761:86;;88921:21;;;88894:48;;88860:82;;89013:18;;;88986:45;;88955:76;;89111:27;;;89084:54;;89044:94;;89216:25;;;89189:52;;89151:90;;89312:18;;;89285:45;;89254:76;;89407:25;;;89380:52;;89343:89;;89505:14;;;89499:2;89473:28;;;89472:47;;;89445:74;;-1:-1:-1;;87999:1554:0:o;90138:1311::-;-1:-1:-1;;;;;90340:26:0;;;90314:4;90340:26;;;:18;:26;;;;;;;;:62;;90398:4;90380:22;;;90340:62;;;;;90415:22;:30;;;;;:66;;;;;;90519:23;;;;90494:49;;:24;:49;;;;;:85;;;;;;90592:26;;;:18;:26;;;;;:62;;;;;;90667:29;;;;;:17;:29;;;;;:65;;;;;;90745:32;;;;;:17;:32;;;;;:68;;;;;;90826:36;;;;;:19;:36;;;;;:72;;;;;;90929:19;;;;90911:38;;:17;:38;;;;;:74;;;;;;91013:12;;;;90998:28;;:14;:28;;;;;:64;;;;;;91099:21;;;;91075:46;;;;;;;;:82;;;;;;91192:19;;;;91170:42;;:21;:42;;;;;:78;;;;;;91276:12;;;;;;;91261:28;;:14;:28;;;;;:63;;;;;;91359:19;;;;;91337:42;;:21;:42;;;;:78;;;;;;;-1:-1:-1;;90138:1311:0:o

Swarm Source

ipfs://95dc0c7b1ff41291792765e97a9611a19f8b80125522de60a30b0e68542be870

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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