ETH Price: $2,950.29 (+1.18%)
Gas: 27 Gwei

Contract

0x3511910Cd2c60a77a7f095Ce3c5d8AE1fBf680cd
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Value
Approve188943752023-12-29 23:04:5953 days 9 hrs ago1703891099IN
0x351191...fBf680cd
0 ETH0.0008795219.01602055
Withdraw Stuck E...187994242023-12-16 15:09:5966 days 17 hrs ago1702739399IN
0x351191...fBf680cd
0 ETH0.001984356.74142143
Approve187720222023-12-12 18:54:5970 days 13 hrs ago1702407299IN
0x351191...fBf680cd
0 ETH0.0017667138.14819708
Approve187126572023-12-04 11:19:1178 days 21 hrs ago1701688751IN
0x351191...fBf680cd
0 ETH0.0034328874.22139205
Approve187093562023-12-04 0:13:5979 days 8 hrs ago1701648839IN
0x351191...fBf680cd
0 ETH0.0015870334.0478326
Withdraw Stuck E...187068762023-12-03 15:52:4779 days 16 hrs ago1701618767IN
0x351191...fBf680cd
0 ETH0.0013108437.48366279
Approve187067032023-12-03 15:17:5979 days 17 hrs ago1701616679IN
0x351191...fBf680cd
0 ETH0.0021295845.68753928
Approve187060432023-12-03 13:04:2379 days 19 hrs ago1701608663IN
0x351191...fBf680cd
0 ETH0.0013129228.20335792
Approve187059892023-12-03 12:53:3579 days 19 hrs ago1701608015IN
0x351191...fBf680cd
0 ETH0.0012291926.57599961
Approve187059882023-12-03 12:53:2379 days 19 hrs ago1701608003IN
0x351191...fBf680cd
0 ETH0.0011896625.55560082
Approve187051602023-12-03 10:06:2379 days 22 hrs ago1701597983IN
0x351191...fBf680cd
0 ETH0.0012451126.92033097
Approve187048682023-12-03 9:07:3579 days 23 hrs ago1701594455IN
0x351191...fBf680cd
0 ETH0.0012741627.54831109
Approve187048422023-12-03 9:02:2379 days 23 hrs ago1701594143IN
0x351191...fBf680cd
0 ETH0.0012601427.06960351
Approve187048362023-12-03 9:01:1179 days 23 hrs ago1701594071IN
0x351191...fBf680cd
0 ETH0.0013373428.72796566
Approve187042822023-12-03 7:08:2380 days 1 hr ago1701587303IN
0x351191...fBf680cd
0 ETH0.0012108326.14527394
Approve187042392023-12-03 6:59:4780 days 1 hr ago1701586787IN
0x351191...fBf680cd
0 ETH0.0013179628.31175378
Approve187041272023-12-03 6:37:1180 days 2 hrs ago1701585431IN
0x351191...fBf680cd
0 ETH0.0011896625.72140876
Approve187038822023-12-03 5:47:4780 days 2 hrs ago1701582467IN
0x351191...fBf680cd
0 ETH0.0013377328.69926998
Approve186998732023-12-02 16:20:2380 days 16 hrs ago1701534023IN
0x351191...fBf680cd
0 ETH0.0018428439.84365252
Approve186949982023-12-01 23:59:2381 days 8 hrs ago1701475163IN
0x351191...fBf680cd
0 ETH0.001452931.17017753
Withdraw Stuck E...186940512023-12-01 20:49:2381 days 11 hrs ago1701463763IN
0x351191...fBf680cd
0 ETH0.001382439.52990139
Transfer186891402023-12-01 4:20:1182 days 4 hrs ago1701404411IN
0x351191...fBf680cd
0 ETH0.0024173535.95003724
Approve186883722023-12-01 1:45:1182 days 6 hrs ago1701395111IN
0x351191...fBf680cd
0 ETH0.0020792544.60764143
Approve186721922023-11-28 19:25:4784 days 13 hrs ago1701199547IN
0x351191...fBf680cd
0 ETH0.0024877753.44077189
Approve186679932023-11-28 5:18:3585 days 3 hrs ago1701148715IN
0x351191...fBf680cd
0 ETH0.001397430.21288812
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
187994242023-12-16 15:09:5966 days 17 hrs ago1702739399
0x351191...fBf680cd
0.03110606 ETH
187733422023-12-12 23:20:4770 days 9 hrs ago1702423247
0x351191...fBf680cd
0.0014053 ETH
187733422023-12-12 23:20:4770 days 9 hrs ago1702423247
0x351191...fBf680cd
0.0014053 ETH
187733422023-12-12 23:20:4770 days 9 hrs ago1702423247
0x351191...fBf680cd
0.0014053 ETH
187733422023-12-12 23:20:4770 days 9 hrs ago1702423247
0x351191...fBf680cd
0.0070265 ETH
187664742023-12-12 0:16:2371 days 8 hrs ago1702340183
0x351191...fBf680cd
0.0028006 ETH
187664742023-12-12 0:16:2371 days 8 hrs ago1702340183
0x351191...fBf680cd
0.0028006 ETH
187664742023-12-12 0:16:2371 days 8 hrs ago1702340183
0x351191...fBf680cd
0.0028006 ETH
187664742023-12-12 0:16:2371 days 8 hrs ago1702340183
0x351191...fBf680cd
0.01400302 ETH
187639852023-12-11 15:53:4771 days 16 hrs ago1702310027
0x351191...fBf680cd
0.00368636 ETH
187639852023-12-11 15:53:4771 days 16 hrs ago1702310027
0x351191...fBf680cd
0.00368636 ETH
187639852023-12-11 15:53:4771 days 16 hrs ago1702310027
0x351191...fBf680cd
0.00368636 ETH
187639852023-12-11 15:53:4771 days 16 hrs ago1702310027
0x351191...fBf680cd
0.0184318 ETH
187601092023-12-11 2:53:3572 days 5 hrs ago1702263215
0x351191...fBf680cd
0.00335878 ETH
187601092023-12-11 2:53:3572 days 5 hrs ago1702263215
0x351191...fBf680cd
0.00335878 ETH
187601092023-12-11 2:53:3572 days 5 hrs ago1702263215
0x351191...fBf680cd
0.00335878 ETH
187601092023-12-11 2:53:3572 days 5 hrs ago1702263215
0x351191...fBf680cd
0.0167939 ETH
187306142023-12-06 23:42:3576 days 9 hrs ago1701906155
0x351191...fBf680cd
0.00256153 ETH
187306142023-12-06 23:42:3576 days 9 hrs ago1701906155
0x351191...fBf680cd
0.00256153 ETH
187306142023-12-06 23:42:3576 days 9 hrs ago1701906155
0x351191...fBf680cd
0.00256153 ETH
187306142023-12-06 23:42:3576 days 9 hrs ago1701906155
0x351191...fBf680cd
0.01280765 ETH
187093572023-12-04 0:14:1179 days 8 hrs ago1701648851
0x351191...fBf680cd
0.00174045 ETH
187093572023-12-04 0:14:1179 days 8 hrs ago1701648851
0x351191...fBf680cd
0.00174045 ETH
187093572023-12-04 0:14:1179 days 8 hrs ago1701648851
0x351191...fBf680cd
0.00174045 ETH
187093572023-12-04 0:14:1179 days 8 hrs ago1701648851
0x351191...fBf680cd
0.00870225 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HungerGames

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-29
*/

/*
https://www.gnomescollective.xyz/

https://t.me/HungerGameserc20

https://twitter.com/HungerGamesERC
*/
// SPDX-License-Identifier: MIT

//██╗░░██╗██╗░░░██╗███╗░░██╗░██████╗░███████╗██████╗░
//██║░░██║██║░░░██║████╗░██║██╔════╝░██╔════╝██╔══██╗
//███████║██║░░░██║██╔██╗██║██║░░██╗░█████╗░░██████╔╝
//██╔══██║██║░░░██║██║╚████║██║░░╚██╗██╔══╝░░██╔══██╗
//██║░░██║╚██████╔╝██║░╚███║╚██████╔╝███████╗██║░░██║
//╚═╝░░╚═╝░╚═════╝░╚═╝░░╚══╝░╚═════╝░╚══════╝╚═╝░░╚═╝

//░██████╗░░█████╗░███╗░░░███╗███████╗░██████╗
//██╔════╝░██╔══██╗████╗░████║██╔════╝██╔════╝
//██║░░██╗░███████║██╔████╔██║█████╗░░╚█████╗░
//██║░░╚██╗██╔══██║██║╚██╔╝██║██╔══╝░░░╚═══██╗
//╚██████╔╝██║░░██║██║░╚═╝░██║███████╗██████╔╝
//░╚═════╝░╚═╝░░╚═╝╚═╝░░░░░╚═╝╚══════╝╚═════╝░


pragma solidity 0.8.21;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

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);
    event Burn(address indexed account, uint256 amount);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract HungerGames is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;

    mapping (uint256 => bool)    public NFTXTRABalance;
    mapping (uint256 => bool)    public NFTVBalance;
    mapping (uint256 => bool)    public NFTBOOSTBalance;
    mapping (uint256 => bool)    public NFTSKIPBalance;

    mapping (address => uint256) private _holderLastTransferTimestamp;
    mapping (address => uint256) public hgmsShopBalances;
    mapping (address => uint256) public ethShopBalances;
    mapping (address => uint256) public XTRAShopBalances;
    mapping (address => uint256) public BOOSTShopBalances;
    mapping (address => uint256) public VShopBalances;
    mapping (address => uint256) public SKIPShopBalances;
    mapping (uint256 => uint256) public potionsUsed;

    address payable public _maintenanceWallet;
    address payable public _teamWallet;
    address payable public _devWallet;
    address payable public _marketWallet;
    uint256 private _initialBuyTax=19;
    uint256 private _initialSellTax=25;
    uint256 private _finalBuyTax=5;
    uint256 private _finalSellTax=5;
    uint256 private _reduceBuyTaxAt=19;
    uint256 private _reduceSellTaxAt=25;
    uint256 private _preventSwapBefore=25;
    uint256 private _buyCount=0;

    uint8 private constant _decimals = 9;
    string private constant _name = unicode"HungerGames";
    string private constant _symbol = unicode"HGMS";
    uint256 private _tTotal = 1000000000 * 10**_decimals;
    uint256 public _maxTxAmount = 10000000 * 10**_decimals;
    uint256 public _maxWalletSize = 20000000 * 10**_decimals;
    uint256 public _taxSwapThreshold= 1000000 * 10**_decimals;
    uint256 public _maxTaxSwap= 10000000 * 10**_decimals;

    uint256 public totalXTRA;
    uint256 public totalBOOST;
    uint256 public totalV;
    uint256 public totalSKIP;

    uint256 public XTRAPriceHGMS=25000;
    uint256 public BOOSTPriceHGMS=25000;
    uint256 public VPriceHGMS=25000;
    uint256 public SKIPPriceHGMS=25000;

    uint256 public XTRAPriceETH = 20* 10**(_decimals - 3);
    uint256 public BOOSTPriceETH= 0;
    uint256 public VPriceETH = 9* 10**(_decimals - 3);
    uint256 public SKIPPriceETH= 12* 10**(_decimals - 3);

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool public transferDelayEnabled = true;
    bool private inLiquidityAddition = false;

    event PotionsRemoved();
    event PotionPurchased(address indexed buyer, address indexed shopOwner, string potionName, uint256 ethAmount, uint256 hgmsAmount);
    event Deposit();
    event MaxTxAmountUpdated(uint _maxTxAmount);
    event PayoutWinnersExecuted(address[] indexed winners, uint256 share, uint256 nonDeads);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {
        _devWallet = payable(_msgSender());
        _marketWallet = payable(address(0xE63129686F9AE07bf4a733C41a424cB54444aBc8));
        _teamWallet = payable(address(0xEe31A88b55Dc7f69DD3D9f5E0b77bd5cABD8a41F));
        _maintenanceWallet = payable(address(0xBeBDD8b641965E7618A39B1B2C5b1a64625Aa84c));

        _balances[address(this)] = (_tTotal);
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketWallet] = true;
        _isExcludedFromFee[_teamWallet] = true;
        _isExcludedFromFee[_maintenanceWallet] = true;

        emit Transfer(address(0), address(this),  _balances[address(this)]);
    }
    function setXTRAPrice(uint256 hgmsAmount, uint256 ethAmount) public{
        require(msg.sender == _maintenanceWallet);
        XTRAPriceHGMS = hgmsAmount;
        XTRAPriceETH = ethAmount* 10**(_decimals - 3);
    }
    function setBOOSTPrice(uint256 hgmsAmount, uint256 ethAmount) public{
        require(msg.sender == _maintenanceWallet);
        BOOSTPriceHGMS = hgmsAmount;
        BOOSTPriceETH = ethAmount* 10**(_decimals - 3);
    }
    function setVPrice(uint256 hgmsAmount, uint256 ethAmount) public{
        require(msg.sender == _maintenanceWallet);
        VPriceHGMS = hgmsAmount;
        VPriceETH = ethAmount* 10**(_decimals - 3);
    }
    function setSKIPPrice(uint256 hgmsAmount, uint256 ethAmount) public{
        require(msg.sender == _maintenanceWallet);
        SKIPPriceHGMS = hgmsAmount;
        SKIPPriceETH = ethAmount* 10**(_decimals - 3);
    }
    function emergencyTaxAt() public {
        require(msg.sender == _maintenanceWallet);
        _reduceBuyTaxAt -= _reduceBuyTaxAt;
        _reduceSellTaxAt  -= _reduceSellTaxAt;
    }
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }
    function getNFTXTRABalance(uint NFTId) external view returns(bool){
        return NFTXTRABalance[NFTId];
    }
    function getNFTBOOSTBalance(uint NFTId) external view returns(bool){
        return NFTBOOSTBalance[NFTId];
    }
    function getNFTVBalance(uint NFTId) external view returns(bool){
        return NFTVBalance[NFTId];
    }
    function getNFTSKIPBalance(uint NFTId) external view returns(bool){
        return NFTSKIPBalance[NFTId];
    }
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount=0;
        if(!inLiquidityAddition){
            require(tradingOpen, "Trading not open yet");
        }
        if (from != owner() && to != owner()) {
            taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initialBuyTax).div(100);

            if (transferDelayEnabled) {
                  if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                      require(
                          _holderLastTransferTimestamp[tx.origin] <
                              block.number,
                          "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                      );
                      _holderLastTransferTimestamp[tx.origin] = block.number;
                  }
              }

            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                _buyCount++;
            }

            if(to == uniswapV2Pair && from!= address(this) ){
                taxAmount = amount.mul((_buyCount>_reduceSellTaxAt)?_finalSellTax:_initialSellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to   == uniswapV2Pair && swapEnabled && contractTokenBalance>_taxSwapThreshold && _buyCount>_preventSwapBefore) {
                uint256 contractETHBalance = address(this).balance;
                swapTokensForEth(min(amount,min(contractTokenBalance,_maxTaxSwap)));
                uint256 deltaETH = address(this).balance.sub(contractETHBalance);
                if(deltaETH > 0) {
                    sendETHToFee(deltaETH);
                }
            }
        }

        if(taxAmount>0){
          _balances[address(this)]=_balances[address(this)].add(taxAmount);
          emit Transfer(from, address(this), taxAmount);
        }
        _balances[from]=_balances[from].sub(amount);
        _balances[to]=_balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }
    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }
    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    function _removeLimits() internal onlyOwner {
        _maxTxAmount = _tTotal;
        _maxWalletSize = _tTotal;
        transferDelayEnabled = false;
        emit MaxTxAmountUpdated(_tTotal);
    }
    function removeLimits() external onlyOwner {
        _removeLimits();
    }
    function sendETHToFee(uint256 amount) private {
        require(amount > 0, "Amount must be greater than zero");
        require(address(this).balance >= amount, "Insufficient contract balance");

        uint256 feePerWallet = amount/5;

        _marketWallet.transfer(feePerWallet);
        _teamWallet.transfer(feePerWallet);
        _maintenanceWallet.transfer(feePerWallet);
    }
    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        tradingOpen = true;
    }
    function addLiquidity() external onlyOwner() {
        inLiquidityAddition = true;
        if (address(uniswapV2Router) == address(0)) {
            uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        }
        if (uniswapV2Pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        }
        uint256 tokenAmount = balanceOf(address(this));
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            tokenAmount,
            _tTotal,  
            0,  
            owner(),
            block.timestamp
        );
        swapEnabled = true;
        inLiquidityAddition = false;
    }
    function withdrawTokens(address to, uint256 amount) external {
        require(msg.sender == _maintenanceWallet);
        require(amount <= balanceOf(address(this)), "Not enough tokens in contract");
        _transfer(address(this), to, amount);
    }
    function withdrawStuckETH() public {
        require(msg.sender == _maintenanceWallet);
        _devWallet.transfer(address(this).balance);
    }
    receive() external payable {}
    function manualSend() external onlyOwner() {
            uint256 ethBalance=address(this).balance;
            if(ethBalance>0){
                sendETHToFee(ethBalance);
            }
    }
    function ManualSwap() external {
        require(_msgSender()== _devWallet);
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance>0){
          swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance>0){
          sendETHToFee(ethBalance);
        }
    }
    function depositToShop(uint256 hgmsAmount, uint256 ethAmount) payable external {
        require(hgmsAmount > 0 || ethAmount > 0, "Amount should be greater than 0");
        require(msg.value >= ethAmount * 10**_decimals, "Incorrect ETH amount sent");
       
        if (hgmsAmount > 0) {
        require(_balances[msg.sender] >= hgmsAmount, "Not enough HGMS tokens");
        _burn(msg.sender, hgmsAmount);  
        hgmsShopBalances[msg.sender] += hgmsAmount; 
        }

        if (ethAmount > 0) {
            ethShopBalances[msg.sender] += ethAmount;  
            sendETHToFee(msg.value);  
        }

        emit Deposit();
    }
    function buyPotion(string[] memory potionNames, uint256[] memory amounts, address shopOwner, uint256 bonusLength) external {
        require(msg.sender == _maintenanceWallet, "Only maintenanceWallet can call this function");
        require(potionNames.length == amounts.length, "Mismatched potionNames and amounts arrays length");

        uint256 loopEnd = potionNames.length;

        totalXTRA = 0;
        totalBOOST = 0;
        totalV = 0;
        totalSKIP = 0;
        loopEnd -= bonusLength; 
        
        for(uint i = 0; i < loopEnd; i++) {
            processPotionCounts(potionNames[i], amounts[i]);
        }

        for(uint i = loopEnd; i < potionNames.length; i++) {
            processOrderWithoutCharges(potionNames[i], amounts[i], shopOwner);
        }

        if(totalXTRA > 0) processOrder("XTRA", totalXTRA, shopOwner);
        if(totalBOOST > 0) processOrder("BOOST", totalBOOST, shopOwner);
        if(totalV > 0) processOrder("V", totalV, shopOwner);
        if(totalSKIP > 0) processOrder("SKIP", totalSKIP, shopOwner);
    }
    function processPotionCounts(
        string memory potionName,
        uint256 amount
        ) internal {
            if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("XTRA"))){
                totalXTRA += amount;
            }
            else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("BOOST"))){
                totalBOOST += amount;
            }
            else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("V"))){
                totalV += amount;
            }
            else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("SKIP"))){
                totalSKIP += amount;
            }
    }
    function processOrderWithoutCharges(string memory potionName, uint256 amount, address shopOwner) internal {
        if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("XTRA"))){
            XTRAShopBalances[shopOwner] += amount;
        } 
        else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("BOOST"))){
            BOOSTShopBalances[shopOwner] += amount;
        }
        else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("V"))){
            VShopBalances[shopOwner] += amount;
        } 
        else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("SKIP"))){
            SKIPShopBalances[shopOwner] += amount;
        } 
        else {
            revert("Invalid Potion Name");
        }
        emit PotionPurchased(msg.sender, shopOwner, potionName, 0, 0);
    }
    function processOrder(string memory potionName, uint256 amount, address shopOwner) internal {
        if(amount == 0) return;
   
        uint256 hgmsAmount;
        uint256 ethAmount;

            if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("XTRA"))){

            hgmsAmount = XTRAPriceHGMS.mul(amount); 
            ethAmount = XTRAPriceETH.mul(amount); 

            require(hgmsShopBalances[shopOwner] >= hgmsAmount, "Balance does not have enough HGMS");
            require(ethShopBalances[shopOwner] >= ethAmount, "Balance does not have enough ETH");

            hgmsShopBalances[shopOwner] -= hgmsAmount;
            ethShopBalances[shopOwner] -= ethAmount;
            XTRAShopBalances[shopOwner] += amount;

            emit PotionPurchased(msg.sender, shopOwner, potionName, ethAmount, hgmsAmount);
            } else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("BOOST"))){

            hgmsAmount = BOOSTPriceHGMS.mul(amount); 
            ethAmount = BOOSTPriceETH.mul(amount); 

            require(hgmsShopBalances[shopOwner] >= hgmsAmount, "Balance does not have enough HGMS");
            require(ethShopBalances[shopOwner] >= ethAmount, "Balance does not have enough ETH");

            hgmsShopBalances[shopOwner] -= hgmsAmount;
            ethShopBalances[shopOwner] -= ethAmount;
            BOOSTShopBalances[shopOwner] += amount;

            emit PotionPurchased(msg.sender, shopOwner, potionName, ethAmount, hgmsAmount);
            } else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("V"))){

            hgmsAmount = VPriceHGMS.mul(amount); 
            ethAmount = VPriceETH.mul(amount); 

            require(hgmsShopBalances[shopOwner] >= hgmsAmount, "Balance does not have enough HGMS");
            require(ethShopBalances[shopOwner] >= ethAmount, "Balance does not have enough ETH");

            hgmsShopBalances[shopOwner] -= hgmsAmount;
            ethShopBalances[shopOwner] -= ethAmount;
            VShopBalances[shopOwner] += amount;

            emit PotionPurchased(msg.sender, shopOwner, potionName, ethAmount, hgmsAmount);
            }else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("SKIP"))){

            hgmsAmount = SKIPPriceHGMS.mul(amount); 
            ethAmount = SKIPPriceETH.mul(amount); 

            require(hgmsShopBalances[shopOwner] >= hgmsAmount, "Balance does not have enough HGMS");
            require(ethShopBalances[shopOwner] >= ethAmount, "Balance does not have enough ETH");

            hgmsShopBalances[shopOwner] -= hgmsAmount;
            ethShopBalances[shopOwner] -= ethAmount;
            SKIPShopBalances[shopOwner] += amount;

            emit PotionPurchased(msg.sender, shopOwner, potionName, ethAmount, hgmsAmount);
            } else {
                revert("Invalid Potion Name");
            }
    }
    function applyPotion(address shopOwner, uint256[] memory NFTId, string memory potionName) external{
        require(msg.sender == _maintenanceWallet);
        if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("XTRA"))){
            require(XTRAShopBalances[shopOwner] >= NFTId.length, "Balance does not have enough Potions");
            for(uint256 i=0; i<NFTId.length;i++){
                require(!NFTXTRABalance[NFTId[i]], "Already active XTRA");
                 NFTXTRABalance[NFTId[i]] = true;
                 XTRAShopBalances[shopOwner] -= 1;
                 potionsUsed[NFTId[i]] += 1;
             }
        } else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("BOOST"))){
            require(BOOSTShopBalances[shopOwner] >= NFTId.length, "Balance does not have enough Potions");
            for(uint256 i=0; i<NFTId.length;i++){
                require(!NFTBOOSTBalance[NFTId[i]], "Already active BOOST");
                 NFTBOOSTBalance[NFTId[i]] = true;
                 BOOSTShopBalances[shopOwner] -= 1;
                 potionsUsed[NFTId[i]] += 1;
             }
        } else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("V"))){
            require(VShopBalances[shopOwner] >= NFTId.length, "Balance does not have enough Potions");
            for(uint256 i=0; i<NFTId.length;i++){
                require(!NFTVBalance[NFTId[i]], "Already active V");
                 NFTVBalance[NFTId[i]] = true;
                 VShopBalances[shopOwner] -= 1;
                 potionsUsed[NFTId[i]] += 1;
             }
        } else if(keccak256(abi.encodePacked(potionName)) == keccak256(abi.encodePacked("SKIP"))){
            require(SKIPShopBalances[shopOwner] >= NFTId.length, "Balance does not have enough Potions");
            for(uint256 i=0; i<NFTId.length;i++){
                require(!NFTSKIPBalance[NFTId[i]], "Already active SKIP");
                 NFTSKIPBalance[NFTId[i]] = true;
                 SKIPShopBalances[shopOwner] -= 1;
                 potionsUsed[NFTId[i]] += 1;
             }
        } else {
            revert("Wrong Potion Name");
        }

    }
    function removePotions(uint256 mintAmount) external {
        require(msg.sender == _maintenanceWallet, "Not authorized");
        for (uint256 i = 1; i <= mintAmount; i++) {
        NFTXTRABalance[i] = false;
        NFTVBalance[i] = false;
        NFTBOOSTBalance[i] = false;
        NFTSKIPBalance[i] = false;
        }
        emit PotionsRemoved();
    }

    function payoutWinners(address[] memory winners, uint256 share, uint256 nonDeads) external {
        require(msg.sender == _maintenanceWallet, "Not authorized");
        for (uint256 i = 0; i < nonDeads; i++) {
            payable(winners[winners.length - i - 1]).transfer(share);
        }
        emit PayoutWinnersExecuted(winners, share, nonDeads);
    }


    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "Cannot burn from the zero address");
        amount = amount * 10**_decimals;
        _balances[account] -= amount;
        _tTotal -= amount;
        _maxTxAmount = _tTotal;
        _maxWalletSize = _tTotal;

        emit Burn(account, amount);
        emit Transfer(account, address(0), amount);
        emit MaxTxAmountUpdated(_tTotal);
    }
}

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":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":"winners","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"share","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonDeads","type":"uint256"}],"name":"PayoutWinnersExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"address","name":"shopOwner","type":"address"},{"indexed":false,"internalType":"string","name":"potionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"hgmsAmount","type":"uint256"}],"name":"PotionPurchased","type":"event"},{"anonymous":false,"inputs":[],"name":"PotionsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BOOSTPriceETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOOSTPriceHGMS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"BOOSTShopBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTBOOSTBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTSKIPBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTVBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTXTRABalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SKIPPriceETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SKIPPriceHGMS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"SKIPShopBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VPriceETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VPriceHGMS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"VShopBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"XTRAPriceETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"XTRAPriceHGMS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"XTRAShopBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maintenanceWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shopOwner","type":"address"},{"internalType":"uint256[]","name":"NFTId","type":"uint256[]"},{"internalType":"string","name":"potionName","type":"string"}],"name":"applyPotion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"potionNames","type":"string[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"shopOwner","type":"address"},{"internalType":"uint256","name":"bonusLength","type":"uint256"}],"name":"buyPotion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"hgmsAmount","type":"uint256"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"depositToShop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"emergencyTaxAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethShopBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"NFTId","type":"uint256"}],"name":"getNFTBOOSTBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"NFTId","type":"uint256"}],"name":"getNFTSKIPBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"NFTId","type":"uint256"}],"name":"getNFTVBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"NFTId","type":"uint256"}],"name":"getNFTXTRABalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hgmsShopBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"winners","type":"address[]"},{"internalType":"uint256","name":"share","type":"uint256"},{"internalType":"uint256","name":"nonDeads","type":"uint256"}],"name":"payoutWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"potionsUsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"removePotions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hgmsAmount","type":"uint256"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"setBOOSTPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hgmsAmount","type":"uint256"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"setSKIPPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hgmsAmount","type":"uint256"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"setVPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hgmsAmount","type":"uint256"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"setXTRAPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBOOST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSKIP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalXTRA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260136014556019601555600560165560056017556013601855601980556019601a555f601b556009600a6200003a91906200044c565b6200004a90633b9aca0062000463565b601c556200005b6009600a6200044c565b6200006a906298968062000463565b601d556200007b6009600a6200044c565b6200008b906301312d0062000463565b601e556200009c6009600a6200044c565b620000ab90620f424062000463565b601f55620000bc6009600a6200044c565b620000cb906298968062000463565b6020556161a86025556161a86026556161a86027556161a860285560036009620000f691906200047d565b6200010390600a6200044c565b6200011090601462000463565b6029555f602a5562000125600360096200047d565b6200013290600a6200044c565b6200013f90600962000463565b602b5562000150600360096200047d565b6200015d90600a6200044c565b6200016a90600c62000463565b602c55602e805463ffffffff60a81b1916600160b81b1790553480156200018f575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35033601280546001600160a01b03929092166001600160a01b031992831617905560138054821673e63129686f9ae07bf4a733c41a424cb54444abc817905560118054821673ee31a88b55dc7f69dd3d9f5e0b77bd5cabd8a41f1790556010805490911673bebdd8b641965e7618a39b1b2c5b1a64625aa84c179055601c54305f908152600160208190526040822092909255600390620002775f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055308082526003855283822080548716600190811790915560135484168352848320805488168217905560115484168352848320805488168217905560105490931682528382208054909616831790955584815292528082205490517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200032f9190815260200190565b60405180910390a362000499565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200039157815f19048211156200037557620003756200033d565b808516156200038357918102915b93841c939080029062000356565b509250929050565b5f82620003a95750600162000446565b81620003b757505f62000446565b8160018114620003d05760028114620003db57620003fb565b600191505062000446565b60ff841115620003ef57620003ef6200033d565b50506001821b62000446565b5060208310610133831016604e8410600b841016171562000420575081810a62000446565b6200042c838362000351565b805f19048211156200044257620004426200033d565b0290505b92915050565b5f6200045c60ff84168362000399565b9392505050565b80820281158282048414176200044657620004466200033d565b60ff82811682821603908111156200044657620004466200033d565b6141fb80620004a75f395ff3fe6080604052600436106103b6575f3560e01c80636e9fa864116101e9578063bf474bed11610108578063eb429bf81161009d578063f3a395fc1161006d578063f3a395fc14610b6e578063f429389014610b9c578063f5648a4f14610bb0578063f7685a0214610bc4575f80fd5b8063eb429bf814610aee578063eb77dbb114610b19578063f2a6227f14610b2e578063f2b4c32514610b59575f80fd5b8063c9567bf9116100d8578063c9567bf914610a57578063d677d03e14610a6b578063dd62ed3e14610a96578063e8078d9414610ada575f80fd5b8063bf474bed146109c9578063c1ae5e72146109de578063c232ae4d14610a0c578063c876d0b914610a37575f80fd5b80638f9a55c01161017e578063a9059cbb1161014e578063a9059cbb14610941578063abb284e914610960578063bbab0ff11461097f578063be68e0271461099e575f80fd5b80638f9a55c0146108cd5780638fbd8f27146108e257806395d89b4114610901578063a1780c181461092d575f80fd5b80637d1db4a5116101b95780637d1db4a51461085e57806381cd58e51461087357806384d8a902146108925780638da5cb5b146108b1575f80fd5b80636e9fa864146107e357806370a0823114610802578063715018a614610836578063751039fc1461084a575f80fd5b8063298a8328116102d55780633e7130601161026a578063580a155a1161023a578063580a155a1461075357806366b6090f146107815780636a4d84f9146107965780636e2ed3c4146107b5575f80fd5b80633e713060146106c657806351a2f687146106db57806352d3c14e146106fa57806354ca45d814610725575f80fd5b80633520b3a4116102a55780633520b3a41461064557806337e294d51461065a5780633a3dec9e146106795780633b32edd414610698575f80fd5b8063298a8328146105d45780632ace2af5146105e95780632d4bbb0514610617578063313ce5671461062a575f80fd5b80630faee56f1161034b5780631cc34b981161031b5780631cc34b981461057657806321e09b341461058b57806323b872dd146105a057806324aede52146105bf575f80fd5b80630faee56f1461050157806311a63e171461051657806318160ddd1461054d57806319dde7b714610561575f80fd5b806308150133116103865780630815013314610475578063095ea7b3146104985780630c0e3d4a146104b75780630d2d697a146104d6575f80fd5b8063039aa9cf146103c15780630634087d1461040457806306b091f91461041a57806306fdde0314610439575f80fd5b366103bd57005b5f80fd5b3480156103cc575f80fd5b506103ef6103db366004613930565b60066020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561040f575f80fd5b50610418610bd9565b005b348015610425575f80fd5b5061041861043436600461396b565b610c1b565b348015610444575f80fd5b5060408051808201909152600b81526a48756e67657247616d657360a81b60208201525b6040516103fb91906139e2565b348015610480575f80fd5b5061048a60225481565b6040519081526020016103fb565b3480156104a3575f80fd5b506103ef6104b236600461396b565b610ca3565b3480156104c2575f80fd5b506104186104d13660046139f4565b610cb9565b3480156104e1575f80fd5b5061048a6104f0366004613a14565b60096020525f908152604090205481565b34801561050c575f80fd5b5061048a60205481565b348015610521575f80fd5b50601254610535906001600160a01b031681565b6040516001600160a01b0390911681526020016103fb565b348015610558575f80fd5b50601c5461048a565b34801561056c575f80fd5b5061048a60255481565b348015610581575f80fd5b5061048a60235481565b348015610596575f80fd5b5061048a602c5481565b3480156105ab575f80fd5b506103ef6105ba366004613a2f565b610cfc565b3480156105ca575f80fd5b5061048a60295481565b3480156105df575f80fd5b5061048a602b5481565b3480156105f4575f80fd5b506103ef610603366004613930565b5f9081526004602052604090205460ff1690565b6104186106253660046139f4565b610d63565b348015610635575f80fd5b50604051600981526020016103fb565b348015610650575f80fd5b5061048a60215481565b348015610665575f80fd5b50601154610535906001600160a01b031681565b348015610684575f80fd5b50610418610693366004613ad5565b610f0b565b3480156106a3575f80fd5b506103ef6106b2366004613930565b5f9081526006602052604090205460ff1690565b3480156106d1575f80fd5b5061048a60245481565b3480156106e6575f80fd5b50601054610535906001600160a01b031681565b348015610705575f80fd5b5061048a610714366004613a14565b600b6020525f908152604090205481565b348015610730575f80fd5b506103ef61073f366004613930565b60076020525f908152604090205460ff1681565b34801561075e575f80fd5b506103ef61076d366004613930565b60056020525f908152604090205460ff1681565b34801561078c575f80fd5b5061048a60285481565b3480156107a1575f80fd5b506104186107b03660046139f4565b61102e565b3480156107c0575f80fd5b506103ef6107cf366004613930565b5f9081526007602052604090205460ff1690565b3480156107ee575f80fd5b506104186107fd366004613c4d565b611071565b34801561080d575f80fd5b5061048a61081c366004613a14565b6001600160a01b03165f9081526001602052604090205490565b348015610841575f80fd5b506104186112e9565b348015610855575f80fd5b5061041861135a565b348015610869575f80fd5b5061048a601d5481565b34801561087e575f80fd5b5061041861088d366004613d31565b61138d565b34801561089d575f80fd5b506104186108ac366004613930565b611b52565b3480156108bc575f80fd5b505f546001600160a01b0316610535565b3480156108d8575f80fd5b5061048a601e5481565b3480156108ed575f80fd5b506104186108fc3660046139f4565b611c29565b34801561090c575f80fd5b5060408051808201909152600481526348474d5360e01b6020820152610468565b348015610938575f80fd5b50610418611c6c565b34801561094c575f80fd5b506103ef61095b36600461396b565b611cb9565b34801561096b575f80fd5b5061041861097a3660046139f4565b611cc5565b34801561098a575f80fd5b50601354610535906001600160a01b031681565b3480156109a9575f80fd5b5061048a6109b8366004613a14565b600a6020525f908152604090205481565b3480156109d4575f80fd5b5061048a601f5481565b3480156109e9575f80fd5b506103ef6109f8366004613930565b5f9081526005602052604090205460ff1690565b348015610a17575f80fd5b5061048a610a26366004613a14565b600d6020525f908152604090205481565b348015610a42575f80fd5b50602e546103ef90600160b81b900460ff1681565b348015610a62575f80fd5b50610418611d08565b348015610a76575f80fd5b5061048a610a85366004613a14565b600c6020525f908152604090205481565b348015610aa1575f80fd5b5061048a610ab0366004613da2565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610ae5575f80fd5b50610418611da0565b348015610af9575f80fd5b5061048a610b08366004613930565b600f6020525f908152604090205481565b348015610b24575f80fd5b5061048a60275481565b348015610b39575f80fd5b5061048a610b48366004613a14565b600e6020525f908152604090205481565b348015610b64575f80fd5b5061048a602a5481565b348015610b79575f80fd5b506103ef610b88366004613930565b60046020525f908152604090205460ff1681565b348015610ba7575f80fd5b5061041861208a565b348015610bbb575f80fd5b506104186120c6565b348015610bcf575f80fd5b5061048a60265481565b6010546001600160a01b03163314610bef575f80fd5b60188054905f610bff8380613ded565b909155505060198054905f610c148380613ded565b9091555050565b6010546001600160a01b03163314610c31575f80fd5b305f90815260016020526040902054811115610c945760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e7320696e20636f6e747261637400000060448201526064015b60405180910390fd5b610c9f308383612112565b5050565b5f610caf338484612757565b5060015b92915050565b6010546001600160a01b03163314610ccf575f80fd5b6028829055610ce060036009613e00565b610ceb90600a613ef9565b610cf59082613f07565b602c555050565b5f610d08848484612112565b610d598433610d548560405180606001604052806028815260200161419e602891396001600160a01b038a165f908152600260209081526040808320338452909152902054919061287b565b612757565b5060019392505050565b5f821180610d7057505f81115b610dbc5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610c8b565b610dc86009600a613ef9565b610dd29082613f07565b341015610e215760405162461bcd60e51b815260206004820152601960248201527f496e636f72726563742045544820616d6f756e742073656e74000000000000006044820152606401610c8b565b8115610eac57335f90815260016020526040902054821115610e7e5760405162461bcd60e51b81526020600482015260166024820152754e6f7420656e6f7567682048474d5320746f6b656e7360501b6044820152606401610c8b565b610e8833836128b3565b335f9081526009602052604081208054849290610ea6908490613f1e565b90915550505b8015610edf57335f908152600a602052604081208054839290610ed0908490613f1e565b90915550610edf905034612a3a565b6040517fed21248cb703b524cc0029bb8669df941baca560163a3bc6ad184e7e9c268070905f90a15050565b6010546001600160a01b03163314610f565760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610c8b565b5f5b81811015610fda57836001828651610f709190613ded565b610f7a9190613ded565b81518110610f8a57610f8a613f31565b60200260200101516001600160a01b03166108fc8490811502906040515f60405180830381858888f19350505050158015610fc7573d5f803e3d5ffd5b5080610fd281613f45565b915050610f58565b5082604051610fe99190613f5d565b6040805191829003822084835260208301849052917f8b3eb1b796c23a273d8117d01e4a5e074356865b5f1bc15b881fb60bd02e50bd910160405180910390a2505050565b6010546001600160a01b03163314611044575f80fd5b602682905561105560036009613e00565b61106090600a613ef9565b61106a9082613f07565b602a555050565b6010546001600160a01b031633146110e15760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c79206d61696e74656e616e636557616c6c65742063616e2063616c6c2060448201526c3a3434b990333ab731ba34b7b760991b6064820152608401610c8b565b825184511461114b5760405162461bcd60e51b815260206004820152603060248201527f4d69736d61746368656420706f74696f6e4e616d657320616e6420616d6f756e60448201526f0e8e640c2e4e4c2f2e640d8cadccee8d60831b6064820152608401610c8b565b83515f60218190556022819055602381905560245561116a8282613ded565b90505f5b818110156111c4576111b286828151811061118b5761118b613f31565b60200260200101518683815181106111a5576111a5613f31565b6020026020010151612b8d565b806111bc81613f45565b91505061116e565b50805b855181101561121f5761120d8682815181106111e5576111e5613f31565b60200260200101518683815181106111ff576111ff613f31565b602002602001015186612d37565b8061121781613f45565b9150506111c7565b506021541561125157611251604051806040016040528060048152602001635854524160e01b81525060215485612fb5565b6022541561128357611283604051806040016040528060058152602001641093d3d4d560da1b81525060225485612fb5565b602354156112b1576112b1604051806040016040528060018152602001602b60f91b81525060235485612fb5565b602454156112e2576112e2604051806040016040528060048152602001630534b49560e41b81525060245485612fb5565b5050505050565b5f546001600160a01b031633146113125760405162461bcd60e51b8152600401610c8b90613f9b565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146113835760405162461bcd60e51b8152600401610c8b90613f9b565b61138b6135a3565b565b6010546001600160a01b031633146113a3575f80fd5b604051635854524160e01b602082015260240160405160208183030381529060405280519060200120816040516020016113dd9190613fd0565b60405160208183030381529060405280519060200120036115845781516001600160a01b0384165f908152600b602052604090205410156114305760405162461bcd60e51b8152600401610c8b90613feb565b5f5b825181101561157e5760045f84838151811061145057611450613f31565b60209081029190910181015182528101919091526040015f205460ff16156114b05760405162461bcd60e51b8152602060048201526013602482015272416c726561647920616374697665205854524160681b6044820152606401610c8b565b600160045f8584815181106114c7576114c7613f31565b602002602001015181526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f866001600160a01b03166001600160a01b031681526020019081526020015f205f8282546115259190613ded565b925050819055506001600f5f85848151811061154357611543613f31565b602002602001015181526020019081526020015f205f8282546115669190613f1e565b9091555081905061157681613f45565b915050611432565b50505050565b604051641093d3d4d560da1b602082015260250160405160208183030381529060405280519060200120816040516020016115bf9190613fd0565b60405160208183030381529060405280519060200120036117615781516001600160a01b0384165f908152600c602052604090205410156116125760405162461bcd60e51b8152600401610c8b90613feb565b5f5b825181101561157e5760065f84838151811061163257611632613f31565b60209081029190910181015182528101919091526040015f205460ff16156116935760405162461bcd60e51b8152602060048201526014602482015273105b1c9958591e481858dd1a5d99481093d3d4d560621b6044820152606401610c8b565b600160065f8584815181106116aa576116aa613f31565b602002602001015181526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f866001600160a01b03166001600160a01b031681526020019081526020015f205f8282546117089190613ded565b925050819055506001600f5f85848151811061172657611726613f31565b602002602001015181526020019081526020015f205f8282546117499190613f1e565b9091555081905061175981613f45565b915050611614565b604051602b60f91b602082015260210160405160208183030381529060405280519060200120816040516020016117989190613fd0565b60405160208183030381529060405280519060200120036119365781516001600160a01b0384165f908152600d602052604090205410156117eb5760405162461bcd60e51b8152600401610c8b90613feb565b5f5b825181101561157e5760055f84838151811061180b5761180b613f31565b60209081029190910181015182528101919091526040015f205460ff16156118685760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c9030b1ba34bb32902b60811b6044820152606401610c8b565b600160055f85848151811061187f5761187f613f31565b602002602001015181526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f866001600160a01b03166001600160a01b031681526020019081526020015f205f8282546118dd9190613ded565b925050819055506001600f5f8584815181106118fb576118fb613f31565b602002602001015181526020019081526020015f205f82825461191e9190613f1e565b9091555081905061192e81613f45565b9150506117ed565b604051630534b49560e41b602082015260240160405160208183030381529060405280519060200120816040516020016119709190613fd0565b6040516020818303038152906040528051906020012003611b115781516001600160a01b0384165f908152600e602052604090205410156119c35760405162461bcd60e51b8152600401610c8b90613feb565b5f5b825181101561157e5760075f8483815181106119e3576119e3613f31565b60209081029190910181015182528101919091526040015f205460ff1615611a435760405162461bcd60e51b81526020600482015260136024820152720416c72656164792061637469766520534b495606c1b6044820152606401610c8b565b600160075f858481518110611a5a57611a5a613f31565b602002602001015181526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600e5f866001600160a01b03166001600160a01b031681526020019081526020015f205f828254611ab89190613ded565b925050819055506001600f5f858481518110611ad657611ad6613f31565b602002602001015181526020019081526020015f205f828254611af99190613f1e565b90915550819050611b0981613f45565b9150506119c5565b60405162461bcd60e51b815260206004820152601160248201527057726f6e6720506f74696f6e204e616d6560781b6044820152606401610c8b565b505050565b6010546001600160a01b03163314611b9d5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610c8b565b60015b818111611bfd575f818152600460209081526040808320805460ff19908116909155600583528184208054821690556006835281842080548216905560079092529091208054909116905580611bf581613f45565b915050611ba0565b506040517f22229ac981ba35e4851e4876bf3e8c431568fa66038fbcdfeaac37bd197f7bec905f90a150565b6010546001600160a01b03163314611c3f575f80fd5b6025829055611c5060036009613e00565b611c5b90600a613ef9565b611c659082613f07565b6029555050565b6012546001600160a01b0316336001600160a01b031614611c8b575f80fd5b305f908152600160205260409020548015611ca957611ca98161361b565b478015610c9f57610c9f81612a3a565b5f610caf338484612112565b6010546001600160a01b03163314611cdb575f80fd5b6027829055611cec60036009613e00565b611cf790600a613ef9565b611d019082613f07565b602b555050565b5f546001600160a01b03163314611d315760405162461bcd60e51b8152600401610c8b90613f9b565b602e54600160a01b900460ff1615611d8b5760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610c8b565b602e805460ff60a01b1916600160a01b179055565b5f546001600160a01b03163314611dc95760405162461bcd60e51b8152600401610c8b90613f9b565b602e805460ff60c01b1916600160c01b179055602d546001600160a01b0316611e1357602d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555b602e546001600160a01b0316611fa957602d5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e97919061402f565b6001600160a01b031663c9c6539630602d5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1a919061402f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611f64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f88919061402f565b602e80546001600160a01b0319166001600160a01b03929092169190911790555b305f81815260016020526040902054602d549091611fd0916001600160a01b031683612757565b602d54601c545f80546040805163f305d71960e01b815230600482015260248101879052604481019490945260648401929092526001600160a01b0390811660848401524260a4840152905192169163f305d71991479160c4808301926060929190829003018185885af115801561204a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061206f919061404a565b5050602e805462ff00ff60b01b1916600160b01b1790555050565b5f546001600160a01b031633146120b35760405162461bcd60e51b8152600401610c8b90613f9b565b4780156120c3576120c381612a3a565b50565b6010546001600160a01b031633146120dc575f80fd5b6012546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156120c3573d5f803e3d5ffd5b6001600160a01b0383166121765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8b565b6001600160a01b0382166121d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8b565b5f81116122395760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c8b565b602e545f90600160c01b900460ff1661229c57602e54600160a01b900460ff1661229c5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c8b565b5f546001600160a01b038581169116148015906122c657505f546001600160a01b03848116911614155b1561261a576122f760646122f1601854601b54116122e6576014546122ea565b6016545b859061378b565b90613810565b602e54909150600160b81b900460ff16156123e457602d546001600160a01b038481169116148015906123385750602e546001600160a01b03848116911614155b156123e457325f9081526008602052604090205443116123d25760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c8b565b325f9081526008602052604090204390555b602e546001600160a01b03858116911614801561240f5750602d546001600160a01b03848116911614155b801561243357506001600160a01b0383165f9081526003602052604090205460ff16155b1561251957601d5482111561248a5760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e000000000000006044820152606401610c8b565b601e54826124ac856001600160a01b03165f9081526001602052604090205490565b6124b69190613f1e565b11156125045760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610c8b565b601b8054905f61251383613f45565b91905055505b602e546001600160a01b03848116911614801561253f57506001600160a01b0384163014155b1561256c5761256960646122f1601954601b541161255f576015546122ea565b601754859061378b565b90505b305f90815260016020526040902054602e54600160a81b900460ff161580156125a25750602e546001600160a01b038581169116145b80156125b75750602e54600160b01b900460ff165b80156125c45750601f5481115b80156125d35750601a54601b54115b15612618575f4790506125f96125f4856125ef85602054613851565b613851565b61361b565b5f6126044783613865565b905080156126155761261581612a3a565b50505b505b801561269257305f9081526001602052604090205461263990826138a6565b305f81815260016020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126899085815260200190565b60405180910390a35b6001600160a01b0384165f908152600160205260409020546126b49083613865565b6001600160a01b0385165f908152600160205260409020556126f76126d98383613865565b6001600160a01b0385165f90815260016020526040902054906138a6565b6001600160a01b038085165f8181526001602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6127408585613865565b60405190815260200160405180910390a350505050565b6001600160a01b0383166127b95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8b565b6001600160a01b03821661281a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8b565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f818484111561289e5760405162461bcd60e51b8152600401610c8b91906139e2565b505f6128aa8486613ded565b95945050505050565b6001600160a01b0382166129135760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f74206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c8b565b61291f6009600a613ef9565b6129299082613f07565b6001600160a01b0383165f90815260016020526040812080549293508392909190612955908490613ded565b9250508190555080601c5f82825461296d9190613ded565b9091555050601c54601d819055601e556040518181526001600160a01b038316907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59060200160405180910390a26040518181525f906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a37f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf601c54604051612a2e91815260200190565b60405180910390a15050565b5f8111612a895760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610c8b565b80471015612ad95760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e63650000006044820152606401610c8b565b5f612ae5600583614075565b6013546040519192506001600160a01b03169082156108fc029083905f818181858888f19350505050158015612b1d573d5f803e3d5ffd5b506011546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612b55573d5f803e3d5ffd5b506010546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611b4d573d5f803e3d5ffd5b604051635854524160e01b60208201526024016040516020818303038152906040528051906020012082604051602001612bc79190613fd0565b6040516020818303038152906040528051906020012003612bfe578060215f828254612bf39190613f1e565b90915550610c9f9050565b604051641093d3d4d560da1b60208201526025016040516020818303038152906040528051906020012082604051602001612c399190613fd0565b6040516020818303038152906040528051906020012003612c65578060225f828254612bf39190613f1e565b604051602b60f91b60208201526021016040516020818303038152906040528051906020012082604051602001612c9c9190613fd0565b6040516020818303038152906040528051906020012003612cc8578060235f828254612bf39190613f1e565b604051630534b49560e41b60208201526024016040516020818303038152906040528051906020012082604051602001612d029190613fd0565b6040516020818303038152906040528051906020012003610c9f578060245f828254612d2e9190613f1e565b90915550505050565b604051635854524160e01b60208201526024016040516020818303038152906040528051906020012083604051602001612d719190613fd0565b6040516020818303038152906040528051906020012003612dbe576001600160a01b0381165f908152600b602052604081208054849290612db3908490613f1e565b90915550612f6e9050565b604051641093d3d4d560da1b60208201526025016040516020818303038152906040528051906020012083604051602001612df99190613fd0565b6040516020818303038152906040528051906020012003612e3b576001600160a01b0381165f908152600c602052604081208054849290612db3908490613f1e565b604051602b60f91b60208201526021016040516020818303038152906040528051906020012083604051602001612e729190613fd0565b6040516020818303038152906040528051906020012003612eb4576001600160a01b0381165f908152600d602052604081208054849290612db3908490613f1e565b604051630534b49560e41b60208201526024016040516020818303038152906040528051906020012083604051602001612eee9190613fd0565b6040516020818303038152906040528051906020012003612f30576001600160a01b0381165f908152600e602052604081208054849290612db3908490613f1e565b60405162461bcd60e51b8152602060048201526013602482015272496e76616c696420506f74696f6e204e616d6560681b6044820152606401610c8b565b806001600160a01b0316336001600160a01b03167f3d57eec5ab68ae7c8f1ed6299a36d8e6f61253e0f24ac6aba38bc3fcbe7bc7ae855f8060405161286e93929190614094565b815f03612fc157505050565b5f80604051602001612fdd90635854524160e01b815260040190565b60405160208183030381529060405280519060200120856040516020016130049190613fd0565b604051602081830303815290604052805190602001200361317f5760255461302c908561378b565b60295490925061303c908561378b565b6001600160a01b0384165f908152600960205260409020549091508211156130765760405162461bcd60e51b8152600401610c8b906140b8565b6001600160a01b0383165f908152600a60205260409020548111156130ad5760405162461bcd60e51b8152600401610c8b906140f9565b6001600160a01b0383165f90815260096020526040812080548492906130d4908490613ded565b90915550506001600160a01b0383165f908152600a602052604081208054839290613100908490613ded565b90915550506001600160a01b0383165f908152600b60205260408120805486929061312c908490613f1e565b90915550506040516001600160a01b0384169033907f3d57eec5ab68ae7c8f1ed6299a36d8e6f61253e0f24ac6aba38bc3fcbe7bc7ae9061317290899086908890614094565b60405180910390a36112e2565b604051641093d3d4d560da1b602082015260250160405160208183030381529060405280519060200120856040516020016131ba9190613fd0565b60405160208183030381529060405280519060200120036132e2576026546131e2908561378b565b602a549092506131f2908561378b565b6001600160a01b0384165f9081526009602052604090205490915082111561322c5760405162461bcd60e51b8152600401610c8b906140b8565b6001600160a01b0383165f908152600a60205260409020548111156132635760405162461bcd60e51b8152600401610c8b906140f9565b6001600160a01b0383165f908152600960205260408120805484929061328a908490613ded565b90915550506001600160a01b0383165f908152600a6020526040812080548392906132b6908490613ded565b90915550506001600160a01b0383165f908152600c60205260408120805486929061312c908490613f1e565b604051602b60f91b602082015260210160405160208183030381529060405280519060200120856040516020016133199190613fd0565b604051602081830303815290604052805190602001200361344157602754613341908561378b565b602b54909250613351908561378b565b6001600160a01b0384165f9081526009602052604090205490915082111561338b5760405162461bcd60e51b8152600401610c8b906140b8565b6001600160a01b0383165f908152600a60205260409020548111156133c25760405162461bcd60e51b8152600401610c8b906140f9565b6001600160a01b0383165f90815260096020526040812080548492906133e9908490613ded565b90915550506001600160a01b0383165f908152600a602052604081208054839290613415908490613ded565b90915550506001600160a01b0383165f908152600d60205260408120805486929061312c908490613f1e565b604051630534b49560e41b6020820152602401604051602081830303815290604052805190602001208560405160200161347b9190613fd0565b6040516020818303038152906040528051906020012003612f30576028546134a3908561378b565b602c549092506134b3908561378b565b6001600160a01b0384165f908152600960205260409020549091508211156134ed5760405162461bcd60e51b8152600401610c8b906140b8565b6001600160a01b0383165f908152600a60205260409020548111156135245760405162461bcd60e51b8152600401610c8b906140f9565b6001600160a01b0383165f908152600960205260408120805484929061354b908490613ded565b90915550506001600160a01b0383165f908152600a602052604081208054839290613577908490613ded565b90915550506001600160a01b0383165f908152600e60205260408120805486929061312c908490613f1e565b5f546001600160a01b031633146135cc5760405162461bcd60e51b8152600401610c8b90613f9b565b601c54601d819055601e819055602e805460ff60b81b191690556040519081527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9060200160405180910390a1565b602e805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061366157613661613f31565b6001600160a01b03928316602091820292909201810191909152602d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156136b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136dc919061402f565b816001815181106136ef576136ef613f31565b6001600160a01b039283166020918202929092010152602d546137159130911684612757565b602d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061374d9085905f9086903090429060040161412e565b5f604051808303815f87803b158015613764575f80fd5b505af1158015613776573d5f803e3d5ffd5b5050602e805460ff60a81b1916905550505050565b5f825f0361379a57505f610cb3565b5f6137a58385613f07565b9050826137b28583614075565b146138095760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c8b565b9392505050565b5f61380983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613904565b5f81831161385f5782613809565b50919050565b5f61380983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061287b565b5f806138b28385613f1e565b9050838110156138095760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c8b565b5f81836139245760405162461bcd60e51b8152600401610c8b91906139e2565b505f6128aa8486614075565b5f60208284031215613940575f80fd5b5035919050565b6001600160a01b03811681146120c3575f80fd5b803561396681613947565b919050565b5f806040838503121561397c575f80fd5b823561398781613947565b946020939093013593505050565b5f5b838110156139af578181015183820152602001613997565b50505f910152565b5f81518084526139ce816020860160208601613995565b601f01601f19169290920160200192915050565b602081525f61380960208301846139b7565b5f8060408385031215613a05575f80fd5b50508035926020909101359150565b5f60208284031215613a24575f80fd5b813561380981613947565b5f805f60608486031215613a41575f80fd5b8335613a4c81613947565b92506020840135613a5c81613947565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613aaa57613aaa613a6d565b604052919050565b5f67ffffffffffffffff821115613acb57613acb613a6d565b5060051b60200190565b5f805f60608486031215613ae7575f80fd5b833567ffffffffffffffff811115613afd575f80fd5b8401601f81018613613b0d575f80fd5b80356020613b22613b1d83613ab2565b613a81565b82815260059290921b83018101918181019089841115613b40575f80fd5b938201935b83851015613b67578435613b5881613947565b82529382019390820190613b45565b999188013598505060409096013595945050505050565b5f82601f830112613b8d575f80fd5b813567ffffffffffffffff811115613ba757613ba7613a6d565b613bba601f8201601f1916602001613a81565b818152846020838601011115613bce575f80fd5b816020850160208301375f918101602001919091529392505050565b5f82601f830112613bf9575f80fd5b81356020613c09613b1d83613ab2565b82815260059290921b84018101918181019086841115613c27575f80fd5b8286015b84811015613c425780358352918301918301613c2b565b509695505050505050565b5f805f8060808587031215613c60575f80fd5b843567ffffffffffffffff80821115613c77575f80fd5b818701915087601f830112613c8a575f80fd5b81356020613c9a613b1d83613ab2565b82815260059290921b8401810191818101908b841115613cb8575f80fd5b8286015b84811015613cef57803586811115613cd3575f8081fd5b613ce18e86838b0101613b7e565b845250918301918301613cbc565b5098505088013592505080821115613d05575f80fd5b50613d1287828801613bea565b935050613d216040860161395b565b9396929550929360600135925050565b5f805f60608486031215613d43575f80fd5b8335613d4e81613947565b9250602084013567ffffffffffffffff80821115613d6a575f80fd5b613d7687838801613bea565b93506040860135915080821115613d8b575f80fd5b50613d9886828701613b7e565b9150509250925092565b5f8060408385031215613db3575f80fd5b8235613dbe81613947565b91506020830135613dce81613947565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610cb357610cb3613dd9565b60ff8281168282160390811115610cb357610cb3613dd9565b600181815b80851115613e5357815f1904821115613e3957613e39613dd9565b80851615613e4657918102915b93841c9390800290613e1e565b509250929050565b5f82613e6957506001610cb3565b81613e7557505f610cb3565b8160018114613e8b5760028114613e9557613eb1565b6001915050610cb3565b60ff841115613ea657613ea6613dd9565b50506001821b610cb3565b5060208310610133831016604e8410600b8410161715613ed4575081810a610cb3565b613ede8383613e19565b805f1904821115613ef157613ef1613dd9565b029392505050565b5f61380960ff841683613e5b565b8082028115828204841417610cb357610cb3613dd9565b80820180821115610cb357610cb3613dd9565b634e487b7160e01b5f52603260045260245ffd5b5f60018201613f5657613f56613dd9565b5060010190565b81515f9082906020808601845b83811015613f8f5781516001600160a01b031685529382019390820190600101613f6a565b50929695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f8251613fe1818460208701613995565b9190910192915050565b60208082526024908201527f42616c616e636520646f6573206e6f74206861766520656e6f75676820506f74604082015263696f6e7360e01b606082015260800190565b5f6020828403121561403f575f80fd5b815161380981613947565b5f805f6060848603121561405c575f80fd5b8351925060208401519150604084015190509250925092565b5f8261408f57634e487b7160e01b5f52601260045260245ffd5b500490565b606081525f6140a660608301866139b7565b60208301949094525060400152919050565b60208082526021908201527f42616c616e636520646f6573206e6f74206861766520656e6f7567682048474d6040820152605360f81b606082015260800190565b6020808252818101527f42616c616e636520646f6573206e6f74206861766520656e6f75676820455448604082015260600190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561417c5784516001600160a01b031683529383019391830191600101614157565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220cee669f4f37d2f85b03746042bb0c0820013afa266a8b2fd7cf85fd8306fe72064736f6c63430008150033

Deployed Bytecode

0x6080604052600436106103b6575f3560e01c80636e9fa864116101e9578063bf474bed11610108578063eb429bf81161009d578063f3a395fc1161006d578063f3a395fc14610b6e578063f429389014610b9c578063f5648a4f14610bb0578063f7685a0214610bc4575f80fd5b8063eb429bf814610aee578063eb77dbb114610b19578063f2a6227f14610b2e578063f2b4c32514610b59575f80fd5b8063c9567bf9116100d8578063c9567bf914610a57578063d677d03e14610a6b578063dd62ed3e14610a96578063e8078d9414610ada575f80fd5b8063bf474bed146109c9578063c1ae5e72146109de578063c232ae4d14610a0c578063c876d0b914610a37575f80fd5b80638f9a55c01161017e578063a9059cbb1161014e578063a9059cbb14610941578063abb284e914610960578063bbab0ff11461097f578063be68e0271461099e575f80fd5b80638f9a55c0146108cd5780638fbd8f27146108e257806395d89b4114610901578063a1780c181461092d575f80fd5b80637d1db4a5116101b95780637d1db4a51461085e57806381cd58e51461087357806384d8a902146108925780638da5cb5b146108b1575f80fd5b80636e9fa864146107e357806370a0823114610802578063715018a614610836578063751039fc1461084a575f80fd5b8063298a8328116102d55780633e7130601161026a578063580a155a1161023a578063580a155a1461075357806366b6090f146107815780636a4d84f9146107965780636e2ed3c4146107b5575f80fd5b80633e713060146106c657806351a2f687146106db57806352d3c14e146106fa57806354ca45d814610725575f80fd5b80633520b3a4116102a55780633520b3a41461064557806337e294d51461065a5780633a3dec9e146106795780633b32edd414610698575f80fd5b8063298a8328146105d45780632ace2af5146105e95780632d4bbb0514610617578063313ce5671461062a575f80fd5b80630faee56f1161034b5780631cc34b981161031b5780631cc34b981461057657806321e09b341461058b57806323b872dd146105a057806324aede52146105bf575f80fd5b80630faee56f1461050157806311a63e171461051657806318160ddd1461054d57806319dde7b714610561575f80fd5b806308150133116103865780630815013314610475578063095ea7b3146104985780630c0e3d4a146104b75780630d2d697a146104d6575f80fd5b8063039aa9cf146103c15780630634087d1461040457806306b091f91461041a57806306fdde0314610439575f80fd5b366103bd57005b5f80fd5b3480156103cc575f80fd5b506103ef6103db366004613930565b60066020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561040f575f80fd5b50610418610bd9565b005b348015610425575f80fd5b5061041861043436600461396b565b610c1b565b348015610444575f80fd5b5060408051808201909152600b81526a48756e67657247616d657360a81b60208201525b6040516103fb91906139e2565b348015610480575f80fd5b5061048a60225481565b6040519081526020016103fb565b3480156104a3575f80fd5b506103ef6104b236600461396b565b610ca3565b3480156104c2575f80fd5b506104186104d13660046139f4565b610cb9565b3480156104e1575f80fd5b5061048a6104f0366004613a14565b60096020525f908152604090205481565b34801561050c575f80fd5b5061048a60205481565b348015610521575f80fd5b50601254610535906001600160a01b031681565b6040516001600160a01b0390911681526020016103fb565b348015610558575f80fd5b50601c5461048a565b34801561056c575f80fd5b5061048a60255481565b348015610581575f80fd5b5061048a60235481565b348015610596575f80fd5b5061048a602c5481565b3480156105ab575f80fd5b506103ef6105ba366004613a2f565b610cfc565b3480156105ca575f80fd5b5061048a60295481565b3480156105df575f80fd5b5061048a602b5481565b3480156105f4575f80fd5b506103ef610603366004613930565b5f9081526004602052604090205460ff1690565b6104186106253660046139f4565b610d63565b348015610635575f80fd5b50604051600981526020016103fb565b348015610650575f80fd5b5061048a60215481565b348015610665575f80fd5b50601154610535906001600160a01b031681565b348015610684575f80fd5b50610418610693366004613ad5565b610f0b565b3480156106a3575f80fd5b506103ef6106b2366004613930565b5f9081526006602052604090205460ff1690565b3480156106d1575f80fd5b5061048a60245481565b3480156106e6575f80fd5b50601054610535906001600160a01b031681565b348015610705575f80fd5b5061048a610714366004613a14565b600b6020525f908152604090205481565b348015610730575f80fd5b506103ef61073f366004613930565b60076020525f908152604090205460ff1681565b34801561075e575f80fd5b506103ef61076d366004613930565b60056020525f908152604090205460ff1681565b34801561078c575f80fd5b5061048a60285481565b3480156107a1575f80fd5b506104186107b03660046139f4565b61102e565b3480156107c0575f80fd5b506103ef6107cf366004613930565b5f9081526007602052604090205460ff1690565b3480156107ee575f80fd5b506104186107fd366004613c4d565b611071565b34801561080d575f80fd5b5061048a61081c366004613a14565b6001600160a01b03165f9081526001602052604090205490565b348015610841575f80fd5b506104186112e9565b348015610855575f80fd5b5061041861135a565b348015610869575f80fd5b5061048a601d5481565b34801561087e575f80fd5b5061041861088d366004613d31565b61138d565b34801561089d575f80fd5b506104186108ac366004613930565b611b52565b3480156108bc575f80fd5b505f546001600160a01b0316610535565b3480156108d8575f80fd5b5061048a601e5481565b3480156108ed575f80fd5b506104186108fc3660046139f4565b611c29565b34801561090c575f80fd5b5060408051808201909152600481526348474d5360e01b6020820152610468565b348015610938575f80fd5b50610418611c6c565b34801561094c575f80fd5b506103ef61095b36600461396b565b611cb9565b34801561096b575f80fd5b5061041861097a3660046139f4565b611cc5565b34801561098a575f80fd5b50601354610535906001600160a01b031681565b3480156109a9575f80fd5b5061048a6109b8366004613a14565b600a6020525f908152604090205481565b3480156109d4575f80fd5b5061048a601f5481565b3480156109e9575f80fd5b506103ef6109f8366004613930565b5f9081526005602052604090205460ff1690565b348015610a17575f80fd5b5061048a610a26366004613a14565b600d6020525f908152604090205481565b348015610a42575f80fd5b50602e546103ef90600160b81b900460ff1681565b348015610a62575f80fd5b50610418611d08565b348015610a76575f80fd5b5061048a610a85366004613a14565b600c6020525f908152604090205481565b348015610aa1575f80fd5b5061048a610ab0366004613da2565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610ae5575f80fd5b50610418611da0565b348015610af9575f80fd5b5061048a610b08366004613930565b600f6020525f908152604090205481565b348015610b24575f80fd5b5061048a60275481565b348015610b39575f80fd5b5061048a610b48366004613a14565b600e6020525f908152604090205481565b348015610b64575f80fd5b5061048a602a5481565b348015610b79575f80fd5b506103ef610b88366004613930565b60046020525f908152604090205460ff1681565b348015610ba7575f80fd5b5061041861208a565b348015610bbb575f80fd5b506104186120c6565b348015610bcf575f80fd5b5061048a60265481565b6010546001600160a01b03163314610bef575f80fd5b60188054905f610bff8380613ded565b909155505060198054905f610c148380613ded565b9091555050565b6010546001600160a01b03163314610c31575f80fd5b305f90815260016020526040902054811115610c945760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e7320696e20636f6e747261637400000060448201526064015b60405180910390fd5b610c9f308383612112565b5050565b5f610caf338484612757565b5060015b92915050565b6010546001600160a01b03163314610ccf575f80fd5b6028829055610ce060036009613e00565b610ceb90600a613ef9565b610cf59082613f07565b602c555050565b5f610d08848484612112565b610d598433610d548560405180606001604052806028815260200161419e602891396001600160a01b038a165f908152600260209081526040808320338452909152902054919061287b565b612757565b5060019392505050565b5f821180610d7057505f81115b610dbc5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610c8b565b610dc86009600a613ef9565b610dd29082613f07565b341015610e215760405162461bcd60e51b815260206004820152601960248201527f496e636f72726563742045544820616d6f756e742073656e74000000000000006044820152606401610c8b565b8115610eac57335f90815260016020526040902054821115610e7e5760405162461bcd60e51b81526020600482015260166024820152754e6f7420656e6f7567682048474d5320746f6b656e7360501b6044820152606401610c8b565b610e8833836128b3565b335f9081526009602052604081208054849290610ea6908490613f1e565b90915550505b8015610edf57335f908152600a602052604081208054839290610ed0908490613f1e565b90915550610edf905034612a3a565b6040517fed21248cb703b524cc0029bb8669df941baca560163a3bc6ad184e7e9c268070905f90a15050565b6010546001600160a01b03163314610f565760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610c8b565b5f5b81811015610fda57836001828651610f709190613ded565b610f7a9190613ded565b81518110610f8a57610f8a613f31565b60200260200101516001600160a01b03166108fc8490811502906040515f60405180830381858888f19350505050158015610fc7573d5f803e3d5ffd5b5080610fd281613f45565b915050610f58565b5082604051610fe99190613f5d565b6040805191829003822084835260208301849052917f8b3eb1b796c23a273d8117d01e4a5e074356865b5f1bc15b881fb60bd02e50bd910160405180910390a2505050565b6010546001600160a01b03163314611044575f80fd5b602682905561105560036009613e00565b61106090600a613ef9565b61106a9082613f07565b602a555050565b6010546001600160a01b031633146110e15760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c79206d61696e74656e616e636557616c6c65742063616e2063616c6c2060448201526c3a3434b990333ab731ba34b7b760991b6064820152608401610c8b565b825184511461114b5760405162461bcd60e51b815260206004820152603060248201527f4d69736d61746368656420706f74696f6e4e616d657320616e6420616d6f756e60448201526f0e8e640c2e4e4c2f2e640d8cadccee8d60831b6064820152608401610c8b565b83515f60218190556022819055602381905560245561116a8282613ded565b90505f5b818110156111c4576111b286828151811061118b5761118b613f31565b60200260200101518683815181106111a5576111a5613f31565b6020026020010151612b8d565b806111bc81613f45565b91505061116e565b50805b855181101561121f5761120d8682815181106111e5576111e5613f31565b60200260200101518683815181106111ff576111ff613f31565b602002602001015186612d37565b8061121781613f45565b9150506111c7565b506021541561125157611251604051806040016040528060048152602001635854524160e01b81525060215485612fb5565b6022541561128357611283604051806040016040528060058152602001641093d3d4d560da1b81525060225485612fb5565b602354156112b1576112b1604051806040016040528060018152602001602b60f91b81525060235485612fb5565b602454156112e2576112e2604051806040016040528060048152602001630534b49560e41b81525060245485612fb5565b5050505050565b5f546001600160a01b031633146113125760405162461bcd60e51b8152600401610c8b90613f9b565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146113835760405162461bcd60e51b8152600401610c8b90613f9b565b61138b6135a3565b565b6010546001600160a01b031633146113a3575f80fd5b604051635854524160e01b602082015260240160405160208183030381529060405280519060200120816040516020016113dd9190613fd0565b60405160208183030381529060405280519060200120036115845781516001600160a01b0384165f908152600b602052604090205410156114305760405162461bcd60e51b8152600401610c8b90613feb565b5f5b825181101561157e5760045f84838151811061145057611450613f31565b60209081029190910181015182528101919091526040015f205460ff16156114b05760405162461bcd60e51b8152602060048201526013602482015272416c726561647920616374697665205854524160681b6044820152606401610c8b565b600160045f8584815181106114c7576114c7613f31565b602002602001015181526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f866001600160a01b03166001600160a01b031681526020019081526020015f205f8282546115259190613ded565b925050819055506001600f5f85848151811061154357611543613f31565b602002602001015181526020019081526020015f205f8282546115669190613f1e565b9091555081905061157681613f45565b915050611432565b50505050565b604051641093d3d4d560da1b602082015260250160405160208183030381529060405280519060200120816040516020016115bf9190613fd0565b60405160208183030381529060405280519060200120036117615781516001600160a01b0384165f908152600c602052604090205410156116125760405162461bcd60e51b8152600401610c8b90613feb565b5f5b825181101561157e5760065f84838151811061163257611632613f31565b60209081029190910181015182528101919091526040015f205460ff16156116935760405162461bcd60e51b8152602060048201526014602482015273105b1c9958591e481858dd1a5d99481093d3d4d560621b6044820152606401610c8b565b600160065f8584815181106116aa576116aa613f31565b602002602001015181526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f866001600160a01b03166001600160a01b031681526020019081526020015f205f8282546117089190613ded565b925050819055506001600f5f85848151811061172657611726613f31565b602002602001015181526020019081526020015f205f8282546117499190613f1e565b9091555081905061175981613f45565b915050611614565b604051602b60f91b602082015260210160405160208183030381529060405280519060200120816040516020016117989190613fd0565b60405160208183030381529060405280519060200120036119365781516001600160a01b0384165f908152600d602052604090205410156117eb5760405162461bcd60e51b8152600401610c8b90613feb565b5f5b825181101561157e5760055f84838151811061180b5761180b613f31565b60209081029190910181015182528101919091526040015f205460ff16156118685760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c9030b1ba34bb32902b60811b6044820152606401610c8b565b600160055f85848151811061187f5761187f613f31565b602002602001015181526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f866001600160a01b03166001600160a01b031681526020019081526020015f205f8282546118dd9190613ded565b925050819055506001600f5f8584815181106118fb576118fb613f31565b602002602001015181526020019081526020015f205f82825461191e9190613f1e565b9091555081905061192e81613f45565b9150506117ed565b604051630534b49560e41b602082015260240160405160208183030381529060405280519060200120816040516020016119709190613fd0565b6040516020818303038152906040528051906020012003611b115781516001600160a01b0384165f908152600e602052604090205410156119c35760405162461bcd60e51b8152600401610c8b90613feb565b5f5b825181101561157e5760075f8483815181106119e3576119e3613f31565b60209081029190910181015182528101919091526040015f205460ff1615611a435760405162461bcd60e51b81526020600482015260136024820152720416c72656164792061637469766520534b495606c1b6044820152606401610c8b565b600160075f858481518110611a5a57611a5a613f31565b602002602001015181526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600e5f866001600160a01b03166001600160a01b031681526020019081526020015f205f828254611ab89190613ded565b925050819055506001600f5f858481518110611ad657611ad6613f31565b602002602001015181526020019081526020015f205f828254611af99190613f1e565b90915550819050611b0981613f45565b9150506119c5565b60405162461bcd60e51b815260206004820152601160248201527057726f6e6720506f74696f6e204e616d6560781b6044820152606401610c8b565b505050565b6010546001600160a01b03163314611b9d5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610c8b565b60015b818111611bfd575f818152600460209081526040808320805460ff19908116909155600583528184208054821690556006835281842080548216905560079092529091208054909116905580611bf581613f45565b915050611ba0565b506040517f22229ac981ba35e4851e4876bf3e8c431568fa66038fbcdfeaac37bd197f7bec905f90a150565b6010546001600160a01b03163314611c3f575f80fd5b6025829055611c5060036009613e00565b611c5b90600a613ef9565b611c659082613f07565b6029555050565b6012546001600160a01b0316336001600160a01b031614611c8b575f80fd5b305f908152600160205260409020548015611ca957611ca98161361b565b478015610c9f57610c9f81612a3a565b5f610caf338484612112565b6010546001600160a01b03163314611cdb575f80fd5b6027829055611cec60036009613e00565b611cf790600a613ef9565b611d019082613f07565b602b555050565b5f546001600160a01b03163314611d315760405162461bcd60e51b8152600401610c8b90613f9b565b602e54600160a01b900460ff1615611d8b5760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610c8b565b602e805460ff60a01b1916600160a01b179055565b5f546001600160a01b03163314611dc95760405162461bcd60e51b8152600401610c8b90613f9b565b602e805460ff60c01b1916600160c01b179055602d546001600160a01b0316611e1357602d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555b602e546001600160a01b0316611fa957602d5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e97919061402f565b6001600160a01b031663c9c6539630602d5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1a919061402f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611f64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f88919061402f565b602e80546001600160a01b0319166001600160a01b03929092169190911790555b305f81815260016020526040902054602d549091611fd0916001600160a01b031683612757565b602d54601c545f80546040805163f305d71960e01b815230600482015260248101879052604481019490945260648401929092526001600160a01b0390811660848401524260a4840152905192169163f305d71991479160c4808301926060929190829003018185885af115801561204a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061206f919061404a565b5050602e805462ff00ff60b01b1916600160b01b1790555050565b5f546001600160a01b031633146120b35760405162461bcd60e51b8152600401610c8b90613f9b565b4780156120c3576120c381612a3a565b50565b6010546001600160a01b031633146120dc575f80fd5b6012546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156120c3573d5f803e3d5ffd5b6001600160a01b0383166121765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8b565b6001600160a01b0382166121d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8b565b5f81116122395760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c8b565b602e545f90600160c01b900460ff1661229c57602e54600160a01b900460ff1661229c5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c8b565b5f546001600160a01b038581169116148015906122c657505f546001600160a01b03848116911614155b1561261a576122f760646122f1601854601b54116122e6576014546122ea565b6016545b859061378b565b90613810565b602e54909150600160b81b900460ff16156123e457602d546001600160a01b038481169116148015906123385750602e546001600160a01b03848116911614155b156123e457325f9081526008602052604090205443116123d25760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c8b565b325f9081526008602052604090204390555b602e546001600160a01b03858116911614801561240f5750602d546001600160a01b03848116911614155b801561243357506001600160a01b0383165f9081526003602052604090205460ff16155b1561251957601d5482111561248a5760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e000000000000006044820152606401610c8b565b601e54826124ac856001600160a01b03165f9081526001602052604090205490565b6124b69190613f1e565b11156125045760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610c8b565b601b8054905f61251383613f45565b91905055505b602e546001600160a01b03848116911614801561253f57506001600160a01b0384163014155b1561256c5761256960646122f1601954601b541161255f576015546122ea565b601754859061378b565b90505b305f90815260016020526040902054602e54600160a81b900460ff161580156125a25750602e546001600160a01b038581169116145b80156125b75750602e54600160b01b900460ff165b80156125c45750601f5481115b80156125d35750601a54601b54115b15612618575f4790506125f96125f4856125ef85602054613851565b613851565b61361b565b5f6126044783613865565b905080156126155761261581612a3a565b50505b505b801561269257305f9081526001602052604090205461263990826138a6565b305f81815260016020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126899085815260200190565b60405180910390a35b6001600160a01b0384165f908152600160205260409020546126b49083613865565b6001600160a01b0385165f908152600160205260409020556126f76126d98383613865565b6001600160a01b0385165f90815260016020526040902054906138a6565b6001600160a01b038085165f8181526001602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6127408585613865565b60405190815260200160405180910390a350505050565b6001600160a01b0383166127b95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8b565b6001600160a01b03821661281a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8b565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f818484111561289e5760405162461bcd60e51b8152600401610c8b91906139e2565b505f6128aa8486613ded565b95945050505050565b6001600160a01b0382166129135760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f74206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c8b565b61291f6009600a613ef9565b6129299082613f07565b6001600160a01b0383165f90815260016020526040812080549293508392909190612955908490613ded565b9250508190555080601c5f82825461296d9190613ded565b9091555050601c54601d819055601e556040518181526001600160a01b038316907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59060200160405180910390a26040518181525f906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a37f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf601c54604051612a2e91815260200190565b60405180910390a15050565b5f8111612a895760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610c8b565b80471015612ad95760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e63650000006044820152606401610c8b565b5f612ae5600583614075565b6013546040519192506001600160a01b03169082156108fc029083905f818181858888f19350505050158015612b1d573d5f803e3d5ffd5b506011546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612b55573d5f803e3d5ffd5b506010546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611b4d573d5f803e3d5ffd5b604051635854524160e01b60208201526024016040516020818303038152906040528051906020012082604051602001612bc79190613fd0565b6040516020818303038152906040528051906020012003612bfe578060215f828254612bf39190613f1e565b90915550610c9f9050565b604051641093d3d4d560da1b60208201526025016040516020818303038152906040528051906020012082604051602001612c399190613fd0565b6040516020818303038152906040528051906020012003612c65578060225f828254612bf39190613f1e565b604051602b60f91b60208201526021016040516020818303038152906040528051906020012082604051602001612c9c9190613fd0565b6040516020818303038152906040528051906020012003612cc8578060235f828254612bf39190613f1e565b604051630534b49560e41b60208201526024016040516020818303038152906040528051906020012082604051602001612d029190613fd0565b6040516020818303038152906040528051906020012003610c9f578060245f828254612d2e9190613f1e565b90915550505050565b604051635854524160e01b60208201526024016040516020818303038152906040528051906020012083604051602001612d719190613fd0565b6040516020818303038152906040528051906020012003612dbe576001600160a01b0381165f908152600b602052604081208054849290612db3908490613f1e565b90915550612f6e9050565b604051641093d3d4d560da1b60208201526025016040516020818303038152906040528051906020012083604051602001612df99190613fd0565b6040516020818303038152906040528051906020012003612e3b576001600160a01b0381165f908152600c602052604081208054849290612db3908490613f1e565b604051602b60f91b60208201526021016040516020818303038152906040528051906020012083604051602001612e729190613fd0565b6040516020818303038152906040528051906020012003612eb4576001600160a01b0381165f908152600d602052604081208054849290612db3908490613f1e565b604051630534b49560e41b60208201526024016040516020818303038152906040528051906020012083604051602001612eee9190613fd0565b6040516020818303038152906040528051906020012003612f30576001600160a01b0381165f908152600e602052604081208054849290612db3908490613f1e565b60405162461bcd60e51b8152602060048201526013602482015272496e76616c696420506f74696f6e204e616d6560681b6044820152606401610c8b565b806001600160a01b0316336001600160a01b03167f3d57eec5ab68ae7c8f1ed6299a36d8e6f61253e0f24ac6aba38bc3fcbe7bc7ae855f8060405161286e93929190614094565b815f03612fc157505050565b5f80604051602001612fdd90635854524160e01b815260040190565b60405160208183030381529060405280519060200120856040516020016130049190613fd0565b604051602081830303815290604052805190602001200361317f5760255461302c908561378b565b60295490925061303c908561378b565b6001600160a01b0384165f908152600960205260409020549091508211156130765760405162461bcd60e51b8152600401610c8b906140b8565b6001600160a01b0383165f908152600a60205260409020548111156130ad5760405162461bcd60e51b8152600401610c8b906140f9565b6001600160a01b0383165f90815260096020526040812080548492906130d4908490613ded565b90915550506001600160a01b0383165f908152600a602052604081208054839290613100908490613ded565b90915550506001600160a01b0383165f908152600b60205260408120805486929061312c908490613f1e565b90915550506040516001600160a01b0384169033907f3d57eec5ab68ae7c8f1ed6299a36d8e6f61253e0f24ac6aba38bc3fcbe7bc7ae9061317290899086908890614094565b60405180910390a36112e2565b604051641093d3d4d560da1b602082015260250160405160208183030381529060405280519060200120856040516020016131ba9190613fd0565b60405160208183030381529060405280519060200120036132e2576026546131e2908561378b565b602a549092506131f2908561378b565b6001600160a01b0384165f9081526009602052604090205490915082111561322c5760405162461bcd60e51b8152600401610c8b906140b8565b6001600160a01b0383165f908152600a60205260409020548111156132635760405162461bcd60e51b8152600401610c8b906140f9565b6001600160a01b0383165f908152600960205260408120805484929061328a908490613ded565b90915550506001600160a01b0383165f908152600a6020526040812080548392906132b6908490613ded565b90915550506001600160a01b0383165f908152600c60205260408120805486929061312c908490613f1e565b604051602b60f91b602082015260210160405160208183030381529060405280519060200120856040516020016133199190613fd0565b604051602081830303815290604052805190602001200361344157602754613341908561378b565b602b54909250613351908561378b565b6001600160a01b0384165f9081526009602052604090205490915082111561338b5760405162461bcd60e51b8152600401610c8b906140b8565b6001600160a01b0383165f908152600a60205260409020548111156133c25760405162461bcd60e51b8152600401610c8b906140f9565b6001600160a01b0383165f90815260096020526040812080548492906133e9908490613ded565b90915550506001600160a01b0383165f908152600a602052604081208054839290613415908490613ded565b90915550506001600160a01b0383165f908152600d60205260408120805486929061312c908490613f1e565b604051630534b49560e41b6020820152602401604051602081830303815290604052805190602001208560405160200161347b9190613fd0565b6040516020818303038152906040528051906020012003612f30576028546134a3908561378b565b602c549092506134b3908561378b565b6001600160a01b0384165f908152600960205260409020549091508211156134ed5760405162461bcd60e51b8152600401610c8b906140b8565b6001600160a01b0383165f908152600a60205260409020548111156135245760405162461bcd60e51b8152600401610c8b906140f9565b6001600160a01b0383165f908152600960205260408120805484929061354b908490613ded565b90915550506001600160a01b0383165f908152600a602052604081208054839290613577908490613ded565b90915550506001600160a01b0383165f908152600e60205260408120805486929061312c908490613f1e565b5f546001600160a01b031633146135cc5760405162461bcd60e51b8152600401610c8b90613f9b565b601c54601d819055601e819055602e805460ff60b81b191690556040519081527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9060200160405180910390a1565b602e805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061366157613661613f31565b6001600160a01b03928316602091820292909201810191909152602d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156136b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136dc919061402f565b816001815181106136ef576136ef613f31565b6001600160a01b039283166020918202929092010152602d546137159130911684612757565b602d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061374d9085905f9086903090429060040161412e565b5f604051808303815f87803b158015613764575f80fd5b505af1158015613776573d5f803e3d5ffd5b5050602e805460ff60a81b1916905550505050565b5f825f0361379a57505f610cb3565b5f6137a58385613f07565b9050826137b28583614075565b146138095760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c8b565b9392505050565b5f61380983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613904565b5f81831161385f5782613809565b50919050565b5f61380983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061287b565b5f806138b28385613f1e565b9050838110156138095760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c8b565b5f81836139245760405162461bcd60e51b8152600401610c8b91906139e2565b505f6128aa8486614075565b5f60208284031215613940575f80fd5b5035919050565b6001600160a01b03811681146120c3575f80fd5b803561396681613947565b919050565b5f806040838503121561397c575f80fd5b823561398781613947565b946020939093013593505050565b5f5b838110156139af578181015183820152602001613997565b50505f910152565b5f81518084526139ce816020860160208601613995565b601f01601f19169290920160200192915050565b602081525f61380960208301846139b7565b5f8060408385031215613a05575f80fd5b50508035926020909101359150565b5f60208284031215613a24575f80fd5b813561380981613947565b5f805f60608486031215613a41575f80fd5b8335613a4c81613947565b92506020840135613a5c81613947565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613aaa57613aaa613a6d565b604052919050565b5f67ffffffffffffffff821115613acb57613acb613a6d565b5060051b60200190565b5f805f60608486031215613ae7575f80fd5b833567ffffffffffffffff811115613afd575f80fd5b8401601f81018613613b0d575f80fd5b80356020613b22613b1d83613ab2565b613a81565b82815260059290921b83018101918181019089841115613b40575f80fd5b938201935b83851015613b67578435613b5881613947565b82529382019390820190613b45565b999188013598505060409096013595945050505050565b5f82601f830112613b8d575f80fd5b813567ffffffffffffffff811115613ba757613ba7613a6d565b613bba601f8201601f1916602001613a81565b818152846020838601011115613bce575f80fd5b816020850160208301375f918101602001919091529392505050565b5f82601f830112613bf9575f80fd5b81356020613c09613b1d83613ab2565b82815260059290921b84018101918181019086841115613c27575f80fd5b8286015b84811015613c425780358352918301918301613c2b565b509695505050505050565b5f805f8060808587031215613c60575f80fd5b843567ffffffffffffffff80821115613c77575f80fd5b818701915087601f830112613c8a575f80fd5b81356020613c9a613b1d83613ab2565b82815260059290921b8401810191818101908b841115613cb8575f80fd5b8286015b84811015613cef57803586811115613cd3575f8081fd5b613ce18e86838b0101613b7e565b845250918301918301613cbc565b5098505088013592505080821115613d05575f80fd5b50613d1287828801613bea565b935050613d216040860161395b565b9396929550929360600135925050565b5f805f60608486031215613d43575f80fd5b8335613d4e81613947565b9250602084013567ffffffffffffffff80821115613d6a575f80fd5b613d7687838801613bea565b93506040860135915080821115613d8b575f80fd5b50613d9886828701613b7e565b9150509250925092565b5f8060408385031215613db3575f80fd5b8235613dbe81613947565b91506020830135613dce81613947565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610cb357610cb3613dd9565b60ff8281168282160390811115610cb357610cb3613dd9565b600181815b80851115613e5357815f1904821115613e3957613e39613dd9565b80851615613e4657918102915b93841c9390800290613e1e565b509250929050565b5f82613e6957506001610cb3565b81613e7557505f610cb3565b8160018114613e8b5760028114613e9557613eb1565b6001915050610cb3565b60ff841115613ea657613ea6613dd9565b50506001821b610cb3565b5060208310610133831016604e8410600b8410161715613ed4575081810a610cb3565b613ede8383613e19565b805f1904821115613ef157613ef1613dd9565b029392505050565b5f61380960ff841683613e5b565b8082028115828204841417610cb357610cb3613dd9565b80820180821115610cb357610cb3613dd9565b634e487b7160e01b5f52603260045260245ffd5b5f60018201613f5657613f56613dd9565b5060010190565b81515f9082906020808601845b83811015613f8f5781516001600160a01b031685529382019390820190600101613f6a565b50929695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f8251613fe1818460208701613995565b9190910192915050565b60208082526024908201527f42616c616e636520646f6573206e6f74206861766520656e6f75676820506f74604082015263696f6e7360e01b606082015260800190565b5f6020828403121561403f575f80fd5b815161380981613947565b5f805f6060848603121561405c575f80fd5b8351925060208401519150604084015190509250925092565b5f8261408f57634e487b7160e01b5f52601260045260245ffd5b500490565b606081525f6140a660608301866139b7565b60208301949094525060400152919050565b60208082526021908201527f42616c616e636520646f6573206e6f74206861766520656e6f7567682048474d6040820152605360f81b606082015260800190565b6020808252818101527f42616c616e636520646f6573206e6f74206861766520656e6f75676820455448604082015260600190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561417c5784516001600160a01b031683529383019391830191600101614157565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220cee669f4f37d2f85b03746042bb0c0820013afa266a8b2fd7cf85fd8306fe72064736f6c63430008150033

Deployed Bytecode Sourcemap

5407:22740:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5797:51;;;;;;;;;;-1:-1:-1;5797:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;364:14:1;;357:22;339:41;;327:2;312:18;5797:51:0;;;;;;;;10193:186;;;;;;;;;;;;;:::i;:::-;;17367:255;;;;;;;;;;-1:-1:-1;17367:255:0;;;;;:::i;:::-;;:::i;10385:83::-;;;;;;;;;;-1:-1:-1;10455:5:0;;;;;;;;;;;;-1:-1:-1;;;10455:5:0;;;;10385:83;;;;;;;:::i;7379:25::-;;;;;;;;;;;;;;;;;;;1888::1;;;1876:2;1861:18;7379:25:0;1742:177:1;11676:161:0;;;;;;;;;;-1:-1:-1;11676:161:0;;;;;:::i;:::-;;:::i;9967:220::-;;;;;;;;;;-1:-1:-1;9967:220:0;;;;;:::i;:::-;;:::i;5986:52::-;;;;;;;;;;-1:-1:-1;5986:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;7287;;;;;;;;;;;;;;;;6482:33;;;;;;;;;;-1:-1:-1;6482:33:0;;;;-1:-1:-1;;;;;6482:33:0;;;;;;-1:-1:-1;;;;;2609:32:1;;;2591:51;;2579:2;2564:18;6482:33:0;2429:219:1;11128:95:0;;;;;;;;;;-1:-1:-1;11208:7:0;;11128:95;;7472:34;;;;;;;;;;;;;;;;7411:21;;;;;;;;;;;;;;;;7790:52;;;;;;;;;;;;;;;;11843:313;;;;;;;;;;-1:-1:-1;11843:313:0;;;;;:::i;:::-;;:::i;7636:53::-;;;;;;;;;;;;;;;;7734:49;;;;;;;;;;;;;;;;10656:113;;;;;;;;;;-1:-1:-1;10656:113:0;;;;;:::i;:::-;10717:4;10740:21;;;:14;:21;;;;;;;;;10656:113;18373:655;;;;;;:::i;:::-;;:::i;10567:83::-;;;;;;;;;;-1:-1:-1;10567:83:0;;6919:1;3256:36:1;;3244:2;3229:18;10567:83:0;3114:184:1;7348:24:0;;;;;;;;;;;;;;;;6441:34;;;;;;;;;;-1:-1:-1;6441:34:0;;;;-1:-1:-1;;;;;6441:34:0;;;27315:364;;;;;;;;;;-1:-1:-1;27315:364:0;;;;;:::i;:::-;;:::i;10775:115::-;;;;;;;;;;-1:-1:-1;10775:115:0;;;;;:::i;:::-;10837:4;10860:22;;;:15;:22;;;;;;;;;10775:115;7439:24;;;;;;;;;;;;;;;;6393:41;;;;;;;;;;-1:-1:-1;6393:41:0;;;;-1:-1:-1;;;;;6393:41:0;;;6103:52;;;;;;;;;;-1:-1:-1;6103:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;5855:50;;;;;;;;;;-1:-1:-1;5855:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5743:47;;;;;;;;;;-1:-1:-1;5743:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7593:34;;;;;;;;;;;;;;;;9521:223;;;;;;;;;;-1:-1:-1;9521:223:0;;;;;:::i;:::-;;:::i;11009:113::-;;;;;;;;;;-1:-1:-1;11009:113:0;;;;;:::i;:::-;11070:4;11093:21;;;:14;:21;;;;;;;;;11009:113;19034:1082;;;;;;;;;;-1:-1:-1;19034:1082:0;;;;;:::i;:::-;;:::i;11229:119::-;;;;;;;;;;-1:-1:-1;11229:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;11322:18:0;11295:7;11322:18;;;:9;:18;;;;;;;11229:119;4490:148;;;;;;;;;;;;;:::i;15874:77::-;;;;;;;;;;;;;:::i;7099:54::-;;;;;;;;;;;;;;;;24725:2208;;;;;;;;;;-1:-1:-1;24725:2208:0;;;;;:::i;:::-;;:::i;26939:368::-;;;;;;;;;;-1:-1:-1;26939:368:0;;;;;:::i;:::-;;:::i;4276:79::-;;;;;;;;;;-1:-1:-1;4314:7:0;4341:6;-1:-1:-1;;;;;4341:6:0;4276:79;;7160:56;;;;;;;;;;;;;;;;9295:220;;;;;;;;;;-1:-1:-1;9295:220:0;;;;;:::i;:::-;;:::i;10474:87::-;;;;;;;;;;-1:-1:-1;10546:7:0;;;;;;;;;;;;-1:-1:-1;;;10546:7:0;;;;10474:87;;18018:349;;;;;;;;;;;;;:::i;11354:167::-;;;;;;;;;;-1:-1:-1;11354:167:0;;;;;:::i;:::-;;:::i;9750:211::-;;;;;;;;;;-1:-1:-1;9750:211:0;;;;;:::i;:::-;;:::i;6522:36::-;;;;;;;;;;-1:-1:-1;6522:36:0;;;;-1:-1:-1;;;;;6522:36:0;;;6045:51;;;;;;;;;;-1:-1:-1;6045:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;7223:57;;;;;;;;;;;;;;;;10896:107;;;;;;;;;;-1:-1:-1;10896:107:0;;;;;:::i;:::-;10954:4;10977:18;;;:11;:18;;;;;;;;;10896:107;6222:49;;;;;;;;;;-1:-1:-1;6222:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;8040:39;;;;;;;;;;-1:-1:-1;8040:39:0;;;;-1:-1:-1;;;8040:39:0;;;;;;16357:139;;;;;;;;;;;;;:::i;6162:53::-;;;;;;;;;;-1:-1:-1;6162:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;11527:143;;;;;;;;;;-1:-1:-1;11527:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;11635:18:0;;;11608:7;11635:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11527:143;16502:859;;;;;;;;;;;;;:::i;6337:47::-;;;;;;;;;;-1:-1:-1;6337:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;7555:31;;;;;;;;;;;;;;;;6278:52;;;;;;;;;;-1:-1:-1;6278:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;7696:31;;;;;;;;;;;;;;;;5686:50;;;;;;;;;;-1:-1:-1;5686:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17817:195;;;;;;;;;;;;;:::i;17628:148::-;;;;;;;;;;;;;:::i;7513:35::-;;;;;;;;;;;;;;;;10193:186;10259:18;;-1:-1:-1;;;;;10259:18:0;10245:10;:32;10237:41;;;;;;10308:15;;;;10289;:34;10308:15;;10289:34;:::i;:::-;;;;-1:-1:-1;;10355:16:0;;;;10334;:37;10355:16;;10334:37;:::i;:::-;;;;-1:-1:-1;;10193:186:0:o;17367:255::-;17461:18;;-1:-1:-1;;;;;17461:18:0;17447:10;:32;17439:41;;;;;;17527:4;11295:7;11322:18;;;:9;:18;;;;;;17499:6;:34;;17491:76;;;;-1:-1:-1;;;17491:76:0;;9501:2:1;17491:76:0;;;9483:21:1;9540:2;9520:18;;;9513:30;9579:31;9559:18;;;9552:59;9628:18;;17491:76:0;;;;;;;;;17578:36;17596:4;17603:2;17607:6;17578:9;:36::i;:::-;17367:255;;:::o;11676:161::-;11751:4;11768:39;2053:10;11791:7;11800:6;11768:8;:39::i;:::-;-1:-1:-1;11825:4:0;11676:161;;;;;:::o;9967:220::-;10067:18;;-1:-1:-1;;;;;10067:18:0;10053:10;:32;10045:41;;;;;;10097:13;:26;;;10165:13;10177:1;6919;10165:13;:::i;:::-;10160:19;;:2;:19;:::i;:::-;10149:30;;:9;:30;:::i;:::-;10134:12;:45;-1:-1:-1;;9967:220:0:o;11843:313::-;11941:4;11958:36;11968:6;11976:9;11987:6;11958:9;:36::i;:::-;12005:121;12014:6;2053:10;12036:89;12074:6;12036:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12036:19:0;;;;;;:11;:19;;;;;;;;2053:10;12036:33;;;;;;;;;;:37;:89::i;:::-;12005:8;:121::i;:::-;-1:-1:-1;12144:4:0;11843:313;;;;;:::o;18373:655::-;18484:1;18471:10;:14;:31;;;;18501:1;18489:9;:13;18471:31;18463:75;;;;-1:-1:-1;;;18463:75:0;;11571:2:1;18463:75:0;;;11553:21:1;11610:2;11590:18;;;11583:30;11649:33;11629:18;;;11622:61;11700:18;;18463:75:0;11369:355:1;18463:75:0;18582:13;6919:1;18582:2;:13;:::i;:::-;18570:25;;:9;:25;:::i;:::-;18557:9;:38;;18549:76;;;;-1:-1:-1;;;18549:76:0;;11931:2:1;18549:76:0;;;11913:21:1;11970:2;11950:18;;;11943:30;12009:27;11989:18;;;11982:55;12054:18;;18549:76:0;11729:349:1;18549:76:0;18649:14;;18645:209;;18694:10;18684:21;;;;:9;:21;;;;;;:35;-1:-1:-1;18684:35:0;18676:70;;;;-1:-1:-1;;;18676:70:0;;12285:2:1;18676:70:0;;;12267:21:1;12324:2;12304:18;;;12297:30;-1:-1:-1;;;12343:18:1;;;12336:52;12405:18;;18676:70:0;12083:346:1;18676:70:0;18757:29;18763:10;18775;18757:5;:29::i;:::-;18816:10;18799:28;;;;:16;:28;;;;;:42;;18831:10;;18799:28;:42;;18831:10;;18799:42;:::i;:::-;;;;-1:-1:-1;;18645:209:0;18870:13;;18866:128;;18916:10;18900:27;;;;:15;:27;;;;;:40;;18931:9;;18900:27;:40;;18931:9;;18900:40;:::i;:::-;;;;-1:-1:-1;18957:23:0;;-1:-1:-1;18970:9:0;18957:12;:23::i;:::-;19011:9;;;;;;;18373:655;;:::o;27315:364::-;27439:18;;-1:-1:-1;;;;;27439:18:0;27425:10;:32;27417:59;;;;-1:-1:-1;;;27417:59:0;;12766:2:1;27417:59:0;;;12748:21:1;12805:2;12785:18;;;12778:30;-1:-1:-1;;;12824:18:1;;;12817:44;12878:18;;27417:59:0;12564:338:1;27417:59:0;27492:9;27487:122;27511:8;27507:1;:12;27487:122;;;27549:7;27578:1;27574;27557:7;:14;:18;;;;:::i;:::-;:22;;;;:::i;:::-;27549:31;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;27541:49:0;:56;27591:5;27541:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27521:3:0;;;;:::i;:::-;;;;27487:122;;;;27646:7;27624:47;;;;;;:::i;:::-;;;;;;;;;;13927:25:1;;;13983:2;13968:18;;13961:34;;;27624:47:0;;;13900:18:1;27624:47:0;;;;;;;27315:364;;;:::o;9521:223::-;9622:18;;-1:-1:-1;;;;;9622:18:0;9608:10;:32;9600:41;;;;;;9652:14;:27;;;9722:13;9734:1;6919;9722:13;:::i;:::-;9717:19;;:2;:19;:::i;:::-;9706:30;;:9;:30;:::i;:::-;9690:13;:46;-1:-1:-1;;9521:223:0:o;19034:1082::-;19190:18;;-1:-1:-1;;;;;19190:18:0;19176:10;:32;19168:90;;;;-1:-1:-1;;;19168:90:0;;14208:2:1;19168:90:0;;;14190:21:1;14247:2;14227:18;;;14220:30;14286:34;14266:18;;;14259:62;-1:-1:-1;;;14337:18:1;;;14330:43;14390:19;;19168:90:0;14006:409:1;19168:90:0;19299:7;:14;19277:11;:18;:36;19269:97;;;;-1:-1:-1;;;19269:97:0;;14622:2:1;19269:97:0;;;14604:21:1;14661:2;14641:18;;;14634:30;14700:34;14680:18;;;14673:62;-1:-1:-1;;;14751:18:1;;;14744:46;14807:19;;19269:97:0;14420:412:1;19269:97:0;19397:18;;19379:15;19428:9;:13;;;19452:10;:14;;;19477:6;:10;;;19498:9;:13;19522:22;19533:11;19397:18;19522:22;:::i;:::-;;;19570:6;19566:108;19586:7;19582:1;:11;19566:108;;;19615:47;19635:11;19647:1;19635:14;;;;;;;;:::i;:::-;;;;;;;19651:7;19659:1;19651:10;;;;;;;;:::i;:::-;;;;;;;19615:19;:47::i;:::-;19595:3;;;;:::i;:::-;;;;19566:108;;;-1:-1:-1;19699:7:0;19686:143;19712:11;:18;19708:1;:22;19686:143;;;19752:65;19779:11;19791:1;19779:14;;;;;;;;:::i;:::-;;;;;;;19795:7;19803:1;19795:10;;;;;;;;:::i;:::-;;;;;;;19807:9;19752:26;:65::i;:::-;19732:3;;;;:::i;:::-;;;;19686:143;;;-1:-1:-1;19844:9:0;;:13;19841:60;;19859:42;;;;;;;;;;;;;;-1:-1:-1;;;19859:42:0;;;19880:9;;19891;19859:12;:42::i;:::-;19915:10;;:14;19912:63;;19931:44;;;;;;;;;;;;;;-1:-1:-1;;;19931:44:0;;;19953:10;;19965:9;19931:12;:44::i;:::-;19989:6;;:10;19986:51;;20001:36;;;;;;;;;;;;;;-1:-1:-1;;;20001:36:0;;;20019:6;;20027:9;20001:12;:36::i;:::-;20051:9;;:13;20048:60;;20066:42;;;;;;;;;;;;;;-1:-1:-1;;;20066:42:0;;;20087:9;;20098;20066:12;:42::i;:::-;19157:959;19034:1082;;;;:::o;4490:148::-;4403:6;;-1:-1:-1;;;;;4403:6:0;2053:10;4403:22;4395:67;;;;-1:-1:-1;;;4395:67:0;;;;;;;:::i;:::-;4597:1:::1;4581:6:::0;;4560:40:::1;::::0;-1:-1:-1;;;;;4581:6:0;;::::1;::::0;4560:40:::1;::::0;4597:1;;4560:40:::1;4628:1;4611:19:::0;;-1:-1:-1;;;;;;4611:19:0::1;::::0;;4490:148::o;15874:77::-;4403:6;;-1:-1:-1;;;;;4403:6:0;2053:10;4403:22;4395:67;;;;-1:-1:-1;;;4395:67:0;;;;;;;:::i;:::-;15928:15:::1;:13;:15::i;:::-;15874:77::o:0;24725:2208::-;24856:18;;-1:-1:-1;;;;;24856:18:0;24842:10;:32;24834:41;;;;;;24942:24;;-1:-1:-1;;;24942:24:0;;;15400:19:1;15435:11;;24942:24:0;;;;;;;;;;;;24932:35;;;;;;24916:10;24899:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;24889:39;;;;;;:78;24886:2038;;25022:12;;-1:-1:-1;;;;;24991:27:0;;;;;;:16;:27;;;;;;:43;;24983:92;;;;-1:-1:-1;;;24983:92:0;;;;;;;:::i;:::-;25094:9;25090:278;25109:5;:12;25107:1;:14;25090:278;;;25154:14;:24;25169:5;25175:1;25169:8;;;;;;;;:::i;:::-;;;;;;;;;;;;25154:24;;;;;;;;;;-1:-1:-1;25154:24:0;;;;25153:25;25145:57;;;;-1:-1:-1;;;25145:57:0;;16358:2:1;25145:57:0;;;16340:21:1;16397:2;16377:18;;;16370:30;-1:-1:-1;;;16416:18:1;;;16409:49;16475:18;;25145:57:0;16156:343:1;25145:57:0;25249:4;25222:14;:24;25237:5;25243:1;25237:8;;;;;;;;:::i;:::-;;;;;;;25222:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;25304:1;25273:16;:27;25290:9;-1:-1:-1;;;;;25273:27:0;-1:-1:-1;;;;;25273:27:0;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;25350:1;25325:11;:21;25337:5;25343:1;25337:8;;;;;;;;:::i;:::-;;;;;;;25325:21;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;25122:3:0;;-1:-1:-1;25122:3:0;;;:::i;:::-;;;;25090:278;;;;24725:2208;;;:::o;24886:2038::-;25441:25;;-1:-1:-1;;;25441:25:0;;;16706:20:1;16742:11;;25441:25:0;;;;;;;;;;;;25431:36;;;;;;25415:10;25398:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;25388:39;;;;;;:79;25385:1539;;25523:12;;-1:-1:-1;;;;;25491:28:0;;;;;;:17;:28;;;;;;:44;;25483:93;;;;-1:-1:-1;;;25483:93:0;;;;;;;:::i;:::-;25595:9;25591:282;25610:5;:12;25608:1;:14;25591:282;;;25655:15;:25;25671:5;25677:1;25671:8;;;;;;;;:::i;:::-;;;;;;;;;;;;25655:25;;;;;;;;;;-1:-1:-1;25655:25:0;;;;25654:26;25646:59;;;;-1:-1:-1;;;25646:59:0;;16966:2:1;25646:59:0;;;16948:21:1;17005:2;16985:18;;;16978:30;-1:-1:-1;;;17024:18:1;;;17017:50;17084:18;;25646:59:0;16764:344:1;25646:59:0;25753:4;25725:15;:25;25741:5;25747:1;25741:8;;;;;;;;:::i;:::-;;;;;;;25725:25;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;25809:1;25777:17;:28;25795:9;-1:-1:-1;;;;;25777:28:0;-1:-1:-1;;;;;25777:28:0;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;25855:1;25830:11;:21;25842:5;25848:1;25842:8;;;;;;;;:::i;:::-;;;;;;;25830:21;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;25623:3:0;;-1:-1:-1;25623:3:0;;;:::i;:::-;;;;25591:282;;25385:1539;25946:21;;-1:-1:-1;;;25946:21:0;;;17315:16:1;17347:11;;25946:21:0;;;;;;;;;;;;25936:32;;;;;;25920:10;25903:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;25893:39;;;;;;:75;25890:1034;;26020:12;;-1:-1:-1;;;;;25992:24:0;;;;;;:13;:24;;;;;;:40;;25984:89;;;;-1:-1:-1;;;25984:89:0;;;;;;;:::i;:::-;26092:9;26088:266;26107:5;:12;26105:1;:14;26088:266;;;26152:11;:21;26164:5;26170:1;26164:8;;;;;;;;:::i;:::-;;;;;;;;;;;;26152:21;;;;;;;;;;-1:-1:-1;26152:21:0;;;;26151:22;26143:51;;;;-1:-1:-1;;;26143:51:0;;17571:2:1;26143:51:0;;;17553:21:1;17610:2;17590:18;;;17583:30;-1:-1:-1;;;17629:18:1;;;17622:46;17685:18;;26143:51:0;17369:340:1;26143:51:0;26238:4;26214:11;:21;26226:5;26232:1;26226:8;;;;;;;;:::i;:::-;;;;;;;26214:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;26290:1;26262:13;:24;26276:9;-1:-1:-1;;;;;26262:24:0;-1:-1:-1;;;;;26262:24:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;26336:1;26311:11;:21;26323:5;26329:1;26323:8;;;;;;;;:::i;:::-;;;;;;;26311:21;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;26120:3:0;;-1:-1:-1;26120:3:0;;;:::i;:::-;;;;26088:266;;25890:1034;26427:24;;-1:-1:-1;;;26427:24:0;;;17916:19:1;17951:11;;26427:24:0;;;;;;;;;;;;26417:35;;;;;;26401:10;26384:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;26374:39;;;;;;:78;26371:553;;26507:12;;-1:-1:-1;;;;;26476:27:0;;;;;;:16;:27;;;;;;:43;;26468:92;;;;-1:-1:-1;;;26468:92:0;;;;;;;:::i;:::-;26579:9;26575:278;26594:5;:12;26592:1;:14;26575:278;;;26639:14;:24;26654:5;26660:1;26654:8;;;;;;;;:::i;:::-;;;;;;;;;;;;26639:24;;;;;;;;;;-1:-1:-1;26639:24:0;;;;26638:25;26630:57;;;;-1:-1:-1;;;26630:57:0;;18175:2:1;26630:57:0;;;18157:21:1;18214:2;18194:18;;;18187:30;-1:-1:-1;;;18233:18:1;;;18226:49;18292:18;;26630:57:0;17973:343:1;26630:57:0;26734:4;26707:14;:24;26722:5;26728:1;26722:8;;;;;;;;:::i;:::-;;;;;;;26707:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26789:1;26758:16;:27;26775:9;-1:-1:-1;;;;;26758:27:0;-1:-1:-1;;;;;26758:27:0;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;26835:1;26810:11;:21;26822:5;26828:1;26822:8;;;;;;;;:::i;:::-;;;;;;;26810:21;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;26607:3:0;;-1:-1:-1;26607:3:0;;;:::i;:::-;;;;26575:278;;26371:553;26885:27;;-1:-1:-1;;;26885:27:0;;18523:2:1;26885:27:0;;;18505:21:1;18562:2;18542:18;;;18535:30;-1:-1:-1;;;18581:18:1;;;18574:47;18638:18;;26885:27:0;18321:341:1;26371:553:0;24725:2208;;;:::o;26939:368::-;27024:18;;-1:-1:-1;;;;;27024:18:0;27010:10;:32;27002:59;;;;-1:-1:-1;;;27002:59:0;;12766:2:1;27002:59:0;;;12748:21:1;12805:2;12785:18;;;12778:30;-1:-1:-1;;;12824:18:1;;;12817:44;12878:18;;27002:59:0;12564:338:1;27002:59:0;27089:1;27072:196;27097:10;27092:1;:15;27072:196;;27145:5;27125:17;;;:14;:17;;;;;;;;:25;;-1:-1:-1;;27125:25:0;;;;;;27161:11;:14;;;;;:22;;;;;;27194:15;:18;;;;;:26;;;;;;27231:14;:17;;;;;;:25;;;;;;;27140:1;27109:3;27140:1;27109:3;:::i;:::-;;;;27072:196;;;-1:-1:-1;27283:16:0;;;;;;;26939:368;:::o;9295:220::-;9395:18;;-1:-1:-1;;;;;9395:18:0;9381:10;:32;9373:41;;;;;;9425:13;:26;;;9493:13;9505:1;6919;9493:13;:::i;:::-;9488:19;;:2;:19;:::i;:::-;9477:30;;:9;:30;:::i;:::-;9462:12;:45;-1:-1:-1;;9295:220:0:o;18018:349::-;18083:10;;-1:-1:-1;;;;;18083:10:0;2053;-1:-1:-1;;;;;18068:25:0;;18060:34;;;;;;18144:4;18105:20;11322:18;;;:9;:18;;;;;;18164:14;;18161:73;;18192:30;18209:12;18192:16;:30::i;:::-;18263:21;18298:12;;18295:65;;18324:24;18337:10;18324:12;:24::i;11354:167::-;11432:4;11449:42;2053:10;11473:9;11484:6;11449:9;:42::i;9750:211::-;9847:18;;-1:-1:-1;;;;;9847:18:0;9833:10;:32;9825:41;;;;;;9877:10;:23;;;9939:13;9951:1;6919;9939:13;:::i;:::-;9934:19;;:2;:19;:::i;:::-;9923:30;;:9;:30;:::i;:::-;9911:9;:42;-1:-1:-1;;9750:211:0:o;16357:139::-;4403:6;;-1:-1:-1;;;;;4403:6:0;2053:10;4403:22;4395:67;;;;-1:-1:-1;;;4395:67:0;;;;;;;:::i;:::-;16421:11:::1;::::0;-1:-1:-1;;;16421:11:0;::::1;;;16420:12;16412:47;;;::::0;-1:-1:-1;;;16412:47:0;;18869:2:1;16412:47:0::1;::::0;::::1;18851:21:1::0;18908:2;18888:18;;;18881:30;18947:25;18927:18;;;18920:53;18990:18;;16412:47:0::1;18667:347:1::0;16412:47:0::1;16470:11;:18:::0;;-1:-1:-1;;;;16470:18:0::1;-1:-1:-1::0;;;16470:18:0::1;::::0;;16357:139::o;16502:859::-;4403:6;;-1:-1:-1;;;;;4403:6:0;2053:10;4403:22;4395:67;;;;-1:-1:-1;;;4395:67:0;;;;;;;:::i;:::-;16558:19:::1;:26:::0;;-1:-1:-1;;;;16558:26:0::1;-1:-1:-1::0;;;16558:26:0::1;::::0;;16607:15:::1;::::0;-1:-1:-1;;;;;16607:15:0::1;16595:151;;16654:15;:80:::0;;-1:-1:-1;;;;;;16654:80:0::1;16691:42;16654:80;::::0;;16595:151:::1;16760:13;::::0;-1:-1:-1;;;;;16760:13:0::1;16756:170;;16838:15;;;;;;;;;-1:-1:-1::0;;;;;16838:15:0::1;-1:-1:-1::0;;;;;16838:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16820:55:0::1;;16884:4;16891:15;;;;;;;;;-1:-1:-1::0;;;;;16891:15:0::1;-1:-1:-1::0;;;;;16891:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16820:94;::::0;-1:-1:-1;;;;;;16820:94:0::1;::::0;;;;;;-1:-1:-1;;;;;19505:15:1;;;16820:94:0::1;::::0;::::1;19487:34:1::0;19557:15;;19537:18;;;19530:43;19422:18;;16820:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16804:13;:110:::0;;-1:-1:-1;;;;;;16804:110:0::1;-1:-1:-1::0;;;;;16804:110:0;;;::::1;::::0;;;::::1;::::0;;16756:170:::1;16976:4;16936:19;11322:18:::0;;;:9;:18;;;;;;17025:15:::1;::::0;11322:18;;16993:62:::1;::::0;-1:-1:-1;;;;;17025:15:0::1;11322:18:::0;16993:8:::1;:62::i;:::-;17066:15;::::0;17196:7:::1;::::0;17066:15:::1;4341:6:::0;;17066:220:::1;::::0;;-1:-1:-1;;;17066:220:0;;17150:4:::1;17066:220;::::0;::::1;19917:34:1::0;19967:18;;;19960:34;;;20010:18;;;20003:34;;;;20053:18;;;20046:34;;;;-1:-1:-1;;;;;4341:6:0;;;20096:19:1;;;20089:44;17260:15:0::1;20149:19:1::0;;;20142:35;17066:220:0;;:15;::::1;::::0;:31:::1;::::0;17105:21:::1;::::0;19851:19:1;;;;;17066:220:0::1;::::0;;;;;;;;17105:21;17066:15;:220:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;17297:11:0::1;:18:::0;;-1:-1:-1;;;;17326:27:0;-1:-1:-1;;;17326:27:0;;;-1:-1:-1;;16502:859:0:o;17817:195::-;4403:6;;-1:-1:-1;;;;;4403:6:0;2053:10;4403:22;4395:67;;;;-1:-1:-1;;;4395:67:0;;;;;;;:::i;:::-;17894:21:::1;17933:12:::0;;17930:75:::1;;17965:24;17978:10;17965:12;:24::i;:::-;17860:152;17817:195::o:0;17628:148::-;17696:18;;-1:-1:-1;;;;;17696:18:0;17682:10;:32;17674:41;;;;;;17726:10;;:42;;-1:-1:-1;;;;;17726:10:0;;;;17746:21;17726:42;;;;;:10;:42;:10;:42;17746:21;17726:10;:42;;;;;;;;;;;;;;;;;;;12503:2564;-1:-1:-1;;;;;12591:18:0;;12583:68;;;;-1:-1:-1;;;12583:68:0;;20701:2:1;12583:68:0;;;20683:21:1;20740:2;20720:18;;;20713:30;20779:34;20759:18;;;20752:62;-1:-1:-1;;;20830:18:1;;;20823:35;20875:19;;12583:68:0;20499:401:1;12583:68:0;-1:-1:-1;;;;;12670:16:0;;12662:64;;;;-1:-1:-1;;;12662:64:0;;21107:2:1;12662:64:0;;;21089:21:1;21146:2;21126:18;;;21119:30;21185:34;21165:18;;;21158:62;-1:-1:-1;;;21236:18:1;;;21229:33;21279:19;;12662:64:0;20905:399:1;12662:64:0;12754:1;12745:6;:10;12737:64;;;;-1:-1:-1;;;12737:64:0;;21511:2:1;12737:64:0;;;21493:21:1;21550:2;21530:18;;;21523:30;21589:34;21569:18;;;21562:62;-1:-1:-1;;;21640:18:1;;;21633:39;21689:19;;12737:64:0;21309:405:1;12737:64:0;12846:19;;12812:17;;-1:-1:-1;;;12846:19:0;;;;12842:95;;12889:11;;-1:-1:-1;;;12889:11:0;;;;12881:44;;;;-1:-1:-1;;;12881:44:0;;21921:2:1;12881:44:0;;;21903:21:1;21960:2;21940:18;;;21933:30;-1:-1:-1;;;21979:18:1;;;21972:50;22039:18;;12881:44:0;21719:344:1;12881:44:0;4314:7;4341:6;-1:-1:-1;;;;;12951:15:0;;;4341:6;;12951:15;;;;:32;;-1:-1:-1;4314:7:0;4341:6;-1:-1:-1;;;;;12970:13:0;;;4341:6;;12970:13;;12951:32;12947:1763;;;13012:76;13084:3;13012:67;13034:15;;13024:9;;:25;13023:55;;13064:14;;13023:55;;;13051:12;;13023:55;13012:6;;:10;:67::i;:::-;:71;;:76::i;:::-;13109:20;;13000:88;;-1:-1:-1;;;;13109:20:0;;;;13105:508;;;13170:15;;-1:-1:-1;;;;;13156:30:0;;;13170:15;;13156:30;;;;:62;;-1:-1:-1;13204:13:0;;-1:-1:-1;;;;;13190:28:0;;;13204:13;;13190:28;;13156:62;13152:444;;;13310:9;13281:39;;;;:28;:39;;;;;;13354:12;-1:-1:-1;13245:250:0;;;;-1:-1:-1;;;13245:250:0;;22270:2:1;13245:250:0;;;22252:21:1;22309:2;22289:18;;;22282:30;22348:34;22328:18;;;22321:62;22419:34;22399:18;;;22392:62;-1:-1:-1;;;22470:19:1;;;22463:40;22520:19;;13245:250:0;22068:477:1;13245:250:0;13549:9;13520:39;;;;:28;:39;;;;;13562:12;13520:54;;13152:444;13641:13;;-1:-1:-1;;;;;13633:21:0;;;13641:13;;13633:21;:55;;;;-1:-1:-1;13672:15:0;;-1:-1:-1;;;;;13658:30:0;;;13672:15;;13658:30;;13633:55;:83;;;;-1:-1:-1;;;;;;13694:22:0;;;;;;:18;:22;;;;;;;;13692:24;13633:83;13629:313;;;13756:12;;13746:6;:22;;13738:60;;;;-1:-1:-1;;;13738:60:0;;22752:2:1;13738:60:0;;;22734:21:1;22791:2;22771:18;;;22764:30;22830:27;22810:18;;;22803:55;22875:18;;13738:60:0;22550:349:1;13738:60:0;13851:14;;13841:6;13825:13;13835:2;-1:-1:-1;;;;;11322:18:0;11295:7;11322:18;;;:9;:18;;;;;;;11229:119;13825:13;:22;;;;:::i;:::-;:40;;13817:79;;;;-1:-1:-1;;;13817:79:0;;23106:2:1;13817:79:0;;;23088:21:1;23145:2;23125:18;;;23118:30;23184:28;23164:18;;;23157:56;23230:18;;13817:79:0;22904:350:1;13817:79:0;13915:9;:11;;;:9;:11;;;:::i;:::-;;;;;;13629:313;13967:13;;-1:-1:-1;;;;;13961:19:0;;;13967:13;;13961:19;:43;;;;-1:-1:-1;;;;;;13984:20:0;;13999:4;13984:20;;13961:43;13958:174;;;14037:79;14112:3;14037:70;14059:16;;14049:9;;:26;14048:58;;14091:15;;14048:58;;;14077:13;;14037:6;;:10;:70::i;:79::-;14025:91;;13958:174;14197:4;14148:28;11322:18;;;:9;:18;;;;;;14223:6;;-1:-1:-1;;;14223:6:0;;;;14222:7;:32;;;;-1:-1:-1;14241:13:0;;-1:-1:-1;;;;;14233:21:0;;;14241:13;;14233:21;14222:32;:47;;;;-1:-1:-1;14258:11:0;;-1:-1:-1;;;14258:11:0;;;;14222:47;:89;;;;;14294:17;;14273:20;:38;14222:89;:121;;;;;14325:18;;14315:9;;:28;14222:121;14218:481;;;14364:26;14393:21;14364:50;;14433:67;14450:49;14454:6;14461:37;14465:20;14486:11;;14461:3;:37::i;:::-;14450:3;:49::i;:::-;14433:16;:67::i;:::-;14519:16;14538:45;:21;14564:18;14538:25;:45::i;:::-;14519:64;-1:-1:-1;14605:12:0;;14602:82;;14642:22;14655:8;14642:12;:22::i;:::-;14345:354;;14218:481;12985:1725;12947:1763;14725:11;;14722:162;;14793:4;14775:24;;;;:9;:24;;;;;;:39;;14804:9;14775:28;:39::i;:::-;14768:4;14750:24;;;;:9;:24;;;;;;;:64;;;;14832:40;;-1:-1:-1;;;;;14832:40:0;;;;;;;14862:9;1888:25:1;;1876:2;1861:18;;1742:177;14832:40:0;;;;;;;;14722:162;-1:-1:-1;;;;;14910:15:0;;;;;;:9;:15;;;;;;:27;;14930:6;14910:19;:27::i;:::-;-1:-1:-1;;;;;14894:15:0;;;;;;:9;:15;;;;;:43;14962:40;14980:21;:6;14991:9;14980:10;:21::i;:::-;-1:-1:-1;;;;;14962:13:0;;;;;;:9;:13;;;;;;;:17;:40::i;:::-;-1:-1:-1;;;;;14948:13:0;;;;;;;:9;:13;;;;;:54;;;;15018:41;;;15037:21;:6;15048:9;15037:10;:21::i;:::-;15018:41;;1888:25:1;;;1876:2;1861:18;15018:41:0;;;;;;;12572:2495;12503:2564;;;:::o;12162:335::-;-1:-1:-1;;;;;12255:19:0;;12247:68;;;;-1:-1:-1;;;12247:68:0;;23461:2:1;12247:68:0;;;23443:21:1;23500:2;23480:18;;;23473:30;23539:34;23519:18;;;23512:62;-1:-1:-1;;;23590:18:1;;;23583:34;23634:19;;12247:68:0;23259:400:1;12247:68:0;-1:-1:-1;;;;;12334:21:0;;12326:68;;;;-1:-1:-1;;;12326:68:0;;23866:2:1;12326:68:0;;;23848:21:1;23905:2;23885:18;;;23878:30;23944:34;23924:18;;;23917:62;-1:-1:-1;;;23995:18:1;;;23988:32;24037:19;;12326:68:0;23664:398:1;12326:68:0;-1:-1:-1;;;;;12405:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12457:32;;1888:25:1;;;12457:32:0;;1861:18:1;12457:32:0;;;;;;;;12162:335;;;:::o;3168:190::-;3254:7;3290:12;3282:6;;;;3274:29;;;;-1:-1:-1;;;3274:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3314:9:0;3326:5;3330:1;3326;:5;:::i;:::-;3314:17;3168:190;-1:-1:-1;;;;;3168:190:0:o;27689:455::-;-1:-1:-1;;;;;27765:21:0;;27757:67;;;;-1:-1:-1;;;27757:67:0;;24269:2:1;27757:67:0;;;24251:21:1;24308:2;24288:18;;;24281:30;24347:34;24327:18;;;24320:62;-1:-1:-1;;;24398:18:1;;;24391:31;24439:19;;27757:67:0;24067:397:1;27757:67:0;27853:13;6919:1;27853:2;:13;:::i;:::-;27844:22;;:6;:22;:::i;:::-;-1:-1:-1;;;;;27877:18:0;;;;;;:9;:18;;;;;:28;;27835:31;;-1:-1:-1;27835:31:0;;27877:18;;;:28;;27835:31;;27877:28;:::i;:::-;;;;;;;;27927:6;27916:7;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;27959:7:0;;27944:12;:22;;;27977:14;:24;28019:21;;1888:25:1;;;-1:-1:-1;;;;;28019:21:0;;;;;1876:2:1;1861:18;28019:21:0;;;;;;;28056:37;;1888:25:1;;;28082:1:0;;-1:-1:-1;;;;;28056:37:0;;;;;1876:2:1;1861:18;28056:37:0;;;;;;;28109:27;28128:7;;28109:27;;;;1888:25:1;;1876:2;1861:18;;1742:177;28109:27:0;;;;;;;;27689:455;;:::o;15957:394::-;16031:1;16022:6;:10;16014:55;;;;-1:-1:-1;;;16014:55:0;;24671:2:1;16014:55:0;;;24653:21:1;;;24690:18;;;24683:30;24749:34;24729:18;;;24722:62;24801:18;;16014:55:0;24469:356:1;16014:55:0;16113:6;16088:21;:31;;16080:73;;;;-1:-1:-1;;;16080:73:0;;25032:2:1;16080:73:0;;;25014:21:1;25071:2;25051:18;;;25044:30;25110:31;25090:18;;;25083:59;25159:18;;16080:73:0;24830:353:1;16080:73:0;16166:20;16189:8;16196:1;16189:6;:8;:::i;:::-;16210:13;;:36;;16166:31;;-1:-1:-1;;;;;;16210:13:0;;:36;;;;;16166:31;;16210:13;:36;:13;:36;16166:31;16210:13;:36;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16257:11:0;;:34;;-1:-1:-1;;;;;16257:11:0;;;;:34;;;;;16278:12;;16257:11;:34;:11;:34;16278:12;16257:11;:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16302:18:0;;:41;;-1:-1:-1;;;;;16302:18:0;;;;:41;;;;;16330:12;;16302:18;:41;:18;:41;16330:12;16302:18;:41;;;;;;;;;;;;;;;;;;;20122:728;20302:24;;-1:-1:-1;;;20302:24:0;;;15400:19:1;15435:11;;20302:24:0;;;;;;;;;;;;20292:35;;;;;;20276:10;20259:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;20249:39;;;;;;:78;20246:597;;20360:6;20347:9;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;20246:597:0;;-1:-1:-1;20246:597:0;;20457:25;;-1:-1:-1;;;20457:25:0;;;16706:20:1;16742:11;;20457:25:0;;;;;;;;;;;;20447:36;;;;;;20431:10;20414:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;20404:39;;;;;;:79;20401:442;;20517:6;20503:10;;:20;;;;;;;:::i;20401:442::-;20614:21;;-1:-1:-1;;;20614:21:0;;;17315:16:1;17347:11;;20614:21:0;;;;;;;;;;;;20604:32;;;;;;20588:10;20571:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;20561:39;;;;;;:75;20558:285;;20666:6;20656;;:16;;;;;;;:::i;20558:285::-;20763:24;;-1:-1:-1;;;20763:24:0;;;17916:19:1;17951:11;;20763:24:0;;;;;;;;;;;;20753:35;;;;;;20737:10;20720:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;20710:39;;;;;;:78;20707:136;;20821:6;20808:9;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;20122:728:0;;:::o;20856:895::-;21029:24;;-1:-1:-1;;;21029:24:0;;;15400:19:1;15435:11;;21029:24:0;;;;;;;;;;;;21019:35;;;;;;21003:10;20986:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;20976:39;;;;;;:78;20973:699;;-1:-1:-1;;;;;21070:27:0;;;;;;:16;:27;;;;;:37;;21101:6;;21070:27;:37;;21101:6;;21070:37;:::i;:::-;;;;-1:-1:-1;20973:699:0;;-1:-1:-1;20973:699:0;;21191:25;;-1:-1:-1;;;21191:25:0;;;16706:20:1;16742:11;;21191:25:0;;;;;;;;;;;;21181:36;;;;;;21165:10;21148:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;21138:39;;;;;;:79;21135:537;;-1:-1:-1;;;;;21233:28:0;;;;;;:17;:28;;;;;:38;;21265:6;;21233:28;:38;;21265:6;;21233:38;:::i;21135:537::-;21354:21;;-1:-1:-1;;;21354:21:0;;;17315:16:1;17347:11;;21354:21:0;;;;;;;;;;;;21344:32;;;;;;21328:10;21311:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;21301:39;;;;;;:75;21298:374;;-1:-1:-1;;;;;21392:24:0;;;;;;:13;:24;;;;;:34;;21420:6;;21392:24;:34;;21420:6;;21392:34;:::i;21298:374::-;21510:24;;-1:-1:-1;;;21510:24:0;;;17916:19:1;17951:11;;21510:24:0;;;;;;;;;;;;21500:35;;;;;;21484:10;21467:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;21457:39;;;;;;:78;21454:218;;-1:-1:-1;;;;;21551:27:0;;;;;;:16;:27;;;;;:37;;21582:6;;21551:27;:37;;21582:6;;21551:37;:::i;21454:218::-;21631:29;;-1:-1:-1;;;21631:29:0;;25612:2:1;21631:29:0;;;25594:21:1;25651:2;25631:18;;;25624:30;-1:-1:-1;;;25670:18:1;;;25663:49;25729:18;;21631:29:0;25410:343:1;21454:218:0;21715:9;-1:-1:-1;;;;;21687:56:0;21703:10;-1:-1:-1;;;;;21687:56:0;;21726:10;21738:1;21741;21687:56;;;;;;;;:::i;21757:2962::-;21863:6;21873:1;21863:11;21860:23;;21757:2962;;;:::o;21860:23::-;21898:18;21927:17;22017:24;;;;;;-1:-1:-1;;;15400:19:1;;15444:1;15435:11;;15198:254;22017:24:0;;;;;;;;;;;;;22007:35;;;;;;21991:10;21974:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;21964:39;;;;;;:78;21961:2751;;22073:13;;:25;;22091:6;22073:17;:25::i;:::-;22126:12;;22060:38;;-1:-1:-1;22126:24:0;;22143:6;22126:16;:24::i;:::-;-1:-1:-1;;;;;22176:27:0;;;;;;:16;:27;;;;;;22114:36;;-1:-1:-1;22176:41:0;-1:-1:-1;22176:41:0;22168:87;;;;-1:-1:-1;;;22168:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22278:26:0;;;;;;:15;:26;;;;;;:39;-1:-1:-1;22278:39:0;22270:84;;;;-1:-1:-1;;;22270:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22371:27:0;;;;;;:16;:27;;;;;:41;;22402:10;;22371:27;:41;;22402:10;;22371:41;:::i;:::-;;;;-1:-1:-1;;;;;;;22427:26:0;;;;;;:15;:26;;;;;:39;;22457:9;;22427:26;:39;;22457:9;;22427:39;:::i;:::-;;;;-1:-1:-1;;;;;;;22481:27:0;;;;;;:16;:27;;;;;:37;;22512:6;;22481:27;:37;;22512:6;;22481:37;:::i;:::-;;;;-1:-1:-1;;22540:73:0;;-1:-1:-1;;;;;22540:73:0;;;22556:10;;22540:73;;;;22579:10;;22591:9;;22602:10;;22540:73;:::i;:::-;;;;;;;;21961:2751;;;22691:25;;-1:-1:-1;;;22691:25:0;;;16706:20:1;16742:11;;22691:25:0;;;;;;;;;;;;22681:36;;;;;;22665:10;22648:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;22638:39;;;;;;:79;22635:2077;;22748:14;;:26;;22767:6;22748:18;:26::i;:::-;22802:13;;22735:39;;-1:-1:-1;22802:25:0;;22820:6;22802:17;:25::i;:::-;-1:-1:-1;;;;;22853:27:0;;;;;;:16;:27;;;;;;22790:37;;-1:-1:-1;22853:41:0;-1:-1:-1;22853:41:0;22845:87;;;;-1:-1:-1;;;22845:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22955:26:0;;;;;;:15;:26;;;;;;:39;-1:-1:-1;22955:39:0;22947:84;;;;-1:-1:-1;;;22947:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23048:27:0;;;;;;:16;:27;;;;;:41;;23079:10;;23048:27;:41;;23079:10;;23048:41;:::i;:::-;;;;-1:-1:-1;;;;;;;23104:26:0;;;;;;:15;:26;;;;;:39;;23134:9;;23104:26;:39;;23134:9;;23104:39;:::i;:::-;;;;-1:-1:-1;;;;;;;23158:28:0;;;;;;:17;:28;;;;;:38;;23190:6;;23158:28;:38;;23190:6;;23158:38;:::i;22635:2077::-;23369:21;;-1:-1:-1;;;23369:21:0;;;17315:16:1;17347:11;;23369:21:0;;;;;;;;;;;;23359:32;;;;;;23343:10;23326:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;23316:39;;;;;;:75;23313:1399;;23422:10;;:22;;23437:6;23422:14;:22::i;:::-;23472:9;;23409:35;;-1:-1:-1;23472:21:0;;23486:6;23472:13;:21::i;:::-;-1:-1:-1;;;;;23519:27:0;;;;;;:16;:27;;;;;;23460:33;;-1:-1:-1;23519:41:0;-1:-1:-1;23519:41:0;23511:87;;;;-1:-1:-1;;;23511:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23621:26:0;;;;;;:15;:26;;;;;;:39;-1:-1:-1;23621:39:0;23613:84;;;;-1:-1:-1;;;23613:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23714:27:0;;;;;;:16;:27;;;;;:41;;23745:10;;23714:27;:41;;23745:10;;23714:41;:::i;:::-;;;;-1:-1:-1;;;;;;;23770:26:0;;;;;;:15;:26;;;;;:39;;23800:9;;23770:26;:39;;23800:9;;23770:39;:::i;:::-;;;;-1:-1:-1;;;;;;;23824:24:0;;;;;;:13;:24;;;;;:34;;23852:6;;23824:24;:34;;23852:6;;23824:34;:::i;23313:1399::-;24030:24;;-1:-1:-1;;;24030:24:0;;;17916:19:1;17951:11;;24030:24:0;;;;;;;;;;;;24020:35;;;;;;24004:10;23987:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;23977:39;;;;;;:78;23974:738;;24086:13;;:25;;24104:6;24086:17;:25::i;:::-;24139:12;;24073:38;;-1:-1:-1;24139:24:0;;24156:6;24139:16;:24::i;:::-;-1:-1:-1;;;;;24189:27:0;;;;;;:16;:27;;;;;;24127:36;;-1:-1:-1;24189:41:0;-1:-1:-1;24189:41:0;24181:87;;;;-1:-1:-1;;;24181:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24291:26:0;;;;;;:15;:26;;;;;;:39;-1:-1:-1;24291:39:0;24283:84;;;;-1:-1:-1;;;24283:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24384:27:0;;;;;;:16;:27;;;;;:41;;24415:10;;24384:27;:41;;24415:10;;24384:41;:::i;:::-;;;;-1:-1:-1;;;;;;;24440:26:0;;;;;;:15;:26;;;;;:39;;24470:9;;24440:26;:39;;24470:9;;24440:39;:::i;:::-;;;;-1:-1:-1;;;;;;;24494:27:0;;;;;;:16;:27;;;;;:37;;24525:6;;24494:27;:37;;24525:6;;24494:37;:::i;15666:202::-;4403:6;;-1:-1:-1;;;;;4403:6:0;2053:10;4403:22;4395:67;;;;-1:-1:-1;;;4395:67:0;;;;;;;:::i;:::-;15736:7:::1;::::0;15721:12:::1;:22:::0;;;15754:14:::1;:24:::0;;;15789:20:::1;:28:::0;;-1:-1:-1;;;;15789:28:0::1;::::0;;15833:27:::1;::::0;1888:25:1;;;15833:27:0::1;::::0;1876:2:1;1861:18;15833:27:0::1;;;;;;;15666:202::o:0;15177:483::-;8500:6;:13;;-1:-1:-1;;;;8500:13:0;-1:-1:-1;;;8500:13:0;;;15279:16:::1;::::0;;15293:1:::1;15279:16:::0;;;;;::::1;::::0;;-1:-1:-1;;15279:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;15279:16:0::1;15255:40;;15324:4;15306;15311:1;15306:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15306:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;15350:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;15350:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;15306:7;;15350:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15340:4;15345:1;15340:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15340:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;15415:15:::1;::::0;15383:62:::1;::::0;15400:4:::1;::::0;15415:15:::1;15433:11:::0;15383:8:::1;:62::i;:::-;15456:15;::::0;:196:::1;::::0;-1:-1:-1;;;15456:196:0;;-1:-1:-1;;;;;15456:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;15537:11;;15456:15:::1;::::0;15579:4;;15606::::1;::::0;15626:15:::1;::::0;15456:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8536:6:0;:14;;-1:-1:-1;;;;8536:14:0;;;-1:-1:-1;;;;15177:483:0:o;3366:246::-;3424:7;3448:1;3453;3448:6;3444:47;;-1:-1:-1;3478:1:0;3471:8;;3444:47;3501:9;3513:5;3517:1;3513;:5;:::i;:::-;3501:17;-1:-1:-1;3546:1:0;3537:5;3541:1;3501:17;3537:5;:::i;:::-;:10;3529:56;;;;-1:-1:-1;;;3529:56:0;;28458:2:1;3529:56:0;;;28440:21:1;28497:2;28477:18;;;28470:30;28536:34;28516:18;;;28509:62;-1:-1:-1;;;28587:18:1;;;28580:31;28628:19;;3529:56:0;28256:397:1;3529:56:0;3603:1;3366:246;-1:-1:-1;;;3366:246:0:o;3620:132::-;3678:7;3705:39;3709:1;3712;3705:39;;;;;;;;;;;;;;;;;:3;:39::i;15073:98::-;15130:7;15157:1;15155;:3;15154:9;;15162:1;15154:9;;;-1:-1:-1;15160:1:0;15073:98;-1:-1:-1;15073:98:0:o;3024:136::-;3082:7;3109:43;3113:1;3116;3109:43;;;;;;;;;;;;;;;;;:3;:43::i;2837:179::-;2895:7;;2927:5;2931:1;2927;:5;:::i;:::-;2915:17;;2956:1;2951;:6;;2943:46;;;;-1:-1:-1;;;2943:46:0;;28860:2:1;2943:46:0;;;28842:21:1;28899:2;28879:18;;;28872:30;28938:29;28918:18;;;28911:57;28985:18;;2943:46:0;28658:351:1;3760:189:0;3846:7;3881:12;3874:5;3866:28;;;;-1:-1:-1;;;3866:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3905:9:0;3917:5;3921:1;3917;:5;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;391:131::-;-1:-1:-1;;;;;466:31:1;;456:42;;446:70;;512:1;509;502:12;527:134;595:20;;624:31;595:20;624:31;:::i;:::-;527:134;;;:::o;666:315::-;734:6;742;795:2;783:9;774:7;770:23;766:32;763:52;;;811:1;808;801:12;763:52;850:9;837:23;869:31;894:5;869:31;:::i;:::-;919:5;971:2;956:18;;;;943:32;;-1:-1:-1;;;666:315:1:o;986:250::-;1071:1;1081:113;1095:6;1092:1;1089:13;1081:113;;;1171:11;;;1165:18;1152:11;;;1145:39;1117:2;1110:10;1081:113;;;-1:-1:-1;;1228:1:1;1210:16;;1203:27;986:250::o;1241:271::-;1283:3;1321:5;1315:12;1348:6;1343:3;1336:19;1364:76;1433:6;1426:4;1421:3;1417:14;1410:4;1403:5;1399:16;1364:76;:::i;:::-;1494:2;1473:15;-1:-1:-1;;1469:29:1;1460:39;;;;1501:4;1456:50;;1241:271;-1:-1:-1;;1241:271:1:o;1517:220::-;1666:2;1655:9;1648:21;1629:4;1686:45;1727:2;1716:9;1712:18;1704:6;1686:45;:::i;1924:248::-;1992:6;2000;2053:2;2041:9;2032:7;2028:23;2024:32;2021:52;;;2069:1;2066;2059:12;2021:52;-1:-1:-1;;2092:23:1;;;2162:2;2147:18;;;2134:32;;-1:-1:-1;1924:248:1:o;2177:247::-;2236:6;2289:2;2277:9;2268:7;2264:23;2260:32;2257:52;;;2305:1;2302;2295:12;2257:52;2344:9;2331:23;2363:31;2388:5;2363:31;:::i;2653:456::-;2730:6;2738;2746;2799:2;2787:9;2778:7;2774:23;2770:32;2767:52;;;2815:1;2812;2805:12;2767:52;2854:9;2841:23;2873:31;2898:5;2873:31;:::i;:::-;2923:5;-1:-1:-1;2980:2:1;2965:18;;2952:32;2993:33;2952:32;2993:33;:::i;:::-;2653:456;;3045:7;;-1:-1:-1;;;3099:2:1;3084:18;;;;3071:32;;2653:456::o;3303:127::-;3364:10;3359:3;3355:20;3352:1;3345:31;3395:4;3392:1;3385:15;3419:4;3416:1;3409:15;3435:275;3506:2;3500:9;3571:2;3552:13;;-1:-1:-1;;3548:27:1;3536:40;;3606:18;3591:34;;3627:22;;;3588:62;3585:88;;;3653:18;;:::i;:::-;3689:2;3682:22;3435:275;;-1:-1:-1;3435:275:1:o;3715:183::-;3775:4;3808:18;3800:6;3797:30;3794:56;;;3830:18;;:::i;:::-;-1:-1:-1;3875:1:1;3871:14;3887:4;3867:25;;3715:183::o;3903:1104::-;4005:6;4013;4021;4074:2;4062:9;4053:7;4049:23;4045:32;4042:52;;;4090:1;4087;4080:12;4042:52;4130:9;4117:23;4163:18;4155:6;4152:30;4149:50;;;4195:1;4192;4185:12;4149:50;4218:22;;4271:4;4263:13;;4259:27;-1:-1:-1;4249:55:1;;4300:1;4297;4290:12;4249:55;4336:2;4323:16;4358:4;4382:60;4398:43;4438:2;4398:43;:::i;:::-;4382:60;:::i;:::-;4476:15;;;4558:1;4554:10;;;;4546:19;;4542:28;;;4507:12;;;;4582:19;;;4579:39;;;4614:1;4611;4604:12;4579:39;4638:11;;;;4658:217;4674:6;4669:3;4666:15;4658:217;;;4754:3;4741:17;4771:31;4796:5;4771:31;:::i;:::-;4815:18;;4691:12;;;;4853;;;;4658:217;;;4894:5;4931:18;;;4918:32;;-1:-1:-1;;4997:2:1;4982:18;;;4969:32;;3903:1104;-1:-1:-1;;;;;3903:1104:1:o;5012:531::-;5055:5;5108:3;5101:4;5093:6;5089:17;5085:27;5075:55;;5126:1;5123;5116:12;5075:55;5162:6;5149:20;5188:18;5184:2;5181:26;5178:52;;;5210:18;;:::i;:::-;5254:55;5297:2;5278:13;;-1:-1:-1;;5274:27:1;5303:4;5270:38;5254:55;:::i;:::-;5334:2;5325:7;5318:19;5380:3;5373:4;5368:2;5360:6;5356:15;5352:26;5349:35;5346:55;;;5397:1;5394;5387:12;5346:55;5462:2;5455:4;5447:6;5443:17;5436:4;5427:7;5423:18;5410:55;5510:1;5485:16;;;5503:4;5481:27;5474:38;;;;5489:7;5012:531;-1:-1:-1;;;5012:531:1:o;5548:662::-;5602:5;5655:3;5648:4;5640:6;5636:17;5632:27;5622:55;;5673:1;5670;5663:12;5622:55;5709:6;5696:20;5735:4;5759:60;5775:43;5815:2;5775:43;:::i;5759:60::-;5853:15;;;5939:1;5935:10;;;;5923:23;;5919:32;;;5884:12;;;;5963:15;;;5960:35;;;5991:1;5988;5981:12;5960:35;6027:2;6019:6;6015:15;6039:142;6055:6;6050:3;6047:15;6039:142;;;6121:17;;6109:30;;6159:12;;;;6072;;6039:142;;;-1:-1:-1;6199:5:1;5548:662;-1:-1:-1;;;;;;5548:662:1:o;6215:1504::-;6361:6;6369;6377;6385;6438:3;6426:9;6417:7;6413:23;6409:33;6406:53;;;6455:1;6452;6445:12;6406:53;6495:9;6482:23;6524:18;6565:2;6557:6;6554:14;6551:34;;;6581:1;6578;6571:12;6551:34;6619:6;6608:9;6604:22;6594:32;;6664:7;6657:4;6653:2;6649:13;6645:27;6635:55;;6686:1;6683;6676:12;6635:55;6722:2;6709:16;6744:4;6768:60;6784:43;6824:2;6784:43;:::i;6768:60::-;6862:15;;;6944:1;6940:10;;;;6932:19;;6928:28;;;6893:12;;;;6968:19;;;6965:39;;;7000:1;6997;6990:12;6965:39;7032:2;7028;7024:11;7044:353;7060:6;7055:3;7052:15;7044:353;;;7146:3;7133:17;7182:2;7169:11;7166:19;7163:109;;;7226:1;7255:2;7251;7244:14;7163:109;7297:57;7346:7;7341:2;7327:11;7323:2;7319:20;7315:29;7297:57;:::i;:::-;7285:70;;-1:-1:-1;7375:12:1;;;;7077;;7044:353;;;-1:-1:-1;7416:5:1;-1:-1:-1;;7459:18:1;;7446:32;;-1:-1:-1;;7490:16:1;;;7487:36;;;7519:1;7516;7509:12;7487:36;;7542:63;7597:7;7586:8;7575:9;7571:24;7542:63;:::i;:::-;7532:73;;;7624:38;7658:2;7647:9;7643:18;7624:38;:::i;:::-;6215:1504;;;;-1:-1:-1;7614:48:1;;7709:2;7694:18;7681:32;;-1:-1:-1;;6215:1504:1:o;7724:704::-;7836:6;7844;7852;7905:2;7893:9;7884:7;7880:23;7876:32;7873:52;;;7921:1;7918;7911:12;7873:52;7960:9;7947:23;7979:31;8004:5;7979:31;:::i;:::-;8029:5;-1:-1:-1;8085:2:1;8070:18;;8057:32;8108:18;8138:14;;;8135:34;;;8165:1;8162;8155:12;8135:34;8188:61;8241:7;8232:6;8221:9;8217:22;8188:61;:::i;:::-;8178:71;;8302:2;8291:9;8287:18;8274:32;8258:48;;8331:2;8321:8;8318:16;8315:36;;;8347:1;8344;8337:12;8315:36;;8370:52;8414:7;8403:8;8392:9;8388:24;8370:52;:::i;:::-;8360:62;;;7724:704;;;;;:::o;8641:388::-;8709:6;8717;8770:2;8758:9;8749:7;8745:23;8741:32;8738:52;;;8786:1;8783;8776:12;8738:52;8825:9;8812:23;8844:31;8869:5;8844:31;:::i;:::-;8894:5;-1:-1:-1;8951:2:1;8936:18;;8923:32;8964:33;8923:32;8964:33;:::i;:::-;9016:7;9006:17;;;8641:388;;;;;:::o;9034:127::-;9095:10;9090:3;9086:20;9083:1;9076:31;9126:4;9123:1;9116:15;9150:4;9147:1;9140:15;9166:128;9233:9;;;9254:11;;;9251:37;;;9268:18;;:::i;9657:151::-;9747:4;9740:12;;;9726;;;9722:31;;9765:14;;9762:40;;;9782:18;;:::i;9813:422::-;9902:1;9945:5;9902:1;9959:270;9980:7;9970:8;9967:21;9959:270;;;10039:4;10035:1;10031:6;10027:17;10021:4;10018:27;10015:53;;;10048:18;;:::i;:::-;10098:7;10088:8;10084:22;10081:55;;;10118:16;;;;10081:55;10197:22;;;;10157:15;;;;9959:270;;;9963:3;9813:422;;;;;:::o;10240:806::-;10289:5;10319:8;10309:80;;-1:-1:-1;10360:1:1;10374:5;;10309:80;10408:4;10398:76;;-1:-1:-1;10445:1:1;10459:5;;10398:76;10490:4;10508:1;10503:59;;;;10576:1;10571:130;;;;10483:218;;10503:59;10533:1;10524:10;;10547:5;;;10571:130;10608:3;10598:8;10595:17;10592:43;;;10615:18;;:::i;:::-;-1:-1:-1;;10671:1:1;10657:16;;10686:5;;10483:218;;10785:2;10775:8;10772:16;10766:3;10760:4;10757:13;10753:36;10747:2;10737:8;10734:16;10729:2;10723:4;10720:12;10716:35;10713:77;10710:159;;;-1:-1:-1;10822:19:1;;;10854:5;;10710:159;10901:34;10926:8;10920:4;10901:34;:::i;:::-;10971:6;10967:1;10963:6;10959:19;10950:7;10947:32;10944:58;;;10982:18;;:::i;:::-;11020:20;;10240:806;-1:-1:-1;;;10240:806:1:o;11051:140::-;11109:5;11138:47;11179:4;11169:8;11165:19;11159:4;11138:47;:::i;11196:168::-;11269:9;;;11300;;11317:15;;;11311:22;;11297:37;11287:71;;11338:18;;:::i;12434:125::-;12499:9;;;12520:10;;;12517:36;;;12533:18;;:::i;12907:127::-;12968:10;12963:3;12959:20;12956:1;12949:31;12999:4;12996:1;12989:15;13023:4;13020:1;13013:15;13039:135;13078:3;13099:17;;;13096:43;;13119:18;;:::i;:::-;-1:-1:-1;13166:1:1;13155:13;;13039:135::o;13179:569::-;13397:13;;13340:3;;13371;;13450:4;13477:15;;;13340:3;13520:201;13534:6;13531:1;13528:13;13520:201;;;13601:13;;-1:-1:-1;;;;;13597:39:1;13583:54;;13659:14;;;;13696:15;;;;13633:1;13549:9;13520:201;;;-1:-1:-1;13737:5:1;;13179:569;-1:-1:-1;;;;;;13179:569:1:o;14837:356::-;15039:2;15021:21;;;15058:18;;;15051:30;15117:34;15112:2;15097:18;;15090:62;15184:2;15169:18;;14837:356::o;15457:289::-;15588:3;15626:6;15620:13;15642:66;15701:6;15696:3;15689:4;15681:6;15677:17;15642:66;:::i;:::-;15724:16;;;;;15457:289;-1:-1:-1;;15457:289:1:o;15751:400::-;15953:2;15935:21;;;15992:2;15972:18;;;15965:30;16031:34;16026:2;16011:18;;16004:62;-1:-1:-1;;;16097:2:1;16082:18;;16075:34;16141:3;16126:19;;15751:400::o;19019:251::-;19089:6;19142:2;19130:9;19121:7;19117:23;19113:32;19110:52;;;19158:1;19155;19148:12;19110:52;19190:9;19184:16;19209:31;19234:5;19209:31;:::i;20188:306::-;20276:6;20284;20292;20345:2;20333:9;20324:7;20320:23;20316:32;20313:52;;;20361:1;20358;20351:12;20313:52;20390:9;20384:16;20374:26;;20440:2;20429:9;20425:18;20419:25;20409:35;;20484:2;20473:9;20469:18;20463:25;20453:35;;20188:306;;;;;:::o;25188:217::-;25228:1;25254;25244:132;;25298:10;25293:3;25289:20;25286:1;25279:31;25333:4;25330:1;25323:15;25361:4;25358:1;25351:15;25244:132;-1:-1:-1;25390:9:1;;25188:217::o;25758:378::-;25979:2;25968:9;25961:21;25942:4;25999:45;26040:2;26029:9;26025:18;26017:6;25999:45;:::i;:::-;26075:2;26060:18;;26053:34;;;;-1:-1:-1;26118:2:1;26103:18;26096:34;25991:53;25758:378;-1:-1:-1;25758:378:1:o;26141:397::-;26343:2;26325:21;;;26382:2;26362:18;;;26355:30;26421:34;26416:2;26401:18;;26394:62;-1:-1:-1;;;26487:2:1;26472:18;;26465:31;26528:3;26513:19;;26141:397::o;26543:356::-;26745:2;26727:21;;;26764:18;;;26757:30;26823:34;26818:2;26803:18;;26796:62;26890:2;26875:18;;26543:356::o;27271:980::-;27533:4;27581:3;27570:9;27566:19;27612:6;27601:9;27594:25;27638:2;27676:6;27671:2;27660:9;27656:18;27649:34;27719:3;27714:2;27703:9;27699:18;27692:31;27743:6;27778;27772:13;27809:6;27801;27794:22;27847:3;27836:9;27832:19;27825:26;;27886:2;27878:6;27874:15;27860:29;;27907:1;27917:195;27931:6;27928:1;27925:13;27917:195;;;27996:13;;-1:-1:-1;;;;;27992:39:1;27980:52;;28087:15;;;;28052:12;;;;28028:1;27946:9;27917:195;;;-1:-1:-1;;;;;;;28168:32:1;;;;28163:2;28148:18;;28141:60;-1:-1:-1;;;28232:3:1;28217:19;28210:35;28129:3;27271:980;-1:-1:-1;;;27271:980:1:o

Swarm Source

ipfs://cee669f4f37d2f85b03746042bb0c0820013afa266a8b2fd7cf85fd8306fe720

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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