ETH Price: $3,350.14 (-2.00%)

Token

Ether Sign Pass (ESP)
 

Overview

Max Total Supply

29 ESP

Holders

27

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 ESP
0xc078027bc7ebab657783febf7dfb2a29db27134a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ESP

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) external view returns (uint256);
}
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    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");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    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");
    }
    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);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    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);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    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);
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    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 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);
    }
    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);
    }
}
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;
  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }
  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }
  uint256 private currentIndex = 0;
  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;
  string private _name;
  string private _symbol;
  mapping(uint256 => TokenOwnership) private _ownerships;
  mapping(address => AddressData) private _addressData;
  mapping(uint256 => address) private _tokenApprovals;
  mapping(address => mapping(address => bool)) private _operatorApprovals;
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }
  function totalSupply() public view override returns (uint256) {
    return currentIndex;
  }
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  }
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }
  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }
  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");
    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }
    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }
    revert("ERC721A: unable to determine the owner of token");
  }
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }
  function name() public view virtual override returns (string memory) {
    return _name;
  }
  function symbol() public view virtual override returns (string memory) {
    return _symbol;
  }
  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()))
        : "";
  }
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");
    require(
      _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
      "ERC721A: approve caller is not owner nor approved for all"
    );
    _approve(to, tokenId, owner);
  }
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");
    return _tokenApprovals[tokenId];
  }
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");
    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_msgSender(), operator, approved);
  }
  function isApprovedForAll(address owner, address operator)
    public
    view
    virtual
    override
    returns (bool)
  {
    return _operatorApprovals[owner][operator];
  }
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    _transfer(from, to, tokenId);
  }
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    safeTransferFrom(from, to, tokenId, "");
  }
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  }
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }
  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");
    _beforeTokenTransfers(address(0), to, startTokenId, quantity);
    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));
    uint256 updatedIndex = startTokenId;
    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }
    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);
    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));
    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );
    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");
    _beforeTokenTransfers(from, to, tokenId, 1);
    _approve(address(0), tokenId, prevOwnership.addr);
    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }
    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }
  uint256 public nextOwnerToExplicitlySet = 0;
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    }
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }
  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(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}
contract ESP is ERC721A, Ownable, ReentrancyGuard {
    string public baseTokenURI;
    bytes32 whroot;
    uint256 public collectionsize = 555;
    uint256 public reservedsize = 20;
    uint256 public maxmint = 1;
    uint256 public whitelistprice = 0.055 ether;
    uint256 public publicprice = 0.075 ether;
    bytes internal constant alphabet = "0123456789abcdef";
    uint256 public mintpause=1;
    uint256 public whitelistmintopen;
    uint256 public publicmintopen;
    uint256 public textvisible=1;
    mapping(address => uint256) public mintedq;
constructor() ERC721A("Ether Sign Pass", "ESP",3,555)
{}
    function _onlyMinter() private view 
    { 
	require(msg.sender == tx.origin);
    }
    modifier onlyMinter 
    {
	_onlyMinter();
	_;
    }
    function ownerMintMulti(address recipient,uint256 value) public onlyOwner returns (uint256) 
    {
	_safeMint(recipient, value);
	return 1;
    }
    function isOwner(uint256 _id, address _address) public view virtual returns (bool) 
    {
	return ownerOf(_id) == _address;
    }
    function toString(address account) public pure returns(string memory) 
    {
	return toString(abi.encodePacked(account));
    }
    function toString(bytes memory data) public pure returns(string memory) 
    {
        bytes memory str = new bytes(2 + data.length * 2);
        str[0] = "0";
        str[1] = "x";
        for (uint i = 0; i < data.length; i++) 
	{
            str[2+i*2] = alphabet[uint(uint8(data[i] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(data[i] & 0x0f))];
        }
        return string(str);
    }
    function makecolor(uint256 c) public pure returns (string memory) 
    {
	bytes memory b2 = "0ff000";
	bytes memory b1 = "f0000f";
	bytes memory b0 = "000ff0";
	bytes memory str = new bytes(3);
	uint256 method = (c>>4)%6;
	str[2] = b2[method];
	str[1] = b1[method];
	str[0] = b0[method];
        str[method/2] = alphabet[uint(uint8(c%16))];
	return string(str);
    }
    function createSVG(uint256 tokenId,address wallet) public view returns (string memory) 
    {
	bytes memory pathstr;
	string memory outstr;
	uint256 i;
        uint256 segments;
        uint256 eltx;
        uint256 elty;
        uint256 maxx;
        uint256 miny;
        uint256 maxy;
	uint256[32] memory xc;
	uint256[32] memory yc;
	bytes memory w = abi.encodePacked(keccak256(abi.encodePacked(wallet)));
	segments = (uint256(uint8(w[0]))%(22-8))+8;
	xc[0]=0;
        yc[0]=uint256(uint8(w[3]))%400;
	for(i=1;i!=segments;i++)
	{
	    xc[i]=(400/segments)*i;
	    yc[i]=uint256(uint8(w[i+3]))%400;
	}
        miny=400-1;
        maxx = 0;
        maxy = 0;
	for(i=0;i!=segments;i++)
	{
	    if ( yc[i] <= miny ) miny = yc[i];
	    if ( xc[i] >= maxx ) maxx = xc[i];
	    if ( yc[i] >= maxy ) maxy = yc[i];
	}
	eltx = (500-400)/2 + (400-(maxx))/2;
        elty = (500-400)/2 + (400-(maxy-miny))/2 - miny;
	for(i=0;i!=segments;i++)
	{
	    xc[i] += eltx;
	    yc[i] += elty;
	}
	maxx = uint256(uint8(w[1]));
	maxy = uint256(uint8(w[2]));
	eltx = maxx % 96;
	elty = (maxy + maxx%48 + 11) % 96; 
	if ( textvisible == 1 )
	{
	    pathstr = abi.encodePacked("<text style=\"font-size: 14px;font-family: Courier\" x=\"50%\" y=\"30\" dominant-baseline=\"middle\" text-anchor=\"middle\" fill=\"#aaa\">Owned by ",toString(wallet),"</text>");
	} else {
	    pathstr = "";
	}
	pathstr = abi.encodePacked(pathstr,"<defs><linearGradient id=\"gr1\"><stop offset=\"0%\" style=\"stop-color:#",makecolor(eltx),"\"/><stop offset=\"100%\" style=\"stop-color:#",makecolor(elty),"\"/></linearGradient></defs><path d=\"M",Strings.toString(xc[0])," ",Strings.toString(yc[0])," Q");
	for(i=1;i!=segments;i++)
	{
	    pathstr = abi.encodePacked(pathstr,Strings.toString(xc[i])," ",Strings.toString(yc[i]),",");
	}
	pathstr = abi.encodePacked(pathstr,"\" fill=\"none\" stroke=\"url(#gr1)\" stroke-width=\"30\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>");
	outstr = string(abi.encodePacked('<svg xmlns="http:/','/www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 500 500"><rect x="0" y="0" width="500" height="500" fill="#fff"/>',pathstr,'</svg>'));
	outstr = b64encode(bytes(outstr));
	outstr = string(abi.encodePacked('{"name": "Ether Sign Pass #',Strings.toString(tokenId),'", "attributes": [{"trait_type": "Segments","value": "',Strings.toString(segments),'"},{"trait_type": "Start color","value": "#',makecolor(eltx),'"}, {"trait_type": "Stop color","value": "#',makecolor(elty),'"}],"image": "data:image/svg+xml;base64,',outstr,'"}'));
	return string(outstr);
    }
    function tokenURI(uint256 tokenId) override public view returns (string memory) 
    {
	string memory pathstr;
	pathstr = createSVG(tokenId,ownerOf(tokenId));
	return string(abi.encodePacked('data:application/json;base64,',b64encode(bytes(pathstr))));
    }
    function setPublicPrice(uint256 _p) external onlyOwner 
    {
	publicprice=_p;
    }
    function setPublicMintOpen(uint256 _st) external onlyOwner
    {
        publicmintopen = _st;
    }
    function setWhitelistPrice(uint256 _p) external onlyOwner 
    {
	whitelistprice=_p;
    }
    function setWhitelistMintOpen(uint256 _st) external onlyOwner
    {
        whitelistmintopen = _st;
    }
    function setCollectionSize(uint256 _p) external onlyOwner 
    {
	collectionsize=_p;
    }
    function setReservedSize(uint256 _p) external onlyOwner 
    {
	reservedsize=_p;
    }
    function setMintPause(uint256 _p) external onlyOwner
    {
        mintpause = _p;
    }
    function setMaxMint(uint256 _p) external onlyOwner 
    {
	maxmint=_p;
    }
    function setWhitelistRoot(bytes32 _wh) external onlyOwner
    {
	whroot = _wh;
    }
    function setTextVisible(uint256 _p) external onlyOwner 
    {
	textvisible=_p;
    }
    function getmintstatus(address minter) public view virtual returns (string memory) 
    {
	string memory o1 = string(abi.encodePacked(
	"mintpause:",Strings.toString(mintpause),
	";publicprice:",Strings.toString(publicprice), 
	";whitelistprice:",Strings.toString(whitelistprice), 
	";whitelist:",Strings.toString(whitelistmintopen), 
	";public:",Strings.toString(publicmintopen), 
	";maxmint:",Strings.toString(maxmint)
	));
	string memory o2 = string(abi.encodePacked(
	";totalsupply:", Strings.toString(totalSupply()), 
	";reservedsize:", Strings.toString(reservedsize), 
	";collectionsize:", Strings.toString(collectionsize),
	";minted:", Strings.toString(mintedq[minter]) 
	));
	string memory outstring = string(abi.encodePacked(o1,o2));
	return outstring;
    }
    function publicMint(uint256 st) external payable onlyMinter nonReentrant
    {
	require(mintpause==0, "Minting is not live yet!");
	require(publicmintopen!=0, "Public minting is not open!");
	if ( publicprice > 0 )
	{
    	    uint256 r=msg.value%publicprice;
    	    require(r==0,"Bad ammount of ETH");
    	    st=msg.value/publicprice;
    	    require(st>0,"Input amount=0");
	}
        require(mintedq[msg.sender] + st<=maxmint,"This would exceed the maximum NFTs/address!");
        require(totalSupply() + st <= collectionsize - reservedsize, "Sold out!" );
        mintedq[msg.sender]+=st;
	_safeMint(msg.sender,st);
    }
    function whitelistMint(uint256 st, bytes32[] memory proof) external payable onlyMinter nonReentrant
    {
	bytes32 cHa;
	require(mintpause==0, "Minting is not live yet!");
	require(whitelistmintopen!=0, "Whitelist minting is not open!");
	cHa = keccak256(abi.encodePacked(msg.sender));
    	for (uint256 i = 0; i < proof.length; i++) 
	{
	    bytes32 pEl = proof[i];
    	    if (cHa <= pEl) 
	    {
        	cHa = keccak256(abi.encodePacked(cHa, pEl));
    	    } else {
                cHa = keccak256(abi.encodePacked(pEl, cHa));
    	    }
    	}
	require( cHa==whroot, "You are not eligible for Whitelist mint!" );
	if ( whitelistprice > 0 )
	{
    	    uint256 r=msg.value%whitelistprice;
    	    require(r==0,"Bad ammount of ETH");
    	    st=msg.value/whitelistprice;
    	    require(st>0,"Input amount=0");
	}
        require(mintedq[msg.sender] + st<=maxmint,"This would exceed the maximum NFTs/address!");
        require(totalSupply() + st <= collectionsize - reservedsize, "Sold out!" );
        mintedq[msg.sender]+=st;
	_safeMint(msg.sender,st);
    }
    function _sendmoney(address _address, uint256 _amount) private 
    {
        (bool success, ) = _address.call{value: _amount}("");
	require(success, "Transfer failed.");
    }
    function withdraw() public onlyOwner 
    {
	_sendmoney(owner(),address(this).balance);
    }
    function withdrawto(address payable to, uint256 amount) public onlyOwner 
    {
	require( address(this).balance >= amount, "Insufficient balance to withdraw");
	_sendmoney(to,amount);
    }
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    function b64encode(bytes memory data) internal pure returns (string memory) 
    {
        uint256 len = data.length;
        if (len == 0) return "";
        uint256 encodedLen = 4 * ((len + 2) / 3);
        bytes memory result = new bytes(encodedLen + 32);
        bytes memory table = TABLE;
        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)
            for {
                let i := 0
            } lt(i, len) {
            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)
                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)
                mstore(resultPtr, out)
                resultPtr := add(resultPtr, 4)
            }
            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
            mstore(result, encodedLen)
        }
        return string(result);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionsize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"createSVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"getmintstatus","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"c","type":"uint256"}],"name":"makecolor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"maxmint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintpause","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"ownerMintMulti","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"st","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicmintopen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedsize","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":"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":"uint256","name":"_p","type":"uint256"}],"name":"setCollectionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setMintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_st","type":"uint256"}],"name":"setPublicMintOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setReservedSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setTextVisible","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_st","type":"uint256"}],"name":"setWhitelistMintOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_wh","type":"bytes32"}],"name":"setWhitelistRoot","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":[],"name":"textvisible","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"toString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"toString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"st","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistmintopen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawto","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405260008055600060075561022b600c556014600d556001600e5566c3663566a58000600f5567010a741a46278000601055600160115560016014553480156200004b57600080fd5b506040518060400160405280600f81526020016e4574686572205369676e205061737360881b8152506040518060400160405280600381526020016204553560ec1b815250600361022b60008111620001025760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620001645760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b6064820152608401620000f9565b83516200017990600190602087019062000204565b5082516200018f90600290602086019062000204565b5060a09190915260805250620001a7905033620001b2565b6001600955620002e7565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200021290620002aa565b90600052602060002090601f01602090048101928262000236576000855562000281565b82601f106200025157805160ff191683800117855562000281565b8280016001018555821562000281579182015b828111156200028157825182559160200191906001019062000264565b506200028f92915062000293565b5090565b5b808211156200028f576000815560010162000294565b600181811c90821680620002bf57607f821691505b60208210811415620002e157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516140ec6200031860003960008181612a2301528181612a4d0152612fd00152600050506140ec6000f3fe6080604052600436106102ff5760003560e01c8063717d57d311610190578063bad86047116100dc578063d7224ba011610095578063e985e9c51161006f578063e985e9c514610899578063f2fde38b146108e2578063f5aa406d14610902578063f6651cdd1461092257600080fd5b8063d7224ba01461084d578063d9e023b714610863578063db5ec0041461087957600080fd5b8063bad8604714610798578063c6275255146107b8578063c87b56dd146107d8578063cab2bab5146107f8578063d2cab05614610825578063d547cfb71461083857600080fd5b80638da5cb5b116101495780639db7cfba116101235780639db7cfba14610718578063a22cb46514610738578063aca8ffe714610758578063b88d4fde1461077857600080fd5b80638da5cb5b146106cf578063925430d2146106ed57806395d89b411461070357600080fd5b8063717d57d31461063757806371aad10d1461065757806379eef03c146106775780637bef92b71461068d5780638aa80ea5146106a35780638c843f6d146106b957600080fd5b80632f745c591161024f5780634f6ccce7116102085780635a5d096c116101e25780635a5d096c146105c25780636352211e146105e257806370a0823114610602578063715018a61461062257600080fd5b80634f6ccce714610562578063547520fe1461058257806356ca623e146105a257600080fd5b80632f745c59146104b75780633c732464146104d75780633ccfd60b146104f757806342842e0e1461050c578063433ee7911461052c57806348787ca31461054c57600080fd5b80630b28105c116102bc5780631ad36aee116102965780631ad36aee1461044457806323b872dd146104645780632cc663d1146104845780632db11544146104a457600080fd5b80630b28105c146103f957806317a1050b1461041957806318160ddd1461042f57600080fd5b806301ffc9a71461030457806306fdde0314610339578063081812fc1461035b578063090cdeaa14610393578063095ea7b3146103b75780630a3ed96e146103d9575b600080fd5b34801561031057600080fd5b5061032461031f366004613222565b610942565b60405190151581526020015b60405180910390f35b34801561034557600080fd5b5061034e6109af565b604051610330919061329e565b34801561036757600080fd5b5061037b6103763660046132b1565b610a41565b6040516001600160a01b039091168152602001610330565b34801561039f57600080fd5b506103a9600d5481565b604051908152602001610330565b3480156103c357600080fd5b506103d76103d23660046132df565b610ad1565b005b3480156103e557600080fd5b506103d76103f43660046132b1565b610be9565b34801561040557600080fd5b506103a96104143660046132df565b610c18565b34801561042557600080fd5b506103a960145481565b34801561043b57600080fd5b506000546103a9565b34801561045057600080fd5b506103d761045f3660046132b1565b610c58565b34801561047057600080fd5b506103d761047f36600461330b565b610c87565b34801561049057600080fd5b506103d761049f3660046132b1565b610c92565b6103d76104b23660046132b1565b610cc1565b3480156104c357600080fd5b506103a96104d23660046132df565b610f3b565b3480156104e357600080fd5b506103d76104f23660046132b1565b6110a8565b34801561050357600080fd5b506103d76110d7565b34801561051857600080fd5b506103d761052736600461330b565b61111e565b34801561053857600080fd5b506103d76105473660046132df565b611139565b34801561055857600080fd5b506103a960105481565b34801561056e57600080fd5b506103a961057d3660046132b1565b6111c1565b34801561058e57600080fd5b506103d761059d3660046132b1565b611223565b3480156105ae57600080fd5b5061034e6105bd36600461334c565b611252565b3480156105ce57600080fd5b506103246105dd366004613369565b611285565b3480156105ee57600080fd5b5061037b6105fd3660046132b1565b6112ab565b34801561060e57600080fd5b506103a961061d36600461334c565b6112bd565b34801561062e57600080fd5b506103d761134e565b34801561064357600080fd5b506103d76106523660046132b1565b611382565b34801561066357600080fd5b5061034e61067236600461344e565b6113b1565b34801561068357600080fd5b506103a960115481565b34801561069957600080fd5b506103a960125481565b3480156106af57600080fd5b506103a9600e5481565b3480156106c557600080fd5b506103a9600f5481565b3480156106db57600080fd5b506008546001600160a01b031661037b565b3480156106f957600080fd5b506103a960135481565b34801561070f57600080fd5b5061034e6115ef565b34801561072457600080fd5b5061034e610733366004613369565b6115fe565b34801561074457600080fd5b506103d7610753366004613482565b611b31565b34801561076457600080fd5b506103d76107733660046132b1565b611bf6565b34801561078457600080fd5b506103d76107933660046134b5565b611c25565b3480156107a457600080fd5b5061034e6107b33660046132b1565b611c5e565b3480156107c457600080fd5b506103d76107d33660046132b1565b611e4d565b3480156107e457600080fd5b5061034e6107f33660046132b1565b611e7c565b34801561080457600080fd5b506103a961081336600461334c565b60156020526000908152604090205481565b6103d7610833366004613520565b611ebe565b34801561084457600080fd5b5061034e612273565b34801561085957600080fd5b506103a960075481565b34801561086f57600080fd5b506103a9600c5481565b34801561088557600080fd5b5061034e61089436600461334c565b612301565b3480156108a557600080fd5b506103246108b43660046135d1565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156108ee57600080fd5b506103d76108fd36600461334c565b61240a565b34801561090e57600080fd5b506103d761091d3660046132b1565b6124a5565b34801561092e57600080fd5b506103d761093d3660046132b1565b6124d4565b60006001600160e01b031982166380ac58cd60e01b148061097357506001600160e01b03198216635b5e139f60e01b145b8061098e57506001600160e01b0319821663780e9d6360e01b145b806109a957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546109be906135ff565b80601f01602080910402602001604051908101604052809291908181526020018280546109ea906135ff565b8015610a375780601f10610a0c57610100808354040283529160200191610a37565b820191906000526020600020905b815481529060010190602001808311610a1a57829003601f168201915b5050505050905090565b6000610a4e826000541190565b610ab55760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610adc826112ab565b9050806001600160a01b0316836001600160a01b03161415610b4b5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610aac565b336001600160a01b0382161480610b675750610b6781336108b4565b610bd95760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610aac565b610be4838383612503565b505050565b6008546001600160a01b03163314610c135760405162461bcd60e51b8152600401610aac9061363a565b601355565b6008546000906001600160a01b03163314610c455760405162461bcd60e51b8152600401610aac9061363a565b610c4f838361255f565b50600192915050565b6008546001600160a01b03163314610c825760405162461bcd60e51b8152600401610aac9061363a565b601455565b610be4838383612579565b6008546001600160a01b03163314610cbc5760405162461bcd60e51b8152600401610aac9061363a565b601155565b610cc96128ff565b60026009541415610d1c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610aac565b600260095560115415610d6c5760405162461bcd60e51b81526020600482015260186024820152774d696e74696e67206973206e6f74206c697665207965742160401b6044820152606401610aac565b601354610dbb5760405162461bcd60e51b815260206004820152601b60248201527f5075626c6963206d696e74696e67206973206e6f74206f70656e2100000000006044820152606401610aac565b60105415610e6a57600060105434610dd39190613685565b90508015610e185760405162461bcd60e51b8152602060048201526012602482015271084c2c840c2dadadeeadce840decc408aa8960731b6044820152606401610aac565b601054610e2590346136af565b915060008211610e685760405162461bcd60e51b815260206004820152600e60248201526d0496e70757420616d6f756e743d360941b6044820152606401610aac565b505b600e5433600090815260156020526040902054610e889083906136c3565b1115610ea65760405162461bcd60e51b8152600401610aac906136db565b600d54600c54610eb69190613726565b81610ec060005490565b610eca91906136c3565b1115610f045760405162461bcd60e51b8152602060048201526009602482015268536f6c64206f75742160b81b6044820152606401610aac565b3360009081526015602052604081208054839290610f239084906136c3565b90915550610f339050338261255f565b506001600955565b6000610f46836112bd565b8210610f9f5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610aac565b600080549080805b83811015611048576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610ff957805192505b876001600160a01b0316836001600160a01b031614156110355786841415611027575093506109a992505050565b836110318161373d565b9450505b50806110408161373d565b915050610fa7565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610aac565b6008546001600160a01b031633146110d25760405162461bcd60e51b8152600401610aac9061363a565b600d55565b6008546001600160a01b031633146111015760405162461bcd60e51b8152600401610aac9061363a565b61111c6111166008546001600160a01b031690565b4761290b565b565b610be483838360405180602001604052806000815250611c25565b6008546001600160a01b031633146111635760405162461bcd60e51b8152600401610aac9061363a565b804710156111b35760405162461bcd60e51b815260206004820181905260248201527f496e73756666696369656e742062616c616e636520746f2077697468647261776044820152606401610aac565b6111bd828261290b565b5050565b60008054821061121f5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610aac565b5090565b6008546001600160a01b0316331461124d5760405162461bcd60e51b8152600401610aac9061363a565b600e55565b604051606082811b6001600160601b0319166020830152906109a9906034016040516020818303038152906040526113b1565b6000816001600160a01b031661129a846112ab565b6001600160a01b0316149392505050565b60006112b6826129a1565b5192915050565b60006001600160a01b0382166113295760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610aac565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6008546001600160a01b031633146113785760405162461bcd60e51b8152600401610aac9061363a565b61111c6000612b4a565b6008546001600160a01b031633146113ac5760405162461bcd60e51b8152600401610aac9061363a565b600f55565b60606000825160026113c39190613758565b6113ce9060026136c3565b6001600160401b038111156113e5576113e5613399565b6040519080825280601f01601f19166020018201604052801561140f576020820181803683370190505b509050600360fc1b8160008151811061142a5761142a613777565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061145957611459613777565b60200101906001600160f81b031916908160001a90535060005b83518110156115e8576040518060400160405280601081526020016f181899199a1a9b1b9c1cb0b131b232b360811b81525060048583815181106114b9576114b9613777565b016020015182516001600160f81b031990911690911c60f81c9081106114e1576114e1613777565b01602001516001600160f81b031916826114fc836002613758565b6115079060026136c3565b8151811061151757611517613777565b60200101906001600160f81b031916908160001a9053506040518060400160405280601081526020016f181899199a1a9b1b9c1cb0b131b232b360811b81525084828151811061156957611569613777565b602091010151815160f89190911c600f1690811061158957611589613777565b01602001516001600160f81b031916826115a4836002613758565b6115af9060036136c3565b815181106115bf576115bf613777565b60200101906001600160f81b031916908160001a905350806115e08161373d565b915050611473565b5092915050565b6060600280546109be906135ff565b606080606060008060008060008060006116166131ed565b61161e6131ed565b6040516001600160601b031960608f901b16602082015260009060340160408051601f19818403018152828252805160209182012090830152016040516020818303038152906040529050600e8160008151811061167e5761167e613777565b0160200151611690919060f81c613685565b61169b9060086136c3565b60008452815190995061019090829060039081106116bb576116bb613777565b01602001516116cd919060f81c613685565b8252600199505b888a1461176357896116e88a6101906136af565b6116f29190613758565b838b6020811061170457611704613777565b6020020152610190816117188c60036136c3565b8151811061172857611728613777565b016020015161173a919060f81c613685565b828b6020811061174c5761174c613777565b60200201528961175b8161373d565b9a50506116d4565b61018f94506000955060009350600099505b888a146118335784828b6020811061178f5761178f613777565b6020020151116117b357818a602081106117ab576117ab613777565b602002015194505b85838b602081106117c6576117c6613777565b6020020151106117ea57828a602081106117e2576117e2613777565b602002015195505b83828b602081106117fd576117fd613777565b60200201511061182157818a6020811061181957611819613777565b602002015193505b8961182b8161373d565b9a5050611775565b600261184187610190613726565b61184b91906136af565b6118569060326136c3565b97508460026118658287613726565b61187190610190613726565b61187b91906136af565b6118869060326136c3565b6118909190613726565b9650600099505b888a146118fe5787838b602081106118b1576118b1613777565b602002018181516118c291906136c3565b90525086828b602081106118d8576118d8613777565b602002018181516118e991906136c3565b905250896118f68161373d565b9a5050611897565b8060018151811061191157611911613777565b0160200151815160f89190911c96508190600290811061193357611933613777565b016020015160f81c9350611948606087613685565b97506060611957603088613685565b61196190866136c3565b61196c90600b6136c3565b6119769190613685565b9650601454600114156119b25761198c8e611252565b60405160200161199c91906137a9565b6040516020818303038152906040529b506119c5565b604051806020016040528060008152509b505b8b6119cf89611c5e565b6119d889611c5e565b6119e98660005b6020020151612b9c565b6119f48660006119df565b604051602001611a08959493929190613881565b6040516020818303038152906040529b50600199505b888a14611a86578b611a3b848c602081106119df576119df613777565b611a50848d602081106119df576119df613777565b604051602001611a62939291906139ce565b6040516020818303038152906040529b508980611a7e9061373d565b9a5050611a1e565b8b604051602001611a979190613a2c565b6040516020818303038152906040529b508b604051602001611ab99190613ac5565b6040516020818303038152906040529a50611ad38b612ca1565b9a50611ade8f612b9c565b611ae78a612b9c565b611af08a611c5e565b611af98a611c5e565b8e604051602001611b0e959493929190613bb9565b60408051808303601f190181529190529f9e505050505050505050505050505050565b6001600160a01b038216331415611b8a5760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610aac565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b03163314611c205760405162461bcd60e51b8152600401610aac9061363a565b600c55565b611c30848484612579565b611c3c84848484612e06565b611c585760405162461bcd60e51b8152600401610aac90613d2f565b50505050565b60408051808201825260068082526503066663030360d41b602080840191909152835180850185528281526533181818183360d11b81830152845180860186529283526503030306666360d41b838301528451600380825281870190965260609591939260009290820181803683370190505090506000611ce46006600489901c613685565b9050848181518110611cf857611cf8613777565b602001015160f81c60f81b82600281518110611d1657611d16613777565b60200101906001600160f81b031916908160001a905350838181518110611d3f57611d3f613777565b602001015160f81c60f81b82600181518110611d5d57611d5d613777565b60200101906001600160f81b031916908160001a905350828181518110611d8657611d86613777565b602001015160f81c60f81b82600081518110611da457611da4613777565b60200101906001600160f81b031916908160001a9053506040805180820190915260108082526f181899199a1a9b1b9c1cb0b131b232b360811b6020830152611ded9089613685565b60ff1681518110611e0057611e00613777565b01602001516001600160f81b03191682611e1b6002846136af565b81518110611e2b57611e2b613777565b60200101906001600160f81b031916908160001a905350909695505050505050565b6008546001600160a01b03163314611e775760405162461bcd60e51b8152600401610aac9061363a565b601055565b606080611e8c83610733856112ab565b9050611e9781612ca1565b604051602001611ea79190613d82565b604051602081830303815290604052915050919050565b611ec66128ff565b60026009541415611f195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610aac565b600260095560115460009015611f6c5760405162461bcd60e51b81526020600482015260186024820152774d696e74696e67206973206e6f74206c697665207965742160401b6044820152606401610aac565b601254611fbb5760405162461bcd60e51b815260206004820152601e60248201527f57686974656c697374206d696e74696e67206973206e6f74206f70656e2100006044820152606401610aac565b6040516001600160601b03193360601b16602082015260340160405160208183030381529060405280519060200120905060005b825181101561208e57600083828151811061200c5761200c613777565b6020026020010151905080831161204e57604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061207b565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b50806120868161373d565b915050611fef565b50600b5481146120f15760405162461bcd60e51b815260206004820152602860248201527f596f7520617265206e6f7420656c696769626c6520666f722057686974656c696044820152677374206d696e742160c01b6064820152608401610aac565b600f54156121a0576000600f54346121099190613685565b9050801561214e5760405162461bcd60e51b8152602060048201526012602482015271084c2c840c2dadadeeadce840decc408aa8960731b6044820152606401610aac565b600f5461215b90346136af565b93506000841161219e5760405162461bcd60e51b815260206004820152600e60248201526d0496e70757420616d6f756e743d360941b6044820152606401610aac565b505b600e54336000908152601560205260409020546121be9085906136c3565b11156121dc5760405162461bcd60e51b8152600401610aac906136db565b600d54600c546121ec9190613726565b836121f660005490565b61220091906136c3565b111561223a5760405162461bcd60e51b8152602060048201526009602482015268536f6c64206f75742160b81b6044820152606401610aac565b33600090815260156020526040812080548592906122599084906136c3565b909155506122699050338461255f565b5050600160095550565b600a8054612280906135ff565b80601f01602080910402602001604051908101604052809291908181526020018280546122ac906135ff565b80156122f95780601f106122ce576101008083540402835291602001916122f9565b820191906000526020600020905b8154815290600101906020018083116122dc57829003601f168201915b505050505081565b60606000612310601154612b9c565b61231b601054612b9c565b612326600f54612b9c565b612331601254612b9c565b61233c601354612b9c565b612347600e54612b9c565b60405160200161235c96959493929190613dc7565b6040516020818303038152906040529050600061238061237b60005490565b612b9c565b61238b600d54612b9c565b612396600c54612b9c565b6001600160a01b0387166000908152601560205260409020546123b890612b9c565b6040516020016123cb9493929190613ece565b6040516020818303038152906040529050600082826040516020016123f1929190613f8c565b60408051601f1981840301815291905295945050505050565b6008546001600160a01b031633146124345760405162461bcd60e51b8152600401610aac9061363a565b6001600160a01b0381166124995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aac565b6124a281612b4a565b50565b6008546001600160a01b031633146124cf5760405162461bcd60e51b8152600401610aac9061363a565b600b55565b6008546001600160a01b031633146124fe5760405162461bcd60e51b8152600401610aac9061363a565b601255565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6111bd828260405180602001604052806000815250612f13565b6000612584826129a1565b80519091506000906001600160a01b0316336001600160a01b031614806125bb5750336125b084610a41565b6001600160a01b0316145b806125cd575081516125cd90336108b4565b9050806126375760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610aac565b846001600160a01b031682600001516001600160a01b0316146126ab5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610aac565b6001600160a01b03841661270f5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610aac565b61271f6000848460000151612503565b6001600160a01b03851660009081526004602052604081208054600192906127519084906001600160801b0316613fbb565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0386166000908152600460205260408120805460019450909261279d91859116613fe3565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526003909152948520935184549151909216600160a01b026001600160e01b031990911691909216171790556128248460016136c3565b6000818152600360205260409020549091506001600160a01b03166128b55761284e816000541190565b156128b55760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b33321461111c57600080fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612958576040519150601f19603f3d011682016040523d82523d6000602084013e61295d565b606091505b5050905080610be45760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610aac565b60408051808201909152600080825260208201526129c0826000541190565b612a1f5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610aac565b60007f00000000000000000000000000000000000000000000000000000000000000008310612a8057612a727f000000000000000000000000000000000000000000000000000000000000000084613726565b612a7d9060016136c3565b90505b825b818110612ae9576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215612ad657949350505050565b5080612ae181614005565b915050612a82565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610aac565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606081612bc05750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612bea5780612bd48161373d565b9150612be39050600a836136af565b9150612bc4565b6000816001600160401b03811115612c0457612c04613399565b6040519080825280601f01601f191660200182016040528015612c2e576020820181803683370190505b5090505b8415612c9957612c43600183613726565b9150612c50600a86613685565b612c5b9060306136c3565b60f81b818381518110612c7057612c70613777565b60200101906001600160f81b031916908160001a905350612c92600a866136af565b9450612c32565b949350505050565b805160609080612cc1575050604080516020810190915260008152919050565b60006003612cd08360026136c3565b612cda91906136af565b612ce5906004613758565b90506000612cf48260206136c3565b6001600160401b03811115612d0b57612d0b613399565b6040519080825280601f01601f191660200182016040528015612d35576020820181803683370190505b5090506000604051806060016040528060408152602001614077604091399050600181016020830160005b86811015612dc1576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101612d60565b506003860660018114612ddb5760028114612dec57612df8565b613d3d60f01b600119830152612df8565b603d60f81b6000198301525b505050918152949350505050565b60006001600160a01b0384163b15612f0857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612e4a90339089908890889060040161401c565b602060405180830381600087803b158015612e6457600080fd5b505af1925050508015612e94575060408051601f3d908101601f19168201909252612e9191810190614059565b60015b612eee573d808015612ec2576040519150601f19603f3d011682016040523d82523d6000602084013e612ec7565b606091505b508051612ee65760405162461bcd60e51b8152600401610aac90613d2f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612c99565b506001949350505050565b6000546001600160a01b038416612f765760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610aac565b612f81816000541190565b15612fce5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610aac565b7f00000000000000000000000000000000000000000000000000000000000000008311156130495760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610aac565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906130a5908790613fe3565b6001600160801b031681526020018583602001516130c39190613fe3565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156131e25760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46131a66000888488612e06565b6131c25760405162461bcd60e51b8152600401610aac90613d2f565b816131cc8161373d565b92505080806131da9061373d565b915050613159565b5060008190556128f7565b6040518061040001604052806020906020820280368337509192915050565b6001600160e01b0319811681146124a257600080fd5b60006020828403121561323457600080fd5b813561323f8161320c565b9392505050565b60005b83811015613261578181015183820152602001613249565b83811115611c585750506000910152565b6000815180845261328a816020860160208601613246565b601f01601f19169290920160200192915050565b60208152600061323f6020830184613272565b6000602082840312156132c357600080fd5b5035919050565b6001600160a01b03811681146124a257600080fd5b600080604083850312156132f257600080fd5b82356132fd816132ca565b946020939093013593505050565b60008060006060848603121561332057600080fd5b833561332b816132ca565b9250602084013561333b816132ca565b929592945050506040919091013590565b60006020828403121561335e57600080fd5b813561323f816132ca565b6000806040838503121561337c57600080fd5b82359150602083013561338e816132ca565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156133d7576133d7613399565b604052919050565b600082601f8301126133f057600080fd5b81356001600160401b0381111561340957613409613399565b61341c601f8201601f19166020016133af565b81815284602083860101111561343157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561346057600080fd5b81356001600160401b0381111561347657600080fd5b612c99848285016133df565b6000806040838503121561349557600080fd5b82356134a0816132ca565b91506020830135801515811461338e57600080fd5b600080600080608085870312156134cb57600080fd5b84356134d6816132ca565b935060208501356134e6816132ca565b92506040850135915060608501356001600160401b0381111561350857600080fd5b613514878288016133df565b91505092959194509250565b6000806040838503121561353357600080fd5b823591506020808401356001600160401b038082111561355257600080fd5b818601915086601f83011261356657600080fd5b81358181111561357857613578613399565b8060051b91506135898483016133af565b81815291830184019184810190898411156135a357600080fd5b938501935b838510156135c1578435825293850193908501906135a8565b8096505050505050509250929050565b600080604083850312156135e457600080fd5b82356135ef816132ca565b9150602083013561338e816132ca565b600181811c9082168061361357607f821691505b6020821081141561363457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6000826136945761369461366f565b500690565b634e487b7160e01b600052601160045260246000fd5b6000826136be576136be61366f565b500490565b600082198211156136d6576136d6613699565b500190565b6020808252602b908201527f5468697320776f756c642065786365656420746865206d6178696d756d204e4660408201526a54732f616464726573732160a81b606082015260800190565b60008282101561373857613738613699565b500390565b600060001982141561375157613751613699565b5060010190565b600081600019048311821515161561377257613772613699565b500290565b634e487b7160e01b600052603260045260246000fd5b6000815161379f818560208601613246565b9290920192915050565b7f3c74657874207374796c653d22666f6e742d73697a653a20313470783b666f6e81527f742d66616d696c793a20436f75726965722220783d223530252220793d22333060208201527f2220646f6d696e616e742d626173656c696e653d226d6964646c65222074657860408201527f742d616e63686f723d226d6964646c65222066696c6c3d2223616161223e4f7760608201526603732b210313c960cd1b608082015260008251613863816087850160208701613246565b661e17ba32bc3a1f60c91b6087939091019283015250608e01919050565b60008651613893818460208b01613246565b80830190507f3c646566733e3c6c696e6561724772616469656e742069643d22677231223e3c81527f73746f70206f66667365743d22302522207374796c653d2273746f702d636f6c6020820152636f723a2360e01b60408201528651613901816044840160208b01613246565b7f222f3e3c73746f70206f66667365743d223130302522207374796c653d22737460449290910191820152696f702d636f6c6f723a2360b01b6064820152855161395281606e840160208a01613246565b7f222f3e3c2f6c696e6561724772616469656e743e3c2f646566733e3c70617468606e92909101918201526420643d224d60d81b608e8201526139c26139b46139ae6139a1609385018961378d565b600160fd1b815260010190565b8661378d565b61205160f01b815260020190565b98975050505050505050565b600084516139e0818460208901613246565b8451908301906139f4818360208901613246565b600160fd1b91019081528351613a11816001840160208801613246565b600b60fa1b6001929091019182015260020195945050505050565b60008251613a3e818460208701613246565b7f222066696c6c3d226e6f6e6522207374726f6b653d2275726c282367723129229201918252507f207374726f6b652d77696474683d22333022207374726f6b652d6c696e65636160208201527f703d22726f756e6422207374726f6b652d6c696e656a6f696e3d22726f756e6460408201526211179f60e91b6060820152606301919050565b713c73766720786d6c6e733d22687474703a2f60701b81527f2f7777772e77332e6f72672f323030302f73766722207072657365727665417360128201527f70656374526174696f3d22784d696e594d696e206d656574222076696577426f60328201527f783d223020302035303020353030223e3c7265637420783d22302220793d223060528201527f222077696474683d2235303022206865696768743d22353030222066696c6c3d6072820152671111b3333311179f60c11b60928201528151600090613b9c81609a850160208701613246565b651e17b9bb339f60d11b609a93909101928301525060a001919050565b7f7b226e616d65223a20224574686572205369676e205061737320230000000000815260008651613bf181601b850160208b01613246565b7f222c202261747472696275746573223a205b7b2274726169745f74797065223a601b9184019182015275101129b2b3b6b2b73a399116113b30b63ab2911d101160511b603b8201528651613c4d816051840160208b01613246565b7f227d2c7b2274726169745f74797065223a2022537461727420636f6c6f72222c605192909101918201526a2276616c7565223a20222360a81b607182018190528651613ca181607c850160208b01613246565b7f227d2c207b2274726169745f74797065223a202253746f7020636f6c6f72222c607c9390910192830152609c8201526139c2613d216139ae613ce760a785018961378d565b7f227d5d2c22696d616765223a2022646174613a696d6167652f7376672b786d6c8152670ed8985cd94d8d0b60c21b602082015260280190565b61227d60f01b815260020190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251613dba81601d850160208701613246565b91909101601d0192915050565b6936b4b73a3830bab9b29d60b11b815260008751613dec81600a850160208c01613246565b6c1db83ab13634b1b83934b1b29d60991b600a918401918201528751613e19816017840160208c01613246565b6f1dbbb434ba32b634b9ba383934b1b29d60811b601792909101918201528651613e4a816027840160208b01613246565b6a1dbbb434ba32b634b9ba1d60a91b602792909101918201528551613e76816032840160208a01613246565b671db83ab13634b19d60c11b603292909101918201528451613e9f81603a840160208901613246565b613ec06139ae603a83850101681db6b0bc36b4b73a1d60b91b815260090190565b9a9950505050505050505050565b6c1dba37ba30b639bab838363c9d60991b815260008551613ef681600d850160208a01613246565b6d1db932b9b2b93b32b239b4bd329d60911b600d918401918201528551613f2481601b840160208a01613246565b6f1db1b7b63632b1ba34b7b739b4bd329d60811b601b92909101918201528451613f5581602b840160208901613246565b671db6b4b73a32b21d60c11b602b92909101918201528351613f7e816033840160208801613246565b016033019695505050505050565b60008351613f9e818460208801613246565b835190830190613fb2818360208801613246565b01949350505050565b60006001600160801b0383811690831681811015613fdb57613fdb613699565b039392505050565b60006001600160801b03808316818516808303821115613fb257613fb2613699565b60008161401457614014613699565b506000190190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061404f90830184613272565b9695505050505050565b60006020828403121561406b57600080fd5b815161323f8161320c56fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212201ed5d71f2c608044265b225479d972e95981dcd2d8a14682c17e44a0a2711a8264736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102ff5760003560e01c8063717d57d311610190578063bad86047116100dc578063d7224ba011610095578063e985e9c51161006f578063e985e9c514610899578063f2fde38b146108e2578063f5aa406d14610902578063f6651cdd1461092257600080fd5b8063d7224ba01461084d578063d9e023b714610863578063db5ec0041461087957600080fd5b8063bad8604714610798578063c6275255146107b8578063c87b56dd146107d8578063cab2bab5146107f8578063d2cab05614610825578063d547cfb71461083857600080fd5b80638da5cb5b116101495780639db7cfba116101235780639db7cfba14610718578063a22cb46514610738578063aca8ffe714610758578063b88d4fde1461077857600080fd5b80638da5cb5b146106cf578063925430d2146106ed57806395d89b411461070357600080fd5b8063717d57d31461063757806371aad10d1461065757806379eef03c146106775780637bef92b71461068d5780638aa80ea5146106a35780638c843f6d146106b957600080fd5b80632f745c591161024f5780634f6ccce7116102085780635a5d096c116101e25780635a5d096c146105c25780636352211e146105e257806370a0823114610602578063715018a61461062257600080fd5b80634f6ccce714610562578063547520fe1461058257806356ca623e146105a257600080fd5b80632f745c59146104b75780633c732464146104d75780633ccfd60b146104f757806342842e0e1461050c578063433ee7911461052c57806348787ca31461054c57600080fd5b80630b28105c116102bc5780631ad36aee116102965780631ad36aee1461044457806323b872dd146104645780632cc663d1146104845780632db11544146104a457600080fd5b80630b28105c146103f957806317a1050b1461041957806318160ddd1461042f57600080fd5b806301ffc9a71461030457806306fdde0314610339578063081812fc1461035b578063090cdeaa14610393578063095ea7b3146103b75780630a3ed96e146103d9575b600080fd5b34801561031057600080fd5b5061032461031f366004613222565b610942565b60405190151581526020015b60405180910390f35b34801561034557600080fd5b5061034e6109af565b604051610330919061329e565b34801561036757600080fd5b5061037b6103763660046132b1565b610a41565b6040516001600160a01b039091168152602001610330565b34801561039f57600080fd5b506103a9600d5481565b604051908152602001610330565b3480156103c357600080fd5b506103d76103d23660046132df565b610ad1565b005b3480156103e557600080fd5b506103d76103f43660046132b1565b610be9565b34801561040557600080fd5b506103a96104143660046132df565b610c18565b34801561042557600080fd5b506103a960145481565b34801561043b57600080fd5b506000546103a9565b34801561045057600080fd5b506103d761045f3660046132b1565b610c58565b34801561047057600080fd5b506103d761047f36600461330b565b610c87565b34801561049057600080fd5b506103d761049f3660046132b1565b610c92565b6103d76104b23660046132b1565b610cc1565b3480156104c357600080fd5b506103a96104d23660046132df565b610f3b565b3480156104e357600080fd5b506103d76104f23660046132b1565b6110a8565b34801561050357600080fd5b506103d76110d7565b34801561051857600080fd5b506103d761052736600461330b565b61111e565b34801561053857600080fd5b506103d76105473660046132df565b611139565b34801561055857600080fd5b506103a960105481565b34801561056e57600080fd5b506103a961057d3660046132b1565b6111c1565b34801561058e57600080fd5b506103d761059d3660046132b1565b611223565b3480156105ae57600080fd5b5061034e6105bd36600461334c565b611252565b3480156105ce57600080fd5b506103246105dd366004613369565b611285565b3480156105ee57600080fd5b5061037b6105fd3660046132b1565b6112ab565b34801561060e57600080fd5b506103a961061d36600461334c565b6112bd565b34801561062e57600080fd5b506103d761134e565b34801561064357600080fd5b506103d76106523660046132b1565b611382565b34801561066357600080fd5b5061034e61067236600461344e565b6113b1565b34801561068357600080fd5b506103a960115481565b34801561069957600080fd5b506103a960125481565b3480156106af57600080fd5b506103a9600e5481565b3480156106c557600080fd5b506103a9600f5481565b3480156106db57600080fd5b506008546001600160a01b031661037b565b3480156106f957600080fd5b506103a960135481565b34801561070f57600080fd5b5061034e6115ef565b34801561072457600080fd5b5061034e610733366004613369565b6115fe565b34801561074457600080fd5b506103d7610753366004613482565b611b31565b34801561076457600080fd5b506103d76107733660046132b1565b611bf6565b34801561078457600080fd5b506103d76107933660046134b5565b611c25565b3480156107a457600080fd5b5061034e6107b33660046132b1565b611c5e565b3480156107c457600080fd5b506103d76107d33660046132b1565b611e4d565b3480156107e457600080fd5b5061034e6107f33660046132b1565b611e7c565b34801561080457600080fd5b506103a961081336600461334c565b60156020526000908152604090205481565b6103d7610833366004613520565b611ebe565b34801561084457600080fd5b5061034e612273565b34801561085957600080fd5b506103a960075481565b34801561086f57600080fd5b506103a9600c5481565b34801561088557600080fd5b5061034e61089436600461334c565b612301565b3480156108a557600080fd5b506103246108b43660046135d1565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156108ee57600080fd5b506103d76108fd36600461334c565b61240a565b34801561090e57600080fd5b506103d761091d3660046132b1565b6124a5565b34801561092e57600080fd5b506103d761093d3660046132b1565b6124d4565b60006001600160e01b031982166380ac58cd60e01b148061097357506001600160e01b03198216635b5e139f60e01b145b8061098e57506001600160e01b0319821663780e9d6360e01b145b806109a957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546109be906135ff565b80601f01602080910402602001604051908101604052809291908181526020018280546109ea906135ff565b8015610a375780601f10610a0c57610100808354040283529160200191610a37565b820191906000526020600020905b815481529060010190602001808311610a1a57829003601f168201915b5050505050905090565b6000610a4e826000541190565b610ab55760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610adc826112ab565b9050806001600160a01b0316836001600160a01b03161415610b4b5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610aac565b336001600160a01b0382161480610b675750610b6781336108b4565b610bd95760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610aac565b610be4838383612503565b505050565b6008546001600160a01b03163314610c135760405162461bcd60e51b8152600401610aac9061363a565b601355565b6008546000906001600160a01b03163314610c455760405162461bcd60e51b8152600401610aac9061363a565b610c4f838361255f565b50600192915050565b6008546001600160a01b03163314610c825760405162461bcd60e51b8152600401610aac9061363a565b601455565b610be4838383612579565b6008546001600160a01b03163314610cbc5760405162461bcd60e51b8152600401610aac9061363a565b601155565b610cc96128ff565b60026009541415610d1c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610aac565b600260095560115415610d6c5760405162461bcd60e51b81526020600482015260186024820152774d696e74696e67206973206e6f74206c697665207965742160401b6044820152606401610aac565b601354610dbb5760405162461bcd60e51b815260206004820152601b60248201527f5075626c6963206d696e74696e67206973206e6f74206f70656e2100000000006044820152606401610aac565b60105415610e6a57600060105434610dd39190613685565b90508015610e185760405162461bcd60e51b8152602060048201526012602482015271084c2c840c2dadadeeadce840decc408aa8960731b6044820152606401610aac565b601054610e2590346136af565b915060008211610e685760405162461bcd60e51b815260206004820152600e60248201526d0496e70757420616d6f756e743d360941b6044820152606401610aac565b505b600e5433600090815260156020526040902054610e889083906136c3565b1115610ea65760405162461bcd60e51b8152600401610aac906136db565b600d54600c54610eb69190613726565b81610ec060005490565b610eca91906136c3565b1115610f045760405162461bcd60e51b8152602060048201526009602482015268536f6c64206f75742160b81b6044820152606401610aac565b3360009081526015602052604081208054839290610f239084906136c3565b90915550610f339050338261255f565b506001600955565b6000610f46836112bd565b8210610f9f5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610aac565b600080549080805b83811015611048576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610ff957805192505b876001600160a01b0316836001600160a01b031614156110355786841415611027575093506109a992505050565b836110318161373d565b9450505b50806110408161373d565b915050610fa7565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610aac565b6008546001600160a01b031633146110d25760405162461bcd60e51b8152600401610aac9061363a565b600d55565b6008546001600160a01b031633146111015760405162461bcd60e51b8152600401610aac9061363a565b61111c6111166008546001600160a01b031690565b4761290b565b565b610be483838360405180602001604052806000815250611c25565b6008546001600160a01b031633146111635760405162461bcd60e51b8152600401610aac9061363a565b804710156111b35760405162461bcd60e51b815260206004820181905260248201527f496e73756666696369656e742062616c616e636520746f2077697468647261776044820152606401610aac565b6111bd828261290b565b5050565b60008054821061121f5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610aac565b5090565b6008546001600160a01b0316331461124d5760405162461bcd60e51b8152600401610aac9061363a565b600e55565b604051606082811b6001600160601b0319166020830152906109a9906034016040516020818303038152906040526113b1565b6000816001600160a01b031661129a846112ab565b6001600160a01b0316149392505050565b60006112b6826129a1565b5192915050565b60006001600160a01b0382166113295760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610aac565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6008546001600160a01b031633146113785760405162461bcd60e51b8152600401610aac9061363a565b61111c6000612b4a565b6008546001600160a01b031633146113ac5760405162461bcd60e51b8152600401610aac9061363a565b600f55565b60606000825160026113c39190613758565b6113ce9060026136c3565b6001600160401b038111156113e5576113e5613399565b6040519080825280601f01601f19166020018201604052801561140f576020820181803683370190505b509050600360fc1b8160008151811061142a5761142a613777565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061145957611459613777565b60200101906001600160f81b031916908160001a90535060005b83518110156115e8576040518060400160405280601081526020016f181899199a1a9b1b9c1cb0b131b232b360811b81525060048583815181106114b9576114b9613777565b016020015182516001600160f81b031990911690911c60f81c9081106114e1576114e1613777565b01602001516001600160f81b031916826114fc836002613758565b6115079060026136c3565b8151811061151757611517613777565b60200101906001600160f81b031916908160001a9053506040518060400160405280601081526020016f181899199a1a9b1b9c1cb0b131b232b360811b81525084828151811061156957611569613777565b602091010151815160f89190911c600f1690811061158957611589613777565b01602001516001600160f81b031916826115a4836002613758565b6115af9060036136c3565b815181106115bf576115bf613777565b60200101906001600160f81b031916908160001a905350806115e08161373d565b915050611473565b5092915050565b6060600280546109be906135ff565b606080606060008060008060008060006116166131ed565b61161e6131ed565b6040516001600160601b031960608f901b16602082015260009060340160408051601f19818403018152828252805160209182012090830152016040516020818303038152906040529050600e8160008151811061167e5761167e613777565b0160200151611690919060f81c613685565b61169b9060086136c3565b60008452815190995061019090829060039081106116bb576116bb613777565b01602001516116cd919060f81c613685565b8252600199505b888a1461176357896116e88a6101906136af565b6116f29190613758565b838b6020811061170457611704613777565b6020020152610190816117188c60036136c3565b8151811061172857611728613777565b016020015161173a919060f81c613685565b828b6020811061174c5761174c613777565b60200201528961175b8161373d565b9a50506116d4565b61018f94506000955060009350600099505b888a146118335784828b6020811061178f5761178f613777565b6020020151116117b357818a602081106117ab576117ab613777565b602002015194505b85838b602081106117c6576117c6613777565b6020020151106117ea57828a602081106117e2576117e2613777565b602002015195505b83828b602081106117fd576117fd613777565b60200201511061182157818a6020811061181957611819613777565b602002015193505b8961182b8161373d565b9a5050611775565b600261184187610190613726565b61184b91906136af565b6118569060326136c3565b97508460026118658287613726565b61187190610190613726565b61187b91906136af565b6118869060326136c3565b6118909190613726565b9650600099505b888a146118fe5787838b602081106118b1576118b1613777565b602002018181516118c291906136c3565b90525086828b602081106118d8576118d8613777565b602002018181516118e991906136c3565b905250896118f68161373d565b9a5050611897565b8060018151811061191157611911613777565b0160200151815160f89190911c96508190600290811061193357611933613777565b016020015160f81c9350611948606087613685565b97506060611957603088613685565b61196190866136c3565b61196c90600b6136c3565b6119769190613685565b9650601454600114156119b25761198c8e611252565b60405160200161199c91906137a9565b6040516020818303038152906040529b506119c5565b604051806020016040528060008152509b505b8b6119cf89611c5e565b6119d889611c5e565b6119e98660005b6020020151612b9c565b6119f48660006119df565b604051602001611a08959493929190613881565b6040516020818303038152906040529b50600199505b888a14611a86578b611a3b848c602081106119df576119df613777565b611a50848d602081106119df576119df613777565b604051602001611a62939291906139ce565b6040516020818303038152906040529b508980611a7e9061373d565b9a5050611a1e565b8b604051602001611a979190613a2c565b6040516020818303038152906040529b508b604051602001611ab99190613ac5565b6040516020818303038152906040529a50611ad38b612ca1565b9a50611ade8f612b9c565b611ae78a612b9c565b611af08a611c5e565b611af98a611c5e565b8e604051602001611b0e959493929190613bb9565b60408051808303601f190181529190529f9e505050505050505050505050505050565b6001600160a01b038216331415611b8a5760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610aac565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b03163314611c205760405162461bcd60e51b8152600401610aac9061363a565b600c55565b611c30848484612579565b611c3c84848484612e06565b611c585760405162461bcd60e51b8152600401610aac90613d2f565b50505050565b60408051808201825260068082526503066663030360d41b602080840191909152835180850185528281526533181818183360d11b81830152845180860186529283526503030306666360d41b838301528451600380825281870190965260609591939260009290820181803683370190505090506000611ce46006600489901c613685565b9050848181518110611cf857611cf8613777565b602001015160f81c60f81b82600281518110611d1657611d16613777565b60200101906001600160f81b031916908160001a905350838181518110611d3f57611d3f613777565b602001015160f81c60f81b82600181518110611d5d57611d5d613777565b60200101906001600160f81b031916908160001a905350828181518110611d8657611d86613777565b602001015160f81c60f81b82600081518110611da457611da4613777565b60200101906001600160f81b031916908160001a9053506040805180820190915260108082526f181899199a1a9b1b9c1cb0b131b232b360811b6020830152611ded9089613685565b60ff1681518110611e0057611e00613777565b01602001516001600160f81b03191682611e1b6002846136af565b81518110611e2b57611e2b613777565b60200101906001600160f81b031916908160001a905350909695505050505050565b6008546001600160a01b03163314611e775760405162461bcd60e51b8152600401610aac9061363a565b601055565b606080611e8c83610733856112ab565b9050611e9781612ca1565b604051602001611ea79190613d82565b604051602081830303815290604052915050919050565b611ec66128ff565b60026009541415611f195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610aac565b600260095560115460009015611f6c5760405162461bcd60e51b81526020600482015260186024820152774d696e74696e67206973206e6f74206c697665207965742160401b6044820152606401610aac565b601254611fbb5760405162461bcd60e51b815260206004820152601e60248201527f57686974656c697374206d696e74696e67206973206e6f74206f70656e2100006044820152606401610aac565b6040516001600160601b03193360601b16602082015260340160405160208183030381529060405280519060200120905060005b825181101561208e57600083828151811061200c5761200c613777565b6020026020010151905080831161204e57604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061207b565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b50806120868161373d565b915050611fef565b50600b5481146120f15760405162461bcd60e51b815260206004820152602860248201527f596f7520617265206e6f7420656c696769626c6520666f722057686974656c696044820152677374206d696e742160c01b6064820152608401610aac565b600f54156121a0576000600f54346121099190613685565b9050801561214e5760405162461bcd60e51b8152602060048201526012602482015271084c2c840c2dadadeeadce840decc408aa8960731b6044820152606401610aac565b600f5461215b90346136af565b93506000841161219e5760405162461bcd60e51b815260206004820152600e60248201526d0496e70757420616d6f756e743d360941b6044820152606401610aac565b505b600e54336000908152601560205260409020546121be9085906136c3565b11156121dc5760405162461bcd60e51b8152600401610aac906136db565b600d54600c546121ec9190613726565b836121f660005490565b61220091906136c3565b111561223a5760405162461bcd60e51b8152602060048201526009602482015268536f6c64206f75742160b81b6044820152606401610aac565b33600090815260156020526040812080548592906122599084906136c3565b909155506122699050338461255f565b5050600160095550565b600a8054612280906135ff565b80601f01602080910402602001604051908101604052809291908181526020018280546122ac906135ff565b80156122f95780601f106122ce576101008083540402835291602001916122f9565b820191906000526020600020905b8154815290600101906020018083116122dc57829003601f168201915b505050505081565b60606000612310601154612b9c565b61231b601054612b9c565b612326600f54612b9c565b612331601254612b9c565b61233c601354612b9c565b612347600e54612b9c565b60405160200161235c96959493929190613dc7565b6040516020818303038152906040529050600061238061237b60005490565b612b9c565b61238b600d54612b9c565b612396600c54612b9c565b6001600160a01b0387166000908152601560205260409020546123b890612b9c565b6040516020016123cb9493929190613ece565b6040516020818303038152906040529050600082826040516020016123f1929190613f8c565b60408051601f1981840301815291905295945050505050565b6008546001600160a01b031633146124345760405162461bcd60e51b8152600401610aac9061363a565b6001600160a01b0381166124995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aac565b6124a281612b4a565b50565b6008546001600160a01b031633146124cf5760405162461bcd60e51b8152600401610aac9061363a565b600b55565b6008546001600160a01b031633146124fe5760405162461bcd60e51b8152600401610aac9061363a565b601255565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6111bd828260405180602001604052806000815250612f13565b6000612584826129a1565b80519091506000906001600160a01b0316336001600160a01b031614806125bb5750336125b084610a41565b6001600160a01b0316145b806125cd575081516125cd90336108b4565b9050806126375760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610aac565b846001600160a01b031682600001516001600160a01b0316146126ab5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610aac565b6001600160a01b03841661270f5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610aac565b61271f6000848460000151612503565b6001600160a01b03851660009081526004602052604081208054600192906127519084906001600160801b0316613fbb565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0386166000908152600460205260408120805460019450909261279d91859116613fe3565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526003909152948520935184549151909216600160a01b026001600160e01b031990911691909216171790556128248460016136c3565b6000818152600360205260409020549091506001600160a01b03166128b55761284e816000541190565b156128b55760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b33321461111c57600080fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612958576040519150601f19603f3d011682016040523d82523d6000602084013e61295d565b606091505b5050905080610be45760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610aac565b60408051808201909152600080825260208201526129c0826000541190565b612a1f5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610aac565b60007f00000000000000000000000000000000000000000000000000000000000000038310612a8057612a727f000000000000000000000000000000000000000000000000000000000000000384613726565b612a7d9060016136c3565b90505b825b818110612ae9576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215612ad657949350505050565b5080612ae181614005565b915050612a82565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610aac565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606081612bc05750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612bea5780612bd48161373d565b9150612be39050600a836136af565b9150612bc4565b6000816001600160401b03811115612c0457612c04613399565b6040519080825280601f01601f191660200182016040528015612c2e576020820181803683370190505b5090505b8415612c9957612c43600183613726565b9150612c50600a86613685565b612c5b9060306136c3565b60f81b818381518110612c7057612c70613777565b60200101906001600160f81b031916908160001a905350612c92600a866136af565b9450612c32565b949350505050565b805160609080612cc1575050604080516020810190915260008152919050565b60006003612cd08360026136c3565b612cda91906136af565b612ce5906004613758565b90506000612cf48260206136c3565b6001600160401b03811115612d0b57612d0b613399565b6040519080825280601f01601f191660200182016040528015612d35576020820181803683370190505b5090506000604051806060016040528060408152602001614077604091399050600181016020830160005b86811015612dc1576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101612d60565b506003860660018114612ddb5760028114612dec57612df8565b613d3d60f01b600119830152612df8565b603d60f81b6000198301525b505050918152949350505050565b60006001600160a01b0384163b15612f0857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612e4a90339089908890889060040161401c565b602060405180830381600087803b158015612e6457600080fd5b505af1925050508015612e94575060408051601f3d908101601f19168201909252612e9191810190614059565b60015b612eee573d808015612ec2576040519150601f19603f3d011682016040523d82523d6000602084013e612ec7565b606091505b508051612ee65760405162461bcd60e51b8152600401610aac90613d2f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612c99565b506001949350505050565b6000546001600160a01b038416612f765760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610aac565b612f81816000541190565b15612fce5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610aac565b7f00000000000000000000000000000000000000000000000000000000000000038311156130495760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610aac565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906130a5908790613fe3565b6001600160801b031681526020018583602001516130c39190613fe3565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156131e25760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46131a66000888488612e06565b6131c25760405162461bcd60e51b8152600401610aac90613d2f565b816131cc8161373d565b92505080806131da9061373d565b915050613159565b5060008190556128f7565b6040518061040001604052806020906020820280368337509192915050565b6001600160e01b0319811681146124a257600080fd5b60006020828403121561323457600080fd5b813561323f8161320c565b9392505050565b60005b83811015613261578181015183820152602001613249565b83811115611c585750506000910152565b6000815180845261328a816020860160208601613246565b601f01601f19169290920160200192915050565b60208152600061323f6020830184613272565b6000602082840312156132c357600080fd5b5035919050565b6001600160a01b03811681146124a257600080fd5b600080604083850312156132f257600080fd5b82356132fd816132ca565b946020939093013593505050565b60008060006060848603121561332057600080fd5b833561332b816132ca565b9250602084013561333b816132ca565b929592945050506040919091013590565b60006020828403121561335e57600080fd5b813561323f816132ca565b6000806040838503121561337c57600080fd5b82359150602083013561338e816132ca565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156133d7576133d7613399565b604052919050565b600082601f8301126133f057600080fd5b81356001600160401b0381111561340957613409613399565b61341c601f8201601f19166020016133af565b81815284602083860101111561343157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561346057600080fd5b81356001600160401b0381111561347657600080fd5b612c99848285016133df565b6000806040838503121561349557600080fd5b82356134a0816132ca565b91506020830135801515811461338e57600080fd5b600080600080608085870312156134cb57600080fd5b84356134d6816132ca565b935060208501356134e6816132ca565b92506040850135915060608501356001600160401b0381111561350857600080fd5b613514878288016133df565b91505092959194509250565b6000806040838503121561353357600080fd5b823591506020808401356001600160401b038082111561355257600080fd5b818601915086601f83011261356657600080fd5b81358181111561357857613578613399565b8060051b91506135898483016133af565b81815291830184019184810190898411156135a357600080fd5b938501935b838510156135c1578435825293850193908501906135a8565b8096505050505050509250929050565b600080604083850312156135e457600080fd5b82356135ef816132ca565b9150602083013561338e816132ca565b600181811c9082168061361357607f821691505b6020821081141561363457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6000826136945761369461366f565b500690565b634e487b7160e01b600052601160045260246000fd5b6000826136be576136be61366f565b500490565b600082198211156136d6576136d6613699565b500190565b6020808252602b908201527f5468697320776f756c642065786365656420746865206d6178696d756d204e4660408201526a54732f616464726573732160a81b606082015260800190565b60008282101561373857613738613699565b500390565b600060001982141561375157613751613699565b5060010190565b600081600019048311821515161561377257613772613699565b500290565b634e487b7160e01b600052603260045260246000fd5b6000815161379f818560208601613246565b9290920192915050565b7f3c74657874207374796c653d22666f6e742d73697a653a20313470783b666f6e81527f742d66616d696c793a20436f75726965722220783d223530252220793d22333060208201527f2220646f6d696e616e742d626173656c696e653d226d6964646c65222074657860408201527f742d616e63686f723d226d6964646c65222066696c6c3d2223616161223e4f7760608201526603732b210313c960cd1b608082015260008251613863816087850160208701613246565b661e17ba32bc3a1f60c91b6087939091019283015250608e01919050565b60008651613893818460208b01613246565b80830190507f3c646566733e3c6c696e6561724772616469656e742069643d22677231223e3c81527f73746f70206f66667365743d22302522207374796c653d2273746f702d636f6c6020820152636f723a2360e01b60408201528651613901816044840160208b01613246565b7f222f3e3c73746f70206f66667365743d223130302522207374796c653d22737460449290910191820152696f702d636f6c6f723a2360b01b6064820152855161395281606e840160208a01613246565b7f222f3e3c2f6c696e6561724772616469656e743e3c2f646566733e3c70617468606e92909101918201526420643d224d60d81b608e8201526139c26139b46139ae6139a1609385018961378d565b600160fd1b815260010190565b8661378d565b61205160f01b815260020190565b98975050505050505050565b600084516139e0818460208901613246565b8451908301906139f4818360208901613246565b600160fd1b91019081528351613a11816001840160208801613246565b600b60fa1b6001929091019182015260020195945050505050565b60008251613a3e818460208701613246565b7f222066696c6c3d226e6f6e6522207374726f6b653d2275726c282367723129229201918252507f207374726f6b652d77696474683d22333022207374726f6b652d6c696e65636160208201527f703d22726f756e6422207374726f6b652d6c696e656a6f696e3d22726f756e6460408201526211179f60e91b6060820152606301919050565b713c73766720786d6c6e733d22687474703a2f60701b81527f2f7777772e77332e6f72672f323030302f73766722207072657365727665417360128201527f70656374526174696f3d22784d696e594d696e206d656574222076696577426f60328201527f783d223020302035303020353030223e3c7265637420783d22302220793d223060528201527f222077696474683d2235303022206865696768743d22353030222066696c6c3d6072820152671111b3333311179f60c11b60928201528151600090613b9c81609a850160208701613246565b651e17b9bb339f60d11b609a93909101928301525060a001919050565b7f7b226e616d65223a20224574686572205369676e205061737320230000000000815260008651613bf181601b850160208b01613246565b7f222c202261747472696275746573223a205b7b2274726169745f74797065223a601b9184019182015275101129b2b3b6b2b73a399116113b30b63ab2911d101160511b603b8201528651613c4d816051840160208b01613246565b7f227d2c7b2274726169745f74797065223a2022537461727420636f6c6f72222c605192909101918201526a2276616c7565223a20222360a81b607182018190528651613ca181607c850160208b01613246565b7f227d2c207b2274726169745f74797065223a202253746f7020636f6c6f72222c607c9390910192830152609c8201526139c2613d216139ae613ce760a785018961378d565b7f227d5d2c22696d616765223a2022646174613a696d6167652f7376672b786d6c8152670ed8985cd94d8d0b60c21b602082015260280190565b61227d60f01b815260020190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251613dba81601d850160208701613246565b91909101601d0192915050565b6936b4b73a3830bab9b29d60b11b815260008751613dec81600a850160208c01613246565b6c1db83ab13634b1b83934b1b29d60991b600a918401918201528751613e19816017840160208c01613246565b6f1dbbb434ba32b634b9ba383934b1b29d60811b601792909101918201528651613e4a816027840160208b01613246565b6a1dbbb434ba32b634b9ba1d60a91b602792909101918201528551613e76816032840160208a01613246565b671db83ab13634b19d60c11b603292909101918201528451613e9f81603a840160208901613246565b613ec06139ae603a83850101681db6b0bc36b4b73a1d60b91b815260090190565b9a9950505050505050505050565b6c1dba37ba30b639bab838363c9d60991b815260008551613ef681600d850160208a01613246565b6d1db932b9b2b93b32b239b4bd329d60911b600d918401918201528551613f2481601b840160208a01613246565b6f1db1b7b63632b1ba34b7b739b4bd329d60811b601b92909101918201528451613f5581602b840160208901613246565b671db6b4b73a32b21d60c11b602b92909101918201528351613f7e816033840160208801613246565b016033019695505050505050565b60008351613f9e818460208801613246565b835190830190613fb2818360208801613246565b01949350505050565b60006001600160801b0383811690831681811015613fdb57613fdb613699565b039392505050565b60006001600160801b03808316818516808303821115613fb257613fb2613699565b60008161401457614014613699565b506000190190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061404f90830184613272565b9695505050505050565b60006020828403121561406b57600080fd5b815161323f8161320c56fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212201ed5d71f2c608044265b225479d972e95981dcd2d8a14682c17e44a0a2711a8264736f6c63430008090033

Deployed Bytecode Sourcemap

20221:10556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11738:370;;;;;;;;;;-1:-1:-1;11738:370:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;11738:370:0;;;;;;;;13297:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14364:202::-;;;;;;;;;;-1:-1:-1;14364:202:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1714:32:1;;;1696:51;;1684:2;1669:18;14364:202:0;1550:203:1;20374:32:0;;;;;;;;;;;;;;;;;;;1904:25:1;;;1892:2;1877:18;20374:32:0;1758:177:1;13985:375:0;;;;;;;;;;-1:-1:-1;13985:375:0;;;;;:::i;:::-;;:::i;:::-;;25243:103;;;;;;;;;;-1:-1:-1;25243:103:0;;;;;:::i;:::-;;:::i;21009:149::-;;;;;;;;;;-1:-1:-1;21009:149:0;;;;;:::i;:::-;;:::i;20711:28::-;;;;;;;;;;;;;;;;10711:94;;;;;;;;;;-1:-1:-1;10764:7:0;10787:12;10711:94;;26035:87;;;;;;;;;;-1:-1:-1;26035:87:0;;;;;:::i;:::-;;:::i;15036:142::-;;;;;;;;;;-1:-1:-1;15036:142:0;;;;;:::i;:::-;;:::i;25760:91::-;;;;;;;;;;-1:-1:-1;25760:91:0;;;;;:::i;:::-;;:::i;26919:646::-;;;;;;:::i;:::-;;:::i;10990:744::-;;;;;;;;;;-1:-1:-1;10990:744:0;;;;;:::i;:::-;;:::i;25665:89::-;;;;;;;;;;-1:-1:-1;25665:89:0;;;;;:::i;:::-;;:::i;28860:96::-;;;;;;;;;;;;;:::i;15182:157::-;;;;;;;;;;-1:-1:-1;15182:157:0;;;;;:::i;:::-;;:::i;28962:193::-;;;;;;;;;;-1:-1:-1;28962:193:0;;;;;:::i;:::-;;:::i;20496:40::-;;;;;;;;;;;;;;;;10809:177;;;;;;;;;;-1:-1:-1;10809:177:0;;;;;:::i;:::-;;:::i;25857:79::-;;;;;;;;;;-1:-1:-1;25857:79:0;;;;;:::i;:::-;;:::i;21302:130::-;;;;;;;;;;-1:-1:-1;21302:130:0;;;;;:::i;:::-;;:::i;21164:132::-;;;;;;;;;;-1:-1:-1;21164:132:0;;;;;:::i;:::-;;:::i;13175:118::-;;;;;;;;;;-1:-1:-1;13175:118:0;;;;;:::i;:::-;;:::i;12112:211::-;;;;;;;;;;-1:-1:-1;12112:211:0;;;;;:::i;:::-;;:::i;754:103::-;;;;;;;;;;;;;:::i;25352:93::-;;;;;;;;;;-1:-1:-1;25352:93:0;;;;;:::i;:::-;;:::i;21438:413::-;;;;;;;;;;-1:-1:-1;21438:413:0;;;;;:::i;:::-;;:::i;20603:26::-;;;;;;;;;;;;;;;;20636:32;;;;;;;;;;;;;;;;20413:26;;;;;;;;;;;;;;;;20446:43;;;;;;;;;;;;;;;;535:87;;;;;;;;;;-1:-1:-1;608:6:0;;-1:-1:-1;;;;;608:6:0;535:87;;20675:29;;;;;;;;;;;;;;;;13395:98;;;;;;;;;;;;;:::i;22242:2634::-;;;;;;;;;;-1:-1:-1;22242:2634:0;;;;;:::i;:::-;;:::i;14570:272::-;;;;;;;;;;-1:-1:-1;14570:272:0;;;;;:::i;:::-;;:::i;25566:93::-;;;;;;;;;;-1:-1:-1;25566:93:0;;;;;:::i;:::-;;:::i;15343:311::-;;;;;;;;;;-1:-1:-1;15343:311:0;;;;;:::i;:::-;;:::i;21857:379::-;;;;;;;;;;-1:-1:-1;21857:379:0;;;;;:::i;:::-;;:::i;25150:87::-;;;;;;;;;;-1:-1:-1;25150:87:0;;;;;:::i;:::-;;:::i;24882:262::-;;;;;;;;;;-1:-1:-1;24882:262:0;;;;;:::i;:::-;;:::i;20746:42::-;;;;;;;;;;-1:-1:-1;20746:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;27571:1097;;;;;;:::i;:::-;;:::i;20278:26::-;;;;;;;;;;;;;:::i;18440:43::-;;;;;;;;;;;;;;;;20332:35;;;;;;;;;;;;;;;;26128:785;;;;;;;;;;-1:-1:-1;26128:785:0;;;;;:::i;:::-;;:::i;14846:186::-;;;;;;;;;;-1:-1:-1;14846:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;14991:25:0;;;14968:4;14991:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;14846:186;863:201;;;;;;;;;;-1:-1:-1;863:201:0;;;;;:::i;:::-;;:::i;25942:87::-;;;;;;;;;;-1:-1:-1;25942:87:0;;;;;:::i;:::-;;:::i;25451:109::-;;;;;;;;;;-1:-1:-1;25451:109:0;;;;;:::i;:::-;;:::i;11738:370::-;11865:4;-1:-1:-1;;;;;;11895:40:0;;-1:-1:-1;;;11895:40:0;;:99;;-1:-1:-1;;;;;;;11946:48:0;;-1:-1:-1;;;11946:48:0;11895:99;:160;;;-1:-1:-1;;;;;;;12005:50:0;;-1:-1:-1;;;12005:50:0;11895:160;:207;;;-1:-1:-1;;;;;;;;;;9473:40:0;;;12066:36;11881:221;11738:370;-1:-1:-1;;11738:370:0:o;13297:94::-;13351:13;13380:5;13373:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13297:94;:::o;14364:202::-;14432:7;14456:16;14464:7;15715:4;15745:12;-1:-1:-1;15735:22:0;15658:105;14456:16;14448:74;;;;-1:-1:-1;;;14448:74:0;;8304:2:1;14448:74:0;;;8286:21:1;8343:2;8323:18;;;8316:30;8382:34;8362:18;;;8355:62;-1:-1:-1;;;8433:18:1;;;8426:43;8486:19;;14448:74:0;;;;;;;;;-1:-1:-1;14536:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;14536:24:0;;14364:202::o;13985:375::-;14054:13;14070:24;14086:7;14070:15;:24::i;:::-;14054:40;;14115:5;-1:-1:-1;;;;;14109:11:0;:2;-1:-1:-1;;;;;14109:11:0;;;14101:58;;;;-1:-1:-1;;;14101:58:0;;8718:2:1;14101:58:0;;;8700:21:1;8757:2;8737:18;;;8730:30;8796:34;8776:18;;;8769:62;-1:-1:-1;;;8847:18:1;;;8840:32;8889:19;;14101:58:0;8516:398:1;14101:58:0;171:10;-1:-1:-1;;;;;14182:21:0;;;;:62;;-1:-1:-1;14207:37:0;14224:5;171:10;14846:186;:::i;14207:37::-;14166:153;;;;-1:-1:-1;;;14166:153:0;;9121:2:1;14166:153:0;;;9103:21:1;9160:2;9140:18;;;9133:30;9199:34;9179:18;;;9172:62;9270:27;9250:18;;;9243:55;9315:19;;14166:153:0;8919:421:1;14166:153:0;14326:28;14335:2;14339:7;14348:5;14326:8;:28::i;:::-;14047:313;13985:375;;:::o;25243:103::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;25318:14:::1;:20:::0;25243:103::o;21009:149::-;608:6;;21092:7;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;21111:27:::1;21121:9;21132:5;21111:9;:27::i;:::-;-1:-1:-1::0;21149:1:0::1;21009:149:::0;;;;:::o;26035:87::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;26100:11:::1;:14:::0;26035:87::o;15036:142::-;15144:28;15154:4;15160:2;15164:7;15144:9;:28::i;25760:91::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;25829:9:::1;:14:::0;25760:91::o;26919:646::-;20977:13;:11;:13::i;:::-;1391:1:::1;1533:7;;:19;;1525:63;;;::::0;-1:-1:-1;;;1525:63:0;;9908:2:1;1525:63:0::1;::::0;::::1;9890:21:1::0;9947:2;9927:18;;;9920:30;9986:33;9966:18;;;9959:61;10037:18;;1525:63:0::1;9706:355:1::0;1525:63:0::1;1391:1;1599:7;:18:::0;27009:9:::2;::::0;:12;27001:49:::2;;;::::0;-1:-1:-1;;;27001:49:0;;10268:2:1;27001:49:0::2;::::0;::::2;10250:21:1::0;10307:2;10287:18;;;10280:30;-1:-1:-1;;;10326:18:1;;;10319:54;10390:18;;27001:49:0::2;10066:348:1::0;27001:49:0::2;27062:14;::::0;27054:57:::2;;;::::0;-1:-1:-1;;;27054:57:0;;10621:2:1;27054:57:0::2;::::0;::::2;10603:21:1::0;10660:2;10640:18;;;10633:30;10699:29;10679:18;;;10672:57;10746:18;;27054:57:0::2;10419:351:1::0;27054:57:0::2;27120:11;::::0;:15;27115:197:::2;;27152:9;27172:11;;27162:9;:21;;;;:::i;:::-;27152:31:::0;-1:-1:-1;27203:4:0;;27195:34:::2;;;::::0;-1:-1:-1;;;27195:34:0;;11226:2:1;27195:34:0::2;::::0;::::2;11208:21:1::0;11265:2;11245:18;;;11238:30;-1:-1:-1;;;11284:18:1;;;11277:48;11342:18;;27195:34:0::2;11024:342:1::0;27195:34:0::2;27254:11;::::0;27244:21:::2;::::0;:9:::2;:21;:::i;:::-;27241:24;;27288:1;27285:2;:4;27277:30;;;::::0;-1:-1:-1;;;27277:30:0;;11830:2:1;27277:30:0::2;::::0;::::2;11812:21:1::0;11869:2;11849:18;;;11842:30;-1:-1:-1;;;11888:18:1;;;11881:44;11942:18;;27277:30:0::2;11628:338:1::0;27277:30:0::2;27140:172;27115:197;27356:7;::::0;27338:10:::2;27330:19;::::0;;;:7:::2;:19;::::0;;;;;:24:::2;::::0;27352:2;;27330:24:::2;:::i;:::-;:33;;27322:88;;;;-1:-1:-1::0;;;27322:88:0::2;;;;;;;:::i;:::-;27468:12;;27451:14;;:29;;;;:::i;:::-;27445:2;27429:13;10764:7:::0;10787:12;;10711:94;27429:13:::2;:18;;;;:::i;:::-;:51;;27421:74;;;::::0;-1:-1:-1;;;27421:74:0;;12848:2:1;27421:74:0::2;::::0;::::2;12830:21:1::0;12887:1;12867:18;;;12860:29;-1:-1:-1;;;12905:18:1;;;12898:39;12954:18;;27421:74:0::2;12646:332:1::0;27421:74:0::2;27514:10;27506:19;::::0;;;:7:::2;:19;::::0;;;;:23;;27527:2;;27506:19;:23:::2;::::0;27527:2;;27506:23:::2;:::i;:::-;::::0;;;-1:-1:-1;27533:24:0::2;::::0;-1:-1:-1;27543:10:0::2;27554:2:::0;27533:9:::2;:24::i;:::-;-1:-1:-1::0;1347:1:0::1;1640:7;:22:::0;26919:646::o;10990:744::-;11099:7;11134:16;11144:5;11134:9;:16::i;:::-;11126:5;:24;11118:71;;;;-1:-1:-1;;;11118:71:0;;13185:2:1;11118:71:0;;;13167:21:1;13224:2;13204:18;;;13197:30;13263:34;13243:18;;;13236:62;-1:-1:-1;;;13314:18:1;;;13307:32;13356:19;;11118:71:0;12983:398:1;11118:71:0;11196:22;10787:12;;;11196:22;;11316:350;11340:14;11336:1;:18;11316:350;;;11370:31;11404:14;;;:11;:14;;;;;;;;;11370:48;;;;;;;;;-1:-1:-1;;;;;11370:48:0;;;;;-1:-1:-1;;;11370:48:0;;;-1:-1:-1;;;;;11370:48:0;;;;;;;;11431:28;11427:89;;11492:14;;;-1:-1:-1;11427:89:0;11549:5;-1:-1:-1;;;;;11528:26:0;:17;-1:-1:-1;;;;;11528:26:0;;11524:135;;;11586:5;11571:11;:20;11567:59;;;-1:-1:-1;11613:1:0;-1:-1:-1;11606:8:0;;-1:-1:-1;;;11606:8:0;11567:59;11636:13;;;;:::i;:::-;;;;11524:135;-1:-1:-1;11356:3:0;;;;:::i;:::-;;;;11316:350;;;-1:-1:-1;11672:56:0;;-1:-1:-1;;;11672:56:0;;13728:2:1;11672:56:0;;;13710:21:1;13767:2;13747:18;;;13740:30;13806:34;13786:18;;;13779:62;-1:-1:-1;;;13857:18:1;;;13850:44;13911:19;;11672:56:0;13526:410:1;25665:89:0;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;25731:12:::1;:15:::0;25665:89::o;28860:96::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;28907:41:::1;28918:7;608:6:::0;;-1:-1:-1;;;;;608:6:0;;535:87;28918:7:::1;28926:21;28907:10;:41::i;:::-;28860:96::o:0;15182:157::-;15294:39;15311:4;15317:2;15321:7;15294:39;;;;;;;;;;;;:16;:39::i;28962:193::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;29079:6:::1;29054:21;:31;;29045:77;;;::::0;-1:-1:-1;;;29045:77:0;;14143:2:1;29045:77:0::1;::::0;::::1;14125:21:1::0;;;14162:18;;;14155:30;14221:34;14201:18;;;14194:62;14273:18;;29045:77:0::1;13941:356:1::0;29045:77:0::1;29126:21;29137:2;29140:6;29126:10;:21::i;:::-;28962:193:::0;;:::o;10809:177::-;10876:7;10787:12;;10900:5;:21;10892:69;;;;-1:-1:-1;;;10892:69:0;;14504:2:1;10892:69:0;;;14486:21:1;14543:2;14523:18;;;14516:30;14582:34;14562:18;;;14555:62;-1:-1:-1;;;14633:18:1;;;14626:33;14676:19;;10892:69:0;14302:399:1;10892:69:0;-1:-1:-1;10975:5:0;10809:177::o;25857:79::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;25918:7:::1;:10:::0;25857:79::o;21302:130::-;21398:25;;21357:13;14851:15:1;;;-1:-1:-1;;;;;;14847:53:1;21398:25:0;;;14835:66:1;21357:13:0;21389:35;;14917:12:1;;21398:25:0;;;;;;;;;;;;21389:8;:35::i;21164:132::-;21241:4;21280:8;-1:-1:-1;;;;;21264:24:0;:12;21272:3;21264:7;:12::i;:::-;-1:-1:-1;;;;;21264:24:0;;;21164:132;-1:-1:-1;;;21164:132:0:o;13175:118::-;13239:7;13262:20;13274:7;13262:11;:20::i;:::-;:25;;13175:118;-1:-1:-1;;13175:118:0:o;12112:211::-;12176:7;-1:-1:-1;;;;;12200:19:0;;12192:75;;;;-1:-1:-1;;;12192:75:0;;15142:2:1;12192:75:0;;;15124:21:1;15181:2;15161:18;;;15154:30;15220:34;15200:18;;;15193:62;-1:-1:-1;;;15271:18:1;;;15264:41;15322:19;;12192:75:0;14940:407:1;12192:75:0;-1:-1:-1;;;;;;12289:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;12289:27:0;;12112:211::o;754:103::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;819:30:::1;846:1;819:18;:30::i;25352:93::-:0;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;25420:14:::1;:17:::0;25352:93::o;21438:413::-;21495:13;21527:16;21560:4;:11;21574:1;21560:15;;;;:::i;:::-;21556:19;;:1;:19;:::i;:::-;-1:-1:-1;;;;;21546:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21546:30:0;;21527:49;;-1:-1:-1;;;21587:3:0;21591:1;21587:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;21587:12:0;;;;;;;;;-1:-1:-1;;;21610:3:0;21614:1;21610:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;21610:12:0;;;;;;;;;21638:6;21633:182;21654:4;:11;21650:1;:15;21633:182;;;21703:8;;;;;;;;;;;;;-1:-1:-1;;;21703:8:0;;;21734:1;21723:4;21728:1;21723:7;;;;;;;;:::i;:::-;;;;;21703:35;;-1:-1:-1;;;;;;21723:7:0;;;:12;;;:7;21717:19;;21703:35;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;21703:35:0;21690:3;21696;:1;21698;21696:3;:::i;:::-;21694:5;;:1;:5;:::i;:::-;21690:10;;;;;;;;:::i;:::-;;;;:48;-1:-1:-1;;;;;21690:48:0;;;;;;;;;21766:8;;;;;;;;;;;;;-1:-1:-1;;;21766:8:0;;;21786:4;21791:1;21786:7;;;;;;;;:::i;:::-;;;;;;21766:37;;21786:7;;;;;21796:4;21780:21;;21766:37;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;21766:37:0;21753:3;21759;:1;21761;21759:3;:::i;:::-;21757:5;;:1;:5;:::i;:::-;21753:10;;;;;;;;:::i;:::-;;;;:50;-1:-1:-1;;;;;21753:50:0;;;;;;;;-1:-1:-1;21667:3:0;;;;:::i;:::-;;;;21633:182;;;-1:-1:-1;21839:3:0;21438:413;-1:-1:-1;;21438:413:0:o;13395:98::-;13451:13;13480:7;13473:14;;;;;:::i;22242:2634::-;22314:13;22339:20;22363;22387:9;22407:16;22434:12;22457;22480;22503;22526;22542:21;;:::i;:::-;22567;;:::i;:::-;22636:24;;-1:-1:-1;;;;;;14855:2:1;14851:15;;;14847:53;22636:24:0;;;14835:66:1;22592:14:0;;14917:12:1;;22636:24:0;;;-1:-1:-1;;22636:24:0;;;;;;;;;22626:35;;22636:24;22626:35;;;;22609:53;;;15786:19:1;15821:12;22609:53:0;;;;;;;;;;;;22592:70;;22700:4;22692:1;22694;22692:4;;;;;;;;:::i;:::-;;;;;22678:27;;;22692:4;;22678:27;:::i;:::-;22677:31;;22707:1;22677:31;:::i;:::-;22718:1;22712:7;;22750:4;;22666:42;;-1:-1:-1;22757:3:0;;22750:4;;22752:1;;22750:4;;;;;;:::i;:::-;;;;;22736:24;;;22750:4;;22736:24;:::i;:::-;22730:30;;22770:1;;-1:-1:-1;22764:102:0;22775:8;22772:1;:11;22764:102;;22820:1;22806:12;22810:8;22806:3;:12;:::i;:::-;22805:16;;;;:::i;:::-;22799:2;22802:1;22799:5;;;;;;;:::i;:::-;;;;:22;22858:3;22849:1;22851:3;:1;22853;22851:3;:::i;:::-;22849:6;;;;;;;;:::i;:::-;;;;;22835:26;;;22849:6;;22835:26;:::i;:::-;22829:2;22832:1;22829:5;;;;;;;:::i;:::-;;;;:32;22784:3;;;;:::i;:::-;;;;22764:102;;;22881:5;22876:10;;22904:1;22897:8;;22923:1;22916:8;;22934:1;22932:3;;22928:155;22939:8;22936:1;:11;22928:155;;22977:4;22968:2;22971:1;22968:5;;;;;;;:::i;:::-;;;;;:13;22963:33;;22991:2;22994:1;22991:5;;;;;;;:::i;:::-;;;;;22984:12;;22963:33;23018:4;23009:2;23012:1;23009:5;;;;;;;:::i;:::-;;;;;:13;23004:33;;23032:2;23035:1;23032:5;;;;;;;:::i;:::-;;;;;23025:12;;23004:33;23059:4;23050:2;23053:1;23050:5;;;;;;;:::i;:::-;;;;;:13;23045:33;;23073:2;23076:1;23073:5;;;;;;;:::i;:::-;;;;;23066:12;;23045:33;22948:3;;;;:::i;:::-;;;;22928:155;;;23120:1;23108:10;23113:4;23108:3;:10;:::i;:::-;23107:14;;;;:::i;:::-;23093:28;;:11;:28;:::i;:::-;23086:35;-1:-1:-1;23175:4:0;23171:1;23159:9;23175:4;23159;:9;:::i;:::-;23154:15;;:3;:15;:::i;:::-;23153:19;;;;:::i;:::-;23139:33;;:11;:33;:::i;:::-;:40;;;;:::i;:::-;23132:47;;23189:1;23187:3;;23183:74;23194:8;23191:1;:11;23183:74;;23227:4;23218:2;23221:1;23218:5;;;;;;;:::i;:::-;;;;:13;;;;;;;:::i;:::-;;;-1:-1:-1;23248:4:0;23239:2;23242:1;23239:5;;;;;;;:::i;:::-;;;;:13;;;;;;;:::i;:::-;;;-1:-1:-1;23203:3:0;;;;:::i;:::-;;;;23183:74;;;23281:1;23283;23281:4;;;;;;;;:::i;:::-;;;;;23312;;23281;;;;;;-1:-1:-1;23312:1:0;;23314;;23312:4;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;23329:9:0;23336:2;23329:4;:9;:::i;:::-;23322:16;-1:-1:-1;23373:2:0;23357:7;23362:2;23357:4;:7;:::i;:::-;23350:14;;:4;:14;:::i;:::-;:19;;23367:2;23350:19;:::i;:::-;23349:26;;;;:::i;:::-;23342:33;;23385:11;;23400:1;23385:16;23380:274;;;23591:16;23600:6;23591:8;:16::i;:::-;23424:194;;;;;;;;:::i;:::-;;;;;;;;;;;;;23414:204;;23380:274;;;23637:12;;;;;;;;;;;;;;23380:274;23684:7;23768:15;23778:4;23768:9;:15::i;:::-;23833;23843:4;23833:9;:15::i;:::-;23891:23;23908:2;23911:1;23908:5;;;;;23891:16;:23::i;:::-;23919;23936:2;23939:1;23936:5;;23919:23;23667:281;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23657:291;;23958:1;23956:3;;23952:131;23963:8;23960:1;:11;23952:131;;24014:7;24022:23;24039:2;24042:1;24039:5;;;;;;;:::i;24022:23::-;24050;24067:2;24070:1;24067:5;;;;;;;:::i;24050:23::-;23997:81;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23987:91;;23972:3;;;;;:::i;:::-;;;;23952:131;;;24113:7;24096:138;;;;;;;;:::i;:::-;;;;;;;;;;;;;24086:148;;24431:7;24254:194;;;;;;;;:::i;:::-;;;;;;;;;;;;;24238:211;;24462:24;24478:6;24462:9;:24::i;:::-;24453:33;;24553:25;24570:7;24553:16;:25::i;:::-;24636:26;24653:8;24636:16;:26::i;:::-;24709:15;24719:4;24709:9;:15::i;:::-;24771;24781:4;24771:9;:15::i;:::-;24830:6;24506:336;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;24506:336:0;;;;;;;22242:2634;-1:-1:-1;;;;;;;;;;;;;;;22242:2634:0:o;14570:272::-;-1:-1:-1;;;;;14661:24:0;;171:10;14661:24;;14653:63;;;;-1:-1:-1;;;14653:63:0;;24764:2:1;14653:63:0;;;24746:21:1;24803:2;24783:18;;;24776:30;24842:28;24822:18;;;24815:56;24888:18;;14653:63:0;24562:350:1;14653:63:0;171:10;14723:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;14723:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;14723:53:0;;;;;;;;;;14788:48;;540:41:1;;;14723:42:0;;171:10;14788:48;;513:18:1;14788:48:0;;;;;;;14570:272;;:::o;25566:93::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;25634:14:::1;:17:::0;25566:93::o;15343:311::-;15480:28;15490:4;15496:2;15500:7;15480:9;:28::i;:::-;15531:48;15554:4;15560:2;15564:7;15573:5;15531:22;:48::i;:::-;15515:133;;;;-1:-1:-1;;;15515:133:0;;;;;;;:::i;:::-;15343:311;;;;:::o;21857:379::-;21933:26;;;;;;;;;;;;-1:-1:-1;;;21933:26:0;;;;;;;;21963;;;;;;;;;;-1:-1:-1;;;21963:26:0;;;;21993;;;;;;;;;;-1:-1:-1;;;21993:26:0;;;;22042:12;;22052:1;22042:12;;;;;;;;;21908:13;;21963:26;;21993;-1:-1:-1;;22052:1:0;22042:12;;22052:1;;22042:12;;;;;-1:-1:-1;;22023:31:0;-1:-1:-1;22058:14:0;22075:8;22082:1;22079;22076:4;;;22075:8;:::i;:::-;22058:25;;22096:2;22099:6;22096:10;;;;;;;;:::i;:::-;;;;;;;;;22087:3;22091:1;22087:6;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;22087:19:0;;;;;;;;;22119:2;22122:6;22119:10;;;;;;;;:::i;:::-;;;;;;;;;22110:3;22114:1;22110:6;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;22110:19:0;;;;;;;;;22142:2;22145:6;22142:10;;;;;;;;:::i;:::-;;;;;;;;;22133:3;22137:1;22133:6;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;22133:19:0;;;;;;;;-1:-1:-1;22179:8:0;;;;;;;;;;;;;-1:-1:-1;;;22179:8:0;;;;22199:4;;:1;:4;:::i;:::-;22188:17;;22179:27;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;22179:27:0;22163:3;22167:8;22174:1;22167:6;:8;:::i;:::-;22163:13;;;;;;;;:::i;:::-;;;;:43;-1:-1:-1;;;;;22163:43:0;;;;;;;;-1:-1:-1;22224:3:0;;21857:379;-1:-1:-1;;;;;;21857:379:0:o;25150:87::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;25215:11:::1;:14:::0;25150:87::o;24882:262::-;24947:13;24972:21;25007:35;25017:7;25025:16;25033:7;25025;:16::i;25007:35::-;24997:45;;25109:25;25125:7;25109:9;:25::i;:::-;25060:75;;;;;;;;:::i;:::-;;;;;;;;;;;;;25046:90;;;24882:262;;;:::o;27571:1097::-;20977:13;:11;:13::i;:::-;1391:1:::1;1533:7;;:19;;1525:63;;;::::0;-1:-1:-1;;;1525:63:0;;9908:2:1;1525:63:0::1;::::0;::::1;9890:21:1::0;9947:2;9927:18;;;9920:30;9986:33;9966:18;;;9959:61;10037:18;;1525:63:0::1;9706:355:1::0;1525:63:0::1;1391:1;1599:7;:18:::0;27703:9:::2;::::0;27680:11:::2;::::0;27703:12;27695:49:::2;;;::::0;-1:-1:-1;;;27695:49:0;;10268:2:1;27695:49:0::2;::::0;::::2;10250:21:1::0;10307:2;10287:18;;;10280:30;-1:-1:-1;;;10326:18:1;;;10319:54;10390:18;;27695:49:0::2;10066:348:1::0;27695:49:0::2;27756:17;::::0;27748:63:::2;;;::::0;-1:-1:-1;;;27748:63:0;;25992:2:1;27748:63:0::2;::::0;::::2;25974:21:1::0;26031:2;26011:18;;;26004:30;26070:32;26050:18;;;26043:60;26120:18;;27748:63:0::2;25790:354:1::0;27748:63:0::2;27831:28;::::0;-1:-1:-1;;;;;;27848:10:0::2;14855:2:1::0;14851:15;14847:53;27831:28:0::2;::::0;::::2;14835:66:1::0;14917:12;;27831:28:0::2;;;;;;;;;;;;27821:39;;;;;;27815:45;;27873:9;27868:268;27892:5;:12;27888:1;:16;27868:268;;;27922:11;27936:5;27942:1;27936:8;;;;;;;;:::i;:::-;;;;;;;27922:22;;27967:3;27960;:10;27956:172;;28007:26;::::0;;::::2;::::0;::::2;26306:19:1::0;;;26341:12;;;26334:28;;;26378:12;;28007:26:0::2;;;;;;;;;;;;27997:37;;;;;;27991:43;;27956:172;;;28088:26;::::0;;::::2;::::0;::::2;26306:19:1::0;;;26341:12;;;26334:28;;;26378:12;;28088:26:0::2;;;;;;;;;;;;28078:37;;;;;;28072:43;;27956:172;-1:-1:-1::0;27906:3:0;::::2;::::0;::::2;:::i;:::-;;;;27868:268;;;;28153:6;;28148:3;:11;28139:66;;;::::0;-1:-1:-1;;;28139:66:0;;26603:2:1;28139:66:0::2;::::0;::::2;26585:21:1::0;26642:2;26622:18;;;26615:30;26681:34;26661:18;;;26654:62;-1:-1:-1;;;26732:18:1;;;26725:38;26780:19;;28139:66:0::2;26401:404:1::0;28139:66:0::2;28214:14;::::0;:18;28209:206:::2;;28249:9;28269:14;;28259:9;:24;;;;:::i;:::-;28249:34:::0;-1:-1:-1;28303:4:0;;28295:34:::2;;;::::0;-1:-1:-1;;;28295:34:0;;11226:2:1;28295:34:0::2;::::0;::::2;11208:21:1::0;11265:2;11245:18;;;11238:30;-1:-1:-1;;;11284:18:1;;;11277:48;11342:18;;28295:34:0::2;11024:342:1::0;28295:34:0::2;28354:14;::::0;28344:24:::2;::::0;:9:::2;:24;:::i;:::-;28341:27;;28391:1;28388:2;:4;28380:30;;;::::0;-1:-1:-1;;;28380:30:0;;11830:2:1;28380:30:0::2;::::0;::::2;11812:21:1::0;11869:2;11849:18;;;11842:30;-1:-1:-1;;;11888:18:1;;;11881:44;11942:18;;28380:30:0::2;11628:338:1::0;28380:30:0::2;28237:178;28209:206;28459:7;::::0;28441:10:::2;28433:19;::::0;;;:7:::2;:19;::::0;;;;;:24:::2;::::0;28455:2;;28433:24:::2;:::i;:::-;:33;;28425:88;;;;-1:-1:-1::0;;;28425:88:0::2;;;;;;;:::i;:::-;28571:12;;28554:14;;:29;;;;:::i;:::-;28548:2;28532:13;10764:7:::0;10787:12;;10711:94;28532:13:::2;:18;;;;:::i;:::-;:51;;28524:74;;;::::0;-1:-1:-1;;;28524:74:0;;12848:2:1;28524:74:0::2;::::0;::::2;12830:21:1::0;12887:1;12867:18;;;12860:29;-1:-1:-1;;;12905:18:1;;;12898:39;12954:18;;28524:74:0::2;12646:332:1::0;28524:74:0::2;28617:10;28609:19;::::0;;;:7:::2;:19;::::0;;;;:23;;28630:2;;28609:19;:23:::2;::::0;28630:2;;28609:23:::2;:::i;:::-;::::0;;;-1:-1:-1;28636:24:0::2;::::0;-1:-1:-1;28646:10:0::2;28657:2:::0;28636:9:::2;:24::i;:::-;-1:-1:-1::0;;1347:1:0::1;1640:7;:22:::0;-1:-1:-1;27571:1097:0:o;20278:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26128:785::-;26196:13;26221:16;26280:27;26297:9;;26280:16;:27::i;:::-;26327:29;26344:11;;26327:16;:29::i;:::-;26380:32;26397:14;;26380:16;:32::i;:::-;26431:35;26448:17;;26431:16;:35::i;:::-;26482:32;26499:14;;26482:16;:32::i;:::-;26531:25;26548:7;;26531:16;:25::i;:::-;26247:313;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26221:340;;26565:16;26628:31;26645:13;10764:7;10787:12;;10711:94;26645:13;26628:16;:31::i;:::-;26682:30;26699:12;;26682:16;:30::i;:::-;26737:32;26754:14;;26737:16;:32::i;:::-;-1:-1:-1;;;;;26802:15:0;;;;;;:7;:15;;;;;;26785:33;;:16;:33::i;:::-;26591:232;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26565:259;;26828:23;26878:2;26881;26861:23;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26861:23:0;;;;;;;;;;26128:785;-1:-1:-1;;;;;26128:785:0:o;863:201::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;952:22:0;::::1;944:73;;;::::0;-1:-1:-1;;;944:73:0;;31067:2:1;944:73:0::1;::::0;::::1;31049:21:1::0;31106:2;31086:18;;;31079:30;31145:34;31125:18;;;31118:62;-1:-1:-1;;;31196:18:1;;;31189:36;31242:19;;944:73:0::1;30865:402:1::0;944:73:0::1;1028:28;1047:8;1028:18;:28::i;:::-;863:201:::0;:::o;25942:87::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;26009:6:::1;:12:::0;25942:87::o;25451:109::-;608:6;;-1:-1:-1;;;;;608:6:0;171:10;668:23;660:68;;;;-1:-1:-1;;;660:68:0;;;;;;;:::i;:::-;25529:17:::1;:23:::0;25451:109::o;18264:172::-;18361:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;18361:29:0;-1:-1:-1;;;;;18361:29:0;;;;;;;;;18402:28;;18361:24;;18402:28;;;;;;;18264:172;;;:::o;15767:98::-;15832:27;15842:2;15846:8;15832:27;;;;;;;;;;;;:9;:27::i;17014:1246::-;17111:35;17149:20;17161:7;17149:11;:20::i;:::-;17218:18;;17111:58;;-1:-1:-1;17176:22:0;;-1:-1:-1;;;;;17202:34:0;171:10;-1:-1:-1;;;;;17202:34:0;;:81;;;-1:-1:-1;171:10:0;17247:20;17259:7;17247:11;:20::i;:::-;-1:-1:-1;;;;;17247:36:0;;17202:81;:142;;;-1:-1:-1;17311:18:0;;17294:50;;171:10;14846:186;:::i;17294:50::-;17176:169;;17368:17;17352:101;;;;-1:-1:-1;;;17352:101:0;;31474:2:1;17352:101:0;;;31456:21:1;31513:2;31493:18;;;31486:30;31552:34;31532:18;;;31525:62;-1:-1:-1;;;31603:18:1;;;31596:48;31661:19;;17352:101:0;31272:414:1;17352:101:0;17498:4;-1:-1:-1;;;;;17476:26:0;:13;:18;;;-1:-1:-1;;;;;17476:26:0;;17460:98;;;;-1:-1:-1;;;17460:98:0;;31893:2:1;17460:98:0;;;31875:21:1;31932:2;31912:18;;;31905:30;31971:34;31951:18;;;31944:62;-1:-1:-1;;;32022:18:1;;;32015:36;32068:19;;17460:98:0;31691:402:1;17460:98:0;-1:-1:-1;;;;;17573:16:0;;17565:66;;;;-1:-1:-1;;;17565:66:0;;32300:2:1;17565:66:0;;;32282:21:1;32339:2;32319:18;;;32312:30;32378:34;32358:18;;;32351:62;-1:-1:-1;;;32429:18:1;;;32422:35;32474:19;;17565:66:0;32098:401:1;17565:66:0;17688:49;17705:1;17709:7;17718:13;:18;;;17688:8;:49::i;:::-;-1:-1:-1;;;;;17744:18:0;;;;;;:12;:18;;;;;:31;;17774:1;;17744:18;:31;;17774:1;;-1:-1:-1;;;;;17744:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;17744:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17782:16:0;;-1:-1:-1;17782:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;17782:16:0;;:29;;-1:-1:-1;;17782:29:0;;:::i;:::-;;;-1:-1:-1;;;;;17782:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17841:43:0;;;;;;;;-1:-1:-1;;;;;17841:43:0;;;;;-1:-1:-1;;;;;17867:15:0;17841:43;;;;;;;;;-1:-1:-1;17818:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;17818:66:0;-1:-1:-1;;;;;;17818:66:0;;;;;;;;;;;17913:11;17830:7;-1:-1:-1;17913:11:0;:::i;:::-;17976:1;17935:24;;;:11;:24;;;;;:29;17891:33;;-1:-1:-1;;;;;;17935:29:0;17931:236;;17993:20;18001:11;15715:4;15745:12;-1:-1:-1;15735:22:0;15658:105;17993:20;17989:171;;;18053:97;;;;;;;;18080:18;;-1:-1:-1;;;;;18053:97:0;;;;;;18111:28;;;;-1:-1:-1;;;;;18053:97:0;;;;;;;;;-1:-1:-1;18026:24:0;;;:11;:24;;;;;;;:124;;;;;;;;;-1:-1:-1;;;18026:124:0;-1:-1:-1;;;;;;18026:124:0;;;;;;;;;;;;17989:171;18197:7;18193:2;-1:-1:-1;;;;;18178:27:0;18187:4;-1:-1:-1;;;;;18178:27:0;;;;;;;;;;;18212:42;17104:1156;;;17014:1246;;;:::o;20854:87::-;20909:10;20923:9;20909:23;20901:32;;;;;28674:180;28755:12;28773:8;-1:-1:-1;;;;;28773:13:0;28794:7;28773:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28754:52;;;28818:7;28810:36;;;;-1:-1:-1;;;28810:36:0;;33425:2:1;28810:36:0;;;33407:21:1;33464:2;33444:18;;;33437:30;-1:-1:-1;;;33483:18:1;;;33476:46;33539:18;;28810:36:0;33223:340:1;12571:600:0;-1:-1:-1;;;;;;;;;;;;;;;;;12688:16:0;12696:7;15715:4;15745:12;-1:-1:-1;15735:22:0;15658:105;12688:16;12680:71;;;;-1:-1:-1;;;12680:71:0;;33770:2:1;12680:71:0;;;33752:21:1;33809:2;33789:18;;;33782:30;33848:34;33828:18;;;33821:62;-1:-1:-1;;;33899:18:1;;;33892:40;33949:19;;12680:71:0;33568:406:1;12680:71:0;12758:26;12806:12;12795:7;:23;12791:93;;12850:22;12860:12;12850:7;:22;:::i;:::-;:26;;12875:1;12850:26;:::i;:::-;12829:47;;12791:93;12910:7;12890:212;12927:18;12919:4;:26;12890:212;;12964:31;12998:17;;;:11;:17;;;;;;;;;12964:51;;;;;;;;;-1:-1:-1;;;;;12964:51:0;;;;;-1:-1:-1;;;12964:51:0;;;-1:-1:-1;;;;;12964:51:0;;;;;;;;13028:28;13024:71;;13076:9;12571:600;-1:-1:-1;;;;12571:600:0:o;13024:71::-;-1:-1:-1;12947:6:0;;;;:::i;:::-;;;;12890:212;;;-1:-1:-1;13108:57:0;;-1:-1:-1;;;13108:57:0;;34322:2:1;13108:57:0;;;34304:21:1;34361:2;34341:18;;;34334:30;34400:34;34380:18;;;34373:62;-1:-1:-1;;;34451:18:1;;;34444:45;34506:19;;13108:57:0;34120:411:1;1070:191:0;1163:6;;;-1:-1:-1;;;;;1180:17:0;;;-1:-1:-1;;;;;;1180:17:0;;;;;;;1213:40;;1163:6;;;1180:17;1163:6;;1213:40;;1144:16;;1213:40;1133:128;1070:191;:::o;7981:532::-;8037:13;8067:10;8063:53;;-1:-1:-1;;8094:10:0;;;;;;;;;;;;-1:-1:-1;;;8094:10:0;;;;;7981:532::o;8063:53::-;8141:5;8126:12;8182:78;8189:9;;8182:78;;8215:8;;;;:::i;:::-;;-1:-1:-1;8238:10:0;;-1:-1:-1;8246:2:0;8238:10;;:::i;:::-;;;8182:78;;;8270:19;8302:6;-1:-1:-1;;;;;8292:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8292:17:0;;8270:39;;8320:154;8327:10;;8320:154;;8354:11;8364:1;8354:11;;:::i;:::-;;-1:-1:-1;8423:10:0;8431:2;8423:5;:10;:::i;:::-;8410:24;;:2;:24;:::i;:::-;8397:39;;8380:6;8387;8380:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8380:56:0;;;;;;;;-1:-1:-1;8451:11:0;8460:2;8451:11;;:::i;:::-;;;8320:154;;;8498:6;7981:532;-1:-1:-1;;;;7981:532:0:o;29266:1508::-;29373:11;;29327:13;;29399:8;29395:23;;-1:-1:-1;;29409:9:0;;;;;;;;;-1:-1:-1;29409:9:0;;;29266:1508;-1:-1:-1;29266:1508:0:o;29395:23::-;29429:18;29467:1;29456:7;:3;29462:1;29456:7;:::i;:::-;29455:13;;;;:::i;:::-;29450:19;;:1;:19;:::i;:::-;29429:40;-1:-1:-1;29480:19:0;29512:15;29429:40;29525:2;29512:15;:::i;:::-;-1:-1:-1;;;;;29502:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29502:26:0;;29480:48;;29539:18;29560:5;;;;;;;;;;;;;;;;;29539:26;;29627:1;29620:5;29616:13;29672:2;29664:6;29660:15;29721:1;29689:769;29744:3;29741:1;29738:10;29689:769;;;29797:1;29840:12;;;;;29834:19;29933:4;29921:2;29917:14;;;;;29899:40;;29893:47;30042:2;30038:14;;;30034:25;;30020:40;;30014:47;30171:1;30167:13;;;30163:24;;30149:39;;30143:46;30291:16;;;;30277:31;;30271:38;29969:1;29965:11;;;30063:4;30010:58;;;30001:68;30094:11;;30139:57;;;30130:67;;;;30222:11;;30267:49;;30258:59;30346:3;30342:13;30373:22;;30441:1;30426:17;;;;29790:9;29689:769;;;29693:44;30488:1;30483:3;30479:11;30509:1;30504:84;;;;30607:1;30602:82;;;;30472:212;;30504:84;-1:-1:-1;;;;;30537:17:0;;30530:43;30504:84;;30602:82;-1:-1:-1;;;;;30635:17:0;;30628:41;30472:212;-1:-1:-1;;;30698:26:0;;;30705:6;29266:1508;-1:-1:-1;;;;29266:1508:0:o;19237:690::-;19374:4;-1:-1:-1;;;;;19391:13:0;;4541:20;4589:8;19387:535;;19430:72;;-1:-1:-1;;;19430:72:0;;-1:-1:-1;;;;;19430:36:0;;;;;:72;;171:10;;19481:4;;19487:7;;19496:5;;19430:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19430:72:0;;;;;;;;-1:-1:-1;;19430:72:0;;;;;;;;;;;;:::i;:::-;;;19417:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19661:13:0;;19657:215;;19694:61;;-1:-1:-1;;;19694:61:0;;;;;;;:::i;19657:215::-;19840:6;19834:13;19825:6;19821:2;19817:15;19810:38;19417:464;-1:-1:-1;;;;;;19552:55:0;-1:-1:-1;;;19552:55:0;;-1:-1:-1;19545:62:0;;19387:535;-1:-1:-1;19910:4:0;19237:690;;;;;;:::o;15869:1141::-;15974:20;15997:12;-1:-1:-1;;;;;16024:16:0;;16016:62;;;;-1:-1:-1;;;16016:62:0;;35497:2:1;16016:62:0;;;35479:21:1;35536:2;35516:18;;;35509:30;35575:34;35555:18;;;35548:62;-1:-1:-1;;;35626:18:1;;;35619:31;35667:19;;16016:62:0;35295:397:1;16016:62:0;16094:21;16102:12;15715:4;15745:12;-1:-1:-1;15735:22:0;15658:105;16094:21;16093:22;16085:64;;;;-1:-1:-1;;;16085:64:0;;35899:2:1;16085:64:0;;;35881:21:1;35938:2;35918:18;;;35911:30;35977:31;35957:18;;;35950:59;36026:18;;16085:64:0;35697:353:1;16085:64:0;16176:12;16164:8;:24;;16156:71;;;;-1:-1:-1;;;16156:71:0;;36257:2:1;16156:71:0;;;36239:21:1;36296:2;36276:18;;;36269:30;36335:34;36315:18;;;36308:62;-1:-1:-1;;;36386:18:1;;;36379:32;36428:19;;16156:71:0;36055:398:1;16156:71:0;-1:-1:-1;;;;;16335:16:0;;16302:30;16335:16;;;:12;:16;;;;;;;;;16302:49;;;;;;;;;-1:-1:-1;;;;;16302:49:0;;;;;-1:-1:-1;;;16302:49:0;;;;;;;;;;;16377:119;;;;;;;;16397:19;;16302:49;;16377:119;;;16397:39;;16427:8;;16397:39;:::i;:::-;-1:-1:-1;;;;;16377:119:0;;;;;16480:8;16445:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;16377:119:0;;;;;;-1:-1:-1;;;;;16358:16:0;;;;;;;:12;:16;;;;;;;;:138;;;;;;;;-1:-1:-1;;;16358:138:0;;;;;;;;;;;;16531:43;;;;;;;;;;-1:-1:-1;;;;;16557:15:0;16531:43;;;;;;;;16503:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;16503:71:0;-1:-1:-1;;;;;;16503:71:0;;;;;;;;;;;;;;;;;;16515:12;;16623:281;16647:8;16643:1;:12;16623:281;;;16676:38;;16701:12;;-1:-1:-1;;;;;16676:38:0;;;16693:1;;16676:38;;16693:1;;16676:38;16741:59;16772:1;16776:2;16780:12;16794:5;16741:22;:59::i;:::-;16723:150;;;;-1:-1:-1;;;16723:150:0;;;;;;;:::i;:::-;16882:14;;;;:::i;:::-;;;;16657:3;;;;;:::i;:::-;;;;16623:281;;;-1:-1:-1;16910:12:0;:27;;;16944:60;15343:311;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:269::-;908:3;946:5;940:12;973:6;968:3;961:19;989:63;1045:6;1038:4;1033:3;1029:14;1022:4;1015:5;1011:16;989:63;:::i;:::-;1106:2;1085:15;-1:-1:-1;;1081:29:1;1072:39;;;;1113:4;1068:50;;855:269;-1:-1:-1;;855:269:1:o;1129:231::-;1278:2;1267:9;1260:21;1241:4;1298:56;1350:2;1339:9;1335:18;1327:6;1298:56;:::i;1365:180::-;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;-1:-1:-1;1516:23:1;;1365:180;-1:-1:-1;1365:180:1:o;1940:131::-;-1:-1:-1;;;;;2015:31:1;;2005:42;;1995:70;;2061:1;2058;2051:12;2076:315;2144:6;2152;2205:2;2193:9;2184:7;2180:23;2176:32;2173:52;;;2221:1;2218;2211:12;2173:52;2260:9;2247:23;2279:31;2304:5;2279:31;:::i;:::-;2329:5;2381:2;2366:18;;;;2353:32;;-1:-1:-1;;;2076:315:1:o;2396:456::-;2473:6;2481;2489;2542:2;2530:9;2521:7;2517:23;2513:32;2510:52;;;2558:1;2555;2548:12;2510:52;2597:9;2584:23;2616:31;2641:5;2616:31;:::i;:::-;2666:5;-1:-1:-1;2723:2:1;2708:18;;2695:32;2736:33;2695:32;2736:33;:::i;:::-;2396:456;;2788:7;;-1:-1:-1;;;2842:2:1;2827:18;;;;2814:32;;2396:456::o;3185:247::-;3244:6;3297:2;3285:9;3276:7;3272:23;3268:32;3265:52;;;3313:1;3310;3303:12;3265:52;3352:9;3339:23;3371:31;3396:5;3371:31;:::i;3437:315::-;3505:6;3513;3566:2;3554:9;3545:7;3541:23;3537:32;3534:52;;;3582:1;3579;3572:12;3534:52;3618:9;3605:23;3595:33;;3678:2;3667:9;3663:18;3650:32;3691:31;3716:5;3691:31;:::i;:::-;3741:5;3731:15;;;3437:315;;;;;:::o;3757:127::-;3818:10;3813:3;3809:20;3806:1;3799:31;3849:4;3846:1;3839:15;3873:4;3870:1;3863:15;3889:275;3960:2;3954:9;4025:2;4006:13;;-1:-1:-1;;4002:27:1;3990:40;;-1:-1:-1;;;;;4045:34:1;;4081:22;;;4042:62;4039:88;;;4107:18;;:::i;:::-;4143:2;4136:22;3889:275;;-1:-1:-1;3889:275:1:o;4169:530::-;4211:5;4264:3;4257:4;4249:6;4245:17;4241:27;4231:55;;4282:1;4279;4272:12;4231:55;4318:6;4305:20;-1:-1:-1;;;;;4340:2:1;4337:26;4334:52;;;4366:18;;:::i;:::-;4410:55;4453:2;4434:13;;-1:-1:-1;;4430:27:1;4459:4;4426:38;4410:55;:::i;:::-;4490:2;4481:7;4474:19;4536:3;4529:4;4524:2;4516:6;4512:15;4508:26;4505:35;4502:55;;;4553:1;4550;4543:12;4502:55;4618:2;4611:4;4603:6;4599:17;4592:4;4583:7;4579:18;4566:55;4666:1;4641:16;;;4659:4;4637:27;4630:38;;;;4645:7;4169:530;-1:-1:-1;;;4169:530:1:o;4704:320::-;4772:6;4825:2;4813:9;4804:7;4800:23;4796:32;4793:52;;;4841:1;4838;4831:12;4793:52;4881:9;4868:23;-1:-1:-1;;;;;4906:6:1;4903:30;4900:50;;;4946:1;4943;4936:12;4900:50;4969:49;5010:7;5001:6;4990:9;4986:22;4969:49;:::i;5029:416::-;5094:6;5102;5155:2;5143:9;5134:7;5130:23;5126:32;5123:52;;;5171:1;5168;5161:12;5123:52;5210:9;5197:23;5229:31;5254:5;5229:31;:::i;:::-;5279:5;-1:-1:-1;5336:2:1;5321:18;;5308:32;5378:15;;5371:23;5359:36;;5349:64;;5409:1;5406;5399:12;5450:665;5545:6;5553;5561;5569;5622:3;5610:9;5601:7;5597:23;5593:33;5590:53;;;5639:1;5636;5629:12;5590:53;5678:9;5665:23;5697:31;5722:5;5697:31;:::i;:::-;5747:5;-1:-1:-1;5804:2:1;5789:18;;5776:32;5817:33;5776:32;5817:33;:::i;:::-;5869:7;-1:-1:-1;5923:2:1;5908:18;;5895:32;;-1:-1:-1;5978:2:1;5963:18;;5950:32;-1:-1:-1;;;;;5994:30:1;;5991:50;;;6037:1;6034;6027:12;5991:50;6060:49;6101:7;6092:6;6081:9;6077:22;6060:49;:::i;:::-;6050:59;;;5450:665;;;;;;;:::o;6120:1014::-;6213:6;6221;6274:2;6262:9;6253:7;6249:23;6245:32;6242:52;;;6290:1;6287;6280:12;6242:52;6326:9;6313:23;6303:33;;6355:2;6408;6397:9;6393:18;6380:32;-1:-1:-1;;;;;6472:2:1;6464:6;6461:14;6458:34;;;6488:1;6485;6478:12;6458:34;6526:6;6515:9;6511:22;6501:32;;6571:7;6564:4;6560:2;6556:13;6552:27;6542:55;;6593:1;6590;6583:12;6542:55;6629:2;6616:16;6651:2;6647;6644:10;6641:36;;;6657:18;;:::i;:::-;6703:2;6700:1;6696:10;6686:20;;6726:28;6750:2;6746;6742:11;6726:28;:::i;:::-;6788:15;;;6858:11;;;6854:20;;;6819:12;;;;6886:19;;;6883:39;;;6918:1;6915;6908:12;6883:39;6942:11;;;;6962:142;6978:6;6973:3;6970:15;6962:142;;;7044:17;;7032:30;;6995:12;;;;7082;;;;6962:142;;;7123:5;7113:15;;;;;;;;6120:1014;;;;;:::o;7139:388::-;7207:6;7215;7268:2;7256:9;7247:7;7243:23;7239:32;7236:52;;;7284:1;7281;7274:12;7236:52;7323:9;7310:23;7342:31;7367:5;7342:31;:::i;:::-;7392:5;-1:-1:-1;7449:2:1;7434:18;;7421:32;7462:33;7421:32;7462:33;:::i;7717:380::-;7796:1;7792:12;;;;7839;;;7860:61;;7914:4;7906:6;7902:17;7892:27;;7860:61;7967:2;7959:6;7956:14;7936:18;7933:38;7930:161;;;8013:10;8008:3;8004:20;8001:1;7994:31;8048:4;8045:1;8038:15;8076:4;8073:1;8066:15;7930:161;;7717:380;;;:::o;9345:356::-;9547:2;9529:21;;;9566:18;;;9559:30;9625:34;9620:2;9605:18;;9598:62;9692:2;9677:18;;9345:356::o;10775:127::-;10836:10;10831:3;10827:20;10824:1;10817:31;10867:4;10864:1;10857:15;10891:4;10888:1;10881:15;10907:112;10939:1;10965;10955:35;;10970:18;;:::i;:::-;-1:-1:-1;11004:9:1;;10907:112::o;11371:127::-;11432:10;11427:3;11423:20;11420:1;11413:31;11463:4;11460:1;11453:15;11487:4;11484:1;11477:15;11503:120;11543:1;11569;11559:35;;11574:18;;:::i;:::-;-1:-1:-1;11608:9:1;;11503:120::o;11971:128::-;12011:3;12042:1;12038:6;12035:1;12032:13;12029:39;;;12048:18;;:::i;:::-;-1:-1:-1;12084:9:1;;11971:128::o;12104:407::-;12306:2;12288:21;;;12345:2;12325:18;;;12318:30;12384:34;12379:2;12364:18;;12357:62;-1:-1:-1;;;12450:2:1;12435:18;;12428:41;12501:3;12486:19;;12104:407::o;12516:125::-;12556:4;12584:1;12581;12578:8;12575:34;;;12589:18;;:::i;:::-;-1:-1:-1;12626:9:1;;12516:125::o;13386:135::-;13425:3;-1:-1:-1;;13446:17:1;;13443:43;;;13466:18;;:::i;:::-;-1:-1:-1;13513:1:1;13502:13;;13386:135::o;15352:168::-;15392:7;15458:1;15454;15450:6;15446:14;15443:1;15440:21;15435:1;15428:9;15421:17;15417:45;15414:71;;;15465:18;;:::i;:::-;-1:-1:-1;15505:9:1;;15352:168::o;15525:127::-;15586:10;15581:3;15577:20;15574:1;15567:31;15617:4;15614:1;15607:15;15641:4;15638:1;15631:15;15844:185;15886:3;15924:5;15918:12;15939:52;15984:6;15979:3;15972:4;15965:5;15961:16;15939:52;:::i;:::-;16007:16;;;;;15844:185;-1:-1:-1;;15844:185:1:o;16034:977::-;16397:66;16392:3;16385:79;16494:66;16489:2;16484:3;16480:12;16473:88;16591:66;16586:2;16581:3;16577:12;16570:88;16688:66;16683:2;16678:3;16674:12;16667:88;-1:-1:-1;;;16780:3:1;16775;16771:13;16764:32;16367:3;16825:6;16819:13;16841:61;16895:6;16889:3;16884;16880:13;16875:2;16867:6;16863:15;16841:61;:::i;:::-;-1:-1:-1;;;16961:3:1;16921:16;;;;16953:12;;;16946:31;-1:-1:-1;17001:3:1;16993:12;;16034:977;-1:-1:-1;16034:977:1:o;17255:1939::-;18081:3;18119:6;18113:13;18135:53;18181:6;18176:3;18169:4;18161:6;18157:17;18135:53;:::i;:::-;18219:6;18214:3;18210:16;18197:29;;18249:66;18242:5;18235:81;18350:66;18343:4;18336:5;18332:16;18325:92;-1:-1:-1;;;18444:2:1;18437:5;18433:14;18426:30;18487:6;18481:13;18503:66;18560:8;18555:2;18548:5;18544:14;18537:4;18529:6;18525:17;18503:66;:::i;:::-;18637;18632:2;18588:20;;;;18624:11;;;18617:87;-1:-1:-1;;;18728:3:1;18720:12;;18713:34;18772:13;;18794:64;18772:13;18843:3;18835:12;;18828:4;18816:17;;18794:64;:::i;:::-;18924:66;18918:3;18877:17;;;;18910:12;;;18903:88;-1:-1:-1;;;19015:3:1;19007:12;;19000:44;19060:128;19090:97;19116:70;19146:39;19180:3;19172:12;;19164:6;19146:39;:::i;:::-;-1:-1:-1;;;17081:16:1;;17122:1;17113:11;;17016:114;19116:70;19108:6;19090:97;:::i;:::-;-1:-1:-1;;;17200:17:1;;17242:1;17233:11;;17135:115;19060:128;19053:135;17255:1939;-1:-1:-1;;;;;;;;17255:1939:1:o;19199:960::-;19626:3;19664:6;19658:13;19680:53;19726:6;19721:3;19714:4;19706:6;19702:17;19680:53;:::i;:::-;19796:13;;19755:16;;;;19818:57;19796:13;19755:16;19852:4;19840:17;;19818:57;:::i;:::-;-1:-1:-1;;;19897:20:1;;19926:18;;;19969:13;;19991:65;19969:13;20043:1;20032:13;;20025:4;20013:17;;19991:65;:::i;:::-;-1:-1:-1;;;20119:1:1;20075:20;;;;20111:10;;;20104:23;20151:1;20143:10;;19199:960;-1:-1:-1;;;;;19199:960:1:o;20164:751::-;20394:3;20432:6;20426:13;20448:53;20494:6;20489:3;20482:4;20474:6;20470:17;20448:53;:::i;:::-;20562:66;20523:16;;20548:81;;;-1:-1:-1;20663:66:1;20656:4;20645:16;;20638:92;20762:66;20757:2;20746:14;;20739:90;-1:-1:-1;;;20856:2:1;20845:14;;20838:41;20906:2;20895:14;;20164:751;-1:-1:-1;20164:751:1:o;20920:1174::-;-1:-1:-1;;;21370:61:1;;21461:66;21456:2;21447:12;;21440:88;21558:66;21553:2;21544:12;;21537:88;21655:66;21650:2;21641:12;;21634:88;21753:66;21747:3;21738:13;;21731:89;-1:-1:-1;;;21845:3:1;21836:13;;21829:51;21903:13;;-1:-1:-1;;21925:61:1;21903:13;21973:3;21964:13;;21959:2;21947:15;;21925:61;:::i;:::-;-1:-1:-1;;;22045:3:1;22005:16;;;;22037:12;;;22030:30;-1:-1:-1;22084:3:1;22076:12;;20920:1174;-1:-1:-1;20920:1174:1:o;22453:2104::-;23412:66;23407:3;23400:79;23382:3;23508:6;23502:13;23524:62;23579:6;23574:2;23569:3;23565:12;23558:4;23550:6;23546:17;23524:62;:::i;:::-;23650:66;23645:2;23605:16;;;23637:11;;;23630:87;-1:-1:-1;;;23741:2:1;23733:11;;23726:76;23827:13;;23849:63;23827:13;23750:2;23890:11;;23883:4;23871:17;;23849:63;:::i;:::-;23977:66;23972:2;23931:17;;;;23964:11;;;23957:87;-1:-1:-1;;;24121:3:1;24113:12;;24106:24;;;24155:13;;24177:64;24155:13;24226:3;24218:12;;24211:4;24199:17;;24177:64;:::i;:::-;24307:66;24301:3;24260:17;;;;24293:12;;;24286:88;24398:3;24390:12;;24383:24;24423:128;24453:97;24479:70;24509:39;24543:3;24535:12;;24527:6;24509:39;:::i;:::-;22176:66;22164:79;;-1:-1:-1;;;22268:2:1;22259:12;;22252:32;22309:2;22300:12;;22099:219;24453:97;-1:-1:-1;;;22388:27:1;;22440:1;22431:11;;22323:125;24917:415;25119:2;25101:21;;;25158:2;25138:18;;;25131:30;25197:34;25192:2;25177:18;;25170:62;-1:-1:-1;;;25263:2:1;25248:18;;25241:49;25322:3;25307:19;;24917:415::o;25337:448::-;25599:31;25594:3;25587:44;25569:3;25660:6;25654:13;25676:62;25731:6;25726:2;25721:3;25717:12;25710:4;25702:6;25698:17;25676:62;:::i;:::-;25758:16;;;;25776:2;25754:25;;25337:448;-1:-1:-1;;25337:448:1:o;26937:1992::-;-1:-1:-1;;;27939:3:1;27932:25;27914:3;27986:6;27980:13;28002:62;28057:6;28052:2;28047:3;28043:12;28036:4;28028:6;28024:17;28002:62;:::i;:::-;-1:-1:-1;;;28123:2:1;28083:16;;;28115:11;;;28108:36;28169:13;;28191:63;28169:13;28240:2;28232:11;;28225:4;28213:17;;28191:63;:::i;:::-;-1:-1:-1;;;28314:2:1;28273:17;;;;28306:11;;;28299:39;28363:13;;28385:63;28363:13;28434:2;28426:11;;28419:4;28407:17;;28385:63;:::i;:::-;-1:-1:-1;;;28508:2:1;28467:17;;;;28500:11;;;28493:34;28552:13;;28574:63;28552:13;28623:2;28615:11;;28608:4;28596:17;;28574:63;:::i;:::-;-1:-1:-1;;;28697:2:1;28656:17;;;;28689:11;;;28682:31;28738:13;;28760:63;28738:13;28809:2;28801:11;;28794:4;28782:17;;28760:63;:::i;:::-;28839:84;28865:57;28918:2;28907:8;28903:2;28899:17;28895:26;-1:-1:-1;;;26875:24:1;;26924:1;26915:11;;26810:122;28839:84;28832:91;26937:1992;-1:-1:-1;;;;;;;;;;26937:1992:1:o;28934:1451::-;-1:-1:-1;;;29638:3:1;29631:28;29613:3;29688:6;29682:13;29704:62;29759:6;29754:2;29749:3;29745:12;29738:4;29730:6;29726:17;29704:62;:::i;:::-;-1:-1:-1;;;29825:2:1;29785:16;;;29817:11;;;29810:37;29872:13;;29894:63;29872:13;29943:2;29935:11;;29928:4;29916:17;;29894:63;:::i;:::-;-1:-1:-1;;;30017:2:1;29976:17;;;;30009:11;;;30002:39;30066:13;;30088:63;30066:13;30137:2;30129:11;;30122:4;30110:17;;30088:63;:::i;:::-;-1:-1:-1;;;30211:2:1;30170:17;;;;30203:11;;;30196:31;30252:13;;30274:63;30252:13;30323:2;30315:11;;30308:4;30296:17;;30274:63;:::i;:::-;30357:17;30376:2;30353:26;;28934:1451;-1:-1:-1;;;;;;28934:1451:1:o;30390:470::-;30569:3;30607:6;30601:13;30623:53;30669:6;30664:3;30657:4;30649:6;30645:17;30623:53;:::i;:::-;30739:13;;30698:16;;;;30761:57;30739:13;30698:16;30795:4;30783:17;;30761:57;:::i;:::-;30834:20;;30390:470;-1:-1:-1;;;;30390:470:1:o;32504:246::-;32544:4;-1:-1:-1;;;;;32657:10:1;;;;32627;;32679:12;;;32676:38;;;32694:18;;:::i;:::-;32731:13;;32504:246;-1:-1:-1;;;32504:246:1:o;32755:253::-;32795:3;-1:-1:-1;;;;;32884:2:1;32881:1;32877:10;32914:2;32911:1;32907:10;32945:3;32941:2;32937:12;32932:3;32929:21;32926:47;;;32953:18;;:::i;33979:136::-;34018:3;34046:5;34036:39;;34055:18;;:::i;:::-;-1:-1:-1;;;34091:18:1;;33979:136::o;34536:500::-;-1:-1:-1;;;;;34805:15:1;;;34787:34;;34857:15;;34852:2;34837:18;;34830:43;34904:2;34889:18;;34882:34;;;34952:3;34947:2;34932:18;;34925:31;;;34730:4;;34973:57;;35010:19;;35002:6;34973:57;:::i;:::-;34965:65;34536:500;-1:-1:-1;;;;;;34536:500:1:o;35041:249::-;35110:6;35163:2;35151:9;35142:7;35138:23;35134:32;35131:52;;;35179:1;35176;35169:12;35131:52;35211:9;35205:16;35230:30;35254:5;35230:30;:::i

Swarm Source

ipfs://1ed5d71f2c608044265b225479d972e95981dcd2d8a14682c17e44a0a2711a82
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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