ETH Price: $2,420.88 (+0.14%)

Contract

0x30aB5464441D355502D370b73aBf01673f90E80A
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040178950702023-08-11 23:59:59421 days ago1691798399IN
 Create: MTMCharacters
0 ETH0.0402334812.49094596

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MTMCharacters

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-12
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

// This is a special "passive" migration contract of MTM. 
// Every single method is modified and has custom "passive" migration proxy logic.

abstract contract Ownable {

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    address public owner;

    // NOTE: proxyable - no constructor!    
    // constructor() { 
    //     owner = msg.sender; 
    // }
    
    modifier onlyOwner { 
        require(owner == msg.sender, "onlyOwner not owner!");
        _; 
    }
    function transferOwnership(address new_) external onlyOwner {
        address _old = owner;
        owner = new_;
        emit OwnershipTransferred(_old, new_);
    }
}

interface iCM {
    // Views
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function totalSupply() external view returns (uint256);
    function ownerOf(uint256 tokenId_) external view returns (address);
    function balanceOf(address address_) external view returns (uint256);
    function getApproved(uint256 tokenId_) external view returns (address);
    function isApprovedForAll(address owner_, address operator_) external view returns (bool);
}

// ERC721I Functions, but we modified it for passive migration method
// ERC721IMigrator uses local state storage for gas savings.
// It is like ERC721IStorage and ERC721IOperator combined into one.
contract ERC721IMigrator is Ownable {

    // Interface the MTM Characters Main V2
    iCM public CM;
    function setCM(address address_) external onlyOwner {
        CM = iCM(address_);
    }

    // Name and Symbol Stuff
    string public name; string public symbol;
    
    // NOTE: proxy initialize instead
    // constructor(string memory name_, string memory symbol_) {
    //     name = name_; symbol = symbol_;
    // }

    // We turned these to _ prefix so we can use a override function
    // To display custom proxy and passive migration logic
    uint256 public totalSupply;
    mapping(uint256 => address) public _ownerOf;
    mapping(address => uint256) public _balanceOf;

    // Here we have to keep track of a initialized balanceOf to prevent any view issues
    mapping(address => bool) public _balanceOfInitialized;

    // We disregard the previous contract's approvals
    mapping(uint256 => address) public getApproved;
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    // // TotalSupply Setter
    // Here, we set the totalSupply to equal the previous
    function setTotalSupply(uint256 totalSupply_) external onlyOwner {
        totalSupply = totalSupply_; 
    }

    // // Initializer
    // This is a custom Transfer emitter for the initialize of this contract only
    function initialize(uint256[] calldata tokenIds_, address[] calldata owners_) external onlyOwner {
        require(tokenIds_.length == owners_.length,
            "initialize(): array length mismatch!");
        
        for (uint256 i = 0; i < tokenIds_.length; i++) {
            emit Transfer(address(0x0), owners_[i], tokenIds_[i]);
        }
    }

    // OwnerOf (Proxy View)
    function ownerOf(uint256 tokenId_) public view returns (address) {
        // Find out of the _ownerOf slot has been initialized.
        // We hardcode the tokenId_ to save gas.
        if (tokenId_ < 3620 && _ownerOf[tokenId_] == address(0x0)) {
            // _ownerOf[tokenId_] is not initialized yet, so return the CM V2 value.
            return CM.ownerOf(tokenId_);
        } else {
            // If it is already initialized, or is higher than migration Id
            // return local state storage instead.
            return _ownerOf[tokenId_];
        }
    }

    // BalanceOf (Proxy View)
    function balanceOf(address address_) public view returns (uint256) {
        // Proxy the balance function
        // We have a tracker of initialization of _balanceOf to track the differences
        // If initialized, we use the state storage. Otherwise, we use CM V1 storage.
        if (_balanceOfInitialized[address_]) {
            return _balanceOf[address_]; 
        } else {
            return CM.balanceOf(address_);
        }
    }

    // Events! L[o_o]⅃ 
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Mint(address indexed to, uint256 tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    // Functions
    function _mint(address to_, uint256 tokenId_) internal virtual {
        require(to_ != address(0x0), "ERC721IMigrator: _mint() Mint to Zero Address!");
        require(ownerOf(tokenId_) == address(0x0), "ERC721IMigrator: _mint() Token already Exists!");

        // // ERC721I Logic

        // We set _ownerOf in a normal way
        _ownerOf[tokenId_] = to_;

        // We rebalance the _balanceOf on initialization, otherwise follow normal ERC721I logic
        if (_balanceOfInitialized[to_]) {
            // If we are already initialized
            _balanceOf[to_]++;
        } else {
            _balanceOf[to_] = (CM.balanceOf(to_) + 1);
            _balanceOfInitialized[to_] = true;
        }

        // Increment TotalSupply as normal
        totalSupply++;

        // // ERC721I Logic End

        // Emit Events
        emit Transfer(address(0x0), to_, tokenId_);
        emit Mint(to_, tokenId_);
    }

    function _transfer(address from_, address to_, uint256 tokenId_) internal virtual {
        require(from_ == ownerOf(tokenId_), "ERC721IMigrator: _transfer() Transfer from_ != ownerOf(tokenId_)");
        require(to_ != address(0x0), "ERC721IMigrator: _transfer() Transfer to Zero Address!");

        // // ERC721I Transfer Logic

        // If token has an approval
        if (getApproved[tokenId_] != address(0x0)) {
            // Remove the outstanding approval
            getApproved[tokenId_] = address(0x0);
        }

        // Set the _ownerOf to the receiver
        _ownerOf[tokenId_] = to_;

        // // Initialize and Rebalance _balanceOf 
        if (_balanceOfInitialized[from_]) {
            // If from_ is initialized, do normal balance change
            _balanceOf[from_]--;
        } else {
            // If from_ is NOT initialized, follow rebalance flow
            _balanceOf[from_] = (CM.balanceOf(from_) - 1);
            // Set from_ as initialized
            _balanceOfInitialized[from_] = true;
        }

        if (_balanceOfInitialized[to_]) {
            // If to_ is initialized, do normal balance change
            _balanceOf[to_]++;
        } else {
            // If to_ is NOT initialized, follow rebalance flow
            _balanceOf[to_] = (CM.balanceOf(to_) + 1);
            // Set to_ as initialized;
            _balanceOfInitialized[to_] = true;
        }

        // // ERC721I Transfer Logic End

        emit Transfer(from_, to_, tokenId_);
    }

    // Approvals
    function _approve(address to_, uint256 tokenId_) internal virtual {
        if (getApproved[tokenId_] != to_) {
            getApproved[tokenId_] = to_;
            emit Approval(ownerOf(tokenId_), to_, tokenId_);
        }
    }
    function _setApprovalForAll(address owner_, address operator_, bool approved_) internal virtual {
        require(owner_ != operator_, "ERC721IMigrator: _setApprovalForAll() Owner must not be the Operator!");
        isApprovedForAll[owner_][operator_] = approved_;
        emit ApprovalForAll(owner_, operator_, approved_);
    }

    // // Functional Internal Views
    function _isApprovedOrOwner(address spender_, uint256 tokenId_) internal view returns (bool) {
        address _owner = ownerOf(tokenId_);
        require(_owner != address(0x0), "ERC721IMigrator: _isApprovedOrOwner() Owner is Zero Address!");
        return (spender_ == _owner // is the owner OR
            || spender_ == getApproved[tokenId_] // is approved for token OR
            || isApprovedForAll[_owner][spender_] // isApprovedForAll spender 
        );
    }

    // Exists
    function _exists(uint256 tokenId_) internal view virtual returns (bool) {
        // We hardcode tokenId_ for gas savings
        if (tokenId_ < 3620) { return true; }
        return _ownerOf[tokenId_] != address(0x0);
    }

    // Public Write Functions 
    function approve(address to_, uint256 tokenId_) public virtual {
        address _owner = ownerOf(tokenId_);
        require(to_ != _owner, "ERC721IMigrator: approve() cannot approve owner!");
        require(msg.sender == _owner // sender is the owner of the token
            || isApprovedForAll[_owner][msg.sender], // or isApprovedForAll for the owner
            "ERC721IMigrator: approve() Caller is not owner of isApprovedForAll!");
        _approve(to_, tokenId_);
    }
    // SetApprovalForAll - the msg.sender is always the subject of approval
    function setApprovalForAll(address operator_, bool approved_) public virtual {
        _setApprovalForAll(msg.sender, operator_, approved_);
    }

    // Transfers
    function transferFrom(address from_, address to_, uint256 tokenId_) public virtual {
        require(_isApprovedOrOwner(msg.sender, tokenId_), 
            "ERC721IMigrator: transferFrom() _isApprovedOrOwner = false!");
        _transfer(from_, to_, tokenId_);
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory data_) public virtual {
        transferFrom(from_, to_, tokenId_);
        if (to_.code.length != 0) {
            (, bytes memory _returned) = to_.staticcall(abi.encodeWithSelector(0x150b7a02, msg.sender, from_, tokenId_, data_));
            bytes4 _selector = abi.decode(_returned, (bytes4));
            require(_selector == 0x150b7a02, "ERC721IMigrator: safeTransferFrom() to_ not ERC721Receivable!");
        }
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_) public virtual {
        safeTransferFrom(from_, to_, tokenId_, "");
    }

    // OZ Standard Stuff
    function supportsInterface(bytes4 interfaceId_) public pure returns (bool) {
        return (interfaceId_ == 0x80ac58cd || interfaceId_ == 0x5b5e139f);
    }

    // High Gas Loop View Functions
    function walletOfOwner(address address_) public virtual view returns (uint256[] memory) {
        uint256 _balance = balanceOf(address_);
        uint256[] memory _tokens = new uint256[](_balance);
        uint256 _index;
        uint256 _loopThrough = totalSupply;
        for (uint256 i = 0; i < _loopThrough; i++) {
            // Add another loop through for each 0x0 until array is filled
            if (ownerOf(i) == address(0x0) && _tokens[_balance - 1] == 0) {
                _loopThrough++;
            }
            // Fill the array on each token found
            if (ownerOf(i) == address_) {
                // Record the ID in the index 
                _tokens[_index] = i;
                // Increment the index
                _index++;
            }
        }
        return _tokens;
    }

    // TokenURIs Functions Omitted //

}

interface IERC721 {
    function ownerOf(uint256 tokenId_) external view returns (address);
    function transferFrom(address from_, address to_, uint256 tokenId_) external;
}

interface iCS {
    struct Character {
        uint8  race_;
        uint8  renderType_;
        uint16 transponderId_;
        uint16 spaceCapsuleId_;
        uint8  augments_;
        uint16 basePoints_;
        uint16 totalEquipmentBonus_;
    }
    struct Stats {
        uint8 strength_; 
        uint8 agility_; 
        uint8 constitution_; 
        uint8 intelligence_; 
        uint8 spirit_; 
    }
    struct Equipment {
        uint8 weaponUpgrades_;
        uint8 chestUpgrades_;
        uint8 headUpgrades_;
        uint8 legsUpgrades_;
        uint8 vehicleUpgrades_;
        uint8 armsUpgrades_;
        uint8 artifactUpgrades_;
        uint8 ringUpgrades_;
    }

    // Create Character
    function createCharacter(uint tokenId_, Character memory Character_) external;
    // Characters
    function setName(uint256 tokenId_, string memory name_) external;
    function setRace(uint256 tokenId_, string memory race_) external;
    function setRenderType(uint256 tokenId_, uint8 renderType_) external;
    function setTransponderId(uint256 tokenId_, uint16 transponderId_) external;
    function setSpaceCapsuleId(uint256 tokenId_, uint16 spaceCapsuleId_) external;
    function setAugments(uint256 tokenId_, uint8 augments_) external;
    function setBasePoints(uint256 tokenId_, uint16 basePoints_) external;
    function setBaseEquipmentBonus(uint256 tokenId_, uint16 baseEquipmentBonus_) external;
    function setTotalEquipmentBonus(uint256 tokenId_, uint16 totalEquipmentBonus) external;
    // Stats
    function setStrength(uint256 tokenId_, uint8 strength_) external;
    function setAgility(uint256 tokenId_, uint8 agility_) external;
    function setConstitution(uint256 tokenId_, uint8 constitution_) external;
    function setIntelligence(uint256 tokenId_, uint8 intelligence_) external;
    function setSpirit(uint256 tokenId_, uint8 spirit_) external;
    // Equipment
    function setWeaponUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setChestUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setHeadUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setLegsUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setVehicleUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setArmsUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setArtifactUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setRingUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    // Structs and Mappings
    function names(uint256 tokenId_) external view returns (string memory);
    function characters(uint256 tokenId_) external view returns (Character memory);
    function stats(uint256 tokenId_) external view returns (Stats memory);
    function equipments(uint256 tokenId_) external view returns (Equipment memory);
    function contractToRace(address contractAddress_) external view returns (uint8);
}

interface iCC {
    function queryCharacterYieldRate(uint8 augments_, uint16 basePoints_, uint16 totalEquipmentBonus_) external view returns (uint256);
    function getEquipmentBaseBonus(uint16 spaceCapsuleId_) external view returns (uint16); 
}

interface iMES {
    // View Functions
    function balanceOf(address address_) external view returns (uint256);
    function pendingRewards(address address_) external view returns (uint256); 
    // Administration
    function setYieldRate(address address_, uint256 yieldRate_) external;
    function addYieldRate(address address_, uint256 yieldRateAdd_) external;
    function subYieldRate(address address_, uint256 yieldRateSub_) external;
    // Credits System
    function deductCredits(address address_, uint256 amount_) external;
    function addCredits(address address_, uint256 amount_) external;
    // Claiming
    function updateReward(address address_) external;
    function burn(address from, uint256 amount_) external;
}

interface iMetadata {
    function renderMetadata(uint256 tokenId_) external view returns (string memory);
}

contract MTMCharacters is ERC721IMigrator {

    // Interfaces
    iCS public CS; 
    iCC public CC; 
    iMES public MES; 
    iMetadata public Metadata;
    IERC721 public TP; 
    IERC721 public SC;

    function setContracts(address metadata_, address cc_, address cs_, 
    address mes_, address tp_, address sc_) external onlyOwner {
        CS = iCS(cs_); 
        CC = iCC(cc_); 
        MES = iMES(mes_); 
        Metadata = iMetadata(metadata_);
        TP = IERC721(tp_); 
        SC = IERC721(sc_);
    }

    ///// Proxy Initializer ///// 
    bool public proxyInitialized;

    function proxyInitialize(address newOwner_) public {
        
        // One-way switch
        require(!proxyInitialized, "Proxy Initialized!");
        proxyInitialized = true;

        // ERC721
        name = "Martians Characters";
        symbol = "MARTIANS";

        // Ownable
        owner = newOwner_;
    }

    ///// Constructor ///// 
    constructor() { 
        proxyInitialize(msg.sender);
    }

    // Mappings
    mapping(address => mapping(uint256 => bool)) public contractAddressToTokenUploaded;

    // Internal Write Functions
    function __yieldMintHook(address to_, uint256 tokenId_) internal {
        // First, we update the reward. 
        MES.updateReward(to_);

        // Then, we query the token yield rate.
        iCS.Character memory _Character = CS.characters(tokenId_);
        uint256 _tokenYieldRate = CC.queryCharacterYieldRate(_Character.augments_, _Character.basePoints_, _Character.totalEquipmentBonus_);

        // Lastly, we adjust the yield rate of the address.
        MES.addYieldRate(to_, _tokenYieldRate);
    }
    function __yieldTransferHook(address from_, address to_, uint256 tokenId_) internal {
        // First, we update the reward. 
        MES.updateReward(from_); MES.updateReward(to_);

        // Then, we query the token yield rate.
        iCS.Character memory _Character = CS.characters(tokenId_);
        uint256 _tokenYieldRate = CC.queryCharacterYieldRate(_Character.augments_, _Character.basePoints_, _Character.totalEquipmentBonus_);

        // Lastly, we adjust the yield rate of the addresses.
        MES.subYieldRate(from_, _tokenYieldRate); MES.addYieldRate(to_, _tokenYieldRate);
    }

    // Public Write Functions
    mapping(uint8 => bool) public renderTypeAllowed;
    function setRenderTypeAllowed(uint8 renderType_, bool bool_) external onlyOwner {
        renderTypeAllowed[renderType_] = bool_;
    }

    function beamCharacter(uint256 transponderId_, uint256 spaceCapsuleId_, uint8 renderType_) public {
        require(msg.sender == TP.ownerOf(transponderId_) && msg.sender == SC.ownerOf(spaceCapsuleId_), "Unowned pair!");
        require(renderTypeAllowed[renderType_], "This render type is not allowed!");

        // Burn the Transponder and Space Capsule.
        TP.transferFrom(msg.sender, address(this), transponderId_);
        SC.transferFrom(msg.sender, address(this), spaceCapsuleId_);

        uint8 _race = uint8( (uint256(keccak256(abi.encodePacked(msg.sender, block.timestamp, block.prevrandao, transponderId_, spaceCapsuleId_))) % 10) + 1 ); // RNG (1-10) 
        uint16 _equipmentBonus = CC.getEquipmentBaseBonus((uint16(spaceCapsuleId_)));

        iCS.Character memory _Character = iCS.Character(
            _race,
            renderType_,
            uint16(transponderId_),
            uint16(spaceCapsuleId_),
            0,
            0,
            _equipmentBonus
        );

        CS.createCharacter(totalSupply, _Character);
        
        __yieldMintHook(msg.sender, totalSupply);
        _mint(msg.sender, totalSupply);
    }
    function uploadCharacter(uint256 transponderId_, uint256 spaceCapsuleId_, uint8 renderType_, address contractAddress_, uint256 uploadId_) public {
        require(msg.sender == TP.ownerOf(transponderId_) && msg.sender == SC.ownerOf(spaceCapsuleId_), "Unowned pair!");
        require(msg.sender == IERC721(contractAddress_).ownerOf(uploadId_), "You don't own this character!");
        require(!contractAddressToTokenUploaded[contractAddress_][uploadId_], "This character has already been uploaded!");
        require(renderTypeAllowed[renderType_], "This render type is not allowed!");

        // Burn the Transponder and Space Capsule. Then, set the character as uploaded.
        TP.transferFrom(msg.sender, address(this), transponderId_);
        SC.transferFrom(msg.sender, address(this), spaceCapsuleId_);
        contractAddressToTokenUploaded[contractAddress_][uploadId_] = true;

        uint8 _race = CS.contractToRace(contractAddress_);
        uint16 _equipmentBonus = CC.getEquipmentBaseBonus((uint16(spaceCapsuleId_)));
        
        iCS.Character memory _Character = iCS.Character(
            _race,
            renderType_,
            uint16(transponderId_),
            uint16(spaceCapsuleId_),
            0,
            0,
            _equipmentBonus
        );

        CS.createCharacter(totalSupply, _Character); 

        __yieldMintHook(msg.sender, totalSupply);
        _mint(msg.sender, totalSupply); 
    }

    // Public Write Multi-Functions
    function multiBeamCharacter(uint256[] memory transponderIds_, uint256[] memory spaceCapsuleIds_, uint8[] memory renderTypes_) public {
        require(transponderIds_.length == spaceCapsuleIds_.length, "Missing pairs!");
        require(transponderIds_.length == renderTypes_.length, "Missing render type!");
        for (uint256 i = 0; i < transponderIds_.length; i++) {
            beamCharacter(transponderIds_[i], spaceCapsuleIds_[i], renderTypes_[i]);
        }
    }
    function multiUploadCharacter(uint256[] memory transponderIds_, uint256[] memory spaceCapsuleIds_, uint8[] memory renderTypes_, address contractAddress_, uint256[] memory uploadIds_) public {
        require(transponderIds_.length == spaceCapsuleIds_.length, "Missing pairs!");
        require(transponderIds_.length == renderTypes_.length, "Missing render type!");
        require(transponderIds_.length == uploadIds_.length, "Upload IDs mismatched length!");
        for (uint256 i = 0; i < transponderIds_.length; i++) {
            uploadCharacter(transponderIds_[i], spaceCapsuleIds_[i], renderTypes_[i], contractAddress_, uploadIds_[i]);
        }
    }

    // Transfer Hooks
    function transferFrom(address from_, address to_, uint256 tokenId_) public override {
        __yieldTransferHook(from_, to_, tokenId_);
        ERC721IMigrator.transferFrom(from_, to_, tokenId_);
    }

    /** @dev bugfix: the function call of safeTransferFrom already uses transferFrom
     *  in ERC721I, it calls to transferFrom which then calls the overridden 
     *  transferFrom, resulting in a call of __yieldTransferHook already
     */
    // function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory bytes_) public override {
    //     __yieldTransferHook(from_, to_, tokenId_);
    //     ERC721IMigrator.safeTransferFrom(from_, to_, tokenId_, bytes_);
    // }

    // Public View Functions
    function tokenURI(uint256 tokenId_) public view returns (string memory) {
        require(_exists(tokenId_), "Character does not exist!");
        return Metadata.renderMetadata(tokenId_);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CC","outputs":[{"internalType":"contract iCC","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CM","outputs":[{"internalType":"contract iCM","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CS","outputs":[{"internalType":"contract iCS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MES","outputs":[{"internalType":"contract iMES","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Metadata","outputs":[{"internalType":"contract iMetadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SC","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TP","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceOfInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transponderId_","type":"uint256"},{"internalType":"uint256","name":"spaceCapsuleId_","type":"uint256"},{"internalType":"uint8","name":"renderType_","type":"uint8"}],"name":"beamCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"contractAddressToTokenUploaded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"address[]","name":"owners_","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"transponderIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"spaceCapsuleIds_","type":"uint256[]"},{"internalType":"uint8[]","name":"renderTypes_","type":"uint8[]"}],"name":"multiBeamCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"transponderIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"spaceCapsuleIds_","type":"uint256[]"},{"internalType":"uint8[]","name":"renderTypes_","type":"uint8[]"},{"internalType":"address","name":"contractAddress_","type":"address"},{"internalType":"uint256[]","name":"uploadIds_","type":"uint256[]"}],"name":"multiUploadCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"proxyInitialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxyInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"renderTypeAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"approved_","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setCM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"metadata_","type":"address"},{"internalType":"address","name":"cc_","type":"address"},{"internalType":"address","name":"cs_","type":"address"},{"internalType":"address","name":"mes_","type":"address"},{"internalType":"address","name":"tp_","type":"address"},{"internalType":"address","name":"sc_","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"renderType_","type":"uint8"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setRenderTypeAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId_","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"new_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transponderId_","type":"uint256"},{"internalType":"uint256","name":"spaceCapsuleId_","type":"uint256"},{"internalType":"uint8","name":"renderType_","type":"uint8"},{"internalType":"address","name":"contractAddress_","type":"address"},{"internalType":"uint256","name":"uploadId_","type":"uint256"}],"name":"uploadCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506200001d3362000023565b62000290565b600f54600160a01b900460ff1615620000775760405162461bcd60e51b815260206004820152601260248201527150726f787920496e697469616c697a65642160701b604482015260640160405180910390fd5b600f805460ff60a01b1916600160a01b17905560408051808201909152601381527f4d61727469616e732043686172616374657273000000000000000000000000006020820152600290620000cd9082620001c4565b506040805180820190915260088152674d41525449414e5360c01b6020820152600390620000fc9082620001c4565b50600080546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200014a57607f821691505b6020821081036200016b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001bf57600081815260208120601f850160051c810160208610156200019a5750805b601f850160051c820191505b81811015620001bb57828155600101620001a6565b5050505b505050565b81516001600160401b03811115620001e057620001e06200011f565b620001f881620001f1845462000135565b8462000171565b602080601f831160018114620002305760008415620002175750858301515b600019600386901b1c1916600185901b178555620001bb565b600085815260208120601f198616915b82811015620002615788860151825594840194600190910190840162000240565b5085821015620002805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61377e80620002a06000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063b88d4fde116100b8578063cca3e8321161007c578063cca3e83214610585578063e2d97934146105a5578063e985e9c5146105b8578063f2fde38b146105e6578063f7ea7a3d146105f957600080fd5b8063b88d4fde14610526578063b979b1a314610539578063bd5404a81461054c578063c16ac06f1461055f578063c87b56dd1461057257600080fd5b806395d89b41116100ff57806395d89b41146104b7578063978fbc3c146104bf578063a22cb465146104ed578063a5eb6ff214610500578063b4f035a41461051357600080fd5b806370a0823114610458578063751149791461046b5780637ca510a41461047e5780637cb81fe5146104915780638da5cb5b146104a457600080fd5b806342842e0e116101c957806357b3aa761161018d57806357b3aa76146103e95780635a1389111461040c5780636352211e1461041f578063639807d0146104325780636509e7761461044557600080fd5b806342842e0e1461036c578063438b63001461037f5780634724e5461461039f5780634be99cd6146103c25780635589655a146103d557600080fd5b806323b872dd1161021057806323b872dd146102f75780632463a55a1461030a578063383505411461031d5780633ae23cc4146103465780633b5006071461035957600080fd5b806301ffc9a71461024d57806306fdde0314610275578063081812fc1461028a578063095ea7b3146102cb57806318160ddd146102e0575b600080fd5b61026061025b366004612b1c565b61060c565b60405190151581526020015b60405180910390f35b61027d610643565b60405161026c9190612b90565b6102b3610298366004612ba3565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6102de6102d9366004612bd1565b6106d1565b005b6102e960045481565b60405190815260200161026c565b6102de610305366004612bfd565b610824565b6102de610318366004612c3e565b61083a565b6102b361032b366004612ba3565b6005602052600090815260409020546001600160a01b031681565b600a546102b3906001600160a01b031681565b6102de610367366004612e09565b6108d4565b6102de61037a366004612bfd565b6109d8565b61039261038d366004612e91565b6109f3565b60405161026c9190612eae565b6102606103ad366004612e91565b60076020526000908152604090205460ff1681565b6102de6103d0366004612e91565b610b1b565b600f5461026090600160a01b900460ff1681565b6102606103f7366004612ef2565b60116020526000908152604090205460ff1681565b600f546102b3906001600160a01b031681565b6102b361042d366004612ba3565b610b67565b600e546102b3906001600160a01b031681565b600b546102b3906001600160a01b031681565b6102e9610466366004612e91565b610c22565b6102de610479366004612f0f565b610ccd565b6102de61048c36600461301d565b610e3f565b6102de61049f366004613089565b610f68565b6000546102b3906001600160a01b031681565b61027d61137c565b6102606104cd366004612bd1565b601060209081526000928352604080842090915290825290205460ff1681565b6102de6104fb3660046130d2565b611389565b600d546102b3906001600160a01b031681565b6102de610521366004613107565b611398565b6102de61053436600461314d565b6113e7565b6102de6105473660046131f7565b611545565b6102de61055a366004612e91565b611adb565b6001546102b3906001600160a01b031681565b61027d610580366004612ba3565b611bc4565b6102e9610593366004612e91565b60066020526000908152604090205481565b600c546102b3906001600160a01b031681565b6102606105c6366004613249565b600960209081526000928352604080842090915290825290205460ff1681565b6102de6105f4366004612e91565b611c8c565b6102de610607366004612ba3565b611d06565b60006380ac58cd60e01b6001600160e01b03198316148061063d5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6002805461065090613282565b80601f016020809104026020016040519081016040528092919081815260200182805461067c90613282565b80156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505081565b60006106dc82610b67565b9050806001600160a01b0316836001600160a01b03160361075d5760405162461bcd60e51b815260206004820152603060248201527f455243373231494d69677261746f723a20617070726f766528292063616e6e6f60448201526f7420617070726f7665206f776e65722160801b60648201526084015b60405180910390fd5b336001600160a01b038216148061079757506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b6108155760405162461bcd60e51b815260206004820152604360248201527f455243373231494d69677261746f723a20617070726f766528292043616c6c6560448201527f72206973206e6f74206f776e6572206f66206973417070726f766564466f72416064820152626c6c2160e81b608482015260a401610754565b61081f8383611d35565b505050565b61082f838383611dc4565b61081f83838361205d565b6000546001600160a01b031633146108645760405162461bcd60e51b8152600401610754906132bc565b600a80546001600160a01b03199081166001600160a01b0396871617909155600b8054821696861696909617909555600c8054861693851693909317909255600d8054851695841695909517909455600e8054841694831694909417909355600f80549092169216919091179055565b81518351146109165760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b805183511461095e5760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b60005b83518110156109d2576109c084828151811061097f5761097f6132ea565b6020026020010151848381518110610999576109996132ea565b60200260200101518484815181106109b3576109b36132ea565b6020026020010151610f68565b806109ca81613316565b915050610961565b50505050565b61081f838383604051806020016040528060008152506113e7565b60606000610a0083610c22565b905060008167ffffffffffffffff811115610a1d57610a1d612cc0565b604051908082528060200260200182016040528015610a46578160200160208202803683370190505b50600454909150600090815b81811015610b10576000610a6582610b67565b6001600160a01b0316148015610a9e575083610a8260018761332f565b81518110610a9257610a926132ea565b60200260200101516000145b15610ab15781610aad81613316565b9250505b866001600160a01b0316610ac482610b67565b6001600160a01b031603610afe5780848481518110610ae557610ae56132ea565b602090810291909101015282610afa81613316565b9350505b80610b0881613316565b915050610a52565b509195945050505050565b6000546001600160a01b03163314610b455760405162461bcd60e51b8152600401610754906132bc565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2482108015610b8f57506000828152600560205260409020546001600160a01b0316155b15610c01576001546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d9190613342565b506000908152600560205260409020546001600160a01b031690565b919050565b6001600160a01b03811660009081526007602052604081205460ff1615610c5f57506001600160a01b031660009081526006602052604090205490565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d919061335f565b8351855114610d0f5760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b8251855114610d575760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b8051855114610da85760405162461bcd60e51b815260206004820152601d60248201527f55706c6f616420494473206d69736d617463686564206c656e677468210000006044820152606401610754565b60005b8551811015610e3757610e25868281518110610dc957610dc96132ea565b6020026020010151868381518110610de357610de36132ea565b6020026020010151868481518110610dfd57610dfd6132ea565b602002602001015186868681518110610e1857610e186132ea565b6020026020010151611545565b80610e2f81613316565b915050610dab565b505050505050565b6000546001600160a01b03163314610e695760405162461bcd60e51b8152600401610754906132bc565b828114610ec45760405162461bcd60e51b8152602060048201526024808201527f696e697469616c697a6528293a206172726179206c656e677468206d69736d616044820152637463682160e01b6064820152608401610754565b60005b83811015610f6157848482818110610ee157610ee16132ea565b90506020020135838383818110610efa57610efa6132ea565b9050602002016020810190610f0f9190612e91565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480610f5981613316565b915050610ec7565b5050505050565b600e546040516331a9108f60e11b8152600481018590526001600160a01b0390911690636352211e90602401602060405180830381865afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd59190613342565b6001600160a01b0316336001600160a01b03161480156110725750600f546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015611039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105d9190613342565b6001600160a01b0316336001600160a01b0316145b6110ae5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b60ff8082166000908152601160205260409020541661110f5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061114390339030908890600401613378565b600060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506111a990339030908790600401613378565b600060405180830381600087803b1580156111c357600080fd5b505af11580156111d7573d6000803e3d6000fd5b50506040516bffffffffffffffffffffffff193360601b166020820152426034820152446054820152607481018690526094810185905260009250600a915060b4016040516020818303038152906040528051906020012060001c61123c919061339c565b6112479060016133be565b600b5460405163813fd7fd60e01b815261ffff861660048201529192506000916001600160a01b039091169063813fd7fd90602401602060405180830381865afa158015611299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bd91906133e3565b6040805160e08101825260ff80861682528616602082015261ffff80891682840152878116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611332928691016133fe565b600060405180830381600087803b15801561134c57600080fd5b505af1158015611360573d6000803e3d6000fd5b50505050611370336004546120e4565b610e37336004546122ad565b6003805461065090613282565b61139433838361253c565b5050565b6000546001600160a01b031633146113c25760405162461bcd60e51b8152600401610754906132bc565b60ff919091166000908152601160205260409020805460ff1916911515919091179055565b6113f2848484610824565b6001600160a01b0383163b156109d2576000836001600160a01b031663150b7a023387868660405160240161142a949392919061346b565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161146391906134a8565b600060405180830381855afa9150503d806000811461149e576040519150601f19603f3d011682016040523d82523d6000602084013e6114a3565b606091505b509150506000818060200190518101906114bd91906134c4565b9050630a85bd0160e11b6001600160e01b0319821614610e375760405162461bcd60e51b815260206004820152603d60248201527f455243373231494d69677261746f723a20736166655472616e7366657246726f60448201527f6d282920746f5f206e6f742045524337323152656365697661626c65210000006064820152608401610754565b600e546040516331a9108f60e11b8152600481018790526001600160a01b0390911690636352211e90602401602060405180830381865afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190613342565b6001600160a01b0316336001600160a01b031614801561164f5750600f546040516331a9108f60e11b8152600481018690526001600160a01b0390911690636352211e90602401602060405180830381865afa158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190613342565b6001600160a01b0316336001600160a01b0316145b61168b5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b6040516331a9108f60e11b8152600481018290526001600160a01b03831690636352211e90602401602060405180830381865afa1580156116d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f49190613342565b6001600160a01b0316336001600160a01b0316146117545760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206f776e207468697320636861726163746572210000006044820152606401610754565b6001600160a01b038216600090815260106020908152604080832084845290915290205460ff16156117da5760405162461bcd60e51b815260206004820152602960248201527f54686973206368617261637465722068617320616c7265616479206265656e2060448201526875706c6f616465642160b81b6064820152608401610754565b60ff8084166000908152601160205260409020541661183b5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061186f90339030908a90600401613378565b600060405180830381600087803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506118d590339030908990600401613378565b600060405180830381600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b505050506001600160a01b038281166000818152601060209081526040808320868452909152808220805460ff19166001179055600a549051630da46c0f60e01b8152600481019390935290921690630da46c0f90602401602060405180830381865afa158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c91906134e1565b600b5460405163813fd7fd60e01b815261ffff881660048201529192506000916001600160a01b039091169063813fd7fd90602401602060405180830381865afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1291906133e3565b6040805160e08101825260ff80861682528816602082015261ffff808b1682840152898116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611a87928691016133fe565b600060405180830381600087803b158015611aa157600080fd5b505af1158015611ab5573d6000803e3d6000fd5b50505050611ac5336004546120e4565b611ad1336004546122ad565b5050505050505050565b600f54600160a01b900460ff1615611b2a5760405162461bcd60e51b815260206004820152601260248201527150726f787920496e697469616c697a65642160701b6044820152606401610754565b600f805460ff60a01b1916600160a01b1790556040805180820190915260138152724d61727469616e73204368617261637465727360681b6020820152600290611b749082613544565b506040805180820190915260088152674d41525449414e5360c01b6020820152600390611ba19082613544565b50600080546001600160a01b0319166001600160a01b0392909216919091179055565b6060611bcf8261263e565b611c1b5760405162461bcd60e51b815260206004820152601960248201527f43686172616374657220646f6573206e6f7420657869737421000000000000006044820152606401610754565b600d54604051630eaa6a0560e31b8152600481018490526001600160a01b0390911690637553502890602401600060405180830381865afa158015611c64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261063d9190810190613604565b6000546001600160a01b03163314611cb65760405162461bcd60e51b8152600401610754906132bc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611d305760405162461bcd60e51b8152600401610754906132bc565b600455565b6000818152600860205260409020546001600160a01b0383811691161461139457600081815260086020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d8b82610b67565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600c5460405163632447c960e01b81526001600160a01b0385811660048301529091169063632447c990602401600060405180830381600087803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b5050600c5460405163632447c960e01b81526001600160a01b038681166004830152909116925063632447c99150602401600060405180830381600087803b158015611e6a57600080fd5b505af1158015611e7e573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e060405180830381865afa158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef2919061367b565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b0390911690633616171190606401602060405180830381865afa158015611f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f88919061335f565b600c54604051631fa86bd160e31b81526001600160a01b0388811660048301526024820184905292935091169063fd435e8890604401600060405180830381600087803b158015611fd857600080fd5b505af1158015611fec573d6000803e3d6000fd5b5050600c5460405163b5862c2560e01b81526001600160a01b03888116600483015260248201869052909116925063b5862c259150604401600060405180830381600087803b15801561203e57600080fd5b505af1158015612052573d6000803e3d6000fd5b505050505050505050565b6120673382612670565b6120d95760405162461bcd60e51b815260206004820152603b60248201527f455243373231494d69677261746f723a207472616e7366657246726f6d28292060448201527f5f6973417070726f7665644f724f776e6572203d2066616c73652100000000006064820152608401610754565b61081f83838361276b565b600c5460405163632447c960e01b81526001600160a01b0384811660048301529091169063632447c990602401600060405180830381600087803b15801561212b57600080fd5b505af115801561213f573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e060405180830381865afa15801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b3919061367b565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b0390911690633616171190606401602060405180830381865afa158015612225573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612249919061335f565b600c5460405163b5862c2560e01b81526001600160a01b0387811660048301526024820184905292935091169063b5862c2590604401600060405180830381600087803b15801561229957600080fd5b505af1158015611ad1573d6000803e3d6000fd5b6001600160a01b03821661231a5760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e742829204d696e7420746f60448201526d205a65726f20416464726573732160901b6064820152608401610754565b600061232582610b67565b6001600160a01b0316146123925760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e74282920546f6b656e206160448201526d6c7265616479204578697374732160901b6064820152608401610754565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600790915290205460ff16156123ff576001600160a01b03821660009081526006602052604081208054916123f583613316565b91905055506124a8565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015612449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246d919061335f565b6124789060016133be565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b600480549060006124b883613316565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161253091815260200190565b60405180910390a25050565b816001600160a01b0316836001600160a01b0316036125d15760405162461bcd60e51b815260206004820152604560248201527f455243373231494d69677261746f723a205f736574417070726f76616c466f7260448201527f416c6c2829204f776e6572206d757374206e6f7420626520746865204f70657260648201526461746f722160d81b608482015260a401610754565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000610e2482101561265257506001919050565b506000908152600560205260409020546001600160a01b0316151590565b60008061267c83610b67565b90506001600160a01b0381166126fa5760405162461bcd60e51b815260206004820152603c60248201527f455243373231494d69677261746f723a205f6973417070726f7665644f724f7760448201527f6e65722829204f776e6572206973205a65726f204164647265737321000000006064820152608401610754565b806001600160a01b0316846001600160a01b0316148061273357506000838152600860205260409020546001600160a01b038581169116145b8061276357506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b61277481610b67565b6001600160a01b0316836001600160a01b0316146127fc576040805162461bcd60e51b81526020600482015260248101919091527f455243373231494d69677261746f723a205f7472616e7366657228292054726160448201527f6e736665722066726f6d5f20213d206f776e65724f6628746f6b656e49645f296064820152608401610754565b6001600160a01b0382166128715760405162461bcd60e51b815260206004820152603660248201527f455243373231494d69677261746f723a205f7472616e736665722829205472616044820152756e7366657220746f205a65726f20416464726573732160501b6064820152608401610754565b6000818152600860205260409020546001600160a01b0316156128ab57600081815260086020526040902080546001600160a01b03191690555b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038781169190911790915586168352600790915290205460ff161561291c576001600160a01b038316600090815260066020526040812080549161291283613731565b91905055506129c5565b600180546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298b919061335f565b612995919061332f565b6001600160a01b0384166000908152600660209081526040808320939093556007905220805460ff191660011790555b6001600160a01b03821660009081526007602052604090205460ff1615612a14576001600160a01b0382166000908152600660205260408120805491612a0a83613316565b9190505550612abd565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015612a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a82919061335f565b612a8d9060016133be565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160e01b031981168114612b1957600080fd5b50565b600060208284031215612b2e57600080fd5b8135612b3981612b03565b9392505050565b60005b83811015612b5b578181015183820152602001612b43565b50506000910152565b60008151808452612b7c816020860160208601612b40565b601f01601f19169290920160200192915050565b602081526000612b396020830184612b64565b600060208284031215612bb557600080fd5b5035919050565b6001600160a01b0381168114612b1957600080fd5b60008060408385031215612be457600080fd5b8235612bef81612bbc565b946020939093013593505050565b600080600060608486031215612c1257600080fd5b8335612c1d81612bbc565b92506020840135612c2d81612bbc565b929592945050506040919091013590565b60008060008060008060c08789031215612c5757600080fd5b8635612c6281612bbc565b95506020870135612c7281612bbc565b94506040870135612c8281612bbc565b93506060870135612c9281612bbc565b92506080870135612ca281612bbc565b915060a0870135612cb281612bbc565b809150509295509295509295565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612cff57612cff612cc0565b604052919050565b600067ffffffffffffffff821115612d2157612d21612cc0565b5060051b60200190565b600082601f830112612d3c57600080fd5b81356020612d51612d4c83612d07565b612cd6565b82815260059290921b84018101918181019086841115612d7057600080fd5b8286015b84811015612d8b5780358352918301918301612d74565b509695505050505050565b60ff81168114612b1957600080fd5b600082601f830112612db657600080fd5b81356020612dc6612d4c83612d07565b82815260059290921b84018101918181019086841115612de557600080fd5b8286015b84811015612d8b578035612dfc81612d96565b8352918301918301612de9565b600080600060608486031215612e1e57600080fd5b833567ffffffffffffffff80821115612e3657600080fd5b612e4287838801612d2b565b94506020860135915080821115612e5857600080fd5b612e6487838801612d2b565b93506040860135915080821115612e7a57600080fd5b50612e8786828701612da5565b9150509250925092565b600060208284031215612ea357600080fd5b8135612b3981612bbc565b6020808252825182820181905260009190848201906040850190845b81811015612ee657835183529284019291840191600101612eca565b50909695505050505050565b600060208284031215612f0457600080fd5b8135612b3981612d96565b600080600080600060a08688031215612f2757600080fd5b853567ffffffffffffffff80821115612f3f57600080fd5b612f4b89838a01612d2b565b96506020880135915080821115612f6157600080fd5b612f6d89838a01612d2b565b95506040880135915080821115612f8357600080fd5b612f8f89838a01612da5565b945060608801359150612fa182612bbc565b90925060808701359080821115612fb757600080fd5b50612fc488828901612d2b565b9150509295509295909350565b60008083601f840112612fe357600080fd5b50813567ffffffffffffffff811115612ffb57600080fd5b6020830191508360208260051b850101111561301657600080fd5b9250929050565b6000806000806040858703121561303357600080fd5b843567ffffffffffffffff8082111561304b57600080fd5b61305788838901612fd1565b9096509450602087013591508082111561307057600080fd5b5061307d87828801612fd1565b95989497509550505050565b60008060006060848603121561309e57600080fd5b833592506020840135915060408401356130b781612d96565b809150509250925092565b80358015158114610c1d57600080fd5b600080604083850312156130e557600080fd5b82356130f081612bbc565b91506130fe602084016130c2565b90509250929050565b6000806040838503121561311a57600080fd5b82356130f081612d96565b600067ffffffffffffffff82111561313f5761313f612cc0565b50601f01601f191660200190565b6000806000806080858703121561316357600080fd5b843561316e81612bbc565b9350602085013561317e81612bbc565b925060408501359150606085013567ffffffffffffffff8111156131a157600080fd5b8501601f810187136131b257600080fd5b80356131c0612d4c82613125565b8181528860208385010111156131d557600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080600080600060a0868803121561320f57600080fd5b8535945060208601359350604086013561322881612d96565b9250606086013561323881612bbc565b949793965091946080013592915050565b6000806040838503121561325c57600080fd5b823561326781612bbc565b9150602083013561327781612bbc565b809150509250929050565b600181811c9082168061329657607f821691505b6020821081036132b657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601490820152736f6e6c794f776e6572206e6f74206f776e65722160601b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161332857613328613300565b5060010190565b8181038181111561063d5761063d613300565b60006020828403121561335457600080fd5b8151612b3981612bbc565b60006020828403121561337157600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000826133b957634e487b7160e01b600052601260045260246000fd5b500690565b8082018082111561063d5761063d613300565b805161ffff81168114610c1d57600080fd5b6000602082840312156133f557600080fd5b612b39826133d1565b60006101008201905083825260ff835116602083015260ff6020840151166040830152604083015161ffff808216606085015280606086015116608085015260ff60808601511660a08501528060a08601511660c08501528060c08601511660e085015250509392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061349e90830184612b64565b9695505050505050565b600082516134ba818460208701612b40565b9190910192915050565b6000602082840312156134d657600080fd5b8151612b3981612b03565b6000602082840312156134f357600080fd5b8151612b3981612d96565b601f82111561081f57600081815260208120601f850160051c810160208610156135255750805b601f850160051c820191505b81811015610e3757828155600101613531565b815167ffffffffffffffff81111561355e5761355e612cc0565b6135728161356c8454613282565b846134fe565b602080601f8311600181146135a7576000841561358f5750858301515b600019600386901b1c1916600185901b178555610e37565b600085815260208120601f198616915b828110156135d6578886015182559484019460019091019084016135b7565b50858210156135f45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561361657600080fd5b815167ffffffffffffffff81111561362d57600080fd5b8201601f8101841361363e57600080fd5b805161364c612d4c82613125565b81815285602083850101111561366157600080fd5b613672826020830160208601612b40565b95945050505050565b600060e0828403121561368d57600080fd5b60405160e0810181811067ffffffffffffffff821117156136b0576136b0612cc0565b60405282516136be81612d96565b815260208301516136ce81612d96565b60208201526136df604084016133d1565b60408201526136f0606084016133d1565b6060820152608083015161370381612d96565b608082015261371460a084016133d1565b60a082015261372560c084016133d1565b60c08201529392505050565b60008161374057613740613300565b50600019019056fea264697066735822122004a861ce3d850a738964e0a61c38b49408badbe3856d9c367ab35083b272010764736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063b88d4fde116100b8578063cca3e8321161007c578063cca3e83214610585578063e2d97934146105a5578063e985e9c5146105b8578063f2fde38b146105e6578063f7ea7a3d146105f957600080fd5b8063b88d4fde14610526578063b979b1a314610539578063bd5404a81461054c578063c16ac06f1461055f578063c87b56dd1461057257600080fd5b806395d89b41116100ff57806395d89b41146104b7578063978fbc3c146104bf578063a22cb465146104ed578063a5eb6ff214610500578063b4f035a41461051357600080fd5b806370a0823114610458578063751149791461046b5780637ca510a41461047e5780637cb81fe5146104915780638da5cb5b146104a457600080fd5b806342842e0e116101c957806357b3aa761161018d57806357b3aa76146103e95780635a1389111461040c5780636352211e1461041f578063639807d0146104325780636509e7761461044557600080fd5b806342842e0e1461036c578063438b63001461037f5780634724e5461461039f5780634be99cd6146103c25780635589655a146103d557600080fd5b806323b872dd1161021057806323b872dd146102f75780632463a55a1461030a578063383505411461031d5780633ae23cc4146103465780633b5006071461035957600080fd5b806301ffc9a71461024d57806306fdde0314610275578063081812fc1461028a578063095ea7b3146102cb57806318160ddd146102e0575b600080fd5b61026061025b366004612b1c565b61060c565b60405190151581526020015b60405180910390f35b61027d610643565b60405161026c9190612b90565b6102b3610298366004612ba3565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6102de6102d9366004612bd1565b6106d1565b005b6102e960045481565b60405190815260200161026c565b6102de610305366004612bfd565b610824565b6102de610318366004612c3e565b61083a565b6102b361032b366004612ba3565b6005602052600090815260409020546001600160a01b031681565b600a546102b3906001600160a01b031681565b6102de610367366004612e09565b6108d4565b6102de61037a366004612bfd565b6109d8565b61039261038d366004612e91565b6109f3565b60405161026c9190612eae565b6102606103ad366004612e91565b60076020526000908152604090205460ff1681565b6102de6103d0366004612e91565b610b1b565b600f5461026090600160a01b900460ff1681565b6102606103f7366004612ef2565b60116020526000908152604090205460ff1681565b600f546102b3906001600160a01b031681565b6102b361042d366004612ba3565b610b67565b600e546102b3906001600160a01b031681565b600b546102b3906001600160a01b031681565b6102e9610466366004612e91565b610c22565b6102de610479366004612f0f565b610ccd565b6102de61048c36600461301d565b610e3f565b6102de61049f366004613089565b610f68565b6000546102b3906001600160a01b031681565b61027d61137c565b6102606104cd366004612bd1565b601060209081526000928352604080842090915290825290205460ff1681565b6102de6104fb3660046130d2565b611389565b600d546102b3906001600160a01b031681565b6102de610521366004613107565b611398565b6102de61053436600461314d565b6113e7565b6102de6105473660046131f7565b611545565b6102de61055a366004612e91565b611adb565b6001546102b3906001600160a01b031681565b61027d610580366004612ba3565b611bc4565b6102e9610593366004612e91565b60066020526000908152604090205481565b600c546102b3906001600160a01b031681565b6102606105c6366004613249565b600960209081526000928352604080842090915290825290205460ff1681565b6102de6105f4366004612e91565b611c8c565b6102de610607366004612ba3565b611d06565b60006380ac58cd60e01b6001600160e01b03198316148061063d5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6002805461065090613282565b80601f016020809104026020016040519081016040528092919081815260200182805461067c90613282565b80156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505081565b60006106dc82610b67565b9050806001600160a01b0316836001600160a01b03160361075d5760405162461bcd60e51b815260206004820152603060248201527f455243373231494d69677261746f723a20617070726f766528292063616e6e6f60448201526f7420617070726f7665206f776e65722160801b60648201526084015b60405180910390fd5b336001600160a01b038216148061079757506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b6108155760405162461bcd60e51b815260206004820152604360248201527f455243373231494d69677261746f723a20617070726f766528292043616c6c6560448201527f72206973206e6f74206f776e6572206f66206973417070726f766564466f72416064820152626c6c2160e81b608482015260a401610754565b61081f8383611d35565b505050565b61082f838383611dc4565b61081f83838361205d565b6000546001600160a01b031633146108645760405162461bcd60e51b8152600401610754906132bc565b600a80546001600160a01b03199081166001600160a01b0396871617909155600b8054821696861696909617909555600c8054861693851693909317909255600d8054851695841695909517909455600e8054841694831694909417909355600f80549092169216919091179055565b81518351146109165760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b805183511461095e5760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b60005b83518110156109d2576109c084828151811061097f5761097f6132ea565b6020026020010151848381518110610999576109996132ea565b60200260200101518484815181106109b3576109b36132ea565b6020026020010151610f68565b806109ca81613316565b915050610961565b50505050565b61081f838383604051806020016040528060008152506113e7565b60606000610a0083610c22565b905060008167ffffffffffffffff811115610a1d57610a1d612cc0565b604051908082528060200260200182016040528015610a46578160200160208202803683370190505b50600454909150600090815b81811015610b10576000610a6582610b67565b6001600160a01b0316148015610a9e575083610a8260018761332f565b81518110610a9257610a926132ea565b60200260200101516000145b15610ab15781610aad81613316565b9250505b866001600160a01b0316610ac482610b67565b6001600160a01b031603610afe5780848481518110610ae557610ae56132ea565b602090810291909101015282610afa81613316565b9350505b80610b0881613316565b915050610a52565b509195945050505050565b6000546001600160a01b03163314610b455760405162461bcd60e51b8152600401610754906132bc565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2482108015610b8f57506000828152600560205260409020546001600160a01b0316155b15610c01576001546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d9190613342565b506000908152600560205260409020546001600160a01b031690565b919050565b6001600160a01b03811660009081526007602052604081205460ff1615610c5f57506001600160a01b031660009081526006602052604090205490565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d919061335f565b8351855114610d0f5760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b8251855114610d575760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b8051855114610da85760405162461bcd60e51b815260206004820152601d60248201527f55706c6f616420494473206d69736d617463686564206c656e677468210000006044820152606401610754565b60005b8551811015610e3757610e25868281518110610dc957610dc96132ea565b6020026020010151868381518110610de357610de36132ea565b6020026020010151868481518110610dfd57610dfd6132ea565b602002602001015186868681518110610e1857610e186132ea565b6020026020010151611545565b80610e2f81613316565b915050610dab565b505050505050565b6000546001600160a01b03163314610e695760405162461bcd60e51b8152600401610754906132bc565b828114610ec45760405162461bcd60e51b8152602060048201526024808201527f696e697469616c697a6528293a206172726179206c656e677468206d69736d616044820152637463682160e01b6064820152608401610754565b60005b83811015610f6157848482818110610ee157610ee16132ea565b90506020020135838383818110610efa57610efa6132ea565b9050602002016020810190610f0f9190612e91565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480610f5981613316565b915050610ec7565b5050505050565b600e546040516331a9108f60e11b8152600481018590526001600160a01b0390911690636352211e90602401602060405180830381865afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd59190613342565b6001600160a01b0316336001600160a01b03161480156110725750600f546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015611039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105d9190613342565b6001600160a01b0316336001600160a01b0316145b6110ae5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b60ff8082166000908152601160205260409020541661110f5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061114390339030908890600401613378565b600060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506111a990339030908790600401613378565b600060405180830381600087803b1580156111c357600080fd5b505af11580156111d7573d6000803e3d6000fd5b50506040516bffffffffffffffffffffffff193360601b166020820152426034820152446054820152607481018690526094810185905260009250600a915060b4016040516020818303038152906040528051906020012060001c61123c919061339c565b6112479060016133be565b600b5460405163813fd7fd60e01b815261ffff861660048201529192506000916001600160a01b039091169063813fd7fd90602401602060405180830381865afa158015611299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bd91906133e3565b6040805160e08101825260ff80861682528616602082015261ffff80891682840152878116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611332928691016133fe565b600060405180830381600087803b15801561134c57600080fd5b505af1158015611360573d6000803e3d6000fd5b50505050611370336004546120e4565b610e37336004546122ad565b6003805461065090613282565b61139433838361253c565b5050565b6000546001600160a01b031633146113c25760405162461bcd60e51b8152600401610754906132bc565b60ff919091166000908152601160205260409020805460ff1916911515919091179055565b6113f2848484610824565b6001600160a01b0383163b156109d2576000836001600160a01b031663150b7a023387868660405160240161142a949392919061346b565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161146391906134a8565b600060405180830381855afa9150503d806000811461149e576040519150601f19603f3d011682016040523d82523d6000602084013e6114a3565b606091505b509150506000818060200190518101906114bd91906134c4565b9050630a85bd0160e11b6001600160e01b0319821614610e375760405162461bcd60e51b815260206004820152603d60248201527f455243373231494d69677261746f723a20736166655472616e7366657246726f60448201527f6d282920746f5f206e6f742045524337323152656365697661626c65210000006064820152608401610754565b600e546040516331a9108f60e11b8152600481018790526001600160a01b0390911690636352211e90602401602060405180830381865afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190613342565b6001600160a01b0316336001600160a01b031614801561164f5750600f546040516331a9108f60e11b8152600481018690526001600160a01b0390911690636352211e90602401602060405180830381865afa158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190613342565b6001600160a01b0316336001600160a01b0316145b61168b5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b6040516331a9108f60e11b8152600481018290526001600160a01b03831690636352211e90602401602060405180830381865afa1580156116d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f49190613342565b6001600160a01b0316336001600160a01b0316146117545760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206f776e207468697320636861726163746572210000006044820152606401610754565b6001600160a01b038216600090815260106020908152604080832084845290915290205460ff16156117da5760405162461bcd60e51b815260206004820152602960248201527f54686973206368617261637465722068617320616c7265616479206265656e2060448201526875706c6f616465642160b81b6064820152608401610754565b60ff8084166000908152601160205260409020541661183b5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061186f90339030908a90600401613378565b600060405180830381600087803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506118d590339030908990600401613378565b600060405180830381600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b505050506001600160a01b038281166000818152601060209081526040808320868452909152808220805460ff19166001179055600a549051630da46c0f60e01b8152600481019390935290921690630da46c0f90602401602060405180830381865afa158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c91906134e1565b600b5460405163813fd7fd60e01b815261ffff881660048201529192506000916001600160a01b039091169063813fd7fd90602401602060405180830381865afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1291906133e3565b6040805160e08101825260ff80861682528816602082015261ffff808b1682840152898116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611a87928691016133fe565b600060405180830381600087803b158015611aa157600080fd5b505af1158015611ab5573d6000803e3d6000fd5b50505050611ac5336004546120e4565b611ad1336004546122ad565b5050505050505050565b600f54600160a01b900460ff1615611b2a5760405162461bcd60e51b815260206004820152601260248201527150726f787920496e697469616c697a65642160701b6044820152606401610754565b600f805460ff60a01b1916600160a01b1790556040805180820190915260138152724d61727469616e73204368617261637465727360681b6020820152600290611b749082613544565b506040805180820190915260088152674d41525449414e5360c01b6020820152600390611ba19082613544565b50600080546001600160a01b0319166001600160a01b0392909216919091179055565b6060611bcf8261263e565b611c1b5760405162461bcd60e51b815260206004820152601960248201527f43686172616374657220646f6573206e6f7420657869737421000000000000006044820152606401610754565b600d54604051630eaa6a0560e31b8152600481018490526001600160a01b0390911690637553502890602401600060405180830381865afa158015611c64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261063d9190810190613604565b6000546001600160a01b03163314611cb65760405162461bcd60e51b8152600401610754906132bc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611d305760405162461bcd60e51b8152600401610754906132bc565b600455565b6000818152600860205260409020546001600160a01b0383811691161461139457600081815260086020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d8b82610b67565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600c5460405163632447c960e01b81526001600160a01b0385811660048301529091169063632447c990602401600060405180830381600087803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b5050600c5460405163632447c960e01b81526001600160a01b038681166004830152909116925063632447c99150602401600060405180830381600087803b158015611e6a57600080fd5b505af1158015611e7e573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e060405180830381865afa158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef2919061367b565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b0390911690633616171190606401602060405180830381865afa158015611f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f88919061335f565b600c54604051631fa86bd160e31b81526001600160a01b0388811660048301526024820184905292935091169063fd435e8890604401600060405180830381600087803b158015611fd857600080fd5b505af1158015611fec573d6000803e3d6000fd5b5050600c5460405163b5862c2560e01b81526001600160a01b03888116600483015260248201869052909116925063b5862c259150604401600060405180830381600087803b15801561203e57600080fd5b505af1158015612052573d6000803e3d6000fd5b505050505050505050565b6120673382612670565b6120d95760405162461bcd60e51b815260206004820152603b60248201527f455243373231494d69677261746f723a207472616e7366657246726f6d28292060448201527f5f6973417070726f7665644f724f776e6572203d2066616c73652100000000006064820152608401610754565b61081f83838361276b565b600c5460405163632447c960e01b81526001600160a01b0384811660048301529091169063632447c990602401600060405180830381600087803b15801561212b57600080fd5b505af115801561213f573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e060405180830381865afa15801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b3919061367b565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b0390911690633616171190606401602060405180830381865afa158015612225573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612249919061335f565b600c5460405163b5862c2560e01b81526001600160a01b0387811660048301526024820184905292935091169063b5862c2590604401600060405180830381600087803b15801561229957600080fd5b505af1158015611ad1573d6000803e3d6000fd5b6001600160a01b03821661231a5760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e742829204d696e7420746f60448201526d205a65726f20416464726573732160901b6064820152608401610754565b600061232582610b67565b6001600160a01b0316146123925760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e74282920546f6b656e206160448201526d6c7265616479204578697374732160901b6064820152608401610754565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600790915290205460ff16156123ff576001600160a01b03821660009081526006602052604081208054916123f583613316565b91905055506124a8565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015612449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246d919061335f565b6124789060016133be565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b600480549060006124b883613316565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161253091815260200190565b60405180910390a25050565b816001600160a01b0316836001600160a01b0316036125d15760405162461bcd60e51b815260206004820152604560248201527f455243373231494d69677261746f723a205f736574417070726f76616c466f7260448201527f416c6c2829204f776e6572206d757374206e6f7420626520746865204f70657260648201526461746f722160d81b608482015260a401610754565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000610e2482101561265257506001919050565b506000908152600560205260409020546001600160a01b0316151590565b60008061267c83610b67565b90506001600160a01b0381166126fa5760405162461bcd60e51b815260206004820152603c60248201527f455243373231494d69677261746f723a205f6973417070726f7665644f724f7760448201527f6e65722829204f776e6572206973205a65726f204164647265737321000000006064820152608401610754565b806001600160a01b0316846001600160a01b0316148061273357506000838152600860205260409020546001600160a01b038581169116145b8061276357506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b61277481610b67565b6001600160a01b0316836001600160a01b0316146127fc576040805162461bcd60e51b81526020600482015260248101919091527f455243373231494d69677261746f723a205f7472616e7366657228292054726160448201527f6e736665722066726f6d5f20213d206f776e65724f6628746f6b656e49645f296064820152608401610754565b6001600160a01b0382166128715760405162461bcd60e51b815260206004820152603660248201527f455243373231494d69677261746f723a205f7472616e736665722829205472616044820152756e7366657220746f205a65726f20416464726573732160501b6064820152608401610754565b6000818152600860205260409020546001600160a01b0316156128ab57600081815260086020526040902080546001600160a01b03191690555b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038781169190911790915586168352600790915290205460ff161561291c576001600160a01b038316600090815260066020526040812080549161291283613731565b91905055506129c5565b600180546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298b919061335f565b612995919061332f565b6001600160a01b0384166000908152600660209081526040808320939093556007905220805460ff191660011790555b6001600160a01b03821660009081526007602052604090205460ff1615612a14576001600160a01b0382166000908152600660205260408120805491612a0a83613316565b9190505550612abd565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015612a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a82919061335f565b612a8d9060016133be565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160e01b031981168114612b1957600080fd5b50565b600060208284031215612b2e57600080fd5b8135612b3981612b03565b9392505050565b60005b83811015612b5b578181015183820152602001612b43565b50506000910152565b60008151808452612b7c816020860160208601612b40565b601f01601f19169290920160200192915050565b602081526000612b396020830184612b64565b600060208284031215612bb557600080fd5b5035919050565b6001600160a01b0381168114612b1957600080fd5b60008060408385031215612be457600080fd5b8235612bef81612bbc565b946020939093013593505050565b600080600060608486031215612c1257600080fd5b8335612c1d81612bbc565b92506020840135612c2d81612bbc565b929592945050506040919091013590565b60008060008060008060c08789031215612c5757600080fd5b8635612c6281612bbc565b95506020870135612c7281612bbc565b94506040870135612c8281612bbc565b93506060870135612c9281612bbc565b92506080870135612ca281612bbc565b915060a0870135612cb281612bbc565b809150509295509295509295565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612cff57612cff612cc0565b604052919050565b600067ffffffffffffffff821115612d2157612d21612cc0565b5060051b60200190565b600082601f830112612d3c57600080fd5b81356020612d51612d4c83612d07565b612cd6565b82815260059290921b84018101918181019086841115612d7057600080fd5b8286015b84811015612d8b5780358352918301918301612d74565b509695505050505050565b60ff81168114612b1957600080fd5b600082601f830112612db657600080fd5b81356020612dc6612d4c83612d07565b82815260059290921b84018101918181019086841115612de557600080fd5b8286015b84811015612d8b578035612dfc81612d96565b8352918301918301612de9565b600080600060608486031215612e1e57600080fd5b833567ffffffffffffffff80821115612e3657600080fd5b612e4287838801612d2b565b94506020860135915080821115612e5857600080fd5b612e6487838801612d2b565b93506040860135915080821115612e7a57600080fd5b50612e8786828701612da5565b9150509250925092565b600060208284031215612ea357600080fd5b8135612b3981612bbc565b6020808252825182820181905260009190848201906040850190845b81811015612ee657835183529284019291840191600101612eca565b50909695505050505050565b600060208284031215612f0457600080fd5b8135612b3981612d96565b600080600080600060a08688031215612f2757600080fd5b853567ffffffffffffffff80821115612f3f57600080fd5b612f4b89838a01612d2b565b96506020880135915080821115612f6157600080fd5b612f6d89838a01612d2b565b95506040880135915080821115612f8357600080fd5b612f8f89838a01612da5565b945060608801359150612fa182612bbc565b90925060808701359080821115612fb757600080fd5b50612fc488828901612d2b565b9150509295509295909350565b60008083601f840112612fe357600080fd5b50813567ffffffffffffffff811115612ffb57600080fd5b6020830191508360208260051b850101111561301657600080fd5b9250929050565b6000806000806040858703121561303357600080fd5b843567ffffffffffffffff8082111561304b57600080fd5b61305788838901612fd1565b9096509450602087013591508082111561307057600080fd5b5061307d87828801612fd1565b95989497509550505050565b60008060006060848603121561309e57600080fd5b833592506020840135915060408401356130b781612d96565b809150509250925092565b80358015158114610c1d57600080fd5b600080604083850312156130e557600080fd5b82356130f081612bbc565b91506130fe602084016130c2565b90509250929050565b6000806040838503121561311a57600080fd5b82356130f081612d96565b600067ffffffffffffffff82111561313f5761313f612cc0565b50601f01601f191660200190565b6000806000806080858703121561316357600080fd5b843561316e81612bbc565b9350602085013561317e81612bbc565b925060408501359150606085013567ffffffffffffffff8111156131a157600080fd5b8501601f810187136131b257600080fd5b80356131c0612d4c82613125565b8181528860208385010111156131d557600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080600080600060a0868803121561320f57600080fd5b8535945060208601359350604086013561322881612d96565b9250606086013561323881612bbc565b949793965091946080013592915050565b6000806040838503121561325c57600080fd5b823561326781612bbc565b9150602083013561327781612bbc565b809150509250929050565b600181811c9082168061329657607f821691505b6020821081036132b657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601490820152736f6e6c794f776e6572206e6f74206f776e65722160601b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161332857613328613300565b5060010190565b8181038181111561063d5761063d613300565b60006020828403121561335457600080fd5b8151612b3981612bbc565b60006020828403121561337157600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000826133b957634e487b7160e01b600052601260045260246000fd5b500690565b8082018082111561063d5761063d613300565b805161ffff81168114610c1d57600080fd5b6000602082840312156133f557600080fd5b612b39826133d1565b60006101008201905083825260ff835116602083015260ff6020840151166040830152604083015161ffff808216606085015280606086015116608085015260ff60808601511660a08501528060a08601511660c08501528060c08601511660e085015250509392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061349e90830184612b64565b9695505050505050565b600082516134ba818460208701612b40565b9190910192915050565b6000602082840312156134d657600080fd5b8151612b3981612b03565b6000602082840312156134f357600080fd5b8151612b3981612d96565b601f82111561081f57600081815260208120601f850160051c810160208610156135255750805b601f850160051c820191505b81811015610e3757828155600101613531565b815167ffffffffffffffff81111561355e5761355e612cc0565b6135728161356c8454613282565b846134fe565b602080601f8311600181146135a7576000841561358f5750858301515b600019600386901b1c1916600185901b178555610e37565b600085815260208120601f198616915b828110156135d6578886015182559484019460019091019084016135b7565b50858210156135f45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561361657600080fd5b815167ffffffffffffffff81111561362d57600080fd5b8201601f8101841361363e57600080fd5b805161364c612d4c82613125565b81815285602083850101111561366157600080fd5b613672826020830160208601612b40565b95945050505050565b600060e0828403121561368d57600080fd5b60405160e0810181811067ffffffffffffffff821117156136b0576136b0612cc0565b60405282516136be81612d96565b815260208301516136ce81612d96565b60208201526136df604084016133d1565b60408201526136f0606084016133d1565b6060820152608083015161370381612d96565b608082015261371460a084016133d1565b60a082015261372560c084016133d1565b60c08201529392505050565b60008161374057613740613300565b50600019019056fea264697066735822122004a861ce3d850a738964e0a61c38b49408badbe3856d9c367ab35083b272010764736f6c63430008120033

Deployed Bytecode Sourcemap

15742:7401:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10363:159;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;10363:159:0;;;;;;;;1747:18;;;:::i;:::-;;;;;;;:::i;2434:46::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2434:46:0;;;;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;2434:46:0;1533:203:1;8642:485:0;;;;;;:::i;:::-;;:::i;:::-;;2091:26;;;;;;;;;2343:25:1;;;2331:2;2316:18;2091:26:0;2197:177:1;22190:205:0;;;;;;:::i;:::-;;:::i;15960:317::-;;;;;;:::i;:::-;;:::i;2124:43::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2124:43:0;;;15812:13;;;;;-1:-1:-1;;;;;15812:13:0;;;21009:478;;;;;;:::i;:::-;;:::i;10181:148::-;;;;;;:::i;:::-;;:::i;10567:829::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2317:53::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1620:89;;;;;;:::i;:::-;;:::i;16321:28::-;;;;;-1:-1:-1;;;16321:28:0;;;;;;18108:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15934:17;;;;;-1:-1:-1;;;;;15934:17:0;;;3274:583;;;;;;:::i;:::-;;:::i;15909:17::-;;;;;-1:-1:-1;;;;;15909:17:0;;;15833:13;;;;;-1:-1:-1;;;;;15833:13:0;;;3896:452;;;;;;:::i;:::-;;:::i;21493:666::-;;;;;;:::i;:::-;;:::i;2878:359::-;;;;;;:::i;:::-;;:::i;18307:1184::-;;;;;;:::i;:::-;;:::i;332:20::-;;;;;-1:-1:-1;;;;;332:20:0;;;1767;;;:::i;16811:82::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;9210:148;;;;;;:::i;:::-;;:::i;15877:25::-;;;;;-1:-1:-1;;;;;15877:25:0;;;18162:137;;;;;;:::i;:::-;;:::i;9660:515::-;;;;;;:::i;:::-;;:::i;19497:1467::-;;;;;;:::i;:::-;;:::i;16358:329::-;;;;;;:::i;:::-;;:::i;1600:13::-;;;;;-1:-1:-1;;;;;1600:13:0;;;22943:197;;;;;;:::i;:::-;;:::i;2174:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;15854:15;;;;;-1:-1:-1;;;;;15854:15:0;;;2487:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;591:170;;;;;;:::i;:::-;;:::i;2653:111::-;;;;;;:::i;:::-;;:::i;10363:159::-;10432:4;-1:-1:-1;;;;;;;;;10457:26:0;;;;:56;;-1:-1:-1;;;;;;;;;;10487:26:0;;;10457:56;10449:65;10363:159;-1:-1:-1;;10363:159:0:o;1747:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8642:485::-;8716:14;8733:17;8741:8;8733:7;:17::i;:::-;8716:34;;8776:6;-1:-1:-1;;;;;8769:13:0;:3;-1:-1:-1;;;;;8769:13:0;;8761:74;;;;-1:-1:-1;;;8761:74:0;;15518:2:1;8761:74:0;;;15500:21:1;15557:2;15537:18;;;15530:30;15596:34;15576:18;;;15569:62;-1:-1:-1;;;15647:18:1;;;15640:46;15703:19;;8761:74:0;;;;;;;;;8854:10;-1:-1:-1;;;;;8854:20:0;;;;:109;;-1:-1:-1;;;;;;8927:24:0;;;;;;:16;:24;;;;;;;;8952:10;8927:36;;;;;;;;;;8854:109;8846:239;;;;-1:-1:-1;;;8846:239:0;;15935:2:1;8846:239:0;;;15917:21:1;15974:2;15954:18;;;15947:30;16013:34;15993:18;;;15986:62;16084:34;16064:18;;;16057:62;-1:-1:-1;;;16135:19:1;;;16128:34;16179:19;;8846:239:0;15733:471:1;8846:239:0;9096:23;9105:3;9110:8;9096;:23::i;:::-;8705:422;8642:485;;:::o;22190:205::-;22285:41;22305:5;22312:3;22317:8;22285:19;:41::i;:::-;22337:50;22366:5;22373:3;22378:8;22337:28;:50::i;15960:317::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;16103:2:::1;:13:::0;;-1:-1:-1;;;;;;16103:13:0;;::::1;-1:-1:-1::0;;;;;16103:13:0;;::::1;;::::0;;;16128:2:::1;:13:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16153:3:::1;:16:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16181:8:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16223:2:::1;:17:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16252:2:::1;:17:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;15960:317::o;21009:478::-;21187:16;:23;21161:15;:22;:49;21153:76;;;;-1:-1:-1;;;21153:76:0;;16760:2:1;21153:76:0;;;16742:21:1;16799:2;16779:18;;;16772:30;-1:-1:-1;;;16818:18:1;;;16811:44;16872:18;;21153:76:0;16558:338:1;21153:76:0;21274:12;:19;21248:15;:22;:45;21240:78;;;;-1:-1:-1;;;21240:78:0;;17103:2:1;21240:78:0;;;17085:21:1;17142:2;17122:18;;;17115:30;-1:-1:-1;;;17161:18:1;;;17154:50;17221:18;;21240:78:0;16901:344:1;21240:78:0;21334:9;21329:151;21353:15;:22;21349:1;:26;21329:151;;;21397:71;21411:15;21427:1;21411:18;;;;;;;;:::i;:::-;;;;;;;21431:16;21448:1;21431:19;;;;;;;;:::i;:::-;;;;;;;21452:12;21465:1;21452:15;;;;;;;;:::i;:::-;;;;;;;21397:13;:71::i;:::-;21377:3;;;;:::i;:::-;;;;21329:151;;;;21009:478;;;:::o;10181:148::-;10279:42;10296:5;10303:3;10308:8;10279:42;;;;;;;;;;;;:16;:42::i;10567:829::-;10637:16;10666;10685:19;10695:8;10685:9;:19::i;:::-;10666:38;;10715:24;10756:8;10742:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10742:23:0;-1:-1:-1;10824:11:0;;10715:50;;-1:-1:-1;10776:14:0;;;10846:518;10870:12;10866:1;:16;10846:518;;;11006:3;10984:10;10992:1;10984:7;:10::i;:::-;-1:-1:-1;;;;;10984:26:0;;:56;;;;-1:-1:-1;11014:7:0;11022:12;11033:1;11022:8;:12;:::i;:::-;11014:21;;;;;;;;:::i;:::-;;;;;;;11039:1;11014:26;10984:56;10980:111;;;11061:14;;;;:::i;:::-;;;;10980:111;11174:8;-1:-1:-1;;;;;11160:22:0;:10;11168:1;11160:7;:10::i;:::-;-1:-1:-1;;;;;11160:22:0;;11156:197;;11269:1;11251:7;11259:6;11251:15;;;;;;;;:::i;:::-;;;;;;;;;;:19;11329:8;;;;:::i;:::-;;;;11156:197;10884:3;;;;:::i;:::-;;;;10846:518;;;-1:-1:-1;11381:7:0;;10567:829;-1:-1:-1;;;;;10567:829:0:o;1620:89::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;1683:2:::1;:18:::0;;-1:-1:-1;;;;;;1683:18:0::1;-1:-1:-1::0;;;;;1683:18:0;;;::::1;::::0;;;::::1;::::0;;1620:89::o;3274:583::-;3330:7;3479:4;3468:8;:15;:53;;;;-1:-1:-1;3517:3:0;3487:18;;;:8;:18;;;;;;-1:-1:-1;;;;;3487:18:0;:34;3468:53;3464:386;;;3631:2;;:20;;-1:-1:-1;;;3631:20:0;;;;;2343:25:1;;;-1:-1:-1;;;;;3631:2:0;;;;:10;;2316:18:1;;3631:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3464:386::-;-1:-1:-1;3820:18:0;;;;:8;:18;;;;;;-1:-1:-1;;;;;3820:18:0;;3274:583::o;3464:386::-;3274:583;;;:::o;3896:452::-;-1:-1:-1;;;;;4191:31:0;;3954:7;4191:31;;;:21;:31;;;;;;;;4187:154;;;-1:-1:-1;;;;;;4246:20:0;;;;;:10;:20;;;;;;;3896:452::o;4187:154::-;4307:2;;:22;;-1:-1:-1;;;4307:22:0;;-1:-1:-1;;;;;1697:32:1;;;4307:22:0;;;1679:51:1;4307:2:0;;;;:12;;1652:18:1;;4307:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21493:666::-;21728:16;:23;21702:15;:22;:49;21694:76;;;;-1:-1:-1;;;21694:76:0;;16760:2:1;21694:76:0;;;16742:21:1;16799:2;16779:18;;;16772:30;-1:-1:-1;;;16818:18:1;;;16811:44;16872:18;;21694:76:0;16558:338:1;21694:76:0;21815:12;:19;21789:15;:22;:45;21781:78;;;;-1:-1:-1;;;21781:78:0;;17103:2:1;21781:78:0;;;17085:21:1;17142:2;17122:18;;;17115:30;-1:-1:-1;;;17161:18:1;;;17154:50;17221:18;;21781:78:0;16901:344:1;21781:78:0;21904:10;:17;21878:15;:22;:43;21870:85;;;;-1:-1:-1;;;21870:85:0;;18434:2:1;21870:85:0;;;18416:21:1;18473:2;18453:18;;;18446:30;18512:31;18492:18;;;18485:59;18561:18;;21870:85:0;18232:353:1;21870:85:0;21971:9;21966:186;21990:15;:22;21986:1;:26;21966:186;;;22034:106;22050:15;22066:1;22050:18;;;;;;;;:::i;:::-;;;;;;;22070:16;22087:1;22070:19;;;;;;;;:::i;:::-;;;;;;;22091:12;22104:1;22091:15;;;;;;;;:::i;:::-;;;;;;;22108:16;22126:10;22137:1;22126:13;;;;;;;;:::i;:::-;;;;;;;22034:15;:106::i;:::-;22014:3;;;;:::i;:::-;;;;21966:186;;;;21493:666;;;;;:::o;2878:359::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;2994:34;;::::1;2986:96;;;::::0;-1:-1:-1;;;2986:96:0;;18792:2:1;2986:96:0::1;::::0;::::1;18774:21:1::0;18831:2;18811:18;;;18804:30;18870:34;18850:18;;;18843:62;-1:-1:-1;;;18921:18:1;;;18914:34;18965:19;;2986:96:0::1;18590:400:1::0;2986:96:0::1;3108:9;3103:127;3123:20:::0;;::::1;3103:127;;;3205:9;;3215:1;3205:12;;;;;;;:::i;:::-;;;;;;;3193:7;;3201:1;3193:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3170:48:0::1;3187:3;-1:-1:-1::0;;;;;3170:48:0::1;;;;;;;;;;;3145:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3103:127;;;;2878:359:::0;;;;:::o;18307:1184::-;18438:2;;:26;;-1:-1:-1;;;18438:26:0;;;;;2343:25:1;;;-1:-1:-1;;;;;18438:2:0;;;;:10;;2316:18:1;;18438:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18424:40:0;:10;-1:-1:-1;;;;;18424:40:0;;:85;;;;-1:-1:-1;18482:2:0;;:27;;-1:-1:-1;;;18482:27:0;;;;;2343:25:1;;;-1:-1:-1;;;;;18482:2:0;;;;:10;;2316:18:1;;18482:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18468:41:0;:10;-1:-1:-1;;;;;18468:41:0;;18424:85;18416:111;;;;-1:-1:-1;;;18416:111:0;;19197:2:1;18416:111:0;;;19179:21:1;19236:2;19216:18;;;19209:30;-1:-1:-1;;;19255:18:1;;;19248:43;19308:18;;18416:111:0;18995:337:1;18416:111:0;18546:30;;;;;;;;:17;:30;;;;;;;18538:75;;;;-1:-1:-1;;;18538:75:0;;19539:2:1;18538:75:0;;;19521:21:1;;;19558:18;;;19551:30;19617:34;19597:18;;;19590:62;19669:18;;18538:75:0;19337:356:1;18538:75:0;18678:2;;:58;;-1:-1:-1;;;18678:58:0;;-1:-1:-1;;;;;18678:2:0;;;;:15;;:58;;18694:10;;18714:4;;18721:14;;18678:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18747:2:0;;:59;;-1:-1:-1;;;18747:59:0;;-1:-1:-1;;;;;18747:2:0;;;;-1:-1:-1;18747:15:0;;-1:-1:-1;18747:59:0;;18763:10;;18783:4;;18790:15;;18747:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18859:96:0;;-1:-1:-1;;18876:10:0;20339:2:1;20335:15;20331:53;18859:96:0;;;20319:66:1;18888:15:0;20401:12:1;;;20394:28;18905:16:0;20438:12:1;;;20431:28;20475:12;;;20468:28;;;20512:13;;;20505:29;;;18819:11:0;;-1:-1:-1;18960:2:0;;-1:-1:-1;20550:13:1;;18859:96:0;;;;;;;;;;;;18849:107;;;;;;18841:116;;:121;;;;:::i;:::-;18840:127;;18966:1;18840:127;:::i;:::-;19020:2;;:51;;-1:-1:-1;;;19020:51:0;;21092:6:1;21080:19;;19020:51:0;;;21062:38:1;18819:150:0;;-1:-1:-1;18995:22:0;;-1:-1:-1;;;;;19020:2:0;;;;:24;;21035:18:1;;19020:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19118:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19084:31;19118:207;;;;;;;;;;;;;;;;19338:2;;19357:11;;;19338:43;;-1:-1:-1;;;19338:43:0;;18995:76;;-1:-1:-1;19118:207:0;;-1:-1:-1;;;;;19338:2:0;;;;:18;;:43;;19118:207;;19338:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19402:40;19418:10;19430:11;;19402:15;:40::i;:::-;19453:30;19459:10;19471:11;;19453:5;:30::i;1767:20::-;;;;;;;:::i;9210:148::-;9298:52;9317:10;9329:9;9340;9298:18;:52::i;:::-;9210:148;;:::o;18162:137::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;18253:30:::1;::::0;;;::::1;;::::0;;;:17:::1;:30;::::0;;;;:38;;-1:-1:-1;;18253:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18162:137::o;9660:515::-;9778:34;9791:5;9798:3;9803:8;9778:12;:34::i;:::-;-1:-1:-1;;;;;9827:15:0;;;:20;9823:345;;9867:22;9893:3;-1:-1:-1;;;;;9893:14:0;9931:10;9943;9955:5;9962:8;9972:5;9908:70;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9908:70:0;;;;;;;;;;;9893:86;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9864:115;;;9994:16;10024:9;10013:31;;;;;;;;;;;;:::i;:::-;9994:50;-1:-1:-1;;;;;;;;;;10067:23:0;;;10059:97;;;;-1:-1:-1;;;10059:97:0;;23541:2:1;10059:97:0;;;23523:21:1;23580:2;23560:18;;;23553:30;23619:34;23599:18;;;23592:62;23690:31;23670:18;;;23663:59;23739:19;;10059:97:0;23339:425:1;19497:1467:0;19675:2;;:26;;-1:-1:-1;;;19675:26:0;;;;;2343:25:1;;;-1:-1:-1;;;;;19675:2:0;;;;:10;;2316:18:1;;19675:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19661:40:0;:10;-1:-1:-1;;;;;19661:40:0;;:85;;;;-1:-1:-1;19719:2:0;;:27;;-1:-1:-1;;;19719:27:0;;;;;2343:25:1;;;-1:-1:-1;;;;;19719:2:0;;;;:10;;2316:18:1;;19719:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19705:41:0;:10;-1:-1:-1;;;;;19705:41:0;;19661:85;19653:111;;;;-1:-1:-1;;;19653:111:0;;19197:2:1;19653:111:0;;;19179:21:1;19236:2;19216:18;;;19209:30;-1:-1:-1;;;19255:18:1;;;19248:43;19308:18;;19653:111:0;18995:337:1;19653:111:0;19797:44;;-1:-1:-1;;;19797:44:0;;;;;2343:25:1;;;-1:-1:-1;;;;;19797:33:0;;;;;2316:18:1;;19797:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19783:58:0;:10;-1:-1:-1;;;;;19783:58:0;;19775:100;;;;-1:-1:-1;;;19775:100:0;;23971:2:1;19775:100:0;;;23953:21:1;24010:2;23990:18;;;23983:30;24049:31;24029:18;;;24022:59;24098:18;;19775:100:0;23769:353:1;19775:100:0;-1:-1:-1;;;;;19895:48:0;;;;;;:30;:48;;;;;;;;:59;;;;;;;;;;;19894:60;19886:114;;;;-1:-1:-1;;;19886:114:0;;24329:2:1;19886:114:0;;;24311:21:1;24368:2;24348:18;;;24341:30;24407:34;24387:18;;;24380:62;-1:-1:-1;;;24458:18:1;;;24451:39;24507:19;;19886:114:0;24127:405:1;19886:114:0;20019:30;;;;;;;;:17;:30;;;;;;;20011:75;;;;-1:-1:-1;;;20011:75:0;;19539:2:1;20011:75:0;;;19521:21:1;;;19558:18;;;19551:30;19617:34;19597:18;;;19590:62;19669:18;;20011:75:0;19337:356:1;20011:75:0;20188:2;;:58;;-1:-1:-1;;;20188:58:0;;-1:-1:-1;;;;;20188:2:0;;;;:15;;:58;;20204:10;;20224:4;;20231:14;;20188:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20257:2:0;;:59;;-1:-1:-1;;;20257:59:0;;-1:-1:-1;;;;;20257:2:0;;;;-1:-1:-1;20257:15:0;;-1:-1:-1;20257:59:0;;20273:10;;20293:4;;20300:15;;20257:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;20327:48:0;;;;;;;:30;:48;;;;;;;;:59;;;;;;;;;:66;;-1:-1:-1;;20327:66:0;20389:4;20327:66;;;20420:2;;:35;;-1:-1:-1;;;20420:35:0;;;;;1679:51:1;;;;20327:48:0;;20420:2;;:17;;1652:18:1;;20420:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20491:2;;:51;;-1:-1:-1;;;20491:51:0;;21092:6:1;21080:19;;20491:51:0;;;21062:38:1;20406:49:0;;-1:-1:-1;20466:22:0;;-1:-1:-1;;;;;20491:2:0;;;;:24;;21035:18:1;;20491:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20597:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20563:31;20597:207;;;;;;;;;;;;;;;;20817:2;;20836:11;;;20817:43;;-1:-1:-1;;;20817:43:0;;20466:76;;-1:-1:-1;20597:207:0;;-1:-1:-1;;;;;20817:2:0;;;;:18;;:43;;20597:207;;20817:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20874:40;20890:10;20902:11;;20874:15;:40::i;:::-;20925:30;20931:10;20943:11;;20925:5;:30::i;:::-;19642:1322;;;19497:1467;;;;;:::o;16358:329::-;16466:16;;-1:-1:-1;;;16466:16:0;;;;16465:17;16457:48;;;;-1:-1:-1;;;16457:48:0;;24991:2:1;16457:48:0;;;24973:21:1;25030:2;25010:18;;;25003:30;-1:-1:-1;;;25049:18:1;;;25042:48;25107:18;;16457:48:0;24789:342:1;16457:48:0;16516:16;:23;;-1:-1:-1;;;;16516:23:0;-1:-1:-1;;;16516:23:0;;;16571:28;;;;;;;;;;;;-1:-1:-1;;;16571:28:0;;;;:4;;:28;;:4;:28;:::i;:::-;-1:-1:-1;16610:19:0;;;;;;;;;;;;-1:-1:-1;;;16610:19:0;;;;:6;;:19;;:6;:19;:::i;:::-;-1:-1:-1;16662:5:0;:17;;-1:-1:-1;;;;;;16662:17:0;-1:-1:-1;;;;;16662:17:0;;;;;;;;;;16358:329::o;22943:197::-;23000:13;23034:17;23042:8;23034:7;:17::i;:::-;23026:55;;;;-1:-1:-1;;;23026:55:0;;27542:2:1;23026:55:0;;;27524:21:1;27581:2;27561:18;;;27554:30;27620:27;27600:18;;;27593:55;27665:18;;23026:55:0;27340:349:1;23026:55:0;23099:8;;:33;;-1:-1:-1;;;23099:33:0;;;;;2343:25:1;;;-1:-1:-1;;;;;23099:8:0;;;;:23;;2316:18:1;;23099:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23099:33:0;;;;;;;;;;;;:::i;591:170::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;662:12:::1;677:5:::0;;-1:-1:-1;;;;;693:12:0;;::::1;-1:-1:-1::0;;;;;;693:12:0;::::1;::::0;::::1;::::0;;721:32:::1;::::0;677:5;;;::::1;::::0;;;721:32:::1;::::0;662:12;721:32:::1;651:110;591:170:::0;:::o;2653:111::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;2729:11:::1;:26:::0;2653:111::o;7255:234::-;7336:21;;;;:11;:21;;;;;;-1:-1:-1;;;;;7336:28:0;;;:21;;:28;7332:150;;7381:21;;;;:11;:21;;;;;:27;;-1:-1:-1;;;;;;7381:27:0;-1:-1:-1;;;;;7381:27:0;;;;;;;;:21;;7437:17;7381:21;7437:7;:17::i;:::-;-1:-1:-1;;;;;7428:42:0;;;;;;;;;;;7255:234;;:::o;17461:608::-;17598:3;;:23;;-1:-1:-1;;;17598:23:0;;-1:-1:-1;;;;;1697:32:1;;;17598:23:0;;;1679:51:1;17598:3:0;;;;:16;;1652:18:1;;17598:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17623:3:0;;:21;;-1:-1:-1;;;17623:21:0;;-1:-1:-1;;;;;1697:32:1;;;17623:21:0;;;1679:51:1;17623:3:0;;;;-1:-1:-1;17623:16:0;;-1:-1:-1;1652:18:1;;17623:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17740:2:0;;:23;;-1:-1:-1;;;17740:23:0;;;;;2343:25:1;;;17706:31:0;;-1:-1:-1;;;;;;17740:2:0;;;;-1:-1:-1;17740:13:0;;2316:18:1;;17740:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17800:2;;17827:20;;;;17849:22;;;;17873:31;;;;17800:105;;-1:-1:-1;;;17800:105:0;;29680:4:1;29668:17;;;17800:105:0;;;29650:36:1;29705:6;29747:15;;;29727:18;;;29720:43;29799:15;29779:18;;;29772:43;17827:20:0;;-1:-1:-1;17774:23:0;;-1:-1:-1;;;;;17800:2:0;;;;:26;;29623:18:1;;17800:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17981:3;;:40;;-1:-1:-1;;;17981:40:0;;-1:-1:-1;;;;;30018:32:1;;;17981:40:0;;;30000:51:1;30067:18;;;30060:34;;;17774:131:0;;-1:-1:-1;17981:3:0;;;:16;;29973:18:1;;17981:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18023:3:0;;:38;;-1:-1:-1;;;18023:38:0;;-1:-1:-1;;;;;30018:32:1;;;18023:38:0;;;30000:51:1;30067:18;;;30060:34;;;18023:3:0;;;;-1:-1:-1;18023:16:0;;-1:-1:-1;29973:18:1;;18023:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17545:524;;17461:608;;;:::o;9384:270::-;9486:40;9505:10;9517:8;9486:18;:40::i;:::-;9478:126;;;;-1:-1:-1;;;9478:126:0;;30307:2:1;9478:126:0;;;30289:21:1;30346:2;30326:18;;;30319:30;30385:34;30365:18;;;30358:62;30456:29;30436:18;;;30429:57;30503:19;;9478:126:0;30105:423:1;9478:126:0;9615:31;9625:5;9632:3;9637:8;9615:9;:31::i;16935:520::-;17053:3;;:21;;-1:-1:-1;;;17053:21:0;;-1:-1:-1;;;;;1697:32:1;;;17053:21:0;;;1679:51:1;17053:3:0;;;;:16;;1652:18:1;;17053:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17170:2:0;;:23;;-1:-1:-1;;;17170:23:0;;;;;2343:25:1;;;17136:31:0;;-1:-1:-1;;;;;;17170:2:0;;;;-1:-1:-1;17170:13:0;;2316:18:1;;17170:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17230:2;;17257:20;;;;17279:22;;;;17303:31;;;;17230:105;;-1:-1:-1;;;17230:105:0;;29680:4:1;29668:17;;;17230:105:0;;;29650:36:1;29705:6;29747:15;;;29727:18;;;29720:43;29799:15;29779:18;;;29772:43;17257:20:0;;-1:-1:-1;17204:23:0;;-1:-1:-1;;;;;17230:2:0;;;;:26;;29623:18:1;;17230:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17409:3;;:38;;-1:-1:-1;;;17409:38:0;;-1:-1:-1;;;;;30018:32:1;;;17409:38:0;;;30000:51:1;30067:18;;;30060:34;;;17204:131:0;;-1:-1:-1;17409:3:0;;;:16;;29973:18:1;;17409:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4731:947;-1:-1:-1;;;;;4813:19:0;;4805:78;;;;-1:-1:-1;;;4805:78:0;;30735:2:1;4805:78:0;;;30717:21:1;30774:2;30754:18;;;30747:30;30813:34;30793:18;;;30786:62;-1:-1:-1;;;30864:18:1;;;30857:44;30918:19;;4805:78:0;30533:410:1;4805:78:0;4931:3;4902:17;4910:8;4902:7;:17::i;:::-;-1:-1:-1;;;;;4902:33:0;;4894:92;;;;-1:-1:-1;;;4894:92:0;;31150:2:1;4894:92:0;;;31132:21:1;31189:2;31169:18;;;31162:30;31228:34;31208:18;;;31201:62;-1:-1:-1;;;31279:18:1;;;31272:44;31333:19;;4894:92:0;30948:410:1;4894:92:0;5074:18;;;;:8;:18;;;;;;;;:24;;-1:-1:-1;;;;;;5074:24:0;-1:-1:-1;;;;;5074:24:0;;;;;;;;5212:26;;:21;:26;;;;;;;;5208:244;;;-1:-1:-1;;;;;5301:15:0;;;;;;:10;:15;;;;;:17;;;;;;:::i;:::-;;;;;;5208:244;;;5370:2;;:17;;-1:-1:-1;;;5370:17:0;;-1:-1:-1;;;;;1697:32:1;;;5370:17:0;;;1679:51:1;5370:2:0;;;;:12;;1652:18:1;;5370:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:21;;5390:1;5370:21;:::i;:::-;-1:-1:-1;;;;;5351:15:0;;;;;;:10;:15;;;;;;;;:41;;;;5407:21;:26;;;:33;;-1:-1:-1;;5407:33:0;5436:4;5407:33;;;5208:244;5508:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;;5598:37:0;;5626:8;;-1:-1:-1;;;;;5598:37:0;;;5615:3;;5598:37;;5615:3;;5598:37;5656:3;-1:-1:-1;;;;;5651:19:0;;5661:8;5651:19;;;;2343:25:1;;2331:2;2316:18;;2197:177;5651:19:0;;;;;;;;4731:947;;:::o;7495:334::-;7620:9;-1:-1:-1;;;;;7610:19:0;:6;-1:-1:-1;;;;;7610:19:0;;7602:101;;;;-1:-1:-1;;;7602:101:0;;31565:2:1;7602:101:0;;;31547:21:1;31604:2;31584:18;;;31577:30;31643:34;31623:18;;;31616:62;31714:34;31694:18;;;31687:62;-1:-1:-1;;;31765:19:1;;;31758:36;31811:19;;7602:101:0;31363:473:1;7602:101:0;-1:-1:-1;;;;;7714:24:0;;;;;;;:16;:24;;;;;;;;:35;;;;;;;;;;;;;:47;;-1:-1:-1;;7714:47:0;;;;;;;;;;7777:44;;540:41:1;;;7777:44:0;;513:18:1;7777:44:0;;;;;;;7495:334;;;:::o;8374:228::-;8440:4;8521;8510:8;:15;8506:37;;;-1:-1:-1;8536:4:0;;8374:228;-1:-1:-1;8374:228:0:o;8506:37::-;-1:-1:-1;8590:3:0;8560:18;;;:8;:18;;;;;;-1:-1:-1;;;;;8560:18:0;:34;;;8374:228::o;7874:477::-;7961:4;7978:14;7995:17;8003:8;7995:7;:17::i;:::-;7978:34;-1:-1:-1;;;;;;8031:22:0;;8023:95;;;;-1:-1:-1;;;8023:95:0;;32043:2:1;8023:95:0;;;32025:21:1;32082:2;32062:18;;;32055:30;32121:34;32101:18;;;32094:62;32192:30;32172:18;;;32165:58;32240:19;;8023:95:0;31841:424:1;8023:95:0;8149:6;-1:-1:-1;;;;;8137:18:0;:8;-1:-1:-1;;;;;8137:18:0;;:87;;;-1:-1:-1;8203:21:0;;;;:11;:21;;;;;;-1:-1:-1;;;;;8191:33:0;;;8203:21;;8191:33;8137:87;:166;;;-1:-1:-1;;;;;;8269:24:0;;;;;;;:16;:24;;;;;;;;:34;;;;;;;;;;;;8137:166;8129:214;7874:477;-1:-1:-1;;;;7874:477:0:o;5686:1543::-;5796:17;5804:8;5796:7;:17::i;:::-;-1:-1:-1;;;;;5787:26:0;:5;-1:-1:-1;;;;;5787:26:0;;5779:103;;;;;-1:-1:-1;;;5779:103:0;;32472:2:1;5779:103:0;;;32454:21:1;32491:18;;;32484:30;;;;32550:34;32530:18;;;32523:62;32621:34;32601:18;;;32594:62;32673:19;;5779:103:0;32270:428:1;5779:103:0;-1:-1:-1;;;;;5901:19:0;;5893:86;;;;-1:-1:-1;;;5893:86:0;;32905:2:1;5893:86:0;;;32887:21:1;32944:2;32924:18;;;32917:30;32983:34;32963:18;;;32956:62;-1:-1:-1;;;33034:18:1;;;33027:52;33096:19;;5893:86:0;32703:418:1;5893:86:0;6106:3;6073:21;;;:11;:21;;;;;;-1:-1:-1;;;;;6073:21:0;:37;6069:154;;6207:3;6175:21;;;:11;:21;;;;;:36;;-1:-1:-1;;;;;;6175:36:0;;;6069:154;6280:18;;;;:8;:18;;;;;;;;:24;;-1:-1:-1;;;;;;6280:24:0;-1:-1:-1;;;;;6280:24:0;;;;;;;;;;6373:28;;;;:21;:28;;;;;;;;6369:382;;;-1:-1:-1;;;;;6484:17:0;;;;;;:10;:17;;;;;:19;;;;;;:::i;:::-;;;;;;6369:382;;;6646:1;6624:2;;:19;;-1:-1:-1;;;6624:19:0;;-1:-1:-1;;;;;1697:32:1;;;6624:19:0;;;1679:51:1;6624:2:0;;;;:12;;1652:18:1;;6624:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;;;:::i;:::-;-1:-1:-1;;;;;6603:17:0;;;;;;:10;:17;;;;;;;;:45;;;;6704:21;:28;;;:35;;-1:-1:-1;;6704:35:0;6735:4;6704:35;;;6369:382;-1:-1:-1;;;;;6767:26:0;;;;;;:21;:26;;;;;;;;6763:367;;;-1:-1:-1;;;;;6874:15:0;;;;;;:10;:15;;;;;:17;;;;;;:::i;:::-;;;;;;6763:367;;;7008:2;;:17;;-1:-1:-1;;;7008:17:0;;-1:-1:-1;;;;;1697:32:1;;;7008:17:0;;;1679:51:1;7008:2:0;;;;:12;;1652:18:1;;7008:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:21;;7028:1;7008:21;:::i;:::-;-1:-1:-1;;;;;6989:15:0;;;;;;:10;:15;;;;;;;;:41;;;;7085:21;:26;;;:33;;-1:-1:-1;;7085:33:0;7114:4;7085:33;;;6763:367;7212:8;7207:3;-1:-1:-1;;;;;7191:30:0;7200:5;-1:-1:-1;;;;;7191:30:0;;;;;;;;;;;5686:1543;;;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;68:71;14:131;:::o;150:245::-;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:131::-;-1:-1:-1;;;;;1816:31:1;;1806:42;;1796:70;;1862:1;1859;1852:12;1877:315;1945:6;1953;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2061:9;2048:23;2080:31;2105:5;2080:31;:::i;:::-;2130:5;2182:2;2167:18;;;;2154:32;;-1:-1:-1;;;1877:315:1:o;2379:456::-;2456:6;2464;2472;2525:2;2513:9;2504:7;2500:23;2496:32;2493:52;;;2541:1;2538;2531:12;2493:52;2580:9;2567:23;2599:31;2624:5;2599:31;:::i;:::-;2649:5;-1:-1:-1;2706:2:1;2691:18;;2678:32;2719:33;2678:32;2719:33;:::i;:::-;2379:456;;2771:7;;-1:-1:-1;;;2825:2:1;2810:18;;;;2797:32;;2379:456::o;2840:955::-;2944:6;2952;2960;2968;2976;2984;3037:3;3025:9;3016:7;3012:23;3008:33;3005:53;;;3054:1;3051;3044:12;3005:53;3093:9;3080:23;3112:31;3137:5;3112:31;:::i;:::-;3162:5;-1:-1:-1;3219:2:1;3204:18;;3191:32;3232:33;3191:32;3232:33;:::i;:::-;3284:7;-1:-1:-1;3343:2:1;3328:18;;3315:32;3356:33;3315:32;3356:33;:::i;:::-;3408:7;-1:-1:-1;3467:2:1;3452:18;;3439:32;3480:33;3439:32;3480:33;:::i;:::-;3532:7;-1:-1:-1;3591:3:1;3576:19;;3563:33;3605;3563;3605;:::i;:::-;3657:7;-1:-1:-1;3716:3:1;3701:19;;3688:33;3730;3688;3730;:::i;:::-;3782:7;3772:17;;;2840:955;;;;;;;;:::o;4020:127::-;4081:10;4076:3;4072:20;4069:1;4062:31;4112:4;4109:1;4102:15;4136:4;4133:1;4126:15;4152:275;4223:2;4217:9;4288:2;4269:13;;-1:-1:-1;;4265:27:1;4253:40;;4323:18;4308:34;;4344:22;;;4305:62;4302:88;;;4370:18;;:::i;:::-;4406:2;4399:22;4152:275;;-1:-1:-1;4152:275:1:o;4432:183::-;4492:4;4525:18;4517:6;4514:30;4511:56;;;4547:18;;:::i;:::-;-1:-1:-1;4592:1:1;4588:14;4604:4;4584:25;;4432:183::o;4620:662::-;4674:5;4727:3;4720:4;4712:6;4708:17;4704:27;4694:55;;4745:1;4742;4735:12;4694:55;4781:6;4768:20;4807:4;4831:60;4847:43;4887:2;4847:43;:::i;:::-;4831:60;:::i;:::-;4925:15;;;5011:1;5007:10;;;;4995:23;;4991:32;;;4956:12;;;;5035:15;;;5032:35;;;5063:1;5060;5053:12;5032:35;5099:2;5091:6;5087:15;5111:142;5127:6;5122:3;5119:15;5111:142;;;5193:17;;5181:30;;5231:12;;;;5144;;5111:142;;;-1:-1:-1;5271:5:1;4620:662;-1:-1:-1;;;;;;4620:662:1:o;5287:114::-;5371:4;5364:5;5360:16;5353:5;5350:27;5340:55;;5391:1;5388;5381:12;5406:733;5458:5;5511:3;5504:4;5496:6;5492:17;5488:27;5478:55;;5529:1;5526;5519:12;5478:55;5565:6;5552:20;5591:4;5615:60;5631:43;5671:2;5631:43;:::i;5615:60::-;5709:15;;;5795:1;5791:10;;;;5779:23;;5775:32;;;5740:12;;;;5819:15;;;5816:35;;;5847:1;5844;5837:12;5816:35;5883:2;5875:6;5871:15;5895:215;5911:6;5906:3;5903:15;5895:215;;;5991:3;5978:17;6008:29;6031:5;6008:29;:::i;:::-;6050:18;;6088:12;;;;5928;;5895:215;;6144:817;6294:6;6302;6310;6363:2;6351:9;6342:7;6338:23;6334:32;6331:52;;;6379:1;6376;6369:12;6331:52;6419:9;6406:23;6448:18;6489:2;6481:6;6478:14;6475:34;;;6505:1;6502;6495:12;6475:34;6528:61;6581:7;6572:6;6561:9;6557:22;6528:61;:::i;:::-;6518:71;;6642:2;6631:9;6627:18;6614:32;6598:48;;6671:2;6661:8;6658:16;6655:36;;;6687:1;6684;6677:12;6655:36;6710:63;6765:7;6754:8;6743:9;6739:24;6710:63;:::i;:::-;6700:73;;6826:2;6815:9;6811:18;6798:32;6782:48;;6855:2;6845:8;6842:16;6839:36;;;6871:1;6868;6861:12;6839:36;;6894:61;6947:7;6936:8;6925:9;6921:24;6894:61;:::i;:::-;6884:71;;;6144:817;;;;;:::o;6966:247::-;7025:6;7078:2;7066:9;7057:7;7053:23;7049:32;7046:52;;;7094:1;7091;7084:12;7046:52;7133:9;7120:23;7152:31;7177:5;7152:31;:::i;7218:632::-;7389:2;7441:21;;;7511:13;;7414:18;;;7533:22;;;7360:4;;7389:2;7612:15;;;;7586:2;7571:18;;;7360:4;7655:169;7669:6;7666:1;7663:13;7655:169;;;7730:13;;7718:26;;7799:15;;;;7764:12;;;;7691:1;7684:9;7655:169;;;-1:-1:-1;7841:3:1;;7218:632;-1:-1:-1;;;;;;7218:632:1:o;7855:243::-;7912:6;7965:2;7953:9;7944:7;7940:23;7936:32;7933:52;;;7981:1;7978;7971:12;7933:52;8020:9;8007:23;8039:29;8062:5;8039:29;:::i;8546:1180::-;8739:6;8747;8755;8763;8771;8824:3;8812:9;8803:7;8799:23;8795:33;8792:53;;;8841:1;8838;8831:12;8792:53;8881:9;8868:23;8910:18;8951:2;8943:6;8940:14;8937:34;;;8967:1;8964;8957:12;8937:34;8990:61;9043:7;9034:6;9023:9;9019:22;8990:61;:::i;:::-;8980:71;;9104:2;9093:9;9089:18;9076:32;9060:48;;9133:2;9123:8;9120:16;9117:36;;;9149:1;9146;9139:12;9117:36;9172:63;9227:7;9216:8;9205:9;9201:24;9172:63;:::i;:::-;9162:73;;9288:2;9277:9;9273:18;9260:32;9244:48;;9317:2;9307:8;9304:16;9301:36;;;9333:1;9330;9323:12;9301:36;9356:61;9409:7;9398:8;9387:9;9383:24;9356:61;:::i;:::-;9346:71;;9467:2;9456:9;9452:18;9439:32;9426:45;;9480:31;9505:5;9480:31;:::i;:::-;9530:5;;-1:-1:-1;9588:3:1;9573:19;;9560:33;;9605:16;;;9602:36;;;9634:1;9631;9624:12;9602:36;;9657:63;9712:7;9701:8;9690:9;9686:24;9657:63;:::i;:::-;9647:73;;;8546:1180;;;;;;;;:::o;9731:367::-;9794:8;9804:6;9858:3;9851:4;9843:6;9839:17;9835:27;9825:55;;9876:1;9873;9866:12;9825:55;-1:-1:-1;9899:20:1;;9942:18;9931:30;;9928:50;;;9974:1;9971;9964:12;9928:50;10011:4;10003:6;9999:17;9987:29;;10071:3;10064:4;10054:6;10051:1;10047:14;10039:6;10035:27;10031:38;10028:47;10025:67;;;10088:1;10085;10078:12;10025:67;9731:367;;;;;:::o;10103:773::-;10225:6;10233;10241;10249;10302:2;10290:9;10281:7;10277:23;10273:32;10270:52;;;10318:1;10315;10308:12;10270:52;10358:9;10345:23;10387:18;10428:2;10420:6;10417:14;10414:34;;;10444:1;10441;10434:12;10414:34;10483:70;10545:7;10536:6;10525:9;10521:22;10483:70;:::i;:::-;10572:8;;-1:-1:-1;10457:96:1;-1:-1:-1;10660:2:1;10645:18;;10632:32;;-1:-1:-1;10676:16:1;;;10673:36;;;10705:1;10702;10695:12;10673:36;;10744:72;10808:7;10797:8;10786:9;10782:24;10744:72;:::i;:::-;10103:773;;;;-1:-1:-1;10835:8:1;-1:-1:-1;;;;10103:773:1:o;10881:379::-;10956:6;10964;10972;11025:2;11013:9;11004:7;11000:23;10996:32;10993:52;;;11041:1;11038;11031:12;10993:52;11077:9;11064:23;11054:33;;11134:2;11123:9;11119:18;11106:32;11096:42;;11188:2;11177:9;11173:18;11160:32;11201:29;11224:5;11201:29;:::i;:::-;11249:5;11239:15;;;10881:379;;;;;:::o;11265:160::-;11330:20;;11386:13;;11379:21;11369:32;;11359:60;;11415:1;11412;11405:12;11430:315;11495:6;11503;11556:2;11544:9;11535:7;11531:23;11527:32;11524:52;;;11572:1;11569;11562:12;11524:52;11611:9;11598:23;11630:31;11655:5;11630:31;:::i;:::-;11680:5;-1:-1:-1;11704:35:1;11735:2;11720:18;;11704:35;:::i;:::-;11694:45;;11430:315;;;;;:::o;11976:311::-;12039:6;12047;12100:2;12088:9;12079:7;12075:23;12071:32;12068:52;;;12116:1;12113;12106:12;12068:52;12155:9;12142:23;12174:29;12197:5;12174:29;:::i;12292:186::-;12340:4;12373:18;12365:6;12362:30;12359:56;;;12395:18;;:::i;:::-;-1:-1:-1;12461:2:1;12440:15;-1:-1:-1;;12436:29:1;12467:4;12432:40;;12292:186::o;12483:1016::-;12578:6;12586;12594;12602;12655:3;12643:9;12634:7;12630:23;12626:33;12623:53;;;12672:1;12669;12662:12;12623:53;12711:9;12698:23;12730:31;12755:5;12730:31;:::i;:::-;12780:5;-1:-1:-1;12837:2:1;12822:18;;12809:32;12850:33;12809:32;12850:33;:::i;:::-;12902:7;-1:-1:-1;12956:2:1;12941:18;;12928:32;;-1:-1:-1;13011:2:1;12996:18;;12983:32;13038:18;13027:30;;13024:50;;;13070:1;13067;13060:12;13024:50;13093:22;;13146:4;13138:13;;13134:27;-1:-1:-1;13124:55:1;;13175:1;13172;13165:12;13124:55;13211:2;13198:16;13236:48;13252:31;13280:2;13252:31;:::i;13236:48::-;13307:2;13300:5;13293:17;13347:7;13342:2;13337;13333;13329:11;13325:20;13322:33;13319:53;;;13368:1;13365;13358:12;13319:53;13423:2;13418;13414;13410:11;13405:2;13398:5;13394:14;13381:45;13467:1;13462:2;13457;13450:5;13446:14;13442:23;13435:34;13488:5;13478:15;;;;;12483:1016;;;;;;;:::o;13504:590::-;13597:6;13605;13613;13621;13629;13682:3;13670:9;13661:7;13657:23;13653:33;13650:53;;;13699:1;13696;13689:12;13650:53;13735:9;13722:23;13712:33;;13792:2;13781:9;13777:18;13764:32;13754:42;;13846:2;13835:9;13831:18;13818:32;13859:29;13882:5;13859:29;:::i;:::-;13907:5;-1:-1:-1;13964:2:1;13949:18;;13936:32;13977:33;13936:32;13977:33;:::i;:::-;13504:590;;;;-1:-1:-1;13504:590:1;;14083:3;14068:19;14055:33;;13504:590;-1:-1:-1;;13504:590:1:o;14538:388::-;14606:6;14614;14667:2;14655:9;14646:7;14642:23;14638:32;14635:52;;;14683:1;14680;14673:12;14635:52;14722:9;14709:23;14741:31;14766:5;14741:31;:::i;:::-;14791:5;-1:-1:-1;14848:2:1;14833:18;;14820:32;14861:33;14820:32;14861:33;:::i;:::-;14913:7;14903:17;;;14538:388;;;;;:::o;14931:380::-;15010:1;15006:12;;;;15053;;;15074:61;;15128:4;15120:6;15116:17;15106:27;;15074:61;15181:2;15173:6;15170:14;15150:18;15147:38;15144:161;;15227:10;15222:3;15218:20;15215:1;15208:31;15262:4;15259:1;15252:15;15290:4;15287:1;15280:15;15144:161;;14931:380;;;:::o;16209:344::-;16411:2;16393:21;;;16450:2;16430:18;;;16423:30;-1:-1:-1;;;16484:2:1;16469:18;;16462:50;16544:2;16529:18;;16209:344::o;17250:127::-;17311:10;17306:3;17302:20;17299:1;17292:31;17342:4;17339:1;17332:15;17366:4;17363:1;17356:15;17382:127;17443:10;17438:3;17434:20;17431:1;17424:31;17474:4;17471:1;17464:15;17498:4;17495:1;17488:15;17514:135;17553:3;17574:17;;;17571:43;;17594:18;;:::i;:::-;-1:-1:-1;17641:1:1;17630:13;;17514:135::o;17654:128::-;17721:9;;;17742:11;;;17739:37;;;17756:18;;:::i;17787:251::-;17857:6;17910:2;17898:9;17889:7;17885:23;17881:32;17878:52;;;17926:1;17923;17916:12;17878:52;17958:9;17952:16;17977:31;18002:5;17977:31;:::i;18043:184::-;18113:6;18166:2;18154:9;18145:7;18141:23;18137:32;18134:52;;;18182:1;18179;18172:12;18134:52;-1:-1:-1;18205:16:1;;18043:184;-1:-1:-1;18043:184:1:o;19698:375::-;-1:-1:-1;;;;;19956:15:1;;;19938:34;;20008:15;;;;20003:2;19988:18;;19981:43;20055:2;20040:18;;20033:34;;;;19888:2;19873:18;;19698:375::o;20574:209::-;20606:1;20632;20622:132;;20676:10;20671:3;20667:20;20664:1;20657:31;20711:4;20708:1;20701:15;20739:4;20736:1;20729:15;20622:132;-1:-1:-1;20768:9:1;;20574:209::o;20788:125::-;20853:9;;;20874:10;;;20871:36;;;20887:18;;:::i;21111:163::-;21189:13;;21242:6;21231:18;;21221:29;;21211:57;;21264:1;21261;21254:12;21279:206;21348:6;21401:2;21389:9;21380:7;21376:23;21372:32;21369:52;;;21417:1;21414;21407:12;21369:52;21440:39;21469:9;21440:39;:::i;21490:804::-;21662:4;21704:3;21693:9;21689:19;21681:27;;21735:6;21724:9;21717:25;21797:4;21788:6;21782:13;21778:24;21773:2;21762:9;21758:18;21751:52;21867:4;21861:2;21853:6;21849:15;21843:22;21839:33;21834:2;21823:9;21819:18;21812:61;21920:2;21912:6;21908:15;21902:22;21943:6;22003:2;21989:12;21985:21;21980:2;21969:9;21965:18;21958:49;22072:2;22066;22058:6;22054:15;22048:22;22044:31;22038:3;22027:9;22023:19;22016:60;22142:4;22135:3;22127:6;22123:16;22117:23;22113:34;22107:3;22096:9;22092:19;22085:63;22214:2;22207:3;22199:6;22195:16;22189:23;22185:32;22179:3;22168:9;22164:19;22157:61;22284:2;22277:3;22269:6;22265:16;22259:23;22255:32;22249:3;22238:9;22234:19;22227:61;;;21490:804;;;;;:::o;22299:489::-;-1:-1:-1;;;;;22568:15:1;;;22550:34;;22620:15;;22615:2;22600:18;;22593:43;22667:2;22652:18;;22645:34;;;22715:3;22710:2;22695:18;;22688:31;;;22493:4;;22736:46;;22762:19;;22754:6;22736:46;:::i;:::-;22728:54;22299:489;-1:-1:-1;;;;;;22299:489:1:o;22793:287::-;22922:3;22960:6;22954:13;22976:66;23035:6;23030:3;23023:4;23015:6;23011:17;22976:66;:::i;:::-;23058:16;;;;;22793:287;-1:-1:-1;;22793:287:1:o;23085:249::-;23154:6;23207:2;23195:9;23186:7;23182:23;23178:32;23175:52;;;23223:1;23220;23213:12;23175:52;23255:9;23249:16;23274:30;23298:5;23274:30;:::i;24537:247::-;24605:6;24658:2;24646:9;24637:7;24633:23;24629:32;24626:52;;;24674:1;24671;24664:12;24626:52;24706:9;24700:16;24725:29;24748:5;24725:29;:::i;25262:545::-;25364:2;25359:3;25356:11;25353:448;;;25400:1;25425:5;25421:2;25414:17;25470:4;25466:2;25456:19;25540:2;25528:10;25524:19;25521:1;25517:27;25511:4;25507:38;25576:4;25564:10;25561:20;25558:47;;;-1:-1:-1;25599:4:1;25558:47;25654:2;25649:3;25645:12;25642:1;25638:20;25632:4;25628:31;25618:41;;25709:82;25727:2;25720:5;25717:13;25709:82;;;25772:17;;;25753:1;25742:13;25709:82;;25983:1352;26109:3;26103:10;26136:18;26128:6;26125:30;26122:56;;;26158:18;;:::i;:::-;26187:97;26277:6;26237:38;26269:4;26263:11;26237:38;:::i;:::-;26231:4;26187:97;:::i;:::-;26339:4;;26403:2;26392:14;;26420:1;26415:663;;;;27122:1;27139:6;27136:89;;;-1:-1:-1;27191:19:1;;;27185:26;27136:89;-1:-1:-1;;25940:1:1;25936:11;;;25932:24;25928:29;25918:40;25964:1;25960:11;;;25915:57;27238:81;;26385:944;;26415:663;25209:1;25202:14;;;25246:4;25233:18;;-1:-1:-1;;26451:20:1;;;26569:236;26583:7;26580:1;26577:14;26569:236;;;26672:19;;;26666:26;26651:42;;26764:27;;;;26732:1;26720:14;;;;26599:19;;26569:236;;;26573:3;26833:6;26824:7;26821:19;26818:201;;;26894:19;;;26888:26;-1:-1:-1;;26977:1:1;26973:14;;;26989:3;26969:24;26965:37;26961:42;26946:58;26931:74;;26818:201;-1:-1:-1;;;;;27065:1:1;27049:14;;;27045:22;27032:36;;-1:-1:-1;25983:1352:1:o;27694:648::-;27774:6;27827:2;27815:9;27806:7;27802:23;27798:32;27795:52;;;27843:1;27840;27833:12;27795:52;27876:9;27870:16;27909:18;27901:6;27898:30;27895:50;;;27941:1;27938;27931:12;27895:50;27964:22;;28017:4;28009:13;;28005:27;-1:-1:-1;27995:55:1;;28046:1;28043;28036:12;27995:55;28075:2;28069:9;28100:48;28116:31;28144:2;28116:31;:::i;28100:48::-;28171:2;28164:5;28157:17;28211:7;28206:2;28201;28197;28193:11;28189:20;28186:33;28183:53;;;28232:1;28229;28222:12;28183:53;28245:67;28309:2;28304;28297:5;28293:14;28288:2;28284;28280:11;28245:67;:::i;:::-;28331:5;27694:648;-1:-1:-1;;;;;27694:648:1:o;28347:1104::-;28443:6;28496:3;28484:9;28475:7;28471:23;28467:33;28464:53;;;28513:1;28510;28503:12;28464:53;28546:2;28540:9;28588:3;28580:6;28576:16;28658:6;28646:10;28643:22;28622:18;28610:10;28607:34;28604:62;28601:88;;;28669:18;;:::i;:::-;28705:2;28698:22;28742:16;;28767:29;28742:16;28767:29;:::i;:::-;28805:21;;28871:2;28856:18;;28850:25;28884:31;28850:25;28884:31;:::i;:::-;28943:2;28931:15;;28924:32;28989:48;29033:2;29018:18;;28989:48;:::i;:::-;28984:2;28976:6;28972:15;28965:73;29071:48;29115:2;29104:9;29100:18;29071:48;:::i;:::-;29066:2;29058:6;29054:15;29047:73;29165:3;29154:9;29150:19;29144:26;29179:31;29202:7;29179:31;:::i;:::-;29238:3;29226:16;;29219:33;29286:49;29330:3;29315:19;;29286:49;:::i;:::-;29280:3;29272:6;29268:16;29261:75;29370:49;29414:3;29403:9;29399:19;29370:49;:::i;:::-;29364:3;29352:16;;29345:75;29356:6;28347:1104;-1:-1:-1;;;28347:1104:1:o;33126:136::-;33165:3;33193:5;33183:39;;33202:18;;:::i;:::-;-1:-1:-1;;;33238:18:1;;33126:136::o

Swarm Source

ipfs://04a861ce3d850a738964e0a61c38b49408badbe3856d9c367ab35083b2720107

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.