Contract 0x61b7ec3333827036fee27f0981a7881fa8acebcb 1

 

Contract Overview

Balance:
2.050000000000000245 MATIC

MATIC Value:
$1.88 (@ $0.92/MATIC)

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x58f2af45825b6ddb24cffbb11e997466f0a060977c8adbb27f7ab452d2064a6dMint335103022022-09-24 14:18:2372 days 10 hrs ago0x98884f94c95ac4f73ab3ae092970bc3dcb740f14 IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb2 MATIC0.008472372012 34.500000049
0xb71439803acf416ddcec6f0c7170e7ac97222789f25d4340c15b86a6842e2fefSafe Transfer Fr...314419412022-08-02 18:03:15125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.007738817895 104.829360711
0x01124e9a612f0af18ff87251921a6f03e1b89ba55ce425611c3968d39c2a8f13Safe Transfer Fr...314419302022-08-02 18:02:53125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.007803049251 105.699433124
0x62de00115ccffa456b486cbba2ba88f55e27c4022b8cc233be0d282ba3fb69a3Safe Transfer Fr...314419212022-08-02 18:02:35125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.008979380507 121.633915011
0xeb3dd235a049429eb5e1c3b91bb3c62a494432a43019bba4d764845553bca0cdSafe Transfer Fr...314419192022-08-02 18:02:27125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.007507784341 101.699800084
0xa4ca155110b1df5c81dd56ee133d25115f73b1da1b27f2cb35863fea2c2d033aSafe Transfer Fr...314419052022-08-02 18:01:59125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.008006159915 108.450752684
0x4c4e0fc899019c6bbf05218ae7598e34a96fcfcac3501df55fed77568bf6271cSafe Transfer Fr...314418962022-08-02 18:01:41125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.007767849359 105.22261842
0xb2f1098e70a5395d6e738dc07e0f972ede1105290ebed99bcc777ac1a6c1315aSafe Transfer Fr...314418852022-08-02 18:01:19125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.008459283059 114.588719775
0x16602f28cc65ed7542270e7a16e589f71803e5b4c919058f6bee0227bd3a1da5Safe Transfer Fr...314418762022-08-02 18:01:01125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.007624140246 103.275947151
0x91089bbff431a83672fed613cbd78de7eb6f6964777bb3f884b5591c56c71f39Safe Transfer Fr...314418682022-08-02 18:00:45125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.006986763662 94.642098841
0xbdf8af09c5ecd679ea905b7816d90d26edb1b52da11b055d98f54795cf89d4a5Safe Transfer Fr...314418592022-08-02 18:00:27125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.008910638391 120.702740222
0x7fdc7148ca11460d17bc78e8ea9f1152c4cca04b739fea9d3de2c12b8633f7efSafe Transfer Fr...314418582022-08-02 18:00:25125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.007598737152 102.931839023
0xea08f979bac1132c2027ad132efca0b8afbcaf7c133d7d115b32716b72f203f4Safe Transfer Fr...314418502022-08-02 18:00:05125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.006815535597 92.322658223
0xc1b8500d2bd65e13c879e023b35b840ff7d39e110b4f28d45d4599c3a1223baeSafe Transfer Fr...314418322022-08-02 17:59:29125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.007769305423 105.24234213
0xb608d7b5174914fd6744eeb8f98985138e9cb29950c1fafc8650b54c61c0c7c8Safe Transfer Fr...314418202022-08-02 17:59:05125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.007305621114 98.961314422
0x0e1a0246743b741d139d9e5a061e9e09d0402608f03672bb623cfda547518af2Safe Transfer Fr...314418142022-08-02 17:58:53125 days 6 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.007113344661 96.356754154
0x1de59b2df608bf28dcaa0c86d095130b0ac94d7a675f4979207a0333bf5487e9Set Cost313641032022-07-31 19:00:31127 days 5 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.001139645523 39.650877599
0xffa482bf15fca527f7b4a1cd73e873ab44f0a21375b223a6ac080a737fb1fd01Set Approval For...307205772022-07-14 16:56:26144 days 7 hrs ago0x8b16de36ae5ebf3b474ea3944dcee2a3126bd9a3 IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.001519981537 32.850260147
0x4137a7070374b94ffc6815038fd3b7cd730b1849dd49f233062d6d33301f6d0bMint For Address303680862022-07-05 13:51:29153 days 10 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.005780910103 30.000000538
0x7dcdabafb3ade37106d6bfa69db86dd4e747a036e081c3f21f10a70e2622a4daMint For Address303680812022-07-05 13:51:09153 days 10 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.00655726345 34.028881875
0xbaffcc789afc9e299bd9aea6fcf2fbdcb2a0d311f555bc615b2f33828d063698Mint For Address303680752022-07-05 13:50:45153 days 10 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.00680527357 35.315929001
0xb10d960618a1068623da99501fe57479b9a321900bee407444ce385f142ced86Mint For Address302938772022-07-03 15:08:09155 days 9 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.00698831225 67.191433675
0xc48e30e1661b895cace1b844e3800acf73c99997d7dadb9a20670b57ac5051ddMint For Address302556812022-07-02 15:21:13156 days 9 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.01872802338 97.188972222
0x2a98c8d14db798060812d2e51d5cf4910c6adbb12c2a9790d946aae11ef94981Mint For Address302556752022-07-02 15:20:41156 days 9 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.017717155529 91.943079185
0x81391a513dfd21c152afb54428b2e6f35ac15cdb109400717a6c2dcb77849cd9Mint For Address302325152022-07-02 0:25:07156 days 23 hrs agoBadass Bunniez: Deployer IN  0x61b7ec3333827036fee27f0981a7881fa8acebcb0 MATIC0.008072116915 41.890205429
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MetaversePenguins

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 14: MetaversePenguins.sol
// SPDX-License-Identifier: MIT
/*
Metaverse Penguins Smart Contract by Cahit Karahan

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@                       (@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@                               @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@                                     @@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@                                         @@@@@@@@@@@@@@@@@@@@@@@@@@
@@@#                                                    @@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@                                                   @@@@@@@@@@@@@@@@@@@@@@@
@   #@@@@@@@@@*                                           @@@@@@@@@@@@@@@@@@@@@@
@          [email protected]@@@@@@@@@@@@@@@&&                             @@@@@@@@@@@@@@@@@@@@@
@@                     %@@@@@@@@@@@@@@@@@@@@@,             @@@@@@@@@@@@@@@@@@@@@
@@                                           ,@@@@@%        @@@@@@@@@@@@@@@@@@@@
@@                                                   @      @@@@@@@@@@@@@@@@@@@@
@@@                                                  %     @@@@@@@@@@@@@@@@@@@@@
@@@                                                  @     @@@@@@@@@@@@@@@@@@@@@
@@@@@                                               @      @@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@.                                       @       @@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@  @@@@@@@#                            #@         @@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@  @  @@@@@@@@@@@.        [email protected]@@@@@             @@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@      @@@@@@@@((   //@@@//    (@@@               @@@@@@@@@@@@@@@@@@@@
@@@@@@@@             @@@@@@@@@@@@@@@@@@@@@                   @@@@@@@@@@@@@@@@@@@
@@@@@@/         @       @@@@@@@@@@@@                           @@@@@@@@@@@@@@@@@
@@@@@         @@@                @                              @@@@@@@@@@@@@@@@
@@@@@        @@@@               @@@@                              @@@@@@@@@@@@@@
@@@@@       @@@@@@@@@@@@@@      @@@@@@                              @@@@@@@@@@@@
@@@@@     @@@@@@@@@@@@@@@@@@@   @@@@@@@                              @@@@@@@@@@@
@@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                @@@@@@@@@
@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                #@@@@@@@
@@@   &@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                  @@@@@@
@@   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                   @@@@
@   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                   @@@
@  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                    @@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                    @
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                      @@             
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                     @@@@           
@       &@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                    @@@@@@         
@          @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                    @@@@@@@        
@@             @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                   @@@@@@@@@@@@@@@
@@@                 *@@@@@@@@@@@@@@@@@@@@@@@@@@                 @@@@@@@@@@@@@@@@
@@@                              &&&&                           @@@@@@@@@@@@@@@@
@@                                                             @@@@@@@@@@@@@@@@@
@@@@@                                                         @@@@@@@@@@@@@@@@@@
@@@@@                                                       @@@@@@@@@@@@@@@@@@@@
@@@@@                                                      @@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@/ /                                         @@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@                                   @@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@                             @@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                     @@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                      @@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                @@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                @@@@@@@@@@@@@@@@@@@@@@@@
*/
pragma solidity ^0.8.0.0;

import "./ERC721.sol";
import "./Ownable.sol";
import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./ReentrancyGuard.sol";

interface UtilityTokenIERC20 is IERC20, IERC20Metadata {
  function contractMint(address _to, uint256 _amount) external returns (bool);

  function contractBurn(address _from, uint256 _amount) external returns (bool);
}

contract MetaversePenguins is ERC721, Ownable, ReentrancyGuard {
  int private supply;

  address private _backupWallet = 0x5F324a94c67745c393FDFd8A1cA289196d36de5B;

  string private _uriPrefix = "";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri = "ipfs://QmVNtVEYZysLHnkBZbHj3KeqkJBawpS1RAr3mhgkct4z1V";
  
  uint256 private basePoints = 10000;
  uint256 private _numHolders = 0;
  uint256 public cost = 60 ether;
  uint256 public maxSupply = 10000;
  uint256 public maxMintAmountPerTx = 10;
  uint256 public topTransferOfTokens = 0;
  uint256 public totalTransferOfTokens = 1;
  uint256 public burnMultiplier = 10000 ether;

  bool public paused = false;
  bool public revealed = false;
  bool public onlyWhitelisted = true;
  bool public frozen = false;
  bool public useUtilityToken = false;
  bool public useCleanTokenTransfer = true;
  bool public holdScoreBasedDAO = false;

  address public utilityToken;

  address[] private _holders;

  mapping(address => uint256) private _holderToIndex;
  mapping(address => uint256) public whiteList;
  mapping(uint256 => uint256) public transferCounts;
  mapping(address => uint256) public transferCountsOfOwners;

  struct Ballot { 
    string subject;
    string[] options;
    uint256 totalVotes;
    bool isOpen;
    uint256[] votes;
    mapping(address => bool) voted;
  }
  
  Ballot public activeBallot;

  event PermanentURI(string _value, uint256 indexed _id);
  event TransferNewMaxRecord(address indexed _from, address indexed _to, uint256 indexed _tokenId);
  event TransferCountChanged(uint256 indexed _tokenId, uint256 _count);
  event OwnerWithdrawn(address indexed _owner, uint256 _amount);
  event OwnerWithdrawnERC20(address indexed _owner, uint256 _amount, IERC20 indexed _token);
  event UtilityTokenActivated(UtilityTokenIERC20 indexed _token);
  event UtilityTokenDeactivated(UtilityTokenIERC20 indexed _token);
  event UtilityTokenWithdrawn(address indexed _owner, uint256 _amount, UtilityTokenIERC20 indexed _token);
  event DividendsDistributed(uint256 _income);
  event DividendsDistributedERC20(uint256 _income, IERC20 indexed _token);
  event DividendsDistributedUtilityToken(uint256 _income, UtilityTokenIERC20 indexed _token);
  event VotingStarted(string indexed _subject, string[] _options);
  event VotingEnded(string indexed _subject, string[] _options, uint256 _totalVotes, uint256[] _votes);
  event Voted(string indexed _subject, string _option, uint256 _voteCount);

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  ) ERC721(_name, _symbol) {
    setUriPrefix(_initBaseURI);
    setHiddenMetadataUri(_initNotRevealedUri);
    supply--;
  }

  function _mintCompliance(uint256 _mintAmount) private view {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply + int(_mintAmount) < int(maxSupply), "Max supply exceeded!");
  }

  modifier mintCompliance(uint256 _mintAmount) {
    _mintCompliance(_mintAmount);
    _;
  }

  function _onlyOwner() private view {
    require(_msgSender() == owner(), "Caller is not the owner of this contract!");
  }

  modifier onlyOwned() {
    _onlyOwner();
    _;
  }

  function totalSupply() public view returns (uint256) {
    return uint256(supply + 1);
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    if (_msgSender() != owner()) {
      if (onlyWhitelisted == true) {
          require(_mintAmount <= whiteList[_msgSender()], "You are not whitelisted or exceeds the max mint amount!");
      }
      require(msg.value >= cost * _mintAmount, "Insufficient funds!");
    }

    _mintLoop(_msgSender(), _mintAmount);
  }
  
  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwned {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 0;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId < maxSupply) {
      if (_exists(currentTokenId)) {
        address currentTokenOwner = ownerOf(currentTokenId);

        if (currentTokenOwner == _owner) {
          ownedTokenIds[ownedTokenIndex] = currentTokenId;

          ownedTokenIndex++;
        }
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token!"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _toString(_tokenId), uriSuffix))
        : "";
  }

  function setBackupWallet(address _wallet) public onlyOwner {
    require(!frozen, "The contract is frozen!");
    _backupWallet = _wallet;
  }

  function setBurnMultiplier(uint256 _multiplier) public onlyOwned {
    burnMultiplier = _multiplier;
  }

  function setBurnMultiplierInt(uint256 _multiplierInt) public onlyOwned {
    require(useUtilityToken, "The contract is not using a utility token!");
    burnMultiplier = _multiplierInt * (10 ** uint256(UtilityTokenIERC20(utilityToken).decimals()));
  }

  function setPaused(bool _state) public onlyOwned {
    paused = _state;
  }

  function setRevealed(bool _state) public onlyOwned {
    require(!frozen, "The contract is frozen!");
    revealed = _state;
  }

  function setOnlyWhitelisted(bool _state) public onlyOwned {
    onlyWhitelisted = _state;
  }

  function setDAOType(bool _state) public onlyOwned {
    require(!frozen, "The contract is frozen!");
    holdScoreBasedDAO = _state;
  }

  function freeze(string memory _confirm) public onlyOwned {
    require(keccak256(bytes(_confirm)) == keccak256(bytes("freeze")), "Invalid freeze confirmation!");
    require(revealed, "The contract is not revealed!");
    require(!frozen, "The contract is already frozen!");
    
    frozen = true;
  }

  function emitFrozen(uint256 _tokenId) public {
    require(frozen, "The contract is not frozen!");
    require(ownerOf(_tokenId) == _msgSender() || _msgSender() == owner(), "Only token owner can emit frozen!");
    emit PermanentURI(tokenURI(_tokenId), _tokenId);
  }

  function activateUtilityToken(address _token) public onlyOwned {
    require(!frozen, "The contract is frozen!");
    require(!useUtilityToken, "The contract is already using a utility token!");
    require(_token.code.length > 0, "The address is not a contract!");

    useUtilityToken = true;
    utilityToken = _token;

    emit UtilityTokenActivated(UtilityTokenIERC20(utilityToken));
  }

  function deactivateUtilityToken() public onlyOwned {
    require(!frozen, "The contract is frozen!");
    require(useUtilityToken, "The contract is not using a utility token!");

    useUtilityToken = false;

    emit UtilityTokenDeactivated(UtilityTokenIERC20(utilityToken));
  }

  function setUseCleanTokenTransfer(bool _state) public onlyOwned {
    useCleanTokenTransfer = _state;
  }

  function setWhiteList(address[] calldata _addresses, uint256 _numAllowedToMint) external onlyOwned {
    for (uint256 i = 0; i < _addresses.length; i++) {
        whiteList[_addresses[i]] = _numAllowedToMint;
    }
  }

  function whiteListAmount(address _address) public view returns (uint256) {
    return whiteList[_address];
  }

  function setCost(uint256 _cost) public onlyOwned {
    cost = _cost;
  }

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwned {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwned {
    require(!frozen, "The contract is frozen!");
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory uriPrefix_) public onlyOwned {
    require(!frozen, "The contract is frozen!");
    _uriPrefix = uriPrefix_;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwned {
    require(!frozen, "The contract is frozen!");
    uriSuffix = _uriSuffix;
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    if (_msgSender() != owner() && onlyWhitelisted == true) {
      whiteList[_msgSender()] -= _mintAmount;
    }
    
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply++;
      _safeMint(_receiver, uint256(supply));
    }
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return _uriPrefix;
  }

  function _beforeTokenTransfer(address _from, address _to, uint256 _tokenId) internal virtual override {
    super._beforeTokenTransfer(_from, _to, _tokenId);
    
    if (_from != address(0)) {
      transferCountsOfOwners[_from] -= transferCounts[_tokenId];
      if (balanceOf(_from) == 1) {
        _deleteHolder(_from);
      }
    } else {
      transferCounts[_tokenId] = 0;
    }
    
    transferCounts[_tokenId]++;
    totalTransferOfTokens++;

    if (_to != address(0)) {
      transferCountsOfOwners[_to] += transferCounts[_tokenId];
      if (balanceOf(_to) == 0) {
        _addHolder(_to);
      }
    } else {
      transferCounts[_tokenId] = 0;
    }

    if (transferCounts[_tokenId] > topTransferOfTokens) {
      topTransferOfTokens = transferCounts[_tokenId];

      emit TransferNewMaxRecord(_from, _to, _tokenId);
    }

    emit TransferCountChanged(_tokenId, transferCounts[_tokenId]);
  }

  function transferCountOfToken(uint256 _tokenId) public view returns (uint256) {
    return transferCounts[_tokenId];
  }

  function checkCleanPrice() public view returns (uint256) {
    require(useUtilityToken, "The contract is not using a utility token!");
    require(useCleanTokenTransfer, "The contract is not using clean transfer count mechanism!");
    return burnMultiplier / totalTransferOfTokens;
  }

  function cleanTokenTransferCount(uint256 _tokenId, uint256 _count) public nonReentrant {
    require(useUtilityToken, "The contract is not using a utility token!");
    require(useCleanTokenTransfer, "The contract is not using clean transfer count mechanism!");
    require(_count <= transferCounts[_tokenId], "The count must be less than or equal to the current transfer count of the token!");
    uint256 burnAmount = checkCleanPrice() * _count;
    UtilityTokenIERC20 activeToken = UtilityTokenIERC20(utilityToken);
    require(activeToken.balanceOf(_msgSender()) >= burnAmount, "You don't have enough utility tokens to burn!");
    require(activeToken.contractBurn(_msgSender(), burnAmount), "The contract failed to burn the utility tokens!");
    
    transferCounts[_tokenId] -= _count;
    totalTransferOfTokens -= _count;
    transferCountsOfOwners[_msgSender()] -= _count;

    emit TransferCountChanged(_tokenId, transferCounts[_tokenId]);
  }

  function holdScoreOf(address _owner) public view returns (uint256) {
    require(transferCountsOfOwners[_owner] > 0, "The owner does not have any tokens!");
    uint256 score = balanceOf(_owner) * topTransferOfTokens - transferCountsOfOwners[_owner];
    return score;
  }

  function holdScoreSum() public view returns (uint256) {
    uint256 sum = 0;
    for (uint256 i = 0; i < _numHolders; i++) {
      address owner = _holders[i];
      sum += holdScoreOf(owner);
    }
    return sum;
  }

  function shareOf(address _owner) public view returns (uint256) {
    uint256 score = holdScoreOf(_owner) * basePoints;
    uint256 sum = holdScoreSum();
    return score / sum;
  }

  function withdrawOwner() public onlyOwned {
    uint256 amount = address(this).balance;

    (bool res, ) = payable(owner()).call{value: amount}("");
    require(res, "The contract failed to transfer the balance to the owner!");
    emit OwnerWithdrawn(owner(), amount);
  }

  function withdrawOwner(IERC20 _token) public onlyOwned {
    uint256 amount = _token.balanceOf(address(this));
    require(_token.transfer(owner(), amount), "The contract failed to transfer the tokens!");

    emit OwnerWithdrawnERC20(owner(), amount, _token);
  }

  function withdrawUtilityToken(uint256 _amount) public onlyOwned {
    require(useUtilityToken, "The contract is not using a utility token!");
    require(_amount > 0, "The amount must be greater than 0!");
    UtilityTokenIERC20 activeToken = UtilityTokenIERC20(utilityToken);
    require(activeToken.contractMint(owner(), _amount), "Can't mint utility token!");

    emit UtilityTokenWithdrawn(owner(), _amount, activeToken);
  }

  function regainOwnership(address newOwner) public {
    require(_msgSender() == _backupWallet, "Only backup wallet can access this function!");
    require(newOwner != owner(), "The new owner cannot be the current owner!");
    require(newOwner != _backupWallet, "The new owner cannot be the backup wallet!");

    _transferOwnership(newOwner);
  }
  
  function startVoting(string memory _subject, string[] memory _options) external onlyOwned {
    require(activeBallot.isOpen == false, "A ballot is already open! First close it!");
    require(bytes(_subject).length > 0, "The subject cannot be empty!");
    require(_options.length > 1, "There must be at least two options!");
    
    activeBallot.subject = _subject;
    activeBallot.options = _options;
    activeBallot.totalVotes = 0;
    activeBallot.isOpen = true;
    activeBallot.votes = new uint256[](_options.length);
    
    for (uint256 i = 0; i < totalSupply(); i++) {
      address owner = ownerOf(i);
      activeBallot.voted[owner] = false;
    }

    emit VotingStarted(_subject, _options);
  }

  function endVoting() public onlyOwned {
    require(activeBallot.isOpen == true, "There is no ballot open!");

    activeBallot.isOpen = false;

    emit VotingEnded(activeBallot.subject, activeBallot.options, activeBallot.totalVotes, activeBallot.votes);
  }

  function getBallot() public view returns (string memory, string[] memory, uint256, bool, uint256[] memory) {
    return (activeBallot.subject, activeBallot.options, activeBallot.totalVotes, activeBallot.isOpen, activeBallot.votes);
  }

  function vote(uint256 _option) public {
    require(balanceOf(_msgSender()) > 0, "Only token owners can access this function!");
    require(activeBallot.isOpen == true, "There is no ballot open!");
    require(_option < activeBallot.options.length, "The option must be within the range of the options!");
    require(_option >= 0, "The option must be greater than or equal to 0!");
    require(activeBallot.voted[_msgSender()] == false, "You have already voted!");

    uint256 voteCount = 1;

    if (holdScoreBasedDAO) {
      voteCount = holdScoreOf(_msgSender());
    }
    
    activeBallot.votes[_option] += voteCount;
    activeBallot.totalVotes += voteCount;
    activeBallot.voted[_msgSender()] = true;

    emit Voted(activeBallot.subject, activeBallot.options[_option], voteCount);
  }

  function getVoteCount(uint256 _option) public view returns (uint256) {
    require(_option < activeBallot.options.length, "The option must be within the range of the options!");
    return activeBallot.votes[_option];
  }

  function distributeDividends() public onlyOwned {
    uint256 totalAmount = address(this).balance;
    _distributeDividends(totalAmount, address(0));
  }

  function distributeDividends(address _token) public onlyOwned {
    uint256 totalAmount = IERC20(_token).balanceOf(address(this));
    _distributeDividends(totalAmount, _token);
  }

  function distributeDividendsUtilityToken(uint256 _totalAmount) public onlyOwned {
    _distributeDividends(_totalAmount, utilityToken);
  }

  function _distributeDividends(uint256 _totalAmount, address _token) internal nonReentrant {
    if (utilityToken == _token && _token != address(0)) {
      require(useUtilityToken, "The contract is not using a utility token!");
    }
    require(_totalAmount > 0, "The amount must be greater than 0!");
    uint256 remaining = _totalAmount;
    bool res;
    uint256 sum = holdScoreSum();
    for (uint256 i = 0; i < _numHolders; i++) {
      address owner = _holders[i];
      uint256 amount = _totalAmount * _shareOf(owner, sum) / basePoints;
      if (amount <= remaining && amount > 0) {
        if (_token == address(0)) {
          (res, ) = payable(owner).call{value: amount}("");
        } else if (_token == utilityToken) {
          res = UtilityTokenIERC20(utilityToken).contractMint(owner, amount);
        } else {
          res = IERC20(_token).transfer(owner, amount);
        }
        if (res) {
          remaining -= amount;
        }
      }
    }

    if (_token == address(0)) {
      emit DividendsDistributed(_totalAmount - remaining);
    } else if (_token == utilityToken) {
      emit DividendsDistributedUtilityToken(_totalAmount - remaining, UtilityTokenIERC20(utilityToken));
    } else {
      emit DividendsDistributedERC20(_totalAmount - remaining, IERC20(_token));
    }
  }

  function _shareOf(address _owner, uint256 sum) internal view returns (uint256) {
    uint256 score = holdScoreOf(_owner) * basePoints;
    return score / sum;
  }

  function _toString(uint256 _value) internal pure returns (string memory) {
    if (_value == 0) {
        return "0";
    }
    uint256 temp = _value;
    uint256 digits;
    while (temp != 0) {
        digits++;
        temp /= 10;
    }
    bytes memory buffer = new bytes(digits);
    while (_value != 0) {
        digits -= 1;
        buffer[digits] = bytes1(uint8(48 + uint256(_value % 10)));
        _value /= 10;
    }
    return string(buffer);
  }

  function _deleteHolder(address _holder) internal {
    uint256 index = _holderToIndex[_holder];

    _holders[index] = _holders[_numHolders - 1];
    _holderToIndex[_holders[index]] = index;
    _holders.pop();
    _holderToIndex[_holder] = 0;
    _numHolders -= 1;
  }

  function _addHolder(address _holder) internal {
    _holders.push(_holder);
    _holderToIndex[_holder] = _numHolders;
    _numHolders += 1;
  }
}

File 2 of 14: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 14: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 14: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 5 of 14: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 6 of 14: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 7 of 14: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 8 of 14: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 9 of 14: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

File 10 of 14: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 11 of 14: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 12 of 14: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 13 of 14: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 14 of 14: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"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":false,"internalType":"uint256","name":"_income","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_income","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"DividendsDistributedERC20","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_income","type":"uint256"},{"indexed":true,"internalType":"contract UtilityTokenIERC20","name":"_token","type":"address"}],"name":"DividendsDistributedUtilityToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"OwnerWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"OwnerWithdrawnERC20","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":false,"internalType":"string","name":"_value","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"PermanentURI","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_count","type":"uint256"}],"name":"TransferCountChanged","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":"TransferNewMaxRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract UtilityTokenIERC20","name":"_token","type":"address"}],"name":"UtilityTokenActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract UtilityTokenIERC20","name":"_token","type":"address"}],"name":"UtilityTokenDeactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"contract UtilityTokenIERC20","name":"_token","type":"address"}],"name":"UtilityTokenWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"_subject","type":"string"},{"indexed":false,"internalType":"string","name":"_option","type":"string"},{"indexed":false,"internalType":"uint256","name":"_voteCount","type":"uint256"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"_subject","type":"string"},{"indexed":false,"internalType":"string[]","name":"_options","type":"string[]"},{"indexed":false,"internalType":"uint256","name":"_totalVotes","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"_votes","type":"uint256[]"}],"name":"VotingEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"_subject","type":"string"},{"indexed":false,"internalType":"string[]","name":"_options","type":"string[]"}],"name":"VotingStarted","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"activateUtilityToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeBallot","outputs":[{"internalType":"string","name":"subject","type":"string"},{"internalType":"uint256","name":"totalVotes","type":"uint256"},{"internalType":"bool","name":"isOpen","type":"bool"}],"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":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkCleanPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"cleanTokenTransferCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateUtilityToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"distributeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalAmount","type":"uint256"}],"name":"distributeDividendsUtilityToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"emitFrozen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endVoting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_confirm","type":"string"}],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"frozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBallot","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string[]","name":"","type":"string[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_option","type":"uint256"}],"name":"getVoteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdScoreBasedDAO","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"holdScoreOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdScoreSum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"regainOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","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":"_wallet","type":"address"}],"name":"setBackupWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"setBurnMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_multiplierInt","type":"uint256"}],"name":"setBurnMultiplierInt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setDAOType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uriPrefix_","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setUseCleanTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_numAllowedToMint","type":"uint256"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"shareOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_subject","type":"string"},{"internalType":"string[]","name":"_options","type":"string[]"}],"name":"startVoting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"topTransferOfTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTransferOfTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferCountOfToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"transferCountsOfOwners","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"useCleanTokenTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"useUtilityToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"utilityToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_option","type":"uint256"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"whiteListAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"withdrawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawUtilityToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

600980546001600160a01b031916735f324a94c67745c393fdfd8a1ca289196d36de5b17905560a06040819052600060808190526200004191600a9162000373565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200007091600b9162000373565b5060405180606001604052806035815260200162005b86603591398051620000a191600c9160209091019062000373565b50612710600d8190556000600e819055680340aad21b3b700000600f55601091909155600a601155601255600160135569021e19e0c9bab24000006014556015805466ffffffffffffff1916650100000100001790553480156200010457600080fd5b5060405162005bbb38038062005bbb8339810160408190526200012791620004d0565b8351849084906200014090600090602085019062000373565b5080516200015690600190602084019062000373565b505050620001736200016d620001af60201b60201c565b620001b3565b6001600755620001838262000205565b6200018e8162000288565b60088054906000620001a08362000589565b91905055505050505062000609565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200020f62000303565b6015546301000000900460ff16156200026f5760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e74726163742069732066726f7a656e2100000000000000000060448201526064015b60405180910390fd5b80516200028490600a90602084019062000373565b5050565b6200029262000303565b6015546301000000900460ff1615620002ee5760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e74726163742069732066726f7a656e21000000000000000000604482015260640162000266565b80516200028490600c90602084019062000373565b6006546001600160a01b03163314620003715760405162461bcd60e51b815260206004820152602960248201527f43616c6c6572206973206e6f7420746865206f776e6572206f66207468697320604482015268636f6e74726163742160b81b606482015260840162000266565b565b8280546200038190620005b6565b90600052602060002090601f016020900481019282620003a55760008555620003f0565b82601f10620003c057805160ff1916838001178555620003f0565b82800160010185558215620003f0579182015b82811115620003f0578251825591602001919060010190620003d3565b50620003fe92915062000402565b5090565b5b80821115620003fe576000815560010162000403565b600082601f8301126200042b57600080fd5b81516001600160401b0380821115620004485762000448620005f3565b604051601f8301601f19908116603f01168101908282118183101715620004735762000473620005f3565b816040528381526020925086838588010111156200049057600080fd5b600091505b83821015620004b4578582018301518183018401529082019062000495565b83821115620004c65760008385830101525b9695505050505050565b60008060008060808587031215620004e757600080fd5b84516001600160401b0380821115620004ff57600080fd5b6200050d8883890162000419565b955060208701519150808211156200052457600080fd5b620005328883890162000419565b945060408701519150808211156200054957600080fd5b620005578883890162000419565b935060608701519150808211156200056e57600080fd5b506200057d8782880162000419565b91505092959194509250565b6000600160ff1b821415620005ae57634e487b7160e01b600052601160045260246000fd5b506000190190565b600181811c90821680620005cb57607f821691505b60208210811415620005ed57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61556d80620006196000396000f3fe6080604052600436106104525760003560e01c8063614b50c21161023f578063a96bc0cf11610139578063d6726351116100b6578063e985e9c51161007a578063e985e9c514610d2a578063ed810d3014610d4a578063efbd73f414610d77578063f2fde38b14610d97578063f5bf395f14610db757600080fd5b8063d672635114610c94578063d77f998214610cb5578063e0a8085314610cd5578063e6a86fb014610cf5578063e8cc00ad14610d1557600080fd5b8063b88d4fde116100fd578063b88d4fde14610c09578063ba68826714610c29578063c3403ddf14610c49578063c87b56dd14610c5e578063d5abeb0114610c7e57600080fd5b8063a96bc0cf14610b61578063ae86ed8914610b81578063b071401b14610ba8578063b2c2f2e814610bc8578063b623092f14610be857600080fd5b806395d89b41116101c7578063a0712d681161018b578063a0712d6814610ae4578063a22cb46514610af7578063a2a0f68414610b17578063a45ba8e714610b2c578063a72ca05014610b4157600080fd5b806395d89b4114610a4557806399dd163114610a5a5780639baec8b914610a7e5780639c70b51214610aa45780639e4ba86d14610ac457600080fd5b80637ec4a6591161020e5780637ec4a659146109a5578063897cbe3c146109c55780638da5cb5b146109db57806392da6e35146109f957806394354fd014610a2f57600080fd5b8063614b50c21461093a5780636352211e1461095057806370a0823114610970578063715018a61461099057600080fd5b80632779263e11610350578063438b6300116102d85780635503a0e81161029c5780635503a0e814610891578063580bc0ef146108a65780635c975abb146108d3578063606ee81c146108ed57806360e09a7c1461091a57600080fd5b8063438b6300146107f057806344a0d68a1461081d57806347b2e4d01461083d5780634fdd43cb14610852578063518302271461087257600080fd5b80633a8e58651161031f5780633a8e5865146107505780633c952764146107705780633f0cea3f146107905780633f43de6d146107b057806342842e0e146107d057600080fd5b80632779263e146106cd5780632b32743a146106ed578063372c12b11461070d5780633939a8971461073a57600080fd5b806313faede6116103de578063213a852f116103a2578063213a852f1461062c57806321e5e2c41461064c57806322f6d5441461066c57806323b872dd1461068c57806325ab2cbb146106ac57600080fd5b806313faede61461059e57806316ba10e0146105c257806316c38b3c146105e257806318160ddd146106025780631ecb6d451461061757600080fd5b8063054f7d9c11610425578063054f7d9c146104e357806306fdde0314610504578063081812fc14610526578063095ea7b31461055e5780631192a48f1461057e57600080fd5b80630121b93f1461045757806301ffc9a714610479578063024d8068146104ae57806303c83302146104ce575b600080fd5b34801561046357600080fd5b50610477610472366004614b7a565b610dd7565b005b34801561048557600080fd5b50610499610494366004614a21565b611016565b60405190151581526020015b60405180910390f35b3480156104ba57600080fd5b506104776104c9366004614b7a565b611068565b3480156104da57600080fd5b50610477611213565b3480156104ef57600080fd5b50601554610499906301000000900460ff1681565b34801561051057600080fd5b5061051961122a565b6040516104a59190614f2b565b34801561053257600080fd5b50610546610541366004614b7a565b6112bc565b6040516001600160a01b0390911681526020016104a5565b34801561056a57600080fd5b50610477610579366004614940565b611351565b34801561058a57600080fd5b506104776105993660046149e7565b611467565b3480156105aa57600080fd5b506105b4600f5481565b6040519081526020016104a5565b3480156105ce57600080fd5b506104776105dd366004614a5b565b61148f565b3480156105ee57600080fd5b506104776105fd3660046149e7565b6114d8565b34801561060e57600080fd5b506105b46114f3565b34801561062357600080fd5b506105b4611509565b34801561063857600080fd5b506104776106473660046147fb565b611573565b34801561065857600080fd5b506105b46106673660046147fb565b611601565b34801561067857600080fd5b506104776106873660046147fb565b61163a565b34801561069857600080fd5b506104776106a7366004614851565b6117a2565b3480156106b857600080fd5b5060155461049990600160201b900460ff1681565b3480156106d957600080fd5b506104776106e83660046149e7565b6117d3565b3480156106f957600080fd5b50610477610708366004614a90565b611826565b34801561071957600080fd5b506105b46107283660046147fb565b60186020526000908152604090205481565b34801561074657600080fd5b506105b460145481565b34801561075c57600080fd5b506105b461076b3660046147fb565b611a68565b34801561077c57600080fd5b5061047761078b3660046149e7565b611b19565b34801561079c57600080fd5b506104776107ab3660046147fb565b611b3d565b3480156107bc57600080fd5b506104776107cb366004614b7a565b611d18565b3480156107dc57600080fd5b506104776107eb366004614851565b611ded565b3480156107fc57600080fd5b5061081061080b3660046147fb565b611e08565b6040516104a59190614f18565b34801561082957600080fd5b50610477610838366004614b7a565b611f05565b34801561084957600080fd5b50610477611f12565b34801561085e57600080fd5b5061047761086d366004614a5b565b611fba565b34801561087e57600080fd5b5060155461049990610100900460ff1681565b34801561089d57600080fd5b50610519611fff565b3480156108b257600080fd5b506105b46108c1366004614b7a565b60009081526019602052604090205490565b3480156108df57600080fd5b506015546104999060ff1681565b3480156108f957600080fd5b506105b46109083660046147fb565b601a6020526000908152604090205481565b34801561092657600080fd5b50610477610935366004614bd1565b61208d565b34801561094657600080fd5b506105b460125481565b34801561095c57600080fd5b5061054661096b366004614b7a565b61248c565b34801561097c57600080fd5b506105b461098b3660046147fb565b612503565b34801561099c57600080fd5b5061047761258a565b3480156109b157600080fd5b506104776109c0366004614a5b565b6125c0565b3480156109d157600080fd5b506105b460135481565b3480156109e757600080fd5b506006546001600160a01b0316610546565b348015610a0557600080fd5b506105b4610a143660046147fb565b6001600160a01b031660009081526018602052604090205490565b348015610a3b57600080fd5b506105b460115481565b348015610a5157600080fd5b50610519612605565b348015610a6657600080fd5b50610a6f612614565b6040516104a593929190614f91565b348015610a8a57600080fd5b50610a936126b6565b6040516104a5959493929190614f3e565b348015610ab057600080fd5b506015546104999062010000900460ff1681565b348015610ad057600080fd5b50610477610adf3660046147fb565b61289c565b610477610af2366004614b7a565b6129ff565b348015610b0357600080fd5b50610477610b12366004614912565b612b66565b348015610b2357600080fd5b506105b4612b71565b348015610b3857600080fd5b50610519612bd6565b348015610b4d57600080fd5b50610477610b5c3660046147fb565b612be3565b348015610b6d57600080fd5b50610477610b7c366004614b7a565b612c59565b348015610b8d57600080fd5b5060155461054690600160381b90046001600160a01b031681565b348015610bb457600080fd5b50610477610bc3366004614b7a565b612d74565b348015610bd457600080fd5b506105b4610be3366004614b7a565b612d81565b348015610bf457600080fd5b5060155461049990600160281b900460ff1681565b348015610c1557600080fd5b50610477610c24366004614892565b612dcb565b348015610c3557600080fd5b50610477610c44366004614b7a565b612e03565b348015610c5557600080fd5b50610477612e29565b348015610c6a57600080fd5b50610519610c79366004614b7a565b612ee6565b348015610c8a57600080fd5b506105b460105481565b348015610ca057600080fd5b5060155461049990600160301b900460ff1681565b348015610cc157600080fd5b50610477610cd036600461496c565b613065565b348015610ce157600080fd5b50610477610cf03660046149e7565b6130d0565b348015610d0157600080fd5b50610477610d10366004614a5b565b61311c565b348015610d2157600080fd5b5061047761327d565b348015610d3657600080fd5b50610499610d45366004614818565b6133a6565b348015610d5657600080fd5b506105b4610d65366004614b7a565b60196020526000908152604090205481565b348015610d8357600080fd5b50610477610d92366004614bac565b6133d4565b348015610da357600080fd5b50610477610db23660046147fb565b6133f0565b348015610dc357600080fd5b50610477610dd2366004614b7a565b61347f565b6000610de233612503565b11610e485760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c7920746f6b656e206f776e6572732063616e206163636573732074686960448201526a732066756e6374696f6e2160a81b60648201526084015b60405180910390fd5b601e5460ff161515600114610e9a5760405162461bcd60e51b81526020600482015260186024820152775468657265206973206e6f2062616c6c6f74206f70656e2160401b6044820152606401610e3f565b601c548110610ebb5760405162461bcd60e51b8152600401610e3f90615066565b33600090815260208052604090205460ff1615610f1a5760405162461bcd60e51b815260206004820152601760248201527f596f75206861766520616c726561647920766f746564210000000000000000006044820152606401610e3f565b601554600190600160301b900460ff1615610f3b57610f3833611a68565b90505b80601b6004018381548110610f5257610f526154d2565b906000526020600020016000828254610f6b919061529a565b9091555050601d8054829190600090610f8590849061529a565b909155505033600090815260208052604090819020805460ff1916600117905551610fb290601b90614e11565b60405180910390207f2610aa2b32505d0b372e2695cef7ff28b0127250b30a4dbbb05a86d2fb1e524e601b6001018481548110610ff157610ff16154d2565b906000526020600020018360405161100a929190614fbb565b60405180910390a25050565b60006001600160e01b031982166380ac58cd60e01b148061104757506001600160e01b03198216635b5e139f60e01b145b8061106257506301ffc9a760e01b6001600160e01b03198316145b92915050565b61107061348c565b601554600160201b900460ff166110995760405162461bcd60e51b8152600401610e3f90615181565b600081116110b95760405162461bcd60e51b8152600401610e3f9061513f565b6015546001600160a01b03600160381b90910416806384229e676110e56006546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b15801561112d57600080fd5b505af1158015611141573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111659190614a04565b6111b15760405162461bcd60e51b815260206004820152601960248201527f43616e2774206d696e74207574696c69747920746f6b656e21000000000000006044820152606401610e3f565b806001600160a01b03166111cd6006546001600160a01b031690565b6001600160a01b03167f9c58ad752069dceb6157fc71c62a444db6fe0e905028c619e97578119bd98ad58460405161120791815260200190565b60405180910390a35050565b61121b61348c565b476112278160006134f8565b50565b60606000805461123990615413565b80601f016020809104026020016040519081016040528092919081815260200182805461126590615413565b80156112b25780601f10611287576101008083540402835291602001916112b2565b820191906000526020600020905b81548152906001019060200180831161129557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166113355760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610e3f565b506000908152600460205260409020546001600160a01b031690565b600061135c8261248c565b9050806001600160a01b0316836001600160a01b031614156113ca5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610e3f565b336001600160a01b03821614806113e657506113e681336133a6565b6114585760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610e3f565b6114628383613924565b505050565b61146f61348c565b60158054911515600160281b0265ff000000000019909216919091179055565b61149761348c565b6015546301000000900460ff16156114c15760405162461bcd60e51b8152600401610e3f90614fdd565b80516114d490600b906020840190614600565b5050565b6114e061348c565b6015805460ff1916911515919091179055565b600060085460016115049190615259565b905090565b600080805b600e5481101561156d5760006016828154811061152d5761152d6154d2565b6000918252602090912001546001600160a01b0316905061154d81611a68565b611557908461529a565b925050808061156590615468565b91505061150e565b50919050565b61157b61348c565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b1580156115bd57600080fd5b505afa1580156115d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f59190614b93565b90506114d481836134f8565b600080600d5461161084611a68565b61161a91906153b1565b90506000611626611509565b905061163281836152b2565b949350505050565b61164261348c565b6015546301000000900460ff161561166c5760405162461bcd60e51b8152600401610e3f90614fdd565b601554600160201b900460ff16156116dd5760405162461bcd60e51b815260206004820152602e60248201527f54686520636f6e747261637420697320616c7265616479207573696e6720612060448201526d7574696c69747920746f6b656e2160901b6064820152608401610e3f565b6000816001600160a01b03163b116117375760405162461bcd60e51b815260206004820152601e60248201527f5468652061646472657373206973206e6f74206120636f6e74726163742100006044820152606401610e3f565b601580546001600160a01b03808416600160381b90810266ffff0100000000600160d81b031990931692909217600160201b179283905560405191909204909116907f1c3c4d10f15e8f2db379892e82b16d38fe6300d9d56e01b15b4c28dcf3afc1de90600090a250565b6117ac3382613992565b6117c85760405162461bcd60e51b8152600401610e3f906150ee565b611462838383613a68565b6117db61348c565b6015546301000000900460ff16156118055760405162461bcd60e51b8152600401610e3f90614fdd565b60158054911515600160301b0266ff00000000000019909216919091179055565b61182e61348c565b601e5460ff16156118935760405162461bcd60e51b815260206004820152602960248201527f412062616c6c6f7420697320616c7265616479206f70656e2120466972737420604482015268636c6f73652069742160b81b6064820152608401610e3f565b60008251116118e45760405162461bcd60e51b815260206004820152601c60248201527f546865207375626a6563742063616e6e6f7420626520656d70747921000000006044820152606401610e3f565b60018151116119415760405162461bcd60e51b815260206004820152602360248201527f5468657265206d757374206265206174206c656173742074776f206f7074696f6044820152626e732160e81b6064820152608401610e3f565b815161195490601b906020850190614600565b50805161196890601c906020840190614684565b506000601d55601e805460ff19166001179055805167ffffffffffffffff811115611995576119956154e8565b6040519080825280602002602001820160405280156119be578160200160208202803683370190505b5080516119d391601f916020909101906146dd565b5060005b6119df6114f3565b811015611a225760006119f18261248c565b6001600160a01b031660009081526020805260409020805460ff191690555080611a1a81615468565b9150506119d7565b5081604051611a319190614db8565b60405180910390207f3db97d56f8b3612d6c72f1434761955728deffcbfe06b3d5f48481b7940a67cd8260405161100a9190614e5a565b6001600160a01b0381166000908152601a6020526040812054611ad95760405162461bcd60e51b815260206004820152602360248201527f546865206f776e657220646f6573206e6f74206861766520616e7920746f6b656044820152626e732160e81b6064820152608401610e3f565b6001600160a01b0382166000908152601a6020526040812054601254611afe85612503565b611b0891906153b1565b611b1291906153d0565b9392505050565b611b2161348c565b60158054911515620100000262ff000019909216919091179055565b611b4561348c565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015611b8757600080fd5b505afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190614b93565b9050816001600160a01b031663a9059cbb611be26006546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015611c2a57600080fd5b505af1158015611c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c629190614a04565b611cc25760405162461bcd60e51b815260206004820152602b60248201527f54686520636f6e7472616374206661696c656420746f207472616e736665722060448201526a74686520746f6b656e732160a81b6064820152608401610e3f565b816001600160a01b0316611cde6006546001600160a01b031690565b6001600160a01b03167ff582f7f20d6f499a63761275e0cc98d21cfe7b9d46d5458ffa80a73405f382078360405161120791815260200190565b611d2061348c565b601554600160201b900460ff16611d495760405162461bcd60e51b8152600401610e3f90615181565b601560079054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9757600080fd5b505afa158015611dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcf9190614bf3565b611ddd9060ff16600a615309565b611de790826153b1565b60145550565b61146283838360405180602001604052806000815250612dcb565b60606000611e1583612503565b905060008167ffffffffffffffff811115611e3257611e326154e8565b604051908082528060200260200182016040528015611e5b578160200160208202803683370190505b5090506000805b8381108015611e72575060105482105b15611efb576000828152600260205260409020546001600160a01b031615611ee9576000611e9f8361248c565b9050866001600160a01b0316816001600160a01b03161415611ee75782848381518110611ece57611ece6154d2565b602090810291909101015281611ee381615468565b9250505b505b81611ef381615468565b925050611e62565b5090949350505050565b611f0d61348c565b600f55565b611f1a61348c565b6015546301000000900460ff1615611f445760405162461bcd60e51b8152600401610e3f90614fdd565b601554600160201b900460ff16611f6d5760405162461bcd60e51b8152600401610e3f90615181565b6015805464ff00000000191690819055604051600160381b9091046001600160a01b0316907fda7d1c2a8fee6bd48820b89dee215e501ba479ddc606f8be66bdcdcd9c3a498390600090a2565b611fc261348c565b6015546301000000900460ff1615611fec5760405162461bcd60e51b8152600401610e3f90614fdd565b80516114d490600c906020840190614600565b600b805461200c90615413565b80601f016020809104026020016040519081016040528092919081815260200182805461203890615413565b80156120855780601f1061205a57610100808354040283529160200191612085565b820191906000526020600020905b81548152906001019060200180831161206857829003601f168201915b505050505081565b600260075414156120e05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610e3f565b6002600755601554600160201b900460ff1661210e5760405162461bcd60e51b8152600401610e3f90615181565b601554600160281b900460ff166121375760405162461bcd60e51b8152600401610e3f906151cb565b6000828152601960205260409020548111156121d45760405162461bcd60e51b815260206004820152605060248201527f54686520636f756e74206d757374206265206c657373207468616e206f72206560448201527f7175616c20746f207468652063757272656e74207472616e7366657220636f7560648201526f6e74206f662074686520746f6b656e2160801b608482015260a401610e3f565b6000816121df612b71565b6121e991906153b1565b601554909150600160381b90046001600160a01b031681816370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561224657600080fd5b505afa15801561225a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227e9190614b93565b10156122e25760405162461bcd60e51b815260206004820152602d60248201527f596f7520646f6e2774206861766520656e6f756768207574696c69747920746f60448201526c6b656e7320746f206275726e2160981b6064820152608401610e3f565b6001600160a01b0381166339b22120336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b15801561233a57600080fd5b505af115801561234e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123729190614a04565b6123d65760405162461bcd60e51b815260206004820152602f60248201527f54686520636f6e7472616374206661696c656420746f206275726e207468652060448201526e7574696c69747920746f6b656e732160881b6064820152608401610e3f565b600084815260196020526040812080548592906123f49084906153d0565b92505081905550826013600082825461240d91906153d0565b9091555050336000908152601a6020526040812080548592906124319084906153d0565b90915550506000848152601960205260409081902054905185917f32a2a2d49e70140659ee0fa795abb2faabaf4d15c565e64cf3f2ed203444ecfd9161247991815260200190565b60405180910390a2505060016007555050565b6000818152600260205260408120546001600160a01b0316806110625760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610e3f565b60006001600160a01b03821661256e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610e3f565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146125b45760405162461bcd60e51b8152600401610e3f906150b9565b6125be6000613c0f565b565b6125c861348c565b6015546301000000900460ff16156125f25760405162461bcd60e51b8152600401610e3f90614fdd565b80516114d490600a906020840190614600565b60606001805461123990615413565b601b8054819061262390615413565b80601f016020809104026020016040519081016040528092919081815260200182805461264f90615413565b801561269c5780601f106126715761010080835404028352916020019161269c565b820191906000526020600020905b81548152906001019060200180831161267f57829003601f168201915b50505050600283015460039093015491929160ff16905083565b601d54601e54601b80546060938493600093849386939192601c929160ff90911690601f9085906126e690615413565b80601f016020809104026020016040519081016040528092919081815260200182805461271290615413565b801561275f5780601f106127345761010080835404028352916020019161275f565b820191906000526020600020905b81548152906001019060200180831161274257829003601f168201915b5050505050945083805480602002602001604051908101604052809291908181526020016000905b828210156128335783829060005260206000200180546127a690615413565b80601f01602080910402602001604051908101604052809291908181526020018280546127d290615413565b801561281f5780601f106127f45761010080835404028352916020019161281f565b820191906000526020600020905b81548152906001019060200180831161280257829003601f168201915b505050505081526020019060010190612787565b5050505093508080548060200260200160405190810160405280929190818152602001828054801561288457602002820191906000526020600020905b815481526020019060010190808311612870575b50505050509050945094509450945094509091929394565b6009546001600160a01b0316336001600160a01b0316146129145760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206261636b75702077616c6c65742063616e2061636365737320746860448201526b69732066756e6374696f6e2160a01b6064820152608401610e3f565b6006546001600160a01b03828116911614156129855760405162461bcd60e51b815260206004820152602a60248201527f546865206e6577206f776e65722063616e6e6f74206265207468652063757272604482015269656e74206f776e65722160b01b6064820152608401610e3f565b6009546001600160a01b03828116911614156129f65760405162461bcd60e51b815260206004820152602a60248201527f546865206e6577206f776e65722063616e6e6f7420626520746865206261636b60448201526975702077616c6c65742160b01b6064820152608401610e3f565b61122781613c0f565b80612a0981613c61565b60155460ff1615612a5c5760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610e3f565b6006546001600160a01b03163314612b5c5760155462010000900460ff16151560011415612b095733600090815260186020526040902054821115612b095760405162461bcd60e51b815260206004820152603760248201527f596f7520617265206e6f742077686974656c6973746564206f7220657863656560448201527f647320746865206d6178206d696e7420616d6f756e74210000000000000000006064820152608401610e3f565b81600f54612b1791906153b1565b341015612b5c5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610e3f565b6114d43383613d0b565b6114d4338383613d9b565b601554600090600160201b900460ff16612b9d5760405162461bcd60e51b8152600401610e3f90615181565b601554600160281b900460ff16612bc65760405162461bcd60e51b8152600401610e3f906151cb565b60135460145461150491906152b2565b600c805461200c90615413565b6006546001600160a01b03163314612c0d5760405162461bcd60e51b8152600401610e3f906150b9565b6015546301000000900460ff1615612c375760405162461bcd60e51b8152600401610e3f90614fdd565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6015546301000000900460ff16612cb25760405162461bcd60e51b815260206004820152601b60248201527f54686520636f6e7472616374206973206e6f742066726f7a656e2100000000006044820152606401610e3f565b33612cbc8261248c565b6001600160a01b03161480612cdb57506006546001600160a01b031633145b612d315760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920746f6b656e206f776e65722063616e20656d69742066726f7a656e6044820152602160f81b6064820152608401610e3f565b807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b55657207612d5c83612ee6565b604051612d699190614f2b565b60405180910390a250565b612d7c61348c565b601155565b601c546000908210612da55760405162461bcd60e51b8152600401610e3f90615066565b601f805483908110612db957612db96154d2565b90600052602060002001549050919050565b612dd53383613992565b612df15760405162461bcd60e51b8152600401610e3f906150ee565b612dfd84848484613e6a565b50505050565b612e0b61348c565b601554611227908290600160381b90046001600160a01b03166134f8565b612e3161348c565b601e5460ff161515600114612e835760405162461bcd60e51b81526020600482015260186024820152775468657265206973206e6f2062616c6c6f74206f70656e2160401b6044820152606401610e3f565b601e805460ff19169055604051612e9c90601b90614e11565b604051908190038120601d5490917f494eb9633f8368e3fafee7e2e5f0ba3b3ccf3e53a02d846eccf800a4d9d7a1f491612edc91601c9190601f90614e6d565b60405180910390a2565b6000818152600260205260409020546060906001600160a01b0316612f665760405162461bcd60e51b815260206004820152603060248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526f6e6578697374656e7420746f6b656e2160801b6064820152608401610e3f565b601554610100900460ff1661300757600c8054612f8290615413565b80601f0160208091040260200160405190810160405280929190818152602001828054612fae90615413565b8015612ffb5780601f10612fd057610100808354040283529160200191612ffb565b820191906000526020600020905b815481529060010190602001808311612fde57829003601f168201915b50505050509050919050565b6000613011613e9d565b905060008151116130315760405180602001604052806000815250611b12565b8061303b84613eac565b600b60405160200161304f93929190614dd4565b6040516020818303038152906040529392505050565b61306d61348c565b60005b82811015612dfd57816018600086868581811061308f5761308f6154d2565b90506020020160208101906130a491906147fb565b6001600160a01b03168152602081019190915260400160002055806130c881615468565b915050613070565b6130d861348c565b6015546301000000900460ff16156131025760405162461bcd60e51b8152600401610e3f90614fdd565b601580549115156101000261ff0019909216919091179055565b61312461348c565b604080518082019091526006815265667265657a6560d01b6020918201528151908201207f456eb9a5c6a00ab7f657bf96233594184c525854814987356d7702a9a58fa986146131b65760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420667265657a6520636f6e6669726d6174696f6e21000000006044820152606401610e3f565b601554610100900460ff1661320d5760405162461bcd60e51b815260206004820152601d60248201527f54686520636f6e7472616374206973206e6f742072657665616c6564210000006044820152606401610e3f565b6015546301000000900460ff16156132675760405162461bcd60e51b815260206004820152601f60248201527f54686520636f6e747261637420697320616c72656164792066726f7a656e21006044820152606401610e3f565b506015805463ff00000019166301000000179055565b61328561348c565b47600061329a6006546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146132e4576040519150601f19603f3d011682016040523d82523d6000602084013e6132e9565b606091505b50509050806133605760405162461bcd60e51b815260206004820152603960248201527f54686520636f6e7472616374206661696c656420746f207472616e736665722060448201527f7468652062616c616e636520746f20746865206f776e657221000000000000006064820152608401610e3f565b6006546001600160a01b03166001600160a01b03167f7f36cb738e7e0427042dc19669b1186fd858a03b8e699e089a4306ab78a160cb8360405161100a91815260200190565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b816133de81613c61565b6133e661348c565b6114628284613d0b565b6006546001600160a01b0316331461341a5760405162461bcd60e51b8152600401610e3f906150b9565b6001600160a01b0381166129f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e3f565b61348761348c565b601455565b6006546001600160a01b031633146125be5760405162461bcd60e51b815260206004820152602960248201527f43616c6c6572206973206e6f7420746865206f776e6572206f66207468697320604482015268636f6e74726163742160b81b6064820152608401610e3f565b6002600754141561354b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610e3f565b60026007556015546001600160a01b03828116600160381b9092041614801561357c57506001600160a01b03811615155b156135aa57601554600160201b900460ff166135aa5760405162461bcd60e51b8152600401610e3f90615181565b600082116135ca5760405162461bcd60e51b8152600401610e3f9061513f565b816000806135d6611509565b905060005b600e54811015613810576000601682815481106135fa576135fa6154d2565b6000918252602082200154600d546001600160a01b03909116925061361f8386613faa565b613629908a6153b1565b61363391906152b2565b90508581111580156136455750600081115b156137fb576001600160a01b0387166136b1576040516001600160a01b038316908290600081818185875af1925050503d80600081146136a1576040519150601f19603f3d011682016040523d82523d6000602084013e6136a6565b606091505b5050809550506137e8565b6015546001600160a01b03888116600160381b909204161415613763576015546040516384229e6760e01b81526001600160a01b03848116600483015260248201849052600160381b909204909116906384229e6790604401602060405180830381600087803b15801561372457600080fd5b505af1158015613738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375c9190614a04565b94506137e8565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905288169063a9059cbb90604401602060405180830381600087803b1580156137ad57600080fd5b505af11580156137c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e59190614a04565b94505b84156137fb576137f881876153d0565b95505b5050808061380890615468565b9150506135db565b506001600160a01b038416613860577f051019b59d3b24249903e46fd05b6def7f293fc3de54eca64b3d32743f27fc8e61384a84876153d0565b60405190815260200160405180910390a1613918565b6015546001600160a01b03858116600160381b9092041614156138d157601554600160381b90046001600160a01b03167fa9f7c910da067fba72d02dddc46988a2e66ac1e1a41a1075207f641cbe87c51c6138bb85886153d0565b60405190815260200160405180910390a2613918565b6001600160a01b0384167f123de1c46e8b948006090f3680679ee36c7ed6790ad2027e2bd3b584513f0a1f61390685886153d0565b60405190815260200160405180910390a25b50506001600755505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906139598261248c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316613a0b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610e3f565b6000613a168361248c565b9050806001600160a01b0316846001600160a01b03161480613a3d5750613a3d81856133a6565b806116325750836001600160a01b0316613a56846112bc565b6001600160a01b031614949350505050565b826001600160a01b0316613a7b8261248c565b6001600160a01b031614613adf5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610e3f565b6001600160a01b038216613b415760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610e3f565b613b4c838383613fcf565b613b57600082613924565b6001600160a01b0383166000908152600360205260408120805460019290613b809084906153d0565b90915550506001600160a01b0382166000908152600360205260408120805460019290613bae90849061529a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081118015613c7357506011548111155b613cb65760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610e3f565b60105481600854613cc79190615259565b126112275760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610e3f565b6006546001600160a01b03163314801590613d33575060155462010000900460ff1615156001145b15613d5d573360009081526018602052604081208054839290613d579084906153d0565b90915550505b60005b818110156114625760088054906000613d7883615448565b9190505550613d89836008546141a7565b80613d9381615468565b915050613d60565b816001600160a01b0316836001600160a01b03161415613dfd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610e3f565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613e75848484613a68565b613e81848484846141c1565b612dfd5760405162461bcd60e51b8152600401610e3f90615014565b6060600a805461123990615413565b606081613ed05750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613efa5780613ee481615468565b9150613ef39050600a836152b2565b9150613ed4565b60008167ffffffffffffffff811115613f1557613f156154e8565b6040519080825280601f01601f191660200182016040528015613f3f576020820181803683370190505b5090505b841561163257613f546001836153d0565b9150613f61600a8661547c565b613f6c90603061529a565b60f81b818381518110613f8157613f816154d2565b60200101906001600160f81b031916908160001a905350613fa3600a866152b2565b9450613f43565b600080600d54613fb985611a68565b613fc391906153b1565b905061163283826152b2565b6001600160a01b03831615614039576000818152601960209081526040808320546001600160a01b0387168452601a90925282208054919290916140149084906153d0565b90915550614023905083612503565b6001141561403457614034836142ce565b614049565b6000818152601960205260408120555b600081815260196020526040812080549161406383615468565b90915550506013805490600061407883615468565b90915550506001600160a01b038216156140e3576000818152601960209081526040808320546001600160a01b0386168452601a90925282208054919290916140c290849061529a565b909155506140d1905082612503565b6140de576140de8261440a565b6140f3565b6000818152601960205260408120555b601254600082815260196020526040902054111561415557600081815260196020526040808220546012555182916001600160a01b0380861692908716917f2a167f3d039b8cee5363e2e0182436bdceed26967e0a6864bad89bef8c9d808d91a45b807f32a2a2d49e70140659ee0fa795abb2faabaf4d15c565e64cf3f2ed203444ecfd601960008481526020019081526020016000205460405161419a91815260200190565b60405180910390a2505050565b6114d482826040518060200160405280600081525061447f565b60006001600160a01b0384163b156142c357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614205903390899088908890600401614e1d565b602060405180830381600087803b15801561421f57600080fd5b505af192505050801561424f575060408051601f3d908101601f1916820190925261424c91810190614a3e565b60015b6142a9573d80801561427d576040519150601f19603f3d011682016040523d82523d6000602084013e614282565b606091505b5080516142a15760405162461bcd60e51b8152600401610e3f90615014565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611632565b506001949350505050565b6001600160a01b038116600090815260176020526040902054600e546016906142f9906001906153d0565b81548110614309576143096154d2565b600091825260209091200154601680546001600160a01b039092169183908110614335576143356154d2565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080601760006016848154811061437b5761437b6154d2565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560168054806143b1576143b16154bc565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03841682526017905260408120819055600e8054600192906144019084906153d0565b90915550505050565b6016805460018082019092557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319166001600160a01b038416908117909155600e8054600092835260176020526040832081905590919061447790849061529a565b909155505050565b61448983836144b2565b61449660008484846141c1565b6114625760405162461bcd60e51b8152600401610e3f90615014565b6001600160a01b0382166145085760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610e3f565b6000818152600260205260409020546001600160a01b03161561456d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610e3f565b61457960008383613fcf565b6001600160a01b03821660009081526003602052604081208054600192906145a290849061529a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461460c90615413565b90600052602060002090601f01602090048101928261462e5760008555614674565b82601f1061464757805160ff1916838001178555614674565b82800160010185558215614674579182015b82811115614674578251825591602001919060010190614659565b50614680929150614717565b5090565b8280548282559060005260206000209081019282156146d1579160200282015b828111156146d157825180516146c1918491602090910190614600565b50916020019190600101906146a4565b5061468092915061472c565b8280548282559060005260206000209081019282156146745791602002820182811115614674578251825591602001919060010190614659565b5b808211156146805760008155600101614718565b808211156146805760006147408282614749565b5060010161472c565b50805461475590615413565b6000825580601f10614765575050565b601f0160209004906000526020600020908101906112279190614717565b600067ffffffffffffffff83111561479d5761479d6154e8565b6147b0601f8401601f1916602001615228565b90508281528383830111156147c457600080fd5b828260208301376000602084830101529392505050565b600082601f8301126147ec57600080fd5b611b1283833560208501614783565b60006020828403121561480d57600080fd5b8135611b12816154fe565b6000806040838503121561482b57600080fd5b8235614836816154fe565b91506020830135614846816154fe565b809150509250929050565b60008060006060848603121561486657600080fd5b8335614871816154fe565b92506020840135614881816154fe565b929592945050506040919091013590565b600080600080608085870312156148a857600080fd5b84356148b3816154fe565b935060208501356148c3816154fe565b925060408501359150606085013567ffffffffffffffff8111156148e657600080fd5b8501601f810187136148f757600080fd5b61490687823560208401614783565b91505092959194509250565b6000806040838503121561492557600080fd5b8235614930816154fe565b9150602083013561484681615513565b6000806040838503121561495357600080fd5b823561495e816154fe565b946020939093013593505050565b60008060006040848603121561498157600080fd5b833567ffffffffffffffff8082111561499957600080fd5b818601915086601f8301126149ad57600080fd5b8135818111156149bc57600080fd5b8760208260051b85010111156149d157600080fd5b6020928301989097509590910135949350505050565b6000602082840312156149f957600080fd5b8135611b1281615513565b600060208284031215614a1657600080fd5b8151611b1281615513565b600060208284031215614a3357600080fd5b8135611b1281615521565b600060208284031215614a5057600080fd5b8151611b1281615521565b600060208284031215614a6d57600080fd5b813567ffffffffffffffff811115614a8457600080fd5b611632848285016147db565b60008060408385031215614aa357600080fd5b823567ffffffffffffffff80821115614abb57600080fd5b614ac7868387016147db565b9350602091508185013581811115614ade57600080fd5b8501601f81018713614aef57600080fd5b803582811115614b0157614b016154e8565b8060051b614b10858201615228565b8281528581019084870183860188018c1015614b2b57600080fd5b60009350835b85811015614b6857813588811115614b47578586fd5b614b558e8b838b01016147db565b8552509288019290880190600101614b31565b50989b909a5098505050505050505050565b600060208284031215614b8c57600080fd5b5035919050565b600060208284031215614ba557600080fd5b5051919050565b60008060408385031215614bbf57600080fd5b823591506020830135614846816154fe565b60008060408385031215614be457600080fd5b50508035926020909101359150565b600060208284031215614c0557600080fd5b815160ff81168114611b1257600080fd5b600081518084526020808501808196508360051b8101915082860160005b85811015614c5e578284038952614c4c848351614ca6565b98850198935090840190600101614c34565b5091979650505050505050565b600081518084526020808501945080840160005b83811015614c9b57815187529582019590820190600101614c7f565b509495945050505050565b60008151808452614cbe8160208601602086016153e7565b601f01601f19169290920160200192915050565b60008154614cdf81615413565b808552602060018381168015614cfc5760018114614d1057614d3e565b60ff19851688840152604088019550614d3e565b866000528260002060005b85811015614d365781548a8201860152908301908401614d1b565b890184019650505b505050505092915050565b60008154614d5681615413565b60018281168015614d6e5760018114614d7f57614dae565b60ff19841687528287019450614dae565b8560005260208060002060005b85811015614da55781548a820152908401908201614d8c565b50505082870194505b5050505092915050565b60008251614dca8184602087016153e7565b9190910192915050565b60008451614de68184602089016153e7565b845190830190614dfa8183602089016153e7565b614e0681830186614d49565b979650505050505050565b6000611b128284614d49565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614e5090830184614ca6565b9695505050505050565b602081526000611b126020830184614c16565b6000606082016060835280865480835260808501915060808160051b860101925060008881526020808220825b84811015614ec757888703607f19018652614eb58783614cd2565b96509482019460019182019101614e9a565b505086810189905286850360408801528754808652888352818320958201945092505b82821015614f0a5784548452600194850194938101939190910190614eea565b509198975050505050505050565b602081526000611b126020830184614c6b565b602081526000611b126020830184614ca6565b60a081526000614f5160a0830188614ca6565b8281036020840152614f638188614c16565b905085604084015284151560608401528281036080840152614f858185614c6b565b98975050505050505050565b606081526000614fa46060830186614ca6565b602083019490945250901515604090910152919050565b604081526000614fce6040830185614cd2565b90508260208301529392505050565b60208082526017908201527f54686520636f6e74726163742069732066726f7a656e21000000000000000000604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526033908201527f546865206f7074696f6e206d7573742062652077697468696e207468652072616040820152726e6765206f6620746865206f7074696f6e732160681b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526022908201527f54686520616d6f756e74206d7573742062652067726561746572207468616e20604082015261302160f01b606082015260800190565b6020808252602a908201527f54686520636f6e7472616374206973206e6f74207573696e672061207574696c60408201526969747920746f6b656e2160b01b606082015260800190565b60208082526039908201527f54686520636f6e7472616374206973206e6f74207573696e6720636c65616e2060408201527f7472616e7366657220636f756e74206d656368616e69736d2100000000000000606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715615251576152516154e8565b604052919050565b600080821280156001600160ff1b038490038513161561527b5761527b615490565b600160ff1b839003841281161561529457615294615490565b50500190565b600082198211156152ad576152ad615490565b500190565b6000826152c1576152c16154a6565b500490565b600181815b808511156153015781600019048211156152e7576152e7615490565b808516156152f457918102915b93841c93908002906152cb565b509250929050565b6000611b12838360008261531f57506001611062565b8161532c57506000611062565b8160018114615342576002811461534c57615368565b6001915050611062565b60ff84111561535d5761535d615490565b50506001821b611062565b5060208310610133831016604e8410600b841016171561538b575081810a611062565b61539583836152c6565b80600019048211156153a9576153a9615490565b029392505050565b60008160001904831182151516156153cb576153cb615490565b500290565b6000828210156153e2576153e2615490565b500390565b60005b838110156154025781810151838201526020016153ea565b83811115612dfd5750506000910152565b600181811c9082168061542757607f821691505b6020821081141561156d57634e487b7160e01b600052602260045260246000fd5b60006001600160ff1b0382141561546157615461615490565b5060010190565b600060001982141561546157615461615490565b60008261548b5761548b6154a6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461122757600080fd5b801515811461122757600080fd5b6001600160e01b03198116811461122757600080fdfea26469706673582212203362d2009d945c23045e327324c91b050e113ab34acdfc56a6c06d4ae9b6e13a64736f6c63430008070033697066733a2f2f516d564e745645595a79734c486e6b425a62486a334b65716b4a426177705331524172336d68676b6374347a3156000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000124d65746176657273652050656e6775696e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d565000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5358394664545a546965514d624c566b4c7a65763552576137336461347a6179796e436b34474279583774512f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d564e745645595a79734c486e6b425a62486a334b65716b4a426177705331524172336d68676b6374347a31560000000000000000000000

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000124d65746176657273652050656e6775696e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d565000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5358394664545a546965514d624c566b4c7a65763552576137336461347a6179796e436b34474279583774512f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d564e745645595a79734c486e6b425a62486a334b65716b4a426177705331524172336d68676b6374347a31560000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Metaverse Penguins
Arg [1] : _symbol (string): MVP
Arg [2] : _initBaseURI (string): ipfs://QmSX9FdTZTieQMbLVkLzev5RWa73da4zayynCk4GByX7tQ/
Arg [3] : _initNotRevealedUri (string): ipfs://QmVNtVEYZysLHnkBZbHj3KeqkJBawpS1RAr3mhgkct4z1V

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [5] : 4d65746176657273652050656e6775696e730000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4d56500000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d5358394664545a546965514d624c566b4c7a6576355257
Arg [10] : 6137336461347a6179796e436b34474279583774512f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [12] : 697066733a2f2f516d564e745645595a79734c486e6b425a62486a334b65716b
Arg [13] : 4a426177705331524172336d68676b6374347a31560000000000000000000000


Deployed ByteCode Sourcemap

4522:18278:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18932:797;;;;;;;;;;-1:-1:-1;18932:797:10;;;;;:::i;:::-;;:::i;:::-;;1505:300:3;;;;;;;;;;-1:-1:-1;1505:300:3;;;;;:::i;:::-;;:::i;:::-;;;15385:14:14;;15378:22;15360:41;;15348:2;15333:18;1505:300:3;;;;;;;;16927:430:10;;;;;;;;;;-1:-1:-1;16927:430:10;;;;;:::i;:::-;;:::i;19958:153::-;;;;;;;;;;;;;:::i;5277:26::-;;;;;;;;;;-1:-1:-1;5277:26:10;;;;;;;;;;;2423:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3935:217::-;;;;;;;;;;-1:-1:-1;3935:217:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;12372:32:14;;;12354:51;;12342:2;12327:18;3935:217:3;12208:203:14;3473:401:3;;;;;;;;;;-1:-1:-1;3473:401:3;;;;;:::i;:::-;;:::i;11854:105:10:-;;;;;;;;;;-1:-1:-1;11854:105:10;;;;;:::i;:::-;;:::i;4931:30::-;;;;;;;;;;;;;;;;;;;37708:25:14;;;37696:2;37681:18;4931:30:10;37562:177:14;12842:147:10;;;;;;;;;;-1:-1:-1;12842:147:10;;;;;:::i;:::-;;:::i;10149:75::-;;;;;;;;;;-1:-1:-1;10149:75:10;;;;;:::i;:::-;;:::i;7783:90::-;;;;;;;;;;;;;:::i;15975:218::-;;;;;;;;;;;;;:::i;20115:181::-;;;;;;;;;;-1:-1:-1;20115:181:10;;;;;:::i;:::-;;:::i;16197:180::-;;;;;;;;;;-1:-1:-1;16197:180:10;;;;;:::i;:::-;;:::i;11174:392::-;;;;;;;;;;-1:-1:-1;11174:392:10;;;;;:::i;:::-;;:::i;4662:330:3:-;;;;;;;;;;-1:-1:-1;4662:330:3;;;;;:::i;:::-;;:::i;5307:35:10:-;;;;;;;;;;-1:-1:-1;5307:35:10;;;;-1:-1:-1;;;5307:35:10;;;;;;10457:136;;;;;;;;;;-1:-1:-1;10457:136:10;;;;;:::i;:::-;;:::i;17715:711::-;;;;;;;;;;-1:-1:-1;17715:711:10;;;;;:::i;:::-;;:::i;5549:44::-;;;;;;;;;;-1:-1:-1;5549:44:10;;;;;:::i;:::-;;;;;;;;;;;;;;5129:43;;;;;;;;;;;;;;;;15699:272;;;;;;;;;;-1:-1:-1;15699:272:10;;;;;:::i;:::-;;:::i;10360:93::-;;;;;;;;;;-1:-1:-1;10360:93:10;;;;;:::i;:::-;;:::i;16659:264::-;;;;;;;;;;-1:-1:-1;16659:264:10;;;;;:::i;:::-;;:::i;9893:252::-;;;;;;;;;;-1:-1:-1;9893:252:10;;;;;:::i;:::-;;:::i;5058:179:3:-;;;;;;;;;;-1:-1:-1;5058:179:3;;;;;:::i;:::-;;:::i;8490:666:10:-;;;;;;;;;;-1:-1:-1;8490:666:10;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12299:72::-;;;;;;;;;;-1:-1:-1;12299:72:10;;;;;:::i;:::-;;:::i;11570:280::-;;;;;;;;;;;;;:::i;12507:179::-;;;;;;;;;;-1:-1:-1;12507:179:10;;;;;:::i;:::-;;:::i;5207:28::-;;;;;;;;;;-1:-1:-1;5207:28:10;;;;;;;;;;;4725:33;;;;;;;;;;;;;:::i;14328:120::-;;;;;;;;;;-1:-1:-1;14328:120:10;;;;;:::i;:::-;14397:7;14419:24;;;:14;:24;;;;;;;14328:120;5177:26;;;;;;;;;;-1:-1:-1;5177:26:10;;;;;;;;5650:57;;;;;;;;;;-1:-1:-1;5650:57:10;;;;;:::i;:::-;;;;;;;;;;;;;;14742:953;;;;;;;;;;-1:-1:-1;14742:953:10;;;;;:::i;:::-;;:::i;5043:38::-;;;;;;;;;;;;;;;;2126:235:3;;;;;;;;;;-1:-1:-1;2126:235:3;;;;;:::i;:::-;;:::i;1864:205::-;;;;;;;;;;-1:-1:-1;1864:205:3;;;;;:::i;:::-;;:::i;1661:101:11:-;;;;;;;;;;;;;:::i;12690:148:10:-;;;;;;;;;;-1:-1:-1;12690:148:10;;;;;:::i;:::-;;:::i;5085:40::-;;;;;;;;;;;;;;;;1029:85:11;;;;;;;;;;-1:-1:-1;1101:6:11;;-1:-1:-1;;;;;1101:6:11;1029:85;;12185:110:10;;;;;;;;;;-1:-1:-1;12185:110:10;;;;;:::i;:::-;-1:-1:-1;;;;;12271:19:10;12249:7;12271:19;;;:9;:19;;;;;;;12185:110;5001:38;;;;;;;;;;;;;;;;2585:102:3;;;;;;;;;;;;;:::i;5878:26:10:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;18693:235::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;5239:34::-;;;;;;;;;;-1:-1:-1;5239:34:10;;;;;;;;;;;17361:348;;;;;;;;;;-1:-1:-1;17361:348:10;;;;;:::i;:::-;;:::i;7877:450::-;;;;;;:::i;:::-;;:::i;4219:153:3:-;;;;;;;;;;-1:-1:-1;4219:153:3;;;;;:::i;:::-;;:::i;14452:286:10:-;;;;;;;;;;;;;:::i;4762:89::-;;;;;;;;;;;;;:::i;9639:142::-;;;;;;;;;;-1:-1:-1;9639:142:10;;;;;:::i;:::-;;:::i;10903:267::-;;;;;;;;;;-1:-1:-1;10903:267:10;;;;;:::i;:::-;;:::i;5432:27::-;;;;;;;;;;-1:-1:-1;5432:27:10;;;;-1:-1:-1;;;5432:27:10;;-1:-1:-1;;;;;5432:27:10;;;12375:128;;;;;;;;;;-1:-1:-1;12375:128:10;;;;;:::i;:::-;;:::i;19733:221::-;;;;;;;;;;-1:-1:-1;19733:221:10;;;;;:::i;:::-;;:::i;5346:40::-;;;;;;;;;;-1:-1:-1;5346:40:10;;;;-1:-1:-1;;;5346:40:10;;;;;;5303:320:3;;;;;;;;;;-1:-1:-1;5303:320:3;;;;;:::i;:::-;;:::i;20300:139:10:-;;;;;;;;;;-1:-1:-1;20300:139:10;;;;;:::i;:::-;;:::i;18430:259::-;;;;;;;;;;;;;:::i;9160:475::-;;;;;;;;;;-1:-1:-1;9160:475:10;;;;;:::i;:::-;;:::i;4965:32::-;;;;;;;;;;;;;;;;5390:37;;;;;;;;;;-1:-1:-1;5390:37:10;;;;-1:-1:-1;;;5390:37:10;;;;;;11963:218;;;;;;;;;;-1:-1:-1;11963:218:10;;;;;:::i;:::-;;:::i;10228:128::-;;;;;;;;;;-1:-1:-1;10228:128:10;;;;;:::i;:::-;;:::i;10597:302::-;;;;;;;;;;-1:-1:-1;10597:302:10;;;;;:::i;:::-;;:::i;16381:274::-;;;;;;;;;;;;;:::i;4438:162:3:-;;;;;;;;;;-1:-1:-1;4438:162:3;;;;;:::i;:::-;;:::i;5597:49:10:-;;;;;;;;;;-1:-1:-1;5597:49:10;;;;;:::i;:::-;;;;;;;;;;;;;;8333:153;;;;;;;;;;-1:-1:-1;8333:153:10;;;;;:::i;:::-;;:::i;1911:198:11:-;;;;;;;;;;-1:-1:-1;1911:198:11;;;;;:::i;:::-;;:::i;9785:104:10:-;;;;;;;;;;-1:-1:-1;9785:104:10;;;;;:::i;:::-;;:::i;18932:797::-;19010:1;18984:23;719:10:1;1864:205:3;:::i;18984:23:10:-;:27;18976:83;;;;-1:-1:-1;;;18976:83:10;;26600:2:14;18976:83:10;;;26582:21:14;26639:2;26619:18;;;26612:30;26678:34;26658:18;;;26651:62;-1:-1:-1;;;26729:18:14;;;26722:41;26780:19;;18976:83:10;;;;;;;;;19073:19;;;;:27;;:19;:27;19065:64;;;;-1:-1:-1;;;19065:64:10;;19254:2:14;19065:64:10;;;19236:21:14;19293:2;19273:18;;;19266:30;-1:-1:-1;;;19312:18:14;;;19305:54;19376:18;;19065:64:10;19052:348:14;19065:64:10;19153:20;:27;19143:37;;19135:101;;;;-1:-1:-1;;;19135:101:10;;;;;;;:::i;:::-;719:10:1;19327:32:10;;;;:18;:32;;;;;;;;:41;19319:77;;;;-1:-1:-1;;;19319:77:10;;25823:2:14;19319:77:10;;;25805:21:14;25862:2;25842:18;;;25835:30;25901:25;25881:18;;;25874:53;25944:18;;19319:77:10;25621:347:14;19319:77:10;19435:17;;19423:1;;-1:-1:-1;;;19435:17:10;;;;19431:75;;;19474:25;719:10:1;15699:272:10;:::i;19474:25::-;19462:37;;19431:75;19547:9;19516:12;:18;;19535:7;19516:27;;;;;;;;:::i;:::-;;;;;;;;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;19562:23:10;:36;;19589:9;;19562:23;;;:36;;19589:9;;19562:36;:::i;:::-;;;;-1:-1:-1;;719:10:1;19604:32:10;;;;:18;:32;;;;;;;:39;;-1:-1:-1;;19604:39:10;19639:4;19604:39;;;19655:69;;;19661:12;;19655:69;:::i;:::-;;;;;;;;;19683:12;:20;;19704:7;19683:29;;;;;;;;:::i;:::-;;;;;;;;19714:9;19655:69;;;;;;;:::i;:::-;;;;;;;;18970:759;18932:797;:::o;1505:300:3:-;1607:4;-1:-1:-1;;;;;;1642:40:3;;-1:-1:-1;;;1642:40:3;;:104;;-1:-1:-1;;;;;;;1698:48:3;;-1:-1:-1;;;1698:48:3;1642:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:2;;;1762:36:3;1623:175;1505:300;-1:-1:-1;;1505:300:3:o;16927:430:10:-;7755:12;:10;:12::i;:::-;17005:15:::1;::::0;-1:-1:-1;;;17005:15:10;::::1;;;16997:70;;;;-1:-1:-1::0;;;16997:70:10::1;;;;;;;:::i;:::-;17091:1;17081:7;:11;17073:58;;;;-1:-1:-1::0;;;17073:58:10::1;;;;;;;:::i;:::-;17189:12;::::0;-1:-1:-1;;;;;;;;17189:12:10;;::::1;;::::0;17216:24:::1;17241:7;1101:6:11::0;;-1:-1:-1;;;;;1101:6:11;;1029:85;17241:7:10::1;17216:42;::::0;-1:-1:-1;;;;;;17216:42:10::1;::::0;;;;;;-1:-1:-1;;;;;13101:32:14;;;17216:42:10::1;::::0;::::1;13083:51:14::0;13150:18;;;13143:34;;;13056:18;;17216:42:10::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17208:80;;;::::0;-1:-1:-1;;;17208:80:10;;34226:2:14;17208:80:10::1;::::0;::::1;34208:21:14::0;34265:2;34245:18;;;34238:30;34304:27;34284:18;;;34277:55;34349:18;;17208:80:10::1;34024:349:14::0;17208:80:10::1;17340:11;-1:-1:-1::0;;;;;17300:52:10::1;17322:7;1101:6:11::0;;-1:-1:-1;;;;;1101:6:11;;1029:85;17322:7:10::1;-1:-1:-1::0;;;;;17300:52:10::1;;17331:7;17300:52;;;;37708:25:14::0;;37696:2;37681:18;;37562:177;17300:52:10::1;;;;;;;;16991:366;16927:430:::0;:::o;19958:153::-;7755:12;:10;:12::i;:::-;20034:21:::1;20061:45;20034:21:::0;20012:19:::1;20061:20;:45::i;:::-;20006:105;19958:153::o:0;2423:98:3:-;2477:13;2509:5;2502:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2423:98;:::o;3935:217::-;4011:7;7183:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7183:16:3;4030:73;;;;-1:-1:-1;;;4030:73:3;;30294:2:14;4030:73:3;;;30276:21:14;30333:2;30313:18;;;30306:30;30372:34;30352:18;;;30345:62;-1:-1:-1;;;30423:18:14;;;30416:42;30475:19;;4030:73:3;30092:408:14;4030:73:3;-1:-1:-1;4121:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4121:24:3;;3935:217::o;3473:401::-;3553:13;3569:23;3584:7;3569:14;:23::i;:::-;3553:39;;3616:5;-1:-1:-1;;;;;3610:11:3;:2;-1:-1:-1;;;;;3610:11:3;;;3602:57;;;;-1:-1:-1;;;3602:57:3;;32644:2:14;3602:57:3;;;32626:21:14;32683:2;32663:18;;;32656:30;32722:34;32702:18;;;32695:62;-1:-1:-1;;;32773:18:14;;;32766:31;32814:19;;3602:57:3;32442:397:14;3602:57:3;719:10:1;-1:-1:-1;;;;;3691:21:3;;;;:62;;-1:-1:-1;3716:37:3;3733:5;719:10:1;4438:162:3;:::i;3716:37::-;3670:165;;;;-1:-1:-1;;;3670:165:3;;26175:2:14;3670:165:3;;;26157:21:14;26214:2;26194:18;;;26187:30;26253:34;26233:18;;;26226:62;26324:26;26304:18;;;26297:54;26368:19;;3670:165:3;25973:420:14;3670:165:3;3846:21;3855:2;3859:7;3846:8;:21::i;:::-;3543:331;3473:401;;:::o;11854:105:10:-;7755:12;:10;:12::i;:::-;11924:21:::1;:30:::0;;;::::1;;-1:-1:-1::0;;;11924:30:10::1;-1:-1:-1::0;;11924:30:10;;::::1;::::0;;;::::1;::::0;;11854:105::o;12842:147::-;7755:12;:10;:12::i;:::-;12922:6:::1;::::0;;;::::1;;;12921:7;12913:43;;;;-1:-1:-1::0;;;12913:43:10::1;;;;;;;:::i;:::-;12962:22:::0;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;12842:147:::0;:::o;10149:75::-;7755:12;:10;:12::i;:::-;10204:6:::1;:15:::0;;-1:-1:-1;;10204:15:10::1;::::0;::::1;;::::0;;;::::1;::::0;;10149:75::o;7783:90::-;7827:7;7857:6;;7866:1;7857:10;;;;:::i;:::-;7842:26;;7783:90;:::o;15975:218::-;16020:7;;;16056:117;16080:11;;16076:1;:15;16056:117;;;16106:13;16122:8;16131:1;16122:11;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;16122:11:10;;-1:-1:-1;16148:18:10;16122:11;16148;:18::i;:::-;16141:25;;;;:::i;:::-;;;16098:75;16093:3;;;;;:::i;:::-;;;;16056:117;;;-1:-1:-1;16185:3:10;15975:218;-1:-1:-1;15975:218:10:o;20115:181::-;7755:12;:10;:12::i;:::-;20205:39:::1;::::0;-1:-1:-1;;;20205:39:10;;20238:4:::1;20205:39;::::0;::::1;12354:51:14::0;20183:19:10::1;::::0;-1:-1:-1;;;;;20205:24:10;::::1;::::0;::::1;::::0;12327:18:14;;20205:39:10::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20183:61;;20250:41;20271:11;20284:6;20250:20;:41::i;16197:180::-:0;16251:7;16266:13;16304:10;;16282:19;16294:6;16282:11;:19::i;:::-;:32;;;;:::i;:::-;16266:48;;16320:11;16334:14;:12;:14::i;:::-;16320:28;-1:-1:-1;16361:11:10;16320:28;16361:5;:11;:::i;:::-;16354:18;16197:180;-1:-1:-1;;;;16197:180:10:o;11174:392::-;7755:12;:10;:12::i;:::-;11252:6:::1;::::0;;;::::1;;;11251:7;11243:43;;;;-1:-1:-1::0;;;11243:43:10::1;;;;;;;:::i;:::-;11301:15;::::0;-1:-1:-1;;;11301:15:10;::::1;;;11300:16;11292:75;;;::::0;-1:-1:-1;;;11292:75:10;;29518:2:14;11292:75:10::1;::::0;::::1;29500:21:14::0;29557:2;29537:18;;;29530:30;29596:34;29576:18;;;29569:62;-1:-1:-1;;;29647:18:14;;;29640:44;29701:19;;11292:75:10::1;29316:410:14::0;11292:75:10::1;11402:1;11381:6;-1:-1:-1::0;;;;;11381:18:10::1;;:22;11373:65;;;::::0;-1:-1:-1;;;11373:65:10;;24631:2:14;11373:65:10::1;::::0;::::1;24613:21:14::0;24670:2;24650:18;;;24643:30;24709:32;24689:18;;;24682:60;24759:18;;11373:65:10::1;24429:354:14::0;11373:65:10::1;11445:15;:22:::0;;-1:-1:-1;;;;;11473:21:10;;::::1;-1:-1:-1::0;;;11473:21:10;;::::1;-1:-1:-1::0;;;;;;11473:21:10;;;;;;;-1:-1:-1;;;11473:21:10;;;;;11506:55:::1;::::0;11547:12;;;::::1;::::0;;::::1;::::0;11506:55:::1;::::0;11445:22;;11506:55:::1;11174:392:::0;:::o;4662:330:3:-;4851:41;719:10:1;4884:7:3;4851:18;:41::i;:::-;4843:103;;;;-1:-1:-1;;;4843:103:3;;;;;;;:::i;:::-;4957:28;4967:4;4973:2;4977:7;4957:9;:28::i;10457:136:10:-;7755:12;:10;:12::i;:::-;10522:6:::1;::::0;;;::::1;;;10521:7;10513:43;;;;-1:-1:-1::0;;;10513:43:10::1;;;;;;;:::i;:::-;10562:17;:26:::0;;;::::1;;-1:-1:-1::0;;;10562:26:10::1;-1:-1:-1::0;;10562:26:10;;::::1;::::0;;;::::1;::::0;;10457:136::o;17715:711::-;7755:12;:10;:12::i;:::-;17819:19;;::::1;;:28;17811:82;;;::::0;-1:-1:-1;;;17811:82:10;;18442:2:14;17811:82:10::1;::::0;::::1;18424:21:14::0;18481:2;18461:18;;;18454:30;18520:34;18500:18;;;18493:62;-1:-1:-1;;;18571:18:14;;;18564:39;18620:19;;17811:82:10::1;18240:405:14::0;17811:82:10::1;17932:1;17913:8;17907:22;:26;17899:67;;;::::0;-1:-1:-1;;;17899:67:10;;22316:2:14;17899:67:10::1;::::0;::::1;22298:21:14::0;22355:2;22335:18;;;22328:30;22394;22374:18;;;22367:58;22442:18;;17899:67:10::1;22114:352:14::0;17899:67:10::1;17998:1;17980:8;:15;:19;17972:67;;;::::0;-1:-1:-1;;;17972:67:10;;31836:2:14;17972:67:10::1;::::0;::::1;31818:21:14::0;31875:2;31855:18;;;31848:30;31914:34;31894:18;;;31887:62;-1:-1:-1;;;31965:18:14;;;31958:33;32008:19;;17972:67:10::1;31634:399:14::0;17972:67:10::1;18050:31:::0;;::::1;::::0;:12:::1;::::0;:31:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;18087:31:10;;::::1;::::0;:20;;:31:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;18150:1:10::1;18124:23:::0;:27;18157:19;:26;;-1:-1:-1;;18157:26:10::1;18179:4;18157:26;::::0;;18224:15;;18210:30:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;18210:30:10::1;-1:-1:-1::0;18189:51:10;;::::1;::::0;:18;;:51:::1;::::0;;::::1;::::0;::::1;:::i;:::-;;18256:9;18251:126;18275:13;:11;:13::i;:::-;18271:1;:17;18251:126;;;18303:13;18319:10;18327:1;18319:7;:10::i;:::-;-1:-1:-1::0;;;;;18337:25:10::1;18365:5;18337:25:::0;;;:18;:25;;;;;:33;;-1:-1:-1;;18337:33:10::1;::::0;;-1:-1:-1;18290:3:10;::::1;::::0;::::1;:::i;:::-;;;;18251:126;;;;18402:8;18388:33;;;;;;:::i;:::-;;;;;;;;;18412:8;18388:33;;;;;;:::i;15699:272::-:0;-1:-1:-1;;;;;15780:30:10;;15757:7;15780:30;;;:22;:30;;;;;;15772:82;;;;-1:-1:-1;;;15772:82:10;;32240:2:14;15772:82:10;;;32222:21:14;32279:2;32259:18;;;32252:30;32318:34;32298:18;;;32291:62;-1:-1:-1;;;32369:18:14;;;32362:33;32412:19;;15772:82:10;32038:399:14;15772:82:10;-1:-1:-1;;;;;15918:30:10;;15860:13;15918:30;;;:22;:30;;;;;;15896:19;;15876:17;15941:6;15876:9;:17::i;:::-;:39;;;;:::i;:::-;:72;;;;:::i;:::-;15860:88;15699:272;-1:-1:-1;;;15699:272:10:o;10360:93::-;7755:12;:10;:12::i;:::-;10424:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;10424:24:10;;::::1;::::0;;;::::1;::::0;;10360:93::o;16659:264::-;7755:12;:10;:12::i;:::-;16737:31:::1;::::0;-1:-1:-1;;;16737:31:10;;16762:4:::1;16737:31;::::0;::::1;12354:51:14::0;16720:14:10::1;::::0;-1:-1:-1;;;;;16737:16:10;::::1;::::0;::::1;::::0;12327:18:14;;16737:31:10::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16720:48;;16782:6;-1:-1:-1::0;;;;;16782:15:10::1;;16798:7;1101:6:11::0;;-1:-1:-1;;;;;1101:6:11;;1029:85;16798:7:10::1;16782:32;::::0;-1:-1:-1;;;;;;16782:32:10::1;::::0;;;;;;-1:-1:-1;;;;;13101:32:14;;;16782::10::1;::::0;::::1;13083:51:14::0;13150:18;;;13143:34;;;13056:18;;16782:32:10::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16774:88;;;::::0;-1:-1:-1;;;16774:88:10;;18030:2:14;16774:88:10::1;::::0;::::1;18012:21:14::0;18069:2;18049:18;;;18042:30;18108:34;18088:18;;;18081:62;-1:-1:-1;;;18159:18:14;;;18152:41;18210:19;;16774:88:10::1;17828:407:14::0;16774:88:10::1;16911:6;-1:-1:-1::0;;;;;16874:44:10::1;16894:7;1101:6:11::0;;-1:-1:-1;;;;;1101:6:11;;1029:85;16894:7:10::1;-1:-1:-1::0;;;;;16874:44:10::1;;16903:6;16874:44;;;;37708:25:14::0;;37696:2;37681:18;;37562:177;9893:252:10;7755:12;:10;:12::i;:::-;9978:15:::1;::::0;-1:-1:-1;;;9978:15:10;::::1;;;9970:70;;;;-1:-1:-1::0;;;9970:70:10::1;;;;;;;:::i;:::-;10114:12;;;;;;;;;-1:-1:-1::0;;;;;10114:12:10::1;-1:-1:-1::0;;;;;10095:41:10::1;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10081:58;::::0;10087:52:::1;;10081:2;:58;:::i;:::-;10063:77;::::0;:14;:77:::1;:::i;:::-;10046:14;:94:::0;-1:-1:-1;9893:252:10:o;5058:179:3:-;5191:39;5208:4;5214:2;5218:7;5191:39;;;;;;;;;;;;:16;:39::i;8490:666:10:-;8562:16;8588:23;8614:17;8624:6;8614:9;:17::i;:::-;8588:43;;8637:30;8684:15;8670:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8670:30:10;;8637:63;;8706:22;8738:23;8772:353;8797:15;8779;:33;:63;;;;;8833:9;;8816:14;:26;8779:63;8772:353;;;7160:4:3;7183:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7183:16:3;:30;8852:242:10;;8891:25;8919:23;8927:14;8919:7;:23::i;:::-;8891:51;;8978:6;-1:-1:-1;;;;;8957:27:10;:17;-1:-1:-1;;;;;8957:27:10;;8953:133;;;9031:14;8998:13;9012:15;8998:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;9058:17;;;;:::i;:::-;;;;8953:133;8881:213;8852:242;9102:16;;;;:::i;:::-;;;;8772:353;;;-1:-1:-1;9138:13:10;;8490:666;-1:-1:-1;;;;8490:666:10:o;12299:72::-;7755:12;:10;:12::i;:::-;12354:4:::1;:12:::0;12299:72::o;11570:280::-;7755:12;:10;:12::i;:::-;11636:6:::1;::::0;;;::::1;;;11635:7;11627:43;;;;-1:-1:-1::0;;;11627:43:10::1;;;;;;;:::i;:::-;11684:15;::::0;-1:-1:-1;;;11684:15:10;::::1;;;11676:70;;;;-1:-1:-1::0;;;11676:70:10::1;;;;;;;:::i;:::-;11753:15;:23:::0;;-1:-1:-1;;11753:23:10::1;::::0;;;;11788:57:::1;::::0;-1:-1:-1;;;11831:12:10;;::::1;-1:-1:-1::0;;;;;11831:12:10::1;::::0;11788:57:::1;::::0;-1:-1:-1;;11788:57:10::1;11570:280::o:0;12507:179::-;7755:12;:10;:12::i;:::-;12603:6:::1;::::0;;;::::1;;;12602:7;12594:43;;;;-1:-1:-1::0;;;12594:43:10::1;;;;;;;:::i;:::-;12643:38:::0;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;4725:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14742:953::-;1744:1:12;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:12;;36219:2:14;2317:63:12;;;36201:21:14;36258:2;36238:18;;;36231:30;36297:33;36277:18;;;36270:61;36348:18;;2317:63:12;36017:355:14;2317:63:12;1744:1;2455:7;:18;14843:15:10::1;::::0;-1:-1:-1;;;14843:15:10;::::1;;;14835:70;;;;-1:-1:-1::0;;;14835:70:10::1;;;;;;;:::i;:::-;14919:21;::::0;-1:-1:-1;;;14919:21:10;::::1;;;14911:91;;;;-1:-1:-1::0;;;14911:91:10::1;;;;;;;:::i;:::-;15026:24;::::0;;;:14:::1;:24;::::0;;;;;15016:34;::::1;;15008:127;;;::::0;-1:-1:-1;;;15008:127:10;;27012:2:14;15008:127:10::1;::::0;::::1;26994:21:14::0;27051:2;27031:18;;;27024:30;27090:34;27070:18;;;27063:62;27161:34;27141:18;;;27134:62;-1:-1:-1;;;27212:19:14;;;27205:47;27269:19;;15008:127:10::1;26810:484:14::0;15008:127:10::1;15141:18;15182:6;15162:17;:15;:17::i;:::-;:26;;;;:::i;:::-;15246:12;::::0;15141:47;;-1:-1:-1;;;;15246:12:10;::::1;-1:-1:-1::0;;;;;15246:12:10::1;15141:47:::0;15246:12;15273:21:::1;719:10:1::0;15273:35:10::1;::::0;-1:-1:-1;;;;;;15273:35:10::1;::::0;;;;;;-1:-1:-1;;;;;12372:32:14;;;15273:35:10::1;::::0;::::1;12354:51:14::0;12327:18;;15273:35:10::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;15265:107;;;::::0;-1:-1:-1;;;15265:107:10;;27501:2:14;15265:107:10::1;::::0;::::1;27483:21:14::0;27540:2;27520:18;;;27513:30;27579:34;27559:18;;;27552:62;-1:-1:-1;;;27630:18:14;;;27623:43;27683:19;;15265:107:10::1;27299:409:14::0;15265:107:10::1;-1:-1:-1::0;;;;;15386:24:10;::::1;;719:10:1::0;15386:50:10::1;::::0;-1:-1:-1;;;;;;15386:50:10::1;::::0;;;;;;-1:-1:-1;;;;;13101:32:14;;;15386:50:10::1;::::0;::::1;13083:51:14::0;13150:18;;;13143:34;;;13056:18;;15386:50:10::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15378:110;;;::::0;-1:-1:-1;;;15378:110:10;;30707:2:14;15378:110:10::1;::::0;::::1;30689:21:14::0;30746:2;30726:18;;;30719:30;30785:34;30765:18;;;30758:62;-1:-1:-1;;;30836:18:14;;;30829:45;30891:19;;15378:110:10::1;30505:411:14::0;15378:110:10::1;15499:24;::::0;;;:14:::1;:24;::::0;;;;:34;;15527:6;;15499:24;:34:::1;::::0;15527:6;;15499:34:::1;:::i;:::-;;;;;;;;15564:6;15539:21;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;719:10:1;15576:36:10::1;::::0;;;:22:::1;:36;::::0;;;;:46;;15616:6;;15576:36;:46:::1;::::0;15616:6;;15576:46:::1;:::i;:::-;::::0;;;-1:-1:-1;;15665:24:10::1;::::0;;;:14:::1;:24;::::0;;;;;;;15634:56;;15655:8;;15634:56:::1;::::0;::::1;::::0;37708:25:14;;37696:2;37681:18;;37562:177;15634:56:10::1;;;;;;;;-1:-1:-1::0;;1701:1:12;2628:7;:22;-1:-1:-1;;14742:953:10:o;2126:235:3:-;2198:7;2233:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2233:16:3;2267:19;2259:73;;;;-1:-1:-1;;;2259:73:3;;28326:2:14;2259:73:3;;;28308:21:14;28365:2;28345:18;;;28338:30;28404:34;28384:18;;;28377:62;-1:-1:-1;;;28455:18:14;;;28448:39;28504:19;;2259:73:3;28124:405:14;1864:205:3;1936:7;-1:-1:-1;;;;;1963:19:3;;1955:74;;;;-1:-1:-1;;;1955:74:3;;27915:2:14;1955:74:3;;;27897:21:14;27954:2;27934:18;;;27927:30;27993:34;27973:18;;;27966:62;-1:-1:-1;;;28044:18:14;;;28037:40;28094:19;;1955:74:3;27713:406:14;1955:74:3;-1:-1:-1;;;;;;2046:16:3;;;;;:9;:16;;;;;;;1864:205::o;1661:101:11:-;1101:6;;-1:-1:-1;;;;;1101:6:11;719:10:1;1241:23:11;1233:68;;;;-1:-1:-1;;;1233:68:11;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;12690:148:10:-;7755:12;:10;:12::i;:::-;12770:6:::1;::::0;;;::::1;;;12769:7;12761:43;;;;-1:-1:-1::0;;;12761:43:10::1;;;;;;;:::i;:::-;12810:23:::0;;::::1;::::0;:10:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;2585:102:3:-:0;2641:13;2673:7;2666:14;;;;;:::i;5878:26:10:-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;5878:26:10;;;;;;;;;;;;;;;-1:-1:-1;5878:26:10;:::o;18693:235::-;18858:23;;18883:19;;18814:12;18806:117;;18735:13;;;;18767:7;;;;18735:13;;18814:12;;18836:20;;18858:23;18883:19;;;;;18904:18;;18814:12;;18806:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18693:235;;;;;:::o;17361:348::-;17441:13;;-1:-1:-1;;;;;17441:13:10;719:10:1;-1:-1:-1;;;;;17425:29:10;;17417:86;;;;-1:-1:-1;;;17417:86:10;;33046:2:14;17417:86:10;;;33028:21:14;33085:2;33065:18;;;33058:30;33124:34;33104:18;;;33097:62;-1:-1:-1;;;33175:18:14;;;33168:42;33227:19;;17417:86:10;32844:408:14;17417:86:10;1101:6:11;;-1:-1:-1;;;;;17517:19:10;;;1101:6:11;;17517:19:10;;17509:74;;;;-1:-1:-1;;;17509:74:10;;19607:2:14;17509:74:10;;;19589:21:14;19646:2;19626:18;;;19619:30;19685:34;19665:18;;;19658:62;-1:-1:-1;;;19736:18:14;;;19729:40;19786:19;;17509:74:10;19405:406:14;17509:74:10;17609:13;;-1:-1:-1;;;;;17597:25:10;;;17609:13;;17597:25;;17589:80;;;;-1:-1:-1;;;17589:80:10;;37353:2:14;17589:80:10;;;37335:21:14;37392:2;37372:18;;;37365:30;37431:34;37411:18;;;37404:62;-1:-1:-1;;;37482:18:14;;;37475:40;37532:19;;17589:80:10;37151:406:14;17589:80:10;17676:28;17695:8;17676:18;:28::i;7877:450::-;7942:11;7557:28;7573:11;7557:15;:28::i;:::-;7970:6:::1;::::0;::::1;;7969:7;7961:43;;;::::0;-1:-1:-1;;;7961:43:10;;31484:2:14;7961:43:10::1;::::0;::::1;31466:21:14::0;31523:2;31503:18;;;31496:30;31562:25;31542:18;;;31535:53;31605:18;;7961:43:10::1;31282:347:14::0;7961:43:10::1;1101:6:11::0;;-1:-1:-1;;;;;1101:6:11;719:10:1;8014:23:10::1;8010:270;;8051:15;::::0;;;::::1;;;:23;;8070:4;8051:23;8047:156;;;719:10:1::0;8111:23:10::1;::::0;;;:9:::1;:23;::::0;;;;;8096:38;::::1;;8088:106;;;::::0;-1:-1:-1;;;8088:106:10;;23849:2:14;8088:106:10::1;::::0;::::1;23831:21:14::0;23888:2;23868:18;;;23861:30;23927:34;23907:18;;;23900:62;23998:25;23978:18;;;23971:53;24041:19;;8088:106:10::1;23647:419:14::0;8088:106:10::1;8238:11;8231:4;;:18;;;;:::i;:::-;8218:9;:31;;8210:63;;;::::0;-1:-1:-1;;;8210:63:10;;37005:2:14;8210:63:10::1;::::0;::::1;36987:21:14::0;37044:2;37024:18;;;37017:30;-1:-1:-1;;;37063:18:14;;;37056:49;37122:18;;8210:63:10::1;36803:343:14::0;8210:63:10::1;8286:36;719:10:1::0;8310:11:10::1;8286:9;:36::i;4219:153:3:-:0;4313:52;719:10:1;4346:8:3;4356;4313:18;:52::i;14452:286:10:-;14523:15;;14500:7;;-1:-1:-1;;;14523:15:10;;;;14515:70;;;;-1:-1:-1;;;14515:70:10;;;;;;;:::i;:::-;14599:21;;-1:-1:-1;;;14599:21:10;;;;14591:91;;;;-1:-1:-1;;;14591:91:10;;;;;;;:::i;:::-;14712:21;;14695:14;;:38;;;;:::i;4762:89::-;;;;;;;:::i;9639:142::-;1101:6:11;;-1:-1:-1;;;;;1101:6:11;719:10:1;1241:23:11;1233:68;;;;-1:-1:-1;;;1233:68:11;;;;;;;:::i;:::-;9713:6:10::1;::::0;;;::::1;;;9712:7;9704:43;;;;-1:-1:-1::0;;;9704:43:10::1;;;;;;;:::i;:::-;9753:13;:23:::0;;-1:-1:-1;;;;;;9753:23:10::1;-1:-1:-1::0;;;;;9753:23:10;;;::::1;::::0;;;::::1;::::0;;9639:142::o;10903:267::-;10962:6;;;;;;;10954:46;;;;-1:-1:-1;;;10954:46:10;;28736:2:14;10954:46:10;;;28718:21:14;28775:2;28755:18;;;28748:30;28814:29;28794:18;;;28787:57;28861:18;;10954:46:10;28534:351:14;10954:46:10;719:10:1;11014:17:10;11022:8;11014:7;:17::i;:::-;-1:-1:-1;;;;;11014:33:10;;:60;;;-1:-1:-1;1101:6:11;;-1:-1:-1;;;;;1101:6:11;719:10:1;11051:23:10;11014:60;11006:106;;;;-1:-1:-1;;;11006:106:10;;18852:2:14;11006:106:10;;;18834:21:14;18891:2;18871:18;;;18864:30;18930:34;18910:18;;;18903:62;-1:-1:-1;;;18981:18:14;;;18974:31;19022:19;;11006:106:10;18650:397:14;11006:106:10;11156:8;11123:42;11136:18;11145:8;11136;:18::i;:::-;11123:42;;;;;;:::i;:::-;;;;;;;;10903:267;:::o;12375:128::-;7755:12;:10;:12::i;:::-;12458:18:::1;:40:::0;12375:128::o;19733:221::-;19826:20;:27;19793:7;;19816:37;;19808:101;;;;-1:-1:-1;;;19808:101:10;;;;;;;:::i;:::-;19922:18;:27;;19941:7;;19922:27;;;;;;:::i;:::-;;;;;;;;;19915:34;;19733:221;;;:::o;5303:320:3:-;5472:41;719:10:1;5505:7:3;5472:18;:41::i;:::-;5464:103;;;;-1:-1:-1;;;5464:103:3;;;;;;;:::i;:::-;5577:39;5591:4;5597:2;5601:7;5610:5;5577:13;:39::i;:::-;5303:320;;;;:::o;20300:139:10:-;7755:12;:10;:12::i;:::-;20421::::1;::::0;20386:48:::1;::::0;20407:12;;-1:-1:-1;;;20421:12:10;::::1;-1:-1:-1::0;;;;;20421:12:10::1;20386:20;:48::i;18430:259::-:0;7755:12;:10;:12::i;:::-;18482:19;;::::1;;:27;;:19:::0;:27:::1;18474:64;;;::::0;-1:-1:-1;;;18474:64:10;;19254:2:14;18474:64:10::1;::::0;::::1;19236:21:14::0;19293:2;19273:18;;;19266:30;-1:-1:-1;;;19312:18:14;;;19305:54;19376:18;;18474:64:10::1;19052:348:14::0;18474:64:10::1;18545:19:::0;:27;;-1:-1:-1;;18545:27:10::1;::::0;;18584:100:::1;::::0;::::1;::::0;18545:12:::1;::::0;18584:100:::1;:::i;:::-;;::::0;;;;::::1;::::0;;18640:23;;18584:100;;::::1;::::0;::::1;::::0;18618:20;;18640:23;18665:18;;18584:100:::1;:::i;:::-;;;;;;;;18430:259::o:0;9160:475::-;7160:4:3;7183:16;;;:7;:16;;;;;;9254:13:10;;-1:-1:-1;;;;;7183:16:3;9277:96:10;;;;-1:-1:-1;;;9277:96:10;;22673:2:14;9277:96:10;;;22655:21:14;22712:2;22692:18;;;22685:30;22751:34;22731:18;;;22724:62;-1:-1:-1;;;22802:18:14;;;22795:46;22858:19;;9277:96:10;22471:412:14;9277:96:10;9384:8;;;;;;;9380:62;;9418:17;9411:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9160:475;;;:::o;9380:62::-;9448:28;9479:10;:8;:10::i;:::-;9448:41;;9533:1;9508:14;9502:28;:32;:128;;;;;;;;;;;;;;;;;9569:14;9585:19;9595:8;9585:9;:19::i;:::-;9606:9;9552:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9495:135;9160:475;-1:-1:-1;;;9160:475:10:o;11963:218::-;7755:12;:10;:12::i;:::-;12073:9:::1;12068:109;12088:21:::0;;::::1;12068:109;;;12153:17;12126:9;:24;12136:10;;12147:1;12136:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12126:24:10::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12126:24:10;:44;12111:3;::::1;::::0;::::1;:::i;:::-;;;;12068:109;;10228:128:::0;7755:12;:10;:12::i;:::-;10294:6:::1;::::0;;;::::1;;;10293:7;10285:43;;;;-1:-1:-1::0;;;10285:43:10::1;;;;;;;:::i;:::-;10334:8;:17:::0;;;::::1;;;;-1:-1:-1::0;;10334:17:10;;::::1;::::0;;;::::1;::::0;;10228:128::o;10597:302::-;7755:12;:10;:12::i;:::-;10708:15:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;10708:15:10::1;::::0;;::::1;::::0;10668:26;;;;::::1;::::0;10698;10668:56:::1;10660:97;;;::::0;-1:-1:-1;;;10660:97:10;;17673:2:14;10660:97:10::1;::::0;::::1;17655:21:14::0;17712:2;17692:18;;;17685:30;17751;17731:18;;;17724:58;17799:18;;10660:97:10::1;17471:352:14::0;10660:97:10::1;10771:8;::::0;::::1;::::0;::::1;;;10763:50;;;::::0;-1:-1:-1;;;10763:50:10;;24273:2:14;10763:50:10::1;::::0;::::1;24255:21:14::0;24312:2;24292:18;;;24285:30;24351:31;24331:18;;;24324:59;24400:18;;10763:50:10::1;24071:353:14::0;10763:50:10::1;10828:6;::::0;;;::::1;;;10827:7;10819:51;;;::::0;-1:-1:-1;;;10819:51:10;;20437:2:14;10819:51:10::1;::::0;::::1;20419:21:14::0;20476:2;20456:18;;;20449:30;20515:33;20495:18;;;20488:61;20566:18;;10819:51:10::1;20235:355:14::0;10819:51:10::1;-1:-1:-1::0;10881:6:10::1;:13:::0;;-1:-1:-1;;10881:13:10::1;::::0;::::1;::::0;;10597:302::o;16381:274::-;7755:12;:10;:12::i;:::-;16446:21:::1;16429:14;16497:7;1101:6:11::0;;-1:-1:-1;;;;;1101:6:11;;1029:85;16497:7:10::1;-1:-1:-1::0;;;;;16489:21:10::1;16518:6;16489:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16474:55;;;16543:3;16535:73;;;::::0;-1:-1:-1;;;16535:73:10;;29092:2:14;16535:73:10::1;::::0;::::1;29074:21:14::0;29131:2;29111:18;;;29104:30;29170:34;29150:18;;;29143:62;29241:27;29221:18;;;29214:55;29286:19;;16535:73:10::1;28890:421:14::0;16535:73:10::1;1101:6:11::0;;-1:-1:-1;;;;;1101:6:11;-1:-1:-1;;;;;16619:31:10::1;;16643:6;16619:31;;;;37708:25:14::0;;37696:2;37681:18;;37562:177;4438:162:3;-1:-1:-1;;;;;4558:25:3;;;4535:4;4558:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4438:162::o;8333:153:10:-;8419:11;7557:28;7573:11;7557:15;:28::i;:::-;7755:12:::1;:10;:12::i;:::-;8448:33:::2;8458:9;8469:11;8448:9;:33::i;1911:198:11:-:0;1101:6;;-1:-1:-1;;;;;1101:6:11;719:10:1;1241:23:11;1233:68;;;;-1:-1:-1;;;1233:68:11;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:11;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:11;;20797:2:14;1991:73:11::1;::::0;::::1;20779:21:14::0;20836:2;20816:18;;;20809:30;20875:34;20855:18;;;20848:62;-1:-1:-1;;;20926:18:14;;;20919:36;20972:19;;1991:73:11::1;20595:402:14::0;9785:104:10;7755:12;:10;:12::i;:::-;9856:14:::1;:28:::0;9785:104::o;7601:123::-;1101:6:11;;-1:-1:-1;;;;;1101:6:11;719:10:1;7650:23:10;7642:77;;;;-1:-1:-1;;;7642:77:10;;34580:2:14;7642:77:10;;;34562:21:14;34619:2;34599:18;;;34592:30;34658:34;34638:18;;;34631:62;-1:-1:-1;;;34709:18:14;;;34702:39;34758:19;;7642:77:10;34378:405:14;20443:1308:10;1744:1:12;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:12;;36219:2:14;2317:63:12;;;36201:21:14;36258:2;36238:18;;;36231:30;36297:33;36277:18;;;36270:61;36348:18;;2317:63:12;36017:355:14;2317:63:12;1744:1;2455:7;:18;20543:12:10::1;::::0;-1:-1:-1;;;;;20543:22:10;;::::1;-1:-1:-1::0;;;20543:12:10;;::::1;;:22;:46:::0;::::1;;;-1:-1:-1::0;;;;;;20569:20:10;::::1;::::0;::::1;20543:46;20539:137;;;20607:15;::::0;-1:-1:-1;;;20607:15:10;::::1;;;20599:70;;;;-1:-1:-1::0;;;20599:70:10::1;;;;;;;:::i;:::-;20704:1;20689:12;:16;20681:63;;;;-1:-1:-1::0;;;20681:63:10::1;;;;;;;:::i;:::-;20770:12:::0;20750:17:::1;::::0;20816:14:::1;:12;:14::i;:::-;20802:28;;20841:9;20836:574;20860:11;;20856:1;:15;20836:574;;;20886:13;20902:8;20911:1;20902:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;20976:10:::1;::::0;-1:-1:-1;;;;;20902:11:10;;::::1;::::0;-1:-1:-1;20953:20:10::1;20902:11:::0;20969:3;20953:8:::1;:20::i;:::-;20938:35;::::0;:12;:35:::1;:::i;:::-;:48;;;;:::i;:::-;20921:65;;21008:9;20998:6;:19;;:33;;;;;21030:1;21021:6;:10;20998:33;20994:410;;;-1:-1:-1::0;;;;;21047:20:10;::::1;21043:293;;21091:38;::::0;-1:-1:-1;;;;;21091:19:10;::::1;::::0;21118:6;;21091:38:::1;::::0;;;21118:6;21091:19;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21081:48;;;;;21043:293;;;21160:12;::::0;-1:-1:-1;;;;;21150:22:10;;::::1;-1:-1:-1::0;;;21160:12:10;;::::1;;21150:22;21146:190;;;21211:12;::::0;21192:60:::1;::::0;-1:-1:-1;;;21192:60:10;;-1:-1:-1;;;;;13101:32:14;;;21192:60:10::1;::::0;::::1;13083:51:14::0;13150:18;;;13143:34;;;-1:-1:-1;;;21211:12:10;;::::1;::::0;;::::1;::::0;21192:45:::1;::::0;13056:18:14;;21192:60:10::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21186:66;;21146:190;;;21287:38;::::0;-1:-1:-1;;;21287:38:10;;-1:-1:-1;;;;;13101:32:14;;;21287:38:10::1;::::0;::::1;13083:51:14::0;13150:18;;;13143:34;;;21287:23:10;::::1;::::0;::::1;::::0;13056:18:14;;21287:38:10::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21281:44;;21146:190;21349:3;21345:51;;;21366:19;21379:6:::0;21366:19;::::1;:::i;:::-;;;21345:51;20878:532;;20873:3;;;;;:::i;:::-;;;;20836:574;;;-1:-1:-1::0;;;;;;21420:20:10;::::1;21416:331;;21455:46;21476:24;21491:9:::0;21476:12;:24:::1;:::i;:::-;21455:46;::::0;37708:25:14;;;37696:2;37681:18;21455:46:10::1;;;;;;;21416:331;;;21528:12;::::0;-1:-1:-1;;;;;21518:22:10;;::::1;-1:-1:-1::0;;;21528:12:10;;::::1;;21518:22;21514:233;;;21633:12;::::0;-1:-1:-1;;;21633:12:10;::::1;-1:-1:-1::0;;;;;21633:12:10::1;21555:92;21588:24;21603:9:::0;21588:12;:24:::1;:::i;:::-;21555:92;::::0;37708:25:14;;;37696:2;37681:18;21555:92:10::1;;;;;;;21514:233;;;-1:-1:-1::0;;;;;21673:67:10;::::1;;21699:24;21714:9:::0;21699:12;:24:::1;:::i;:::-;21673:67;::::0;37708:25:14;;;37696:2;37681:18;21673:67:10::1;;;;;;;21514:233;-1:-1:-1::0;;1701:1:12;2628:7;:22;-1:-1:-1;;;20443:1308:10:o;11104:171:3:-;11178:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11178:29:3;-1:-1:-1;;;;;11178:29:3;;;;;;;;:24;;11231:23;11178:24;11231:14;:23::i;:::-;-1:-1:-1;;;;;11222:46:3;;;;;;;;;;;11104:171;;:::o;7378:344::-;7471:4;7183:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7183:16:3;7487:73;;;;-1:-1:-1;;;7487:73:3;;24990:2:14;7487:73:3;;;24972:21:14;25029:2;25009:18;;;25002:30;25068:34;25048:18;;;25041:62;-1:-1:-1;;;25119:18:14;;;25112:42;25171:19;;7487:73:3;24788:408:14;7487:73:3;7570:13;7586:23;7601:7;7586:14;:23::i;:::-;7570:39;;7638:5;-1:-1:-1;;;;;7627:16:3;:7;-1:-1:-1;;;;;7627:16:3;;:52;;;;7647:32;7664:5;7671:7;7647:16;:32::i;:::-;7627:87;;;;7707:7;-1:-1:-1;;;;;7683:31:3;:20;7695:7;7683:11;:20::i;:::-;-1:-1:-1;;;;;7683:31:3;;7619:96;7378:344;-1:-1:-1;;;;7378:344:3:o;10388:605::-;10542:4;-1:-1:-1;;;;;10515:31:3;:23;10530:7;10515:14;:23::i;:::-;-1:-1:-1;;;;;10515:31:3;;10507:81;;;;-1:-1:-1;;;10507:81:3;;21204:2:14;10507:81:3;;;21186:21:14;21243:2;21223:18;;;21216:30;21282:34;21262:18;;;21255:62;-1:-1:-1;;;21333:18:14;;;21326:35;21378:19;;10507:81:3;21002:401:14;10507:81:3;-1:-1:-1;;;;;10606:16:3;;10598:65;;;;-1:-1:-1;;;10598:65:3;;23090:2:14;10598:65:3;;;23072:21:14;23129:2;23109:18;;;23102:30;23168:34;23148:18;;;23141:62;-1:-1:-1;;;23219:18:14;;;23212:34;23263:19;;10598:65:3;22888:400:14;10598:65:3;10674:39;10695:4;10701:2;10705:7;10674:20;:39::i;:::-;10775:29;10792:1;10796:7;10775:8;:29::i;:::-;-1:-1:-1;;;;;10815:15:3;;;;;;:9;:15;;;;;:20;;10834:1;;10815:15;:20;;10834:1;;10815:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10845:13:3;;;;;;:9;:13;;;;;:18;;10862:1;;10845:13;:18;;10862:1;;10845:18;:::i;:::-;;;;-1:-1:-1;;10873:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10873:21:3;-1:-1:-1;;;;;10873:21:3;;;;;;;;;10910:27;;10873:16;;10910:27;;;;;;;3543:331;3473:401;;:::o;2263:187:11:-;2355:6;;;-1:-1:-1;;;;;2371:17:11;;;-1:-1:-1;;;;;;2371:17:11;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;7266:236:10:-;7353:1;7339:11;:15;:52;;;;;7373:18;;7358:11;:33;;7339:52;7331:85;;;;-1:-1:-1;;;7331:85:10;;21967:2:14;7331:85:10;;;21949:21:14;22006:2;21986:18;;;21979:30;-1:-1:-1;;;22025:18:14;;;22018:50;22085:18;;7331:85:10;21765:344:14;7331:85:10;7462:9;;7443:11;7430:6;;:25;;;;:::i;:::-;:42;7422:75;;;;-1:-1:-1;;;7422:75:10;;33459:2:14;7422:75:10;;;33441:21:14;33498:2;33478:18;;;33471:30;-1:-1:-1;;;33517:18:14;;;33510:50;33577:18;;7422:75:10;33257:344:14;12993:307:10;1101:6:11;;-1:-1:-1;;;;;1101:6:11;719:10:1;13071:23:10;;;;:50;;-1:-1:-1;13098:15:10;;;;;;;:23;;13117:4;13098:23;13071:50;13067:109;;;719:10:1;13131:23:10;;;;:9;:23;;;;;:38;;13158:11;;13131:23;:38;;13158:11;;13131:38;:::i;:::-;;;;-1:-1:-1;;13067:109:10;13191:9;13186:110;13210:11;13206:1;:15;13186:110;;;13236:6;:8;;;:6;:8;;;:::i;:::-;;;;;;13252:37;13262:9;13281:6;;13252:9;:37::i;:::-;13223:3;;;;:::i;:::-;;;;13186:110;;11410:307:3;11560:8;-1:-1:-1;;;;;11551:17:3;:5;-1:-1:-1;;;;;11551:17:3;;;11543:55;;;;-1:-1:-1;;;11543:55:3;;23495:2:14;11543:55:3;;;23477:21:14;23534:2;23514:18;;;23507:30;23573:27;23553:18;;;23546:55;23618:18;;11543:55:3;23293:349:14;11543:55:3;-1:-1:-1;;;;;11608:25:3;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;11608:46:3;;;;;;;;;;11669:41;;15360::14;;;11669::3;;15333:18:14;11669:41:3;;;;;;;11410:307;;;:::o;6485:::-;6636:28;6646:4;6652:2;6656:7;6636:9;:28::i;:::-;6682:48;6705:4;6711:2;6715:7;6724:5;6682:22;:48::i;:::-;6674:111;;;;-1:-1:-1;;;6674:111:3;;;;;;;:::i;13304:103:10:-;13364:13;13392:10;13385:17;;;;;:::i;21921:456::-;21979:13;22004:11;22000:44;;-1:-1:-1;;22027:10:10;;;;;;;;;;;;-1:-1:-1;;;22027:10:10;;;;;21921:456::o;22000:44::-;22064:6;22049:12;22096:63;22103:9;;22096:63;;22124:8;;;;:::i;:::-;;-1:-1:-1;22142:10:10;;-1:-1:-1;22150:2:10;22142:10;;:::i;:::-;;;22096:63;;;22164:19;22196:6;22186:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22186:17:10;;22164:39;;22209:137;22216:11;;22209:137;;22239:11;22249:1;22239:11;;:::i;:::-;;-1:-1:-1;22303:11:10;22312:2;22303:6;:11;:::i;:::-;22290:25;;:2;:25;:::i;:::-;22277:40;;22260:6;22267;22260:14;;;;;;;;:::i;:::-;;;;:57;-1:-1:-1;;;;;22260:57:10;;;;;;;;-1:-1:-1;22327:12:10;22337:2;22327:12;;:::i;:::-;;;22209:137;;21755:162;21825:7;21840:13;21878:10;;21856:19;21868:6;21856:11;:19::i;:::-;:32;;;;:::i;:::-;21840:48;-1:-1:-1;21901:11:10;21909:3;21840:48;21901:11;:::i;13411:913::-;-1:-1:-1;;;;;13582:19:10;;;13578:219;;13644:24;;;;:14;:24;;;;;;;;;-1:-1:-1;;;;;13611:29:10;;;;:22;:29;;;;;:57;;13644:24;;13611:29;;:57;;13644:24;;13611:57;:::i;:::-;;;;-1:-1:-1;13680:16:10;;-1:-1:-1;13690:5:10;13680:9;:16::i;:::-;13700:1;13680:21;13676:66;;;13713:20;13727:5;13713:13;:20::i;:::-;13578:219;;;13789:1;13762:24;;;:14;:24;;;;;:28;13578:219;13807:24;;;;:14;:24;;;;;:26;;;;;;:::i;:::-;;;;-1:-1:-1;;13839:21:10;:23;;;:21;:23;;;:::i;:::-;;;;-1:-1:-1;;;;;;;13873:17:10;;;13869:208;;13931:24;;;;:14;:24;;;;;;;;;-1:-1:-1;;;;;13900:27:10;;;;:22;:27;;;;;:55;;13931:24;;13900:27;;:55;;13931:24;;13900:55;:::i;:::-;;;;-1:-1:-1;13967:14:10;;-1:-1:-1;13977:3:10;13967:9;:14::i;:::-;13963:59;;13998:15;14009:3;13998:10;:15::i;:::-;13869:208;;;14069:1;14042:24;;;:14;:24;;;;;:28;13869:208;14114:19;;14087:24;;;;:14;:24;;;;;;:46;14083:169;;;14165:24;;;;:14;:24;;;;;;;14143:19;:46;14203:42;14180:8;;-1:-1:-1;;;;;14203:42:10;;;;;;;;;;;14083:169;14284:8;14263:56;14294:14;:24;14309:8;14294:24;;;;;;;;;;;;14263:56;;;;37708:25:14;;37696:2;37681:18;;37562:177;14263:56:10;;;;;;;;13411:913;;;:::o;8052:108:3:-;8127:26;8137:2;8141:7;8127:26;;;;;;;;;;;;:9;:26::i;12270:778::-;12420:4;-1:-1:-1;;;;;12440:13:3;;1465:19:0;:23;12436:606:3;;12475:72;;-1:-1:-1;;;12475:72:3;;-1:-1:-1;;;;;12475:36:3;;;;;:72;;719:10:1;;12526:4:3;;12532:7;;12541:5;;12475:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12475:72:3;;;;;;;;-1:-1:-1;;12475:72:3;;;;;;;;;;;;:::i;:::-;;;12471:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12714:13:3;;12710:266;;12756:60;;-1:-1:-1;;;12756:60:3;;;;;;;:::i;12710:266::-;12928:6;12922:13;12913:6;12909:2;12905:15;12898:38;12471:519;-1:-1:-1;;;;;;12597:51:3;-1:-1:-1;;;12597:51:3;;-1:-1:-1;12590:58:3;;12436:606;-1:-1:-1;13027:4:3;12270:778;;;;;;:::o;22381:269:10:-;-1:-1:-1;;;;;22452:23:10;;22436:13;22452:23;;;:14;:23;;;;;;22509:11;;22500:8;;22509:15;;22523:1;;22509:15;:::i;:::-;22500:25;;;;;;;;:::i;:::-;;;;;;;;;;;22482:8;:15;;-1:-1:-1;;;;;22500:25:10;;;;22491:5;;22482:15;;;;;;:::i;:::-;;;;;;;;;:43;;;;;-1:-1:-1;;;;;22482:43:10;;;;;-1:-1:-1;;;;;22482:43:10;;;;;;22565:5;22531:14;:31;22546:8;22555:5;22546:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22546:15:10;22531:31;;;;;;;;;;;;:39;22576:8;:14;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;22576:14:10;;;;;-1:-1:-1;;;;;;22576:14:10;;;;;;;;;-1:-1:-1;;;;;22596:23:10;;;;:14;:23;;;;;:27;;;22629:11;:16;;22576:14;;;22629:16;;22576:14;;22629:16;:::i;:::-;;;;-1:-1:-1;;;;22381:269:10:o;22654:144::-;22706:8;:22;;;;;;;;;;;;;-1:-1:-1;;;;;;22706:22:10;-1:-1:-1;;;;;22706:22:10;;;;;;;;22760:11;;;-1:-1:-1;22734:23:10;;;:14;22706:22;22734:23;;;;:37;;;22760:11;;-1:-1:-1;22777:16:10;;22706:22;;22777:16;:::i;:::-;;;;-1:-1:-1;;;22654:144:10:o;8381:311:3:-;8506:18;8512:2;8516:7;8506:5;:18::i;:::-;8555:54;8586:1;8590:2;8594:7;8603:5;8555:22;:54::i;:::-;8534:151;;;;-1:-1:-1;;;8534:151:3;;;;;;;:::i;9014:427::-;-1:-1:-1;;;;;9093:16:3;;9085:61;;;;-1:-1:-1;;;9085:61:3;;29933:2:14;9085:61:3;;;29915:21:14;;;29952:18;;;29945:30;30011:34;29991:18;;;29984:62;30063:18;;9085:61:3;29731:356:14;9085:61:3;7160:4;7183:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7183:16:3;:30;9156:58;;;;-1:-1:-1;;;9156:58:3;;21610:2:14;9156:58:3;;;21592:21:14;21649:2;21629:18;;;21622:30;21688;21668:18;;;21661:58;21736:18;;9156:58:3;21408:352:14;9156:58:3;9225:45;9254:1;9258:2;9262:7;9225:20;:45::i;:::-;-1:-1:-1;;;;;9281:13:3;;;;;;:9;:13;;;;;:18;;9298:1;;9281:13;:18;;9298:1;;9281:18;:::i;:::-;;;;-1:-1:-1;;9309:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9309:21:3;-1:-1:-1;;;;;9309:21:3;;;;;;;;9346:33;;9309:16;;;9346:33;;9309:16;;9346:33;12962:22:10::1;12842:147:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;14:406:14:-;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:14;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:221::-;468:5;521:3;514:4;506:6;502:17;498:27;488:55;;539:1;536;529:12;488:55;561:79;636:3;627:6;614:20;607:4;599:6;595:17;561:79;:::i;651:247::-;710:6;763:2;751:9;742:7;738:23;734:32;731:52;;;779:1;776;769:12;731:52;818:9;805:23;837:31;862:5;837:31;:::i;903:388::-;971:6;979;1032:2;1020:9;1011:7;1007:23;1003:32;1000:52;;;1048:1;1045;1038:12;1000:52;1087:9;1074:23;1106:31;1131:5;1106:31;:::i;:::-;1156:5;-1:-1:-1;1213:2:14;1198:18;;1185:32;1226:33;1185:32;1226:33;:::i;:::-;1278:7;1268:17;;;903:388;;;;;:::o;1296:456::-;1373:6;1381;1389;1442:2;1430:9;1421:7;1417:23;1413:32;1410:52;;;1458:1;1455;1448:12;1410:52;1497:9;1484:23;1516:31;1541:5;1516:31;:::i;:::-;1566:5;-1:-1:-1;1623:2:14;1608:18;;1595:32;1636:33;1595:32;1636:33;:::i;:::-;1296:456;;1688:7;;-1:-1:-1;;;1742:2:14;1727:18;;;;1714:32;;1296:456::o;1757:794::-;1852:6;1860;1868;1876;1929:3;1917:9;1908:7;1904:23;1900:33;1897:53;;;1946:1;1943;1936:12;1897:53;1985:9;1972:23;2004:31;2029:5;2004:31;:::i;:::-;2054:5;-1:-1:-1;2111:2:14;2096:18;;2083:32;2124:33;2083:32;2124:33;:::i;:::-;2176:7;-1:-1:-1;2230:2:14;2215:18;;2202:32;;-1:-1:-1;2285:2:14;2270:18;;2257:32;2312:18;2301:30;;2298:50;;;2344:1;2341;2334:12;2298:50;2367:22;;2420:4;2412:13;;2408:27;-1:-1:-1;2398:55:14;;2449:1;2446;2439:12;2398:55;2472:73;2537:7;2532:2;2519:16;2514:2;2510;2506:11;2472:73;:::i;:::-;2462:83;;;1757:794;;;;;;;:::o;2556:382::-;2621:6;2629;2682:2;2670:9;2661:7;2657:23;2653:32;2650:52;;;2698:1;2695;2688:12;2650:52;2737:9;2724:23;2756:31;2781:5;2756:31;:::i;:::-;2806:5;-1:-1:-1;2863:2:14;2848:18;;2835:32;2876:30;2835:32;2876:30;:::i;2943:315::-;3011:6;3019;3072:2;3060:9;3051:7;3047:23;3043:32;3040:52;;;3088:1;3085;3078:12;3040:52;3127:9;3114:23;3146:31;3171:5;3146:31;:::i;:::-;3196:5;3248:2;3233:18;;;;3220:32;;-1:-1:-1;;;2943:315:14:o;3263:689::-;3358:6;3366;3374;3427:2;3415:9;3406:7;3402:23;3398:32;3395:52;;;3443:1;3440;3433:12;3395:52;3483:9;3470:23;3512:18;3553:2;3545:6;3542:14;3539:34;;;3569:1;3566;3559:12;3539:34;3607:6;3596:9;3592:22;3582:32;;3652:7;3645:4;3641:2;3637:13;3633:27;3623:55;;3674:1;3671;3664:12;3623:55;3714:2;3701:16;3740:2;3732:6;3729:14;3726:34;;;3756:1;3753;3746:12;3726:34;3811:7;3804:4;3794:6;3791:1;3787:14;3783:2;3779:23;3775:34;3772:47;3769:67;;;3832:1;3829;3822:12;3769:67;3863:4;3855:13;;;;3887:6;;-1:-1:-1;3925:20:14;;;;3912:34;;3263:689;-1:-1:-1;;;;3263:689:14:o;3957:241::-;4013:6;4066:2;4054:9;4045:7;4041:23;4037:32;4034:52;;;4082:1;4079;4072:12;4034:52;4121:9;4108:23;4140:28;4162:5;4140:28;:::i;4203:245::-;4270:6;4323:2;4311:9;4302:7;4298:23;4294:32;4291:52;;;4339:1;4336;4329:12;4291:52;4371:9;4365:16;4390:28;4412:5;4390:28;:::i;4453:245::-;4511:6;4564:2;4552:9;4543:7;4539:23;4535:32;4532:52;;;4580:1;4577;4570:12;4532:52;4619:9;4606:23;4638:30;4662:5;4638:30;:::i;4703:249::-;4772:6;4825:2;4813:9;4804:7;4800:23;4796:32;4793:52;;;4841:1;4838;4831:12;4793:52;4873:9;4867:16;4892:30;4916:5;4892:30;:::i;5224:322::-;5293:6;5346:2;5334:9;5325:7;5321:23;5317:32;5314:52;;;5362:1;5359;5352:12;5314:52;5402:9;5389:23;5435:18;5427:6;5424:30;5421:50;;;5467:1;5464;5457:12;5421:50;5490;5532:7;5523:6;5512:9;5508:22;5490:50;:::i;5551:1335::-;5664:6;5672;5725:2;5713:9;5704:7;5700:23;5696:32;5693:52;;;5741:1;5738;5731:12;5693:52;5781:9;5768:23;5810:18;5851:2;5843:6;5840:14;5837:34;;;5867:1;5864;5857:12;5837:34;5890:50;5932:7;5923:6;5912:9;5908:22;5890:50;:::i;:::-;5880:60;;5959:2;5949:12;;6014:2;6003:9;5999:18;5986:32;6043:2;6033:8;6030:16;6027:36;;;6059:1;6056;6049:12;6027:36;6082:24;;6137:4;6129:13;;6125:27;-1:-1:-1;6115:55:14;;6166:1;6163;6156:12;6115:55;6202:2;6189:16;6224:2;6220;6217:10;6214:36;;;6230:18;;:::i;:::-;6276:2;6273:1;6269:10;6299:28;6323:2;6319;6315:11;6299:28;:::i;:::-;6361:15;;;6392:12;;;;6424:11;;;6454;;;6450:20;;6447:33;-1:-1:-1;6444:53:14;;;6493:1;6490;6483:12;6444:53;6515:1;6506:10;;6536:1;6546:310;6562:2;6557:3;6554:11;6546:310;;;6643:3;6630:17;6679:2;6666:11;6663:19;6660:39;;;6695:1;6692;6685:12;6660:39;6724:57;6773:7;6768:2;6754:11;6750:2;6746:20;6742:29;6724:57;:::i;:::-;6712:70;;-1:-1:-1;6802:12:14;;;;6834;;;;6584:1;6575:11;6546:310;;;-1:-1:-1;5551:1335:14;;6875:5;;-1:-1:-1;5551:1335:14;-1:-1:-1;;;;;;;;;5551:1335:14:o;6891:180::-;6950:6;7003:2;6991:9;6982:7;6978:23;6974:32;6971:52;;;7019:1;7016;7009:12;6971:52;-1:-1:-1;7042:23:14;;6891:180;-1:-1:-1;6891:180:14:o;7076:184::-;7146:6;7199:2;7187:9;7178:7;7174:23;7170:32;7167:52;;;7215:1;7212;7205:12;7167:52;-1:-1:-1;7238:16:14;;7076:184;-1:-1:-1;7076:184:14:o;7265:315::-;7333:6;7341;7394:2;7382:9;7373:7;7369:23;7365:32;7362:52;;;7410:1;7407;7400:12;7362:52;7446:9;7433:23;7423:33;;7506:2;7495:9;7491:18;7478:32;7519:31;7544:5;7519:31;:::i;7585:248::-;7653:6;7661;7714:2;7702:9;7693:7;7689:23;7685:32;7682:52;;;7730:1;7727;7720:12;7682:52;-1:-1:-1;;7753:23:14;;;7823:2;7808:18;;;7795:32;;-1:-1:-1;7585:248:14:o;7838:273::-;7906:6;7959:2;7947:9;7938:7;7934:23;7930:32;7927:52;;;7975:1;7972;7965:12;7927:52;8007:9;8001:16;8057:4;8050:5;8046:16;8039:5;8036:27;8026:55;;8077:1;8074;8067:12;8116:615;8168:3;8206:5;8200:12;8233:6;8228:3;8221:19;8259:4;8300:2;8295:3;8291:12;8325:11;8352;8345:18;;8402:6;8399:1;8395:14;8388:5;8384:26;8372:38;;8444:2;8437:5;8433:14;8465:1;8475:230;8489:6;8486:1;8483:13;8475:230;;;8560:5;8554:4;8550:16;8545:3;8538:29;8588:37;8620:4;8611:6;8605:13;8588:37;:::i;:::-;8683:12;;;;8580:45;-1:-1:-1;8648:15:14;;;;8511:1;8504:9;8475:230;;;-1:-1:-1;8721:4:14;;8116:615;-1:-1:-1;;;;;;;8116:615:14:o;8736:435::-;8789:3;8827:5;8821:12;8854:6;8849:3;8842:19;8880:4;8909:2;8904:3;8900:12;8893:19;;8946:2;8939:5;8935:14;8967:1;8977:169;8991:6;8988:1;8985:13;8977:169;;;9052:13;;9040:26;;9086:12;;;;9121:15;;;;9013:1;9006:9;8977:169;;;-1:-1:-1;9162:3:14;;8736:435;-1:-1:-1;;;;;8736:435:14:o;9176:257::-;9217:3;9255:5;9249:12;9282:6;9277:3;9270:19;9298:63;9354:6;9347:4;9342:3;9338:14;9331:4;9324:5;9320:16;9298:63;:::i;:::-;9415:2;9394:15;-1:-1:-1;;9390:29:14;9381:39;;;;9422:4;9377:50;;9176:257;-1:-1:-1;;9176:257:14:o;9438:735::-;9488:3;9529:5;9523:12;9558:36;9584:9;9558:36;:::i;:::-;9603:19;;;9641:4;9664:1;9681:18;;;9708:109;;;;9831:1;9826:341;;;;9674:493;;9708:109;-1:-1:-1;;9750:24:14;;9736:12;;;9729:46;9804:2;9795:12;;;-1:-1:-1;9708:109:14;;9826:341;9857:5;9854:1;9847:16;9904:2;9901:1;9891:16;9929:1;9943:174;9957:6;9954:1;9951:13;9943:174;;;10044:14;;10026:11;;;10022:20;;10015:44;10087:16;;;;9972:10;;9943:174;;;10141:11;;10137:20;;;-1:-1:-1;;9674:493:14;;;;;;9438:735;;;;:::o;10178:721::-;10256:3;10297:5;10291:12;10326:36;10352:9;10326:36;:::i;:::-;10381:1;10398:18;;;10425:104;;;;10543:1;10538:355;;;;10391:502;;10425:104;-1:-1:-1;;10458:24:14;;10446:37;;10503:16;;;;-1:-1:-1;10425:104:14;;10538:355;10569:5;10566:1;10559:16;10598:4;10643:2;10640:1;10630:16;10668:1;10682:165;10696:6;10693:1;10690:13;10682:165;;;10774:14;;10761:11;;;10754:35;10817:16;;;;10711:10;;10682:165;;;10686:3;;;10876:6;10871:3;10867:16;10860:23;;10391:502;;;;;10178:721;;;;:::o;10904:276::-;11035:3;11073:6;11067:13;11089:53;11135:6;11130:3;11123:4;11115:6;11111:17;11089:53;:::i;:::-;11158:16;;;;;10904:276;-1:-1:-1;;10904:276:14:o;11185:578::-;11409:3;11447:6;11441:13;11463:53;11509:6;11504:3;11497:4;11489:6;11485:17;11463:53;:::i;:::-;11579:13;;11538:16;;;;11601:57;11579:13;11538:16;11635:4;11623:17;;11601:57;:::i;:::-;11674:83;11747:8;11740:5;11736:20;11728:6;11674:83;:::i;:::-;11667:90;11185:578;-1:-1:-1;;;;;;;11185:578:14:o;11768:225::-;11896:3;11921:66;11983:3;11975:6;11921:66;:::i;12416:488::-;-1:-1:-1;;;;;12685:15:14;;;12667:34;;12737:15;;12732:2;12717:18;;12710:43;12784:2;12769:18;;12762:34;;;12832:3;12827:2;12812:18;;12805:31;;;12610:4;;12853:45;;12878:19;;12870:6;12853:45;:::i;:::-;12845:53;12416:488;-1:-1:-1;;;;;;12416:488:14:o;13188:280::-;13387:2;13376:9;13369:21;13350:4;13407:55;13458:2;13447:9;13443:18;13435:6;13407:55;:::i;13473:1476::-;13732:4;13780:2;13769:9;13765:18;13810:2;13799:9;13792:21;13833:6;13868;13862:13;13899:6;13891;13884:22;13937:3;13926:9;13922:19;13915:26;;14000:3;13990:6;13987:1;13983:14;13972:9;13968:30;13964:40;13950:54;;14023:1;14044:6;14040:2;14033:18;14070:4;14111:2;14107;14097:17;14132:2;14143:256;14157:6;14154:1;14151:13;14143:256;;;14222:22;;;-1:-1:-1;;14218:37:14;14206:50;;14279:41;14226:6;14305;14279:41;:::i;:::-;14269:51;-1:-1:-1;14377:12:14;;;;14355:1;14343:14;;;;14172:9;14143:256;;;-1:-1:-1;;14415:18:14;;;14408:34;;;14478:22;;;14473:2;14458:18;;14451:50;14554:13;;14576:24;;;14642:18;;;14685:17;;;;14618:15;;;-1:-1:-1;14554:13:14;-1:-1:-1;14733:188:14;14749:8;14744:3;14741:17;14733:188;;;14818:15;;14804:30;;14909:1;14895:16;;;;14856:14;;;;14768:11;;;;;14733:188;;;-1:-1:-1;14938:5:14;;13473:1476;-1:-1:-1;;;;;;;;13473:1476:14:o;14954:261::-;15133:2;15122:9;15115:21;15096:4;15153:56;15205:2;15194:9;15190:18;15182:6;15153:56;:::i;15412:219::-;15561:2;15550:9;15543:21;15524:4;15581:44;15621:2;15610:9;15606:18;15598:6;15581:44;:::i;15636:801::-;16011:3;16000:9;15993:22;15974:4;16038:45;16078:3;16067:9;16063:19;16055:6;16038:45;:::i;:::-;16131:9;16123:6;16119:22;16114:2;16103:9;16099:18;16092:50;16165:43;16201:6;16193;16165:43;:::i;:::-;16151:57;;16244:6;16239:2;16228:9;16224:18;16217:34;16301:6;16294:14;16287:22;16282:2;16271:9;16267:18;16260:50;16359:9;16351:6;16347:22;16341:3;16330:9;16326:19;16319:51;16387:44;16424:6;16416;16387:44;:::i;:::-;16379:52;15636:801;-1:-1:-1;;;;;;;;15636:801:14:o;16442:371::-;16641:2;16630:9;16623:21;16604:4;16661:44;16701:2;16690:9;16686:18;16678:6;16661:44;:::i;:::-;16736:2;16721:18;;16714:34;;;;-1:-1:-1;16791:14:14;;16784:22;16779:2;16764:18;;;16757:50;16653:52;16442:371;-1:-1:-1;16442:371:14:o;16818:296::-;16992:2;16981:9;16974:21;16955:4;17012:53;17061:2;17050:9;17046:18;17038:6;17012:53;:::i;:::-;17004:61;;17101:6;17096:2;17085:9;17081:18;17074:34;16818:296;;;;;:::o;17119:347::-;17321:2;17303:21;;;17360:2;17340:18;;;17333:30;17399:25;17394:2;17379:18;;17372:53;17457:2;17442:18;;17119:347::o;19816:414::-;20018:2;20000:21;;;20057:2;20037:18;;;20030:30;20096:34;20091:2;20076:18;;20069:62;-1:-1:-1;;;20162:2:14;20147:18;;20140:48;20220:3;20205:19;;19816:414::o;25201:415::-;25403:2;25385:21;;;25442:2;25422:18;;;25415:30;25481:34;25476:2;25461:18;;25454:62;-1:-1:-1;;;25547:2:14;25532:18;;25525:49;25606:3;25591:19;;25201:415::o;30921:356::-;31123:2;31105:21;;;31142:18;;;31135:30;31201:34;31196:2;31181:18;;31174:62;31268:2;31253:18;;30921:356::o;33606:413::-;33808:2;33790:21;;;33847:2;33827:18;;;33820:30;33886:34;33881:2;33866:18;;33859:62;-1:-1:-1;;;33952:2:14;33937:18;;33930:47;34009:3;33994:19;;33606:413::o;34788:398::-;34990:2;34972:21;;;35029:2;35009:18;;;35002:30;35068:34;35063:2;35048:18;;35041:62;-1:-1:-1;;;35134:2:14;35119:18;;35112:32;35176:3;35161:19;;34788:398::o;35191:406::-;35393:2;35375:21;;;35432:2;35412:18;;;35405:30;35471:34;35466:2;35451:18;;35444:62;-1:-1:-1;;;35537:2:14;35522:18;;35515:40;35587:3;35572:19;;35191:406::o;36377:421::-;36579:2;36561:21;;;36618:2;36598:18;;;36591:30;36657:34;36652:2;36637:18;;36630:62;36728:27;36723:2;36708:18;;36701:55;36788:3;36773:19;;36377:421::o;37744:275::-;37815:2;37809:9;37880:2;37861:13;;-1:-1:-1;;37857:27:14;37845:40;;37915:18;37900:34;;37936:22;;;37897:62;37894:88;;;37962:18;;:::i;:::-;37998:2;37991:22;37744:275;;-1:-1:-1;37744:275:14:o;38024:265::-;38063:3;38091:9;;;38116:10;;-1:-1:-1;;;;;38135:27:14;;;38128:35;;38112:52;38109:78;;;38167:18;;:::i;:::-;-1:-1:-1;;;38214:19:14;;;38207:27;;38199:36;;38196:62;;;38238:18;;:::i;:::-;-1:-1:-1;;38274:9:14;;38024:265::o;38294:128::-;38334:3;38365:1;38361:6;38358:1;38355:13;38352:39;;;38371:18;;:::i;:::-;-1:-1:-1;38407:9:14;;38294:128::o;38427:120::-;38467:1;38493;38483:35;;38498:18;;:::i;:::-;-1:-1:-1;38532:9:14;;38427:120::o;38552:422::-;38641:1;38684:5;38641:1;38698:270;38719:7;38709:8;38706:21;38698:270;;;38778:4;38774:1;38770:6;38766:17;38760:4;38757:27;38754:53;;;38787:18;;:::i;:::-;38837:7;38827:8;38823:22;38820:55;;;38857:16;;;;38820:55;38936:22;;;;38896:15;;;;38698:270;;;38702:3;38552:422;;;;;:::o;38979:131::-;39039:5;39068:36;39095:8;39089:4;39164:5;39194:8;39184:80;;-1:-1:-1;39235:1:14;39249:5;;39184:80;39283:4;39273:76;;-1:-1:-1;39320:1:14;39334:5;;39273:76;39365:4;39383:1;39378:59;;;;39451:1;39446:130;;;;39358:218;;39378:59;39408:1;39399:10;;39422:5;;;39446:130;39483:3;39473:8;39470:17;39467:43;;;39490:18;;:::i;:::-;-1:-1:-1;;39546:1:14;39532:16;;39561:5;;39358:218;;39660:2;39650:8;39647:16;39641:3;39635:4;39632:13;39628:36;39622:2;39612:8;39609:16;39604:2;39598:4;39595:12;39591:35;39588:77;39585:159;;;-1:-1:-1;39697:19:14;;;39729:5;;39585:159;39776:34;39801:8;39795:4;39776:34;:::i;:::-;39846:6;39842:1;39838:6;39834:19;39825:7;39822:32;39819:58;;;39857:18;;:::i;:::-;39895:20;;39115:806;-1:-1:-1;;;39115:806:14:o;39926:168::-;39966:7;40032:1;40028;40024:6;40020:14;40017:1;40014:21;40009:1;40002:9;39995:17;39991:45;39988:71;;;40039:18;;:::i;:::-;-1:-1:-1;40079:9:14;;39926:168::o;40099:125::-;40139:4;40167:1;40164;40161:8;40158:34;;;40172:18;;:::i;:::-;-1:-1:-1;40209:9:14;;40099:125::o;40229:258::-;40301:1;40311:113;40325:6;40322:1;40319:13;40311:113;;;40401:11;;;40395:18;40382:11;;;40375:39;40347:2;40340:10;40311:113;;;40442:6;40439:1;40436:13;40433:48;;;-1:-1:-1;;40477:1:14;40459:16;;40452:27;40229:258::o;40492:380::-;40571:1;40567:12;;;;40614;;;40635:61;;40689:4;40681:6;40677:17;40667:27;;40635:61;40742:2;40734:6;40731:14;40711:18;40708:38;40705:161;;;40788:10;40783:3;40779:20;40776:1;40769:31;40823:4;40820:1;40813:15;40851:4;40848:1;40841:15;40877:147;40915:3;-1:-1:-1;;;;;40936:30:14;;40933:56;;;40969:18;;:::i;:::-;-1:-1:-1;41016:1:14;41005:13;;40877:147::o;41029:135::-;41068:3;-1:-1:-1;;41089:17:14;;41086:43;;;41109:18;;:::i;41169:112::-;41201:1;41227;41217:35;;41232:18;;:::i;:::-;-1:-1:-1;41266:9:14;;41169:112::o;41286:127::-;41347:10;41342:3;41338:20;41335:1;41328:31;41378:4;41375:1;41368:15;41402:4;41399:1;41392:15;41418:127;41479:10;41474:3;41470:20;41467:1;41460:31;41510:4;41507:1;41500:15;41534:4;41531:1;41524:15;41550:127;41611:10;41606:3;41602:20;41599:1;41592:31;41642:4;41639:1;41632:15;41666:4;41663:1;41656:15;41682:127;41743:10;41738:3;41734:20;41731:1;41724:31;41774:4;41771:1;41764:15;41798:4;41795:1;41788:15;41814:127;41875:10;41870:3;41866:20;41863:1;41856:31;41906:4;41903:1;41896:15;41930:4;41927:1;41920:15;41946:131;-1:-1:-1;;;;;42021:31:14;;42011:42;;42001:70;;42067:1;42064;42057:12;42082:118;42168:5;42161:13;42154:21;42147:5;42144:32;42134:60;;42190:1;42187;42180:12;42205:131;-1:-1:-1;;;;;;42279:32:14;;42269:43;;42259:71;;42326:1;42323;42316:12

Swarm Source

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