More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,168,613 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Open Trade Marke... | 37990248 | 831 days ago | IN | 0 POL | 0.00211601 | ||||
Open Trade | 32556901 | 964 days ago | IN | 0 POL | 0.0027 | ||||
Open Trade | 32154251 | 975 days ago | IN | 0 POL | 0.00179119 | ||||
Done | 31991810 | 979 days ago | IN | 0 POL | 0.049868 | ||||
Open Trade | 31481491 | 993 days ago | IN | 0 POL | 0.00230961 | ||||
Open Trade | 30256280 | 1025 days ago | IN | 0 POL | 0.00947926 | ||||
Open Trade | 30256259 | 1025 days ago | IN | 0 POL | 0.00925889 | ||||
Execute Nft Orde... | 30231958 | 1026 days ago | IN | 0 POL | 0.19393098 | ||||
Execute Nft Orde... | 30231768 | 1026 days ago | IN | 0 POL | 0.30489547 | ||||
Execute Nft Orde... | 30231724 | 1026 days ago | IN | 0 POL | 0.30487148 | ||||
Execute Nft Orde... | 30231716 | 1026 days ago | IN | 0 POL | 0.20347621 | ||||
Open Trade | 30196361 | 1027 days ago | IN | 0 POL | 0.00803853 | ||||
Execute Nft Orde... | 30188028 | 1027 days ago | IN | 0 POL | 0.05961144 | ||||
Execute Nft Orde... | 30188007 | 1027 days ago | IN | 0 POL | 0.02948637 | ||||
Execute Nft Orde... | 30188004 | 1027 days ago | IN | 0 POL | 0.00979441 | ||||
Execute Nft Orde... | 30187553 | 1027 days ago | IN | 0 POL | 0.07382161 | ||||
Execute Nft Orde... | 30187017 | 1027 days ago | IN | 0 POL | 0.08541344 | ||||
Execute Nft Orde... | 30187017 | 1027 days ago | IN | 0 POL | 0.1067668 | ||||
Execute Nft Orde... | 30186945 | 1027 days ago | IN | 0 POL | 0.01067668 | ||||
Open Trade | 30186895 | 1027 days ago | IN | 0 POL | 0.00570328 | ||||
Execute Nft Orde... | 30186797 | 1027 days ago | IN | 0 POL | 0.027746 | ||||
Execute Nft Orde... | 30186483 | 1027 days ago | IN | 0 POL | 0.05961145 | ||||
Execute Nft Orde... | 30186480 | 1027 days ago | IN | 0 POL | 0.01478576 | ||||
Execute Nft Orde... | 30186477 | 1027 days ago | IN | 0 POL | 0.01204965 | ||||
Execute Nft Orde... | 30186406 | 1027 days ago | IN | 0 POL | 0.0187605 |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
GNSTradingV6
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-02-14 */ // File: contracts\interfaces\UniswapRouterInterfaceV5.sol // SPDX-License-Identifier: MIT pragma solidity 0.8.11; interface UniswapRouterInterfaceV5{ function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); } // File: contracts\interfaces\TokenInterfaceV5.sol pragma solidity 0.8.11; interface TokenInterfaceV5{ function burn(address, uint256) external; function mint(address, uint256) external; function transfer(address, uint256) external returns (bool); function transferFrom(address, address, uint256) external returns(bool); function balanceOf(address) external view returns(uint256); function hasRole(bytes32, address) external view returns (bool); function approve(address, uint256) external returns (bool); function allowance(address, address) external view returns (uint256); } // File: contracts\interfaces\NftInterfaceV5.sol pragma solidity 0.8.11; interface NftInterfaceV5{ function balanceOf(address) external view returns (uint); function ownerOf(uint) external view returns (address); function transferFrom(address, address, uint) external; function tokenOfOwnerByIndex(address, uint) external view returns(uint); } // File: contracts\interfaces\VaultInterfaceV5.sol pragma solidity 0.8.11; interface VaultInterfaceV5{ function sendDaiToTrader(address, uint) external; function receiveDaiFromTrader(address, uint, uint) external; function currentBalanceDai() external view returns(uint); function distributeRewardDai(uint) external; } // File: contracts\interfaces\PairsStorageInterfaceV6.sol pragma solidity 0.8.11; interface PairsStorageInterfaceV6{ enum FeedCalculation { DEFAULT, INVERT, COMBINE } // FEED 1, 1 / (FEED 1), (FEED 1)/(FEED 2) struct Feed{ address feed1; address feed2; FeedCalculation feedCalculation; uint maxDeviationP; } // PRECISION (%) function incrementCurrentOrderId() external returns(uint); function updateGroupCollateral(uint, uint, bool, bool) external; function pairJob(uint) external returns(string memory, string memory, bytes32, uint); function pairFeed(uint) external view returns(Feed memory); function pairSpreadP(uint) external view returns(uint); function pairMinLeverage(uint) external view returns(uint); function pairMaxLeverage(uint) external view returns(uint); function groupMaxCollateral(uint) external view returns(uint); function groupCollateral(uint, bool) external view returns(uint); function guaranteedSlEnabled(uint) external view returns(bool); function pairOpenFeeP(uint) external view returns(uint); function pairCloseFeeP(uint) external view returns(uint); function pairOracleFeeP(uint) external view returns(uint); function pairNftLimitOrderFeeP(uint) external view returns(uint); function pairReferralFeeP(uint) external view returns(uint); function pairMinLevPosDai(uint) external view returns(uint); } // File: contracts\interfaces\StorageInterfaceV5.sol pragma solidity 0.8.11; interface StorageInterfaceV5{ enum LimitOrder { TP, SL, LIQ, OPEN } struct Trader{ uint leverageUnlocked; address referral; uint referralRewardsTotal; // 1e18 } struct Trade{ address trader; uint pairIndex; uint index; uint initialPosToken; // 1e18 uint positionSizeDai; // 1e18 uint openPrice; // PRECISION bool buy; uint leverage; uint tp; // PRECISION uint sl; // PRECISION } struct TradeInfo{ uint tokenId; uint tokenPriceDai; // PRECISION uint openInterestDai; // 1e18 uint tpLastUpdated; uint slLastUpdated; bool beingMarketClosed; } struct OpenLimitOrder{ address trader; uint pairIndex; uint index; uint positionSize; // 1e18 (DAI or GFARM2) uint spreadReductionP; bool buy; uint leverage; uint tp; // PRECISION (%) uint sl; // PRECISION (%) uint minPrice; // PRECISION uint maxPrice; // PRECISION uint block; uint tokenId; // index in supportedTokens } struct PendingMarketOrder{ Trade trade; uint block; uint wantedPrice; // PRECISION uint slippageP; // PRECISION (%) uint spreadReductionP; uint tokenId; // index in supportedTokens } struct PendingNftOrder{ address nftHolder; uint nftId; address trader; uint pairIndex; uint index; LimitOrder orderType; } function PRECISION() external pure returns(uint); function gov() external view returns(address); function dev() external view returns(address); function dai() external view returns(TokenInterfaceV5); function token() external view returns(TokenInterfaceV5); function linkErc677() external view returns(TokenInterfaceV5); function tokenDaiRouter() external view returns(UniswapRouterInterfaceV5); function priceAggregator() external view returns(AggregatorInterfaceV6); function vault() external view returns(VaultInterfaceV5); function trading() external view returns(address); function callbacks() external view returns(address); function handleTokens(address,uint,bool) external; function transferDai(address, address, uint) external; function transferLinkToAggregator(address, uint, uint) external; function unregisterTrade(address, uint, uint) external; function unregisterPendingMarketOrder(uint, bool) external; function unregisterOpenLimitOrder(address, uint, uint) external; function hasOpenLimitOrder(address, uint, uint) external view returns(bool); function storePendingMarketOrder(PendingMarketOrder memory, uint, bool) external; function storeReferral(address, address) external; function openTrades(address, uint, uint) external view returns(Trade memory); function openTradesInfo(address, uint, uint) external view returns(TradeInfo memory); function updateSl(address, uint, uint, uint) external; function updateTp(address, uint, uint, uint) external; function getOpenLimitOrder(address, uint, uint) external view returns(OpenLimitOrder memory); function spreadReductionsP(uint) external view returns(uint); function positionSizeTokenDynamic(uint,uint) external view returns(uint); function maxSlP() external view returns(uint); function storeOpenLimitOrder(OpenLimitOrder memory) external; function reqID_pendingMarketOrder(uint) external view returns(PendingMarketOrder memory); function storePendingNftOrder(PendingNftOrder memory, uint) external; function updateOpenLimitOrder(OpenLimitOrder calldata) external; function firstEmptyTradeIndex(address, uint) external view returns(uint); function firstEmptyOpenLimitIndex(address, uint) external view returns(uint); function increaseNftRewards(uint, uint) external; function nftSuccessTimelock() external view returns(uint); function currentPercentProfit(uint,uint,bool,uint) external view returns(int); function reqID_pendingNftOrder(uint) external view returns(PendingNftOrder memory); function setNftLastSuccess(uint) external; function updateTrade(Trade memory) external; function nftLastSuccess(uint) external view returns(uint); function unregisterPendingNftOrder(uint) external; function handleDevGovFees(uint, uint, bool, bool) external returns(uint); function distributeLpRewards(uint) external; function getReferral(address) external view returns(address); function increaseReferralRewards(address, uint) external; function storeTrade(Trade memory, TradeInfo memory) external; function setLeverageUnlocked(address, uint) external; function getLeverageUnlocked(address) external view returns(uint); function openLimitOrdersCount(address, uint) external view returns(uint); function maxOpenLimitOrdersPerPair() external view returns(uint); function openTradesCount(address, uint) external view returns(uint); function pendingMarketOpenCount(address, uint) external view returns(uint); function pendingMarketCloseCount(address, uint) external view returns(uint); function maxTradesPerPair() external view returns(uint); function maxTradesPerBlock() external view returns(uint); function tradesPerBlock(uint) external view returns(uint); function pendingOrderIdsCount(address) external view returns(uint); function maxPendingMarketOrders() external view returns(uint); function maxGainP() external view returns(uint); function defaultLeverageUnlocked() external view returns(uint); function openInterestDai(uint, uint) external view returns(uint); function getPendingOrderIds(address) external view returns(uint[] memory); function traders(address) external view returns(Trader memory); function nfts(uint) external view returns(NftInterfaceV5); } interface AggregatorInterfaceV6{ enum OrderType { MARKET_OPEN, MARKET_CLOSE, LIMIT_OPEN, LIMIT_CLOSE, UPDATE_SL } function pairsStorage() external view returns(PairsStorageInterfaceV6); function nftRewards() external view returns(NftRewardsInterfaceV6); function getPrice(uint,OrderType,uint) external returns(uint); function tokenPriceDai() external view returns(uint); function linkFee(uint,uint) external view returns(uint); function tokenDaiReservesLp() external view returns(uint, uint); function pendingSlOrders(uint) external view returns(PendingSl memory); function storePendingSlOrder(uint orderId, PendingSl calldata p) external; function unregisterPendingSlOrder(uint orderId) external; struct PendingSl{address trader; uint pairIndex; uint index; uint openPrice; bool buy; uint newSl; } } interface NftRewardsInterfaceV6{ struct TriggeredLimitId{ address trader; uint pairIndex; uint index; StorageInterfaceV5.LimitOrder order; } enum OpenLimitOrderType{ LEGACY, REVERSAL, MOMENTUM } function storeFirstToTrigger(TriggeredLimitId calldata, address) external; function storeTriggerSameBlock(TriggeredLimitId calldata, address) external; function unregisterTrigger(TriggeredLimitId calldata) external; function distributeNftReward(TriggeredLimitId calldata, uint) external; function openLimitOrderTypes(address, uint, uint) external view returns(OpenLimitOrderType); function setOpenLimitOrderType(address, uint, uint, OpenLimitOrderType) external; function triggered(TriggeredLimitId calldata) external view returns(bool); function timedOut(TriggeredLimitId calldata) external view returns(bool); } // File: contracts\GNSTradingV6.sol pragma solidity 0.8.11; contract GNSTradingV6{ // Contracts (constant) StorageInterfaceV5 constant storageT = StorageInterfaceV5(0xaee4d11a16B2bc65EDD6416Fb626EB404a6D65BD); // Params (constant) uint constant PRECISION = 1e10; uint constant MAX_SL_P = 75; // -75% PNL // Params (adjustable) uint public maxPosDai = 75000 * 1e18; // 1e18 ($) uint public limitOrdersTimelock = 30; // block uint public marketOrdersTimeout = 30; // block // State bool public isPaused; // Prevent opening new trades bool public isDone; // Prevent any interaction with the contract // Events event Done(bool done); event Paused(bool paused); event NumberUpdated(string name, uint value); event AddressUpdated(string name, address a); event MarketOrderInitiated(address trader, uint pairIndex, bool open, uint orderId); event NftOrderInitiated(address nftHolder, address trader, uint pairIndex, uint orderId); event NftOrderSameBlock(address nftHolder, address trader, uint pairIndex); event OpenLimitPlaced(address trader, uint pairIndex, uint index); event OpenLimitUpdated(address trader, uint pairIndex, uint index, uint newPrice, uint newTp, uint newSl); event OpenLimitCanceled(address trader, uint pairIndex, uint index); event TpUpdated(address trader, uint pairIndex, uint index, uint newTp); event SlUpdated(address trader, uint pairIndex, uint index, uint newSl); event SlUpdateInitiated(address trader, uint pairIndex, uint index, uint newSl, uint orderId); event ChainlinkCallbackTimeout(uint orderId, StorageInterfaceV5.PendingMarketOrder order); event CouldNotCloseTrade(address trader, uint pairIndex, uint index); constructor() { } // Modifiers modifier onlyGov(){ require(msg.sender == storageT.gov(), "GOV_ONLY"); _; } modifier notContract(){ require(tx.origin == msg.sender); _; } modifier notDone(){ require(!isDone, "DONE"); _; } // Manage params function setMaxPosDai(uint _max) external onlyGov{ require(_max > 0, "VALUE_0"); maxPosDai = _max; emit NumberUpdated("maxPosDai", _max); } function setLimitOrdersTimelock(uint _blocks) external onlyGov{ require(_blocks > 0, "VALUE_0"); limitOrdersTimelock = _blocks; emit NumberUpdated("limitOrdersTimelock", _blocks); } function setMarketOrdersTimeout(uint _marketOrdersTimeout) external onlyGov{ require(_marketOrdersTimeout > 0, "VALUE_0"); marketOrdersTimeout = _marketOrdersTimeout; emit NumberUpdated("marketOrdersTimeout", _marketOrdersTimeout); } // Manage state function pause() external onlyGov{ isPaused = !isPaused; emit Paused(isPaused); } function done() external onlyGov{ isDone = !isDone; emit Done(isDone); } // Open new trade (MARKET/LIMIT) function openTrade( StorageInterfaceV5.Trade memory t, NftRewardsInterfaceV6.OpenLimitOrderType _type, uint _spreadReductionId, uint _slippageP, // for market orders address _referral ) external notContract notDone{ require(!isPaused, "PAUSED"); AggregatorInterfaceV6 aggregator = storageT.priceAggregator(); PairsStorageInterfaceV6 pairsStored = aggregator.pairsStorage(); uint spreadReductionP = _spreadReductionId > 0 ? storageT.spreadReductionsP(_spreadReductionId-1) : 0; require(storageT.openTradesCount(msg.sender, t.pairIndex) + storageT.pendingMarketOpenCount(msg.sender, t.pairIndex) + storageT.openLimitOrdersCount(msg.sender, t.pairIndex) < storageT.maxTradesPerPair(), "MAX_TRADES_PER_PAIR"); require(storageT.pendingOrderIdsCount(msg.sender) < storageT.maxPendingMarketOrders(), "MAX_PENDING_ORDERS"); require(t.positionSizeDai <= maxPosDai, "ABOVE_MAX_POS"); require(t.positionSizeDai * t.leverage >= pairsStored.pairMinLevPosDai(t.pairIndex), "BELOW_MIN_POS"); require(t.leverage > 0 && t.leverage >= pairsStored.pairMinLeverage(t.pairIndex) && t.leverage <= pairsStored.pairMaxLeverage(t.pairIndex), "LEVERAGE_INCORRECT"); require(_spreadReductionId == 0 || storageT.nfts(_spreadReductionId-1).balanceOf(msg.sender) > 0, "NO_CORRESPONDING_NFT_SPREAD_REDUCTION"); require(t.tp == 0 || (t.buy ? t.tp > t.openPrice : t.tp < t.openPrice), "WRONG_TP"); require(t.sl == 0 || (t.buy ? t.sl < t.openPrice : t.sl > t.openPrice), "WRONG_SL"); storageT.transferDai(msg.sender, address(storageT), t.positionSizeDai); if(_type != NftRewardsInterfaceV6.OpenLimitOrderType.LEGACY){ uint index = storageT.firstEmptyOpenLimitIndex(msg.sender, t.pairIndex); storageT.storeOpenLimitOrder( StorageInterfaceV5.OpenLimitOrder( msg.sender, t.pairIndex, index, t.positionSizeDai, spreadReductionP, t.buy, t.leverage, t.tp, t.sl, t.openPrice, t.openPrice, block.number, 0 ) ); aggregator.nftRewards().setOpenLimitOrderType(msg.sender, t.pairIndex, index, _type); emit OpenLimitPlaced(msg.sender, t.pairIndex, index); }else{ uint orderId = aggregator.getPrice( t.pairIndex, AggregatorInterfaceV6.OrderType.MARKET_OPEN, t.positionSizeDai * t.leverage ); storageT.storePendingMarketOrder( StorageInterfaceV5.PendingMarketOrder( StorageInterfaceV5.Trade( msg.sender, t.pairIndex, 0, 0, t.positionSizeDai, 0, t.buy, t.leverage, t.tp, t.sl ), 0, t.openPrice, _slippageP, spreadReductionP, 0 ), orderId, true ); emit MarketOrderInitiated(msg.sender, t.pairIndex, true, orderId); } storageT.storeReferral(msg.sender, _referral); } // Close trade (MARKET) function closeTradeMarket(uint _pairIndex, uint _index) external notContract notDone{ StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index); StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index); require(storageT.pendingOrderIdsCount(msg.sender) < storageT.maxPendingMarketOrders(), "MAX_PENDING_ORDERS"); require(!i.beingMarketClosed, "ALREADY_BEING_CLOSED"); require(t.leverage > 0, "NO_TRADE"); uint orderId = storageT.priceAggregator().getPrice( _pairIndex, AggregatorInterfaceV6.OrderType.MARKET_CLOSE, t.initialPosToken * t.leverage * i.tokenPriceDai / PRECISION ); storageT.storePendingMarketOrder( StorageInterfaceV5.PendingMarketOrder( StorageInterfaceV5.Trade(msg.sender, _pairIndex, _index, 0, 0, 0, false, 0, 0, 0), 0, 0, 0, 0, 0 ), orderId, false ); emit MarketOrderInitiated(msg.sender, _pairIndex, false, orderId); } // Manage limit order (OPEN) function updateOpenLimitOrder( uint _pairIndex, uint _index, uint _price, // PRECISION uint _tp, uint _sl ) external notContract notDone{ require(storageT.hasOpenLimitOrder(msg.sender, _pairIndex, _index), "NO_LIMIT"); StorageInterfaceV5.OpenLimitOrder memory o = storageT.getOpenLimitOrder(msg.sender, _pairIndex, _index); require(block.number - o.block >= limitOrdersTimelock, "LIMIT_TIMELOCK"); require(_tp == 0 || (o.buy ? _price < _tp : _price > _tp), "WRONG_TP"); require(_sl == 0 || (o.buy ? _price > _sl : _price < _sl), "WRONG_SL"); o.minPrice = _price; o.maxPrice = _price; o.tp = _tp; o.sl = _sl; storageT.updateOpenLimitOrder(o); emit OpenLimitUpdated(msg.sender, _pairIndex, _index, _price, _tp, _sl); } function cancelOpenLimitOrder(uint _pairIndex, uint _index) external notContract notDone{ require(storageT.hasOpenLimitOrder(msg.sender, _pairIndex, _index), "NO_LIMIT"); StorageInterfaceV5.OpenLimitOrder memory o = storageT.getOpenLimitOrder(msg.sender, _pairIndex, _index); require(block.number - o.block >= limitOrdersTimelock, "LIMIT_TIMELOCK"); storageT.transferDai(address(storageT), msg.sender, o.positionSize); storageT.unregisterOpenLimitOrder(msg.sender, _pairIndex, _index); emit OpenLimitCanceled(msg.sender, _pairIndex, _index); } // Manage limit order (TP/SL) function updateTp(uint _pairIndex, uint _index, uint _newTp) external notContract notDone{ StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index); StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index); require(t.leverage > 0, "NO_TRADE"); require(block.number - i.tpLastUpdated >= limitOrdersTimelock, "LIMIT_TIMELOCK"); storageT.updateTp(msg.sender, _pairIndex, _index, _newTp); emit TpUpdated(msg.sender, _pairIndex, _index, _newTp); } function updateSl(uint _pairIndex, uint _index, uint _newSl) external notContract notDone{ StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index); StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index); require(t.leverage > 0, "NO_TRADE"); uint maxSlDist = t.openPrice * MAX_SL_P / 100 / t.leverage; require(_newSl == 0 || (t.buy ? _newSl >= t.openPrice - maxSlDist : _newSl <= t.openPrice + maxSlDist), "SL_TOO_BIG"); require(block.number - i.slLastUpdated >= limitOrdersTimelock, "LIMIT_TIMELOCK"); AggregatorInterfaceV6 aggregator = storageT.priceAggregator(); if(_newSl == 0 || !aggregator.pairsStorage().guaranteedSlEnabled(_pairIndex)){ storageT.updateSl(msg.sender, _pairIndex, _index, _newSl); emit SlUpdated(msg.sender, _pairIndex, _index, _newSl); }else{ uint levPosDai = t.initialPosToken * i.tokenPriceDai * t.leverage; t.initialPosToken -= storageT.handleDevGovFees( t.pairIndex, levPosDai / aggregator.tokenPriceDai(), false, false ); storageT.updateTrade(t); uint orderId = aggregator.getPrice( _pairIndex, AggregatorInterfaceV6.OrderType.UPDATE_SL, levPosDai / PRECISION ); aggregator.storePendingSlOrder( orderId, AggregatorInterfaceV6.PendingSl(msg.sender, _pairIndex, _index, t.openPrice, t.buy, _newSl) ); emit SlUpdateInitiated(msg.sender, _pairIndex, _index, _newSl, orderId); } } // Execute limit order function executeNftOrder( StorageInterfaceV5.LimitOrder _orderType, address _trader, uint _pairIndex, uint _index, uint _nftId, uint _nftType ) external notContract notDone{ StorageInterfaceV5.Trade memory t = storageT.openTrades(_trader, _pairIndex, _index); require(_nftType >= 1 && _nftType <= 5, "WRONG_NFT_TYPE"); require(storageT.nfts(_nftType-1).ownerOf(_nftId) == msg.sender, "NO_NFT"); require(block.number >= storageT.nftLastSuccess(_nftId) + storageT.nftSuccessTimelock(), "SUCCESS_TIMELOCK"); require(_orderType == StorageInterfaceV5.LimitOrder.OPEN ? storageT.hasOpenLimitOrder(_trader, _pairIndex, _index) : t.leverage > 0, "NO_TRADE"); require(_orderType != StorageInterfaceV5.LimitOrder.SL || t.sl > 0, "NO_SL"); require(_orderType != StorageInterfaceV5.LimitOrder.LIQ || t.sl == 0, "HAS_SL"); AggregatorInterfaceV6 aggregator = storageT.priceAggregator(); NftRewardsInterfaceV6 nftIncentives = aggregator.nftRewards(); NftRewardsInterfaceV6.TriggeredLimitId memory triggeredLimitId = NftRewardsInterfaceV6.TriggeredLimitId( _trader, _pairIndex, _index, _orderType ); if(!nftIncentives.triggered(triggeredLimitId) || nftIncentives.timedOut(triggeredLimitId)){ uint leveragedPosDai; if(_orderType == StorageInterfaceV5.LimitOrder.OPEN){ StorageInterfaceV5.OpenLimitOrder memory l = storageT.getOpenLimitOrder(_trader, _pairIndex, _index); leveragedPosDai = l.positionSize * l.leverage; }else{ StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(_trader, _pairIndex, _index); leveragedPosDai = t.initialPosToken * i.tokenPriceDai * t.leverage / PRECISION; } storageT.transferLinkToAggregator(msg.sender, _pairIndex, leveragedPosDai); uint orderId = aggregator.getPrice( _pairIndex, _orderType == StorageInterfaceV5.LimitOrder.OPEN ? AggregatorInterfaceV6.OrderType.LIMIT_OPEN : AggregatorInterfaceV6.OrderType.LIMIT_CLOSE, leveragedPosDai ); storageT.storePendingNftOrder( StorageInterfaceV5.PendingNftOrder( msg.sender, _nftId, _trader, _pairIndex, _index, _orderType ), orderId ); nftIncentives.storeFirstToTrigger(triggeredLimitId, msg.sender); emit NftOrderInitiated(msg.sender, _trader, _pairIndex, orderId); }else{ nftIncentives.storeTriggerSameBlock(triggeredLimitId, msg.sender); emit NftOrderSameBlock(msg.sender, _trader, _pairIndex); } } // Market timeout function openTradeMarketTimeout(uint _order) external notContract notDone{ StorageInterfaceV5.PendingMarketOrder memory o = storageT.reqID_pendingMarketOrder(_order); StorageInterfaceV5.Trade memory t = o.trade; require(o.block > 0 && block.number >= o.block + marketOrdersTimeout, "WAIT_TIMEOUT"); require(t.trader == msg.sender, "NOT_YOUR_ORDER"); require(t.leverage > 0, "WRONG_MARKET_ORDER_TYPE"); storageT.transferDai(address(storageT), msg.sender, t.positionSizeDai); storageT.unregisterPendingMarketOrder(_order, true); emit ChainlinkCallbackTimeout(_order, o); } function closeTradeMarketTimeout(uint _order) external notContract notDone{ StorageInterfaceV5.PendingMarketOrder memory o = storageT.reqID_pendingMarketOrder(_order); StorageInterfaceV5.Trade memory t = o.trade; require(o.block > 0 && block.number >= o.block + marketOrdersTimeout, "WAIT_TIMEOUT"); require(t.trader == msg.sender, "NOT_YOUR_ORDER"); require(t.leverage == 0, "WRONG_MARKET_ORDER_TYPE"); storageT.unregisterPendingMarketOrder(_order, false); (bool success, ) = address(this).delegatecall( abi.encodeWithSignature( "closeTradeMarket(uint256,uint256)", t.pairIndex, t.index ) ); if(!success){ emit CouldNotCloseTrade(msg.sender, t.pairIndex, t.index); } emit ChainlinkCallbackTimeout(_order, o); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct StorageInterfaceV5.Trade","name":"trade","type":"tuple"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"wantedPrice","type":"uint256"},{"internalType":"uint256","name":"slippageP","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"indexed":false,"internalType":"struct StorageInterfaceV5.PendingMarketOrder","name":"order","type":"tuple"}],"name":"ChainlinkCallbackTimeout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"CouldNotCloseTrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"done","type":"bool"}],"name":"Done","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"bool","name":"open","type":"bool"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"MarketOrderInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nftHolder","type":"address"},{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"NftOrderInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nftHolder","type":"address"},{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"}],"name":"NftOrderSameBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NumberUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSl","type":"uint256"}],"name":"OpenLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSl","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"SlUpdateInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSl","type":"uint256"}],"name":"SlUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTp","type":"uint256"}],"name":"TpUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"cancelOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"closeTradeMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"closeTradeMarketTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"done","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StorageInterfaceV5.LimitOrder","name":"_orderType","type":"uint8"},{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_nftId","type":"uint256"},{"internalType":"uint256","name":"_nftType","type":"uint256"}],"name":"executeNftOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitOrdersTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketOrdersTimeout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPosDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct StorageInterfaceV5.Trade","name":"t","type":"tuple"},{"internalType":"enum NftRewardsInterfaceV6.OpenLimitOrderType","name":"_type","type":"uint8"},{"internalType":"uint256","name":"_spreadReductionId","type":"uint256"},{"internalType":"uint256","name":"_slippageP","type":"uint256"},{"internalType":"address","name":"_referral","type":"address"}],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"openTradeMarketTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocks","type":"uint256"}],"name":"setLimitOrdersTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketOrdersTimeout","type":"uint256"}],"name":"setMarketOrdersTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxPosDai","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_tp","type":"uint256"},{"internalType":"uint256","name":"_sl","type":"uint256"}],"name":"updateOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newSl","type":"uint256"}],"name":"updateSl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newTp","type":"uint256"}],"name":"updateTp","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052690fe1c215e8f838e00000600055601e600155601e60025534801561002857600080fd5b50615d8080620000396000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639aa7c0e5116100cd578063b8ebd5cc11610081578063be73fb9911610066578063be73fb9914610270578063d4a1caa714610283578063d8defd151461029657600080fd5b8063b8ebd5cc1461024a578063b9b6573a1461025d57600080fd5b8063ae8421e1116100b2578063ae8421e114610222578063b187bd261461022a578063b81bfa051461023757600080fd5b80639aa7c0e5146101fc578063a2a3c0cb1461020f57600080fd5b80638456cb59116101245780638f062227116101095780638f062227146101b4578063934d1cf4146101d6578063990382cf146101e957600080fd5b80638456cb5914610199578063876d3abd146101a157600080fd5b80630890d22a14610156578063279a165c14610172578063318a368b1461017b578063410c0b7c14610190575b600080fd5b61015f60015481565b6040519081526020015b60405180910390f35b61015f60005481565b61018e6101893660046152d4565b6102a9565b005b61015f60025481565b61018e610754565b61018e6101af36600461530f565b6108d7565b6003546101c690610100900460ff1681565b6040519015158152602001610169565b61018e6101e436600461530f565b610cb9565b61018e6101f736600461530f565b610ead565b61018e61020a366004615421565b611333565b61018e61021d366004615500565b612651565b61018e612d07565b6003546101c69060ff1681565b61018e61024536600461530f565b612e93565b61018e610258366004615522565b613080565b61018e61026b366004615500565b613fc3565b61018e61027e36600461557f565b6143b9565b61018e61029136600461530f565b614d67565b61018e6102a436600461557f565b614f54565b3233146102b557600080fd5b600354610100900460ff1615610332576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b60405180910390fd5b6040517fdcdf339a000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810185905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063dcdf339a90606401602060405180830381865afa1580156103a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cc91906155b6565b610432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f4c494d49540000000000000000000000000000000000000000000000006044820152606401610329565b6040517fb8878a2c000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810185905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b8878a2c906064016101a060405180830381865afa1580156104ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d091906155e5565b9050600154816101600151436104e691906156c7565b101561054e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4c494d49545f54494d454c4f434b0000000000000000000000000000000000006044820152606401610329565b82158061056b57508060a001516105675782841161056b565b8284105b6105d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f57524f4e475f54500000000000000000000000000000000000000000000000006044820152606401610329565b8115806105ee57508060a001516105ea578184106105ee565b8184115b610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f57524f4e475f534c0000000000000000000000000000000000000000000000006044820152606401610329565b6101208101849052610140810184905260e0810183905261010081018290526040517fb767608a00000000000000000000000000000000000000000000000000000000815273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b767608a906106c39084906004016156de565b600060405180830381600087803b1580156106dd57600080fd5b505af11580156106f1573d6000803e3d6000fd5b505060408051338152602081018a9052908101889052606081018790526080810186905260a081018590527f21e15d62c2ece17c1dc11c5fa45dcefdc6f99f199aa111d1363ff242f23e1c5c925060c001905060405180910390a1505050505050565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d7919061578b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f474f565f4f4e4c590000000000000000000000000000000000000000000000006044820152606401610329565b6003805460ff808216157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921682179092556040519116151581527f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2906020015b60405180910390a1565b3233146108e357600080fd5b600354610100900460ff1615610957576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fb66e6b050000000000000000000000000000000000000000000000000000000081526004810182905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b66e6b05906024016101e060405180830381865afa1580156109c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e8919061583b565b805160208201519192509015801590610a1257506002548260200151610a0e91906158e5565b4310155b610a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f574149545f54494d454f555400000000000000000000000000000000000000006044820152606401610329565b805173ffffffffffffffffffffffffffffffffffffffff163314610af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f594f55525f4f524445520000000000000000000000000000000000006044820152606401610329565b60008160e0015111610b66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f545950450000000000000000006044820152606401610329565b60808101516040517f6e70e7b600000000000000000000000000000000000000000000000000000000815273aee4d11a16b2bc65edd6416fb626eb404a6d65bd600482018190523360248301526044820192909252636e70e7b690606401600060405180830381600087803b158015610bde57600080fd5b505af1158015610bf2573d6000803e3d6000fd5b50506040517fcab94580000000000000000000000000000000000000000000000000000000008152600481018690526001602482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd925063cab945809150604401600060405180830381600087803b158015610c6357600080fd5b505af1158015610c77573d6000803e3d6000fd5b505050507f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb18383604051610cac9291906159c2565b60405180910390a1505050565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061578b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f474f565f4f4e4c590000000000000000000000000000000000000000000000006044820152606401610329565b60008111610e3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f56414c55455f30000000000000000000000000000000000000000000000000006044820152606401610329565b6000819055604080518181526009918101919091527f6d6178506f7344616900000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab906080015b60405180910390a150565b323314610eb957600080fd5b600354610100900460ff1615610f2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fb66e6b050000000000000000000000000000000000000000000000000000000081526004810182905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b66e6b05906024016101e060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe919061583b565b805160208201519192509015801590610fe857506002548260200151610fe491906158e5565b4310155b61104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f574149545f54494d454f555400000000000000000000000000000000000000006044820152606401610329565b805173ffffffffffffffffffffffffffffffffffffffff1633146110ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f594f55525f4f524445520000000000000000000000000000000000006044820152606401610329565b60e08101511561113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f545950450000000000000000006044820152606401610329565b6040517fcab94580000000000000000000000000000000000000000000000000000000008152600481018490526000602482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063cab9458090604401600060405180830381600087803b1580156111a757600080fd5b505af11580156111bb573d6000803e3d6000fd5b5050506020820151604080840151905160248101929092526044820152600091503090606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa2a3c0cb000000000000000000000000000000000000000000000000000000001790525161126291906159d7565b600060405180830381855af49150503d806000811461129d576040519150601f19603f3d011682016040523d82523d6000602084013e6112a2565b606091505b50509050806112f4576020808301516040808501518151338152938401929092528201527f60e497734ddabcd7293fd91739aaf65cf525eb539c97be528125a235a89288d89060600160405180910390a15b7f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb184846040516113259291906159c2565b60405180910390a150505050565b32331461133f57600080fd5b600354610100900460ff16156113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b60035460ff1615611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f50415553454400000000000000000000000000000000000000000000000000006044820152606401610329565b600073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16633078fff56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a5919061578b565b905060008173ffffffffffffffffffffffffffffffffffffffff166335b03c176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611518919061578b565b9050600080861161152a5760006115ae565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd633dae10a061154f6001896156c7565b6040518263ffffffff1660e01b815260040161156d91815260200190565b602060405180830381865afa15801561158a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ae9190615a12565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663f65d9dbe6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561160f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116339190615a12565b60208901516040517f97e7995a000000000000000000000000000000000000000000000000000000008152336004820152602481019190915273aee4d11a16b2bc65edd6416fb626eb404a6d65bd906397e7995a90604401602060405180830381865afa1580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190615a12565b60208a01516040517f9c8912f1000000000000000000000000000000000000000000000000000000008152336004820152602481019190915273aee4d11a16b2bc65edd6416fb626eb404a6d65bd90639c8912f190604401602060405180830381865afa158015611741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117659190615a12565b60208b01516040517f1c8636b4000000000000000000000000000000000000000000000000000000008152336004820152602481019190915273aee4d11a16b2bc65edd6416fb626eb404a6d65bd90631c8636b490604401602060405180830381865afa1580156117da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fe9190615a12565b61180891906158e5565b61181291906158e5565b10611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d41585f5452414445535f5045525f50414952000000000000000000000000006044820152606401610329565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16638049fde76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc9190615a12565b6040517ff7b3c6fd00000000000000000000000000000000000000000000000000000000815233600482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063f7b3c6fd90602401602060405180830381865afa158015611964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119889190615a12565b106119ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d41585f50454e44494e475f4f524445525300000000000000000000000000006044820152606401610329565b60005488608001511115611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f41424f56455f4d41585f504f53000000000000000000000000000000000000006044820152606401610329565b60208801516040517f0cd8b022000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff831690630cd8b02290602401602060405180830381865afa158015611ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af49190615a12565b8860e001518960800151611b089190615a2b565b1015611b70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f42454c4f575f4d494e5f504f53000000000000000000000000000000000000006044820152606401610329565b60008860e00151118015611c1c575060208801516040517f59a992d0000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff8316906359a992d090602401602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c149190615a12565b8860e0015110155b8015611cc0575060208801516040517f281b693c000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff83169063281b693c90602401602060405180830381865afa158015611c94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb89190615a12565b8860e0015111155b611d26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c455645524147455f494e434f525245435400000000000000000000000000006044820152606401610329565b851580611e465750600073aee4d11a16b2bc65edd6416fb626eb404a6d65bd63265aa621611d5560018a6156c7565b6040518263ffffffff1660e01b8152600401611d7391815260200190565b602060405180830381865afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db4919061578b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e449190615a12565b115b611ed2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4e4f5f434f52524553504f4e44494e475f4e46545f5350524541445f5245445560448201527f4354494f4e0000000000000000000000000000000000000000000000000000006064820152608401610329565b6101008801511580611f0657508760c00151611ef9578760a0015188610100015110611f06565b8760a00151886101000151115b611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f57524f4e475f54500000000000000000000000000000000000000000000000006044820152606401610329565b6101208801511580611fa057508760c00151611f93578760a0015188610120015111611fa0565b8760a00151886101200151105b612006576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f57524f4e475f534c0000000000000000000000000000000000000000000000006044820152606401610329565b60808801516040517f6e70e7b600000000000000000000000000000000000000000000000000000000815233600482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd602482018190526044820192909252636e70e7b690606401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b506000925061209f915050565b8760028111156120b1576120b1615a68565b146123945760208801516040517f44d44f5a000000000000000000000000000000000000000000000000000000008152336004820152602481019190915260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd906344d44f5a90604401602060405180830381865afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190615a12565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663d3b5fe70604051806101a001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018c6020015181526020018481526020018c6080015181526020018581526020018c60c00151151581526020018c60e0015181526020018c610100015181526020018c610120015181526020018c60a0015181526020018c60a00151815260200143815260200160008152506040518263ffffffff1660e01b815260040161223391906156de565b600060405180830381600087803b15801561224d57600080fd5b505af1158015612261573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16635ad9f9936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d4919061578b565b73ffffffffffffffffffffffffffffffffffffffff1663ec570610338b60200151848c6040518563ffffffff1660e01b81526004016123169493929190615a97565b600060405180830381600087803b15801561233057600080fd5b505af1158015612344573d6000803e3d6000fd5b5050506020808b0151604080513381529283019190915281018390527fdfabd6f206f17b7f2e1f9e0d33c40d30d1e8d7b6a4f520a03fdc1c1811059343915060600160405180910390a1506125ae565b60008373ffffffffffffffffffffffffffffffffffffffff1663fa8dd4988a6020015160008c60e001518d608001516123cd9190615a2b565b6040518463ffffffff1660e01b81526004016123eb93929190615ae1565b6020604051808303816000875af115801561240a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242e9190615a12565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663c76faf786040518060c001604052806040518061014001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018e60200151815260200160008152602001600081526020018e608001518152602001600081526020018e60c00151151581526020018e60e0015181526020018e610100015181526020018e61012001518152508152602001600081526020018c60a00151815260200189815260200185815260200160008152508360016040518463ffffffff1660e01b815260040161252e93929190615b09565b600060405180830381600087803b15801561254857600080fd5b505af115801561255c573d6000803e3d6000fd5b50505050602089810151604080513381529283019190915260018282015260608201839052517f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9181900360800190a1505b6040517f9d1a107300000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8516602482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd90639d1a107390604401600060405180830381600087803b15801561262f57600080fd5b505af1158015612643573d6000803e3d6000fd5b505050505050505050505050565b32331461265d57600080fd5b600354610100900460ff16156126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fa3a80ffe000000000000000000000000000000000000000000000000000000008152336004820152602481018390526044810182905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063a3a80ffe9060640161014060405180830381865afa15801561274b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276f9190615b30565b6040517f8c8ff1d5000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044810184905290915060009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd90638c8ff1d59060640160c060405180830381865afa1580156127eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280f9190615b4d565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16638049fde76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128949190615a12565b6040517ff7b3c6fd00000000000000000000000000000000000000000000000000000000815233600482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063f7b3c6fd90602401602060405180830381865afa1580156128fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129209190615a12565b10612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d41585f50454e44494e475f4f524445525300000000000000000000000000006044820152606401610329565b8060a00151156129f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f414c52454144595f4245494e475f434c4f5345440000000000000000000000006044820152606401610329565b60008260e0015111612a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f54524144450000000000000000000000000000000000000000000000006044820152606401610329565b600073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16633078fff56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae6919061578b565b73ffffffffffffffffffffffffffffffffffffffff1663fa8dd4988660016402540be40086602001518860e001518960600151612b239190615a2b565b612b2d9190615a2b565b612b379190615bf4565b6040518463ffffffff1660e01b8152600401612b5593929190615ae1565b6020604051808303816000875af1158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190615a12565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663c76faf786040518060c001604052806040518061014001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018981526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525081526020016000815260200160008152602001600081526020016000815260200160008152508360006040518463ffffffff1660e01b8152600401612c8193929190615b09565b600060405180830381600087803b158015612c9b57600080fd5b505af1158015612caf573d6000803e3d6000fd5b50506040805133815260208101899052600091810191909152606081018490527f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab925060800190505b60405180910390a15050505050565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8a919061578b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f474f565f4f4e4c590000000000000000000000000000000000000000000000006044820152606401610329565b6003805460ff61010080830482161581027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90931692909217928390556040517fc3a6f986261de9467c2838c6df8ef74f9107855159205600c0bc7a14cdfd3888936108cd9390049091161515815260200190565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f16919061578b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f474f565f4f4e4c590000000000000000000000000000000000000000000000006044820152606401610329565b60008111613014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f56414c55455f30000000000000000000000000000000000000000000000000006044820152606401610329565b6002819055604080518181526013918101919091527f6d61726b65744f726465727354696d656f7574000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab90608001610ea2565b32331461308c57600080fd5b600354610100900460ff1615613100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fa3a80ffe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602481018590526044810184905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063a3a80ffe9060640161014060405180830381865afa158015613190573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b49190615b30565b9050600182101580156131c8575060058211155b61322e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f57524f4e475f4e46545f545950450000000000000000000000000000000000006044820152606401610329565b3373aee4d11a16b2bc65edd6416fb626eb404a6d65bd63265aa6216132546001866156c7565b6040518263ffffffff1660e01b815260040161327291815260200190565b602060405180830381865afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b3919061578b565b73ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016132ed91815260200190565b602060405180830381865afa15801561330a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332e919061578b565b73ffffffffffffffffffffffffffffffffffffffff16146133ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4e4f5f4e465400000000000000000000000000000000000000000000000000006044820152606401610329565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663f8d24b486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561340a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342e9190615a12565b6040517faa3b7d770000000000000000000000000000000000000000000000000000000081526004810185905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063aa3b7d7790602401602060405180830381865afa158015613497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bb9190615a12565b6134c591906158e5565b43101561352e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f535543434553535f54494d454c4f434b000000000000000000000000000000006044820152606401610329565b600387600381111561354257613542615a68565b146135545760008160e0015111613604565b6040517fdcdf339a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018690526044810185905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063dcdf339a90606401602060405180830381865afa1580156135e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360491906155b6565b61366a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f54524144450000000000000000000000000000000000000000000000006044820152606401610329565b600187600381111561367e5761367e615a68565b14158061369057506000816101200151115b6136f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f4e4f5f534c0000000000000000000000000000000000000000000000000000006044820152606401610329565b600287600381111561370a5761370a615a68565b14158061371a5750610120810151155b613780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4841535f534c00000000000000000000000000000000000000000000000000006044820152606401610329565b600073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16633078fff56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613805919061578b565b905060008173ffffffffffffffffffffffffffffffffffffffff16635ad9f9936040518163ffffffff1660e01b8152600401602060405180830381865afa158015613854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613878919061578b565b9050600060405180608001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018b60038111156138c1576138c1615a68565b90526040517f21187a9200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8316906321187a9290613918908490600401615c88565b602060405180830381865afa158015613935573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395991906155b6565b15806139f357506040517ffc6dcafc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063fc6dcafc906139b2908490600401615c88565b602060405180830381865afa1580156139cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f391906155b6565b15613ed957600060038b6003811115613a0e57613a0e615a68565b1415613ae6576040517fb8878a2c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b166004820152602481018a90526044810189905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b8878a2c906064016101a060405180830381865afa158015613aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac891906155e5565b90508060c001518160600151613ade9190615a2b565b915050613bd2565b6040517f8c8ff1d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b166004820152602481018a90526044810189905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd90638c8ff1d59060640160c060405180830381865afa158015613b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b999190615b4d565b90506402540be4008660e0015182602001518860600151613bba9190615a2b565b613bc49190615a2b565b613bce9190615bf4565b9150505b6040517f6690a806000000000000000000000000000000000000000000000000000000008152336004820152602481018a90526044810182905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd90636690a80690606401600060405180830381600087803b158015613c4557600080fd5b505af1158015613c59573d6000803e3d6000fd5b5060009250505073ffffffffffffffffffffffffffffffffffffffff851663fa8dd4988b60038f6003811115613c9157613c91615a68565b14613c9d576003613ca0565b60025b856040518463ffffffff1660e01b8152600401613cbf93929190615ae1565b6020604051808303816000875af1158015613cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d029190615a12565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663817fa1a46040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018e73ffffffffffffffffffffffffffffffffffffffff1681526020018d81526020018c81526020018f6003811115613d9b57613d9b615a68565b815250836040518363ffffffff1660e01b8152600401613dbc929190615c9c565b600060405180830381600087803b158015613dd657600080fd5b505af1158015613dea573d6000803e3d6000fd5b50506040517fc23c886c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716925063c23c886c9150613e429086903390600401615d0a565b600060405180830381600087803b158015613e5c57600080fd5b505af1158015613e70573d6000803e3d6000fd5b50506040805133815273ffffffffffffffffffffffffffffffffffffffff8f1660208201529081018d9052606081018490527f25a4615e0f832491882811af92c23aeadd8e4ea8679eda01bb90f5276ffdf44f9250608001905060405180910390a15050613fb7565b6040517f46ea285b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906346ea285b90613f2d9084903390600401615d0a565b600060405180830381600087803b158015613f4757600080fd5b505af1158015613f5b573d6000803e3d6000fd5b50506040805133815273ffffffffffffffffffffffffffffffffffffffff8d1660208201529081018b90527fde7da272dc52e28c3b33c5c74b461da89b05bd790d845e82db2f69bbf08108e79250606001905060405180910390a15b50505050505050505050565b323314613fcf57600080fd5b600354610100900460ff1615614043576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fdcdf339a000000000000000000000000000000000000000000000000000000008152336004820152602481018390526044810182905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063dcdf339a90606401602060405180830381865afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd91906155b6565b614143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f4c494d49540000000000000000000000000000000000000000000000006044820152606401610329565b6040517fb8878a2c000000000000000000000000000000000000000000000000000000008152336004820152602481018390526044810182905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b8878a2c906064016101a060405180830381865afa1580156141bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141e191906155e5565b9050600154816101600151436141f791906156c7565b101561425f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4c494d49545f54494d454c4f434b0000000000000000000000000000000000006044820152606401610329565b60608101516040517f6e70e7b600000000000000000000000000000000000000000000000000000000815273aee4d11a16b2bc65edd6416fb626eb404a6d65bd600482018190523360248301526044820192909252636e70e7b690606401600060405180830381600087803b1580156142d757600080fd5b505af11580156142eb573d6000803e3d6000fd5b50506040517fb4b0f567000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810185905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd925063b4b0f5679150606401600060405180830381600087803b15801561436257600080fd5b505af1158015614376573d6000803e3d6000fd5b505060408051338152602081018790529081018590527ff1b38881d7f4b2b12141c5f39c5124545d6112532eb6afbe9630cdbde3ee53e992506060019050610cac565b3233146143c557600080fd5b600354610100900460ff1615614439576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fa3a80ffe000000000000000000000000000000000000000000000000000000008152336004820152602481018490526044810183905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063a3a80ffe9060640161014060405180830381865afa1580156144b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d79190615b30565b6040517f8c8ff1d5000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810185905290915060009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd90638c8ff1d59060640160c060405180830381865afa158015614553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145779190615b4d565b905060008260e00151116145e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f54524144450000000000000000000000000000000000000000000000006044820152606401610329565b60008260e001516064604b8560a001516146019190615a2b565b61460b9190615bf4565b6146159190615bf4565b905083158061465457508260c0015161464057808360a0015161463891906158e5565b841115614654565b808360a0015161465091906156c7565b8410155b6146ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f534c5f544f4f5f424947000000000000000000000000000000000000000000006044820152606401610329565b60015460808301516146cc90436156c7565b1015614734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4c494d49545f54494d454c4f434b0000000000000000000000000000000000006044820152606401610329565b600073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16633078fff56040518163ffffffff1660e01b8152600401602060405180830381865afa158015614795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147b9919061578b565b90508415806148af57508073ffffffffffffffffffffffffffffffffffffffff166335b03c176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561480e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614832919061578b565b73ffffffffffffffffffffffffffffffffffffffff166324abd3fb886040518263ffffffff1660e01b815260040161486c91815260200190565b602060405180830381865afa158015614889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148ad91906155b6565b155b15614994576040517fa354418100000000000000000000000000000000000000000000000000000000815233600482015260248101889052604481018790526064810186905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063a354418190608401600060405180830381600087803b15801561492e57600080fd5b505af1158015614942573d6000803e3d6000fd5b505060408051338152602081018b9052908101899052606081018890527f1fc4a6c7ffe506697979b8ed54dc4135cd1ecd26a2745f70b760a2492222b3169250608001905060405180910390a1614d5e565b60008460e00151846020015186606001516149af9190615a2b565b6149b99190615a2b565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663cfbacc1486602001518473ffffffffffffffffffffffffffffffffffffffff16633c88e8826040518163ffffffff1660e01b8152600401602060405180830381865afa158015614a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5f9190615a12565b614a699085615bf4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526004810192909252602482015260006044820181905260648201526084016020604051808303816000875af1158015614ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614af69190615a12565b85606001818151614b0791906156c7565b9052506040517fd4bda90800000000000000000000000000000000000000000000000000000000815273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063d4bda90890614b5a908890600401615d3b565b600060405180830381600087803b158015614b7457600080fd5b505af1158015614b88573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff1663fa8dd4988a60046402540be40086614bbe9190615bf4565b6040518463ffffffff1660e01b8152600401614bdc93929190615ae1565b6020604051808303816000875af1158015614bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c1f9190615a12565b6040805160c08082018352338252602082018d81528284018d815260a0808d015160608601908152938d01511515608086019081529085018e815295517fb8213bfa00000000000000000000000000000000000000000000000000000000815260048101889052945173ffffffffffffffffffffffffffffffffffffffff90811660248701529251604486015290516064850152915160848401529051151560a4830152915160c482015291925084169063b8213bfa9060e401600060405180830381600087803b158015614cf357600080fd5b505af1158015614d07573d6000803e3d6000fd5b505060408051338152602081018d90529081018b9052606081018a9052608081018490527feab935bd2d632c4b4e1573d123433c1ec04a6fde3f29909c2bbe5d8ca4c01037925060a001905060405180910390a150505b50505050505050565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b8152600401602060405180830381865afa158015614dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dea919061578b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f474f565f4f4e4c590000000000000000000000000000000000000000000000006044820152606401610329565b60008111614ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f56414c55455f30000000000000000000000000000000000000000000000000006044820152606401610329565b6001819055604080518181526013918101919091527f6c696d69744f726465727354696d656c6f636b000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab90608001610ea2565b323314614f6057600080fd5b600354610100900460ff1615614fd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fa3a80ffe000000000000000000000000000000000000000000000000000000008152336004820152602481018490526044810183905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063a3a80ffe9060640161014060405180830381865afa15801561504e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150729190615b30565b6040517f8c8ff1d5000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810185905290915060009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd90638c8ff1d59060640160c060405180830381865afa1580156150ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151129190615b4d565b905060008260e0015111615182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f54524144450000000000000000000000000000000000000000000000006044820152606401610329565b600154606082015161519490436156c7565b10156151fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4c494d49545f54494d454c4f434b0000000000000000000000000000000000006044820152606401610329565b6040517f7fdb96f300000000000000000000000000000000000000000000000000000000815233600482015260248101869052604481018590526064810184905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd90637fdb96f390608401600060405180830381600087803b15801561527657600080fd5b505af115801561528a573d6000803e3d6000fd5b50506040805133815260208101899052908101879052606081018690527f7e06a81c7a47891ccc7455b5ccb2ed850e32bb655ccda67eb3ebaaeed83242a492506080019050612cf8565b600080600080600060a086880312156152ec57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561532157600080fd5b5035919050565b604051610140810167ffffffffffffffff81118282101715615373577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6040516101a0810167ffffffffffffffff81118282101715615373577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff811681146153e657600080fd5b50565b80356153f4816153c4565b919050565b80151581146153e657600080fd5b80356153f4816153f9565b8035600381106153f457600080fd5b60008060008060008587036101c081121561543b57600080fd5b6101408082121561544b57600080fd5b615453615328565b915061545e886153e9565b82526020880135602083015260408801356040830152606088013560608301526080880135608083015260a088013560a083015261549e60c08901615407565b60c083015260e088013560e08301526101008089013581840152506101208089013581840152508196506154d3818901615412565b95505050610160860135925061018086013591506154f46101a087016153e9565b90509295509295909350565b6000806040838503121561551357600080fd5b50508035926020909101359150565b60008060008060008060c0878903121561553b57600080fd5b86356004811061554a57600080fd5b9550602087013561555a816153c4565b95989597505050506040840135936060810135936080820135935060a0909101359150565b60008060006060848603121561559457600080fd5b505081359360208301359350604090920135919050565b80516153f4816153f9565b6000602082840312156155c857600080fd5b81516155d3816153f9565b9392505050565b80516153f4816153c4565b60006101a082840312156155f857600080fd5b615600615379565b615609836155da565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015261563f60a084016155ab565b60a082015260c0838101519082015260e080840151908201526101008084015190820152610120808401519082015261014080840151908201526101608084015190820152610180928301519281019290925250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156156d9576156d9615698565b500390565b815173ffffffffffffffffffffffffffffffffffffffff1681526101a081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015161573860a084018215159052565b5060c0838101519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018092830151929091019190915290565b60006020828403121561579d57600080fd5b81516155d3816153c4565b600061014082840312156157bb57600080fd5b6157c3615328565b90506157ce826155da565b81526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015261580e60c083016155ab565b60c082015260e082015160e082015261010080830151818301525061012080830151818301525092915050565b60006101e0828403121561584e57600080fd5b60405160c0810181811067ffffffffffffffff82111715615898577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040526158a584846157a8565b81526101408301516020820152610160830151604082015261018083015160608201526101a083015160808201526101c09092015160a083015250919050565b600082198211156158f8576158f8615698565b500190565b805173ffffffffffffffffffffffffffffffffffffffff1682526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015161595c60c084018215159052565b5060e08181015190830152610100808201519083015261012090810151910152565b6159898282516158fd565b60208101516101408301526040810151610160830152606081015161018083015260808101516101a083015260a001516101c090910152565b82815261020081016155d3602083018461597e565b6000825160005b818110156159f857602081860181015185830152016159de565b81811115615a07576000828501525b509190910192915050565b600060208284031215615a2457600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615a6357615a63615698565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8516815260208101849052604081018390526080810160038310615ad257615ad2615a68565b82606083015295945050505050565b8381526060810160058410615af857615af8615a68565b602082019390935260400152919050565b6102208101615b18828661597e565b836101e0830152821515610200830152949350505050565b60006101408284031215615b4357600080fd5b6155d383836157a8565b600060c08284031215615b5f57600080fd5b60405160c0810181811067ffffffffffffffff82111715615ba9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a0830151615be8816153f9565b60a08201529392505050565b600082615c2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60048110615c3f57615c3f615a68565b9052565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101516020830152604081015160408301526060810151615c836060840182615c2f565b505050565b60808101615c968284615c43565b92915050565b600060e08201905073ffffffffffffffffffffffffffffffffffffffff8085511683526020850151602084015280604086015116604084015250606084015160608301526080840151608083015260a0840151615cfc60a0840182615c2f565b508260c08301529392505050565b60a08101615d188285615c43565b73ffffffffffffffffffffffffffffffffffffffff831660808301529392505050565b6101408101615c9682846158fd56fea2646970667358221220f70ff450197ddb1d3e72b60c659cad915acf6a45316deaf5b3e375dbb033430464736f6c634300080b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101515760003560e01c80639aa7c0e5116100cd578063b8ebd5cc11610081578063be73fb9911610066578063be73fb9914610270578063d4a1caa714610283578063d8defd151461029657600080fd5b8063b8ebd5cc1461024a578063b9b6573a1461025d57600080fd5b8063ae8421e1116100b2578063ae8421e114610222578063b187bd261461022a578063b81bfa051461023757600080fd5b80639aa7c0e5146101fc578063a2a3c0cb1461020f57600080fd5b80638456cb59116101245780638f062227116101095780638f062227146101b4578063934d1cf4146101d6578063990382cf146101e957600080fd5b80638456cb5914610199578063876d3abd146101a157600080fd5b80630890d22a14610156578063279a165c14610172578063318a368b1461017b578063410c0b7c14610190575b600080fd5b61015f60015481565b6040519081526020015b60405180910390f35b61015f60005481565b61018e6101893660046152d4565b6102a9565b005b61015f60025481565b61018e610754565b61018e6101af36600461530f565b6108d7565b6003546101c690610100900460ff1681565b6040519015158152602001610169565b61018e6101e436600461530f565b610cb9565b61018e6101f736600461530f565b610ead565b61018e61020a366004615421565b611333565b61018e61021d366004615500565b612651565b61018e612d07565b6003546101c69060ff1681565b61018e61024536600461530f565b612e93565b61018e610258366004615522565b613080565b61018e61026b366004615500565b613fc3565b61018e61027e36600461557f565b6143b9565b61018e61029136600461530f565b614d67565b61018e6102a436600461557f565b614f54565b3233146102b557600080fd5b600354610100900460ff1615610332576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b60405180910390fd5b6040517fdcdf339a000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810185905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063dcdf339a90606401602060405180830381865afa1580156103a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cc91906155b6565b610432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f4c494d49540000000000000000000000000000000000000000000000006044820152606401610329565b6040517fb8878a2c000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810185905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b8878a2c906064016101a060405180830381865afa1580156104ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d091906155e5565b9050600154816101600151436104e691906156c7565b101561054e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4c494d49545f54494d454c4f434b0000000000000000000000000000000000006044820152606401610329565b82158061056b57508060a001516105675782841161056b565b8284105b6105d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f57524f4e475f54500000000000000000000000000000000000000000000000006044820152606401610329565b8115806105ee57508060a001516105ea578184106105ee565b8184115b610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f57524f4e475f534c0000000000000000000000000000000000000000000000006044820152606401610329565b6101208101849052610140810184905260e0810183905261010081018290526040517fb767608a00000000000000000000000000000000000000000000000000000000815273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b767608a906106c39084906004016156de565b600060405180830381600087803b1580156106dd57600080fd5b505af11580156106f1573d6000803e3d6000fd5b505060408051338152602081018a9052908101889052606081018790526080810186905260a081018590527f21e15d62c2ece17c1dc11c5fa45dcefdc6f99f199aa111d1363ff242f23e1c5c925060c001905060405180910390a1505050505050565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d7919061578b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f474f565f4f4e4c590000000000000000000000000000000000000000000000006044820152606401610329565b6003805460ff808216157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921682179092556040519116151581527f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2906020015b60405180910390a1565b3233146108e357600080fd5b600354610100900460ff1615610957576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fb66e6b050000000000000000000000000000000000000000000000000000000081526004810182905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b66e6b05906024016101e060405180830381865afa1580156109c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e8919061583b565b805160208201519192509015801590610a1257506002548260200151610a0e91906158e5565b4310155b610a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f574149545f54494d454f555400000000000000000000000000000000000000006044820152606401610329565b805173ffffffffffffffffffffffffffffffffffffffff163314610af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f594f55525f4f524445520000000000000000000000000000000000006044820152606401610329565b60008160e0015111610b66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f545950450000000000000000006044820152606401610329565b60808101516040517f6e70e7b600000000000000000000000000000000000000000000000000000000815273aee4d11a16b2bc65edd6416fb626eb404a6d65bd600482018190523360248301526044820192909252636e70e7b690606401600060405180830381600087803b158015610bde57600080fd5b505af1158015610bf2573d6000803e3d6000fd5b50506040517fcab94580000000000000000000000000000000000000000000000000000000008152600481018690526001602482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd925063cab945809150604401600060405180830381600087803b158015610c6357600080fd5b505af1158015610c77573d6000803e3d6000fd5b505050507f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb18383604051610cac9291906159c2565b60405180910390a1505050565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061578b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f474f565f4f4e4c590000000000000000000000000000000000000000000000006044820152606401610329565b60008111610e3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f56414c55455f30000000000000000000000000000000000000000000000000006044820152606401610329565b6000819055604080518181526009918101919091527f6d6178506f7344616900000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab906080015b60405180910390a150565b323314610eb957600080fd5b600354610100900460ff1615610f2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fb66e6b050000000000000000000000000000000000000000000000000000000081526004810182905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b66e6b05906024016101e060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe919061583b565b805160208201519192509015801590610fe857506002548260200151610fe491906158e5565b4310155b61104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f574149545f54494d454f555400000000000000000000000000000000000000006044820152606401610329565b805173ffffffffffffffffffffffffffffffffffffffff1633146110ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f594f55525f4f524445520000000000000000000000000000000000006044820152606401610329565b60e08101511561113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f545950450000000000000000006044820152606401610329565b6040517fcab94580000000000000000000000000000000000000000000000000000000008152600481018490526000602482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063cab9458090604401600060405180830381600087803b1580156111a757600080fd5b505af11580156111bb573d6000803e3d6000fd5b5050506020820151604080840151905160248101929092526044820152600091503090606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa2a3c0cb000000000000000000000000000000000000000000000000000000001790525161126291906159d7565b600060405180830381855af49150503d806000811461129d576040519150601f19603f3d011682016040523d82523d6000602084013e6112a2565b606091505b50509050806112f4576020808301516040808501518151338152938401929092528201527f60e497734ddabcd7293fd91739aaf65cf525eb539c97be528125a235a89288d89060600160405180910390a15b7f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb184846040516113259291906159c2565b60405180910390a150505050565b32331461133f57600080fd5b600354610100900460ff16156113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b60035460ff1615611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f50415553454400000000000000000000000000000000000000000000000000006044820152606401610329565b600073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16633078fff56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a5919061578b565b905060008173ffffffffffffffffffffffffffffffffffffffff166335b03c176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611518919061578b565b9050600080861161152a5760006115ae565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd633dae10a061154f6001896156c7565b6040518263ffffffff1660e01b815260040161156d91815260200190565b602060405180830381865afa15801561158a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ae9190615a12565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663f65d9dbe6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561160f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116339190615a12565b60208901516040517f97e7995a000000000000000000000000000000000000000000000000000000008152336004820152602481019190915273aee4d11a16b2bc65edd6416fb626eb404a6d65bd906397e7995a90604401602060405180830381865afa1580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190615a12565b60208a01516040517f9c8912f1000000000000000000000000000000000000000000000000000000008152336004820152602481019190915273aee4d11a16b2bc65edd6416fb626eb404a6d65bd90639c8912f190604401602060405180830381865afa158015611741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117659190615a12565b60208b01516040517f1c8636b4000000000000000000000000000000000000000000000000000000008152336004820152602481019190915273aee4d11a16b2bc65edd6416fb626eb404a6d65bd90631c8636b490604401602060405180830381865afa1580156117da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fe9190615a12565b61180891906158e5565b61181291906158e5565b10611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d41585f5452414445535f5045525f50414952000000000000000000000000006044820152606401610329565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16638049fde76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc9190615a12565b6040517ff7b3c6fd00000000000000000000000000000000000000000000000000000000815233600482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063f7b3c6fd90602401602060405180830381865afa158015611964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119889190615a12565b106119ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d41585f50454e44494e475f4f524445525300000000000000000000000000006044820152606401610329565b60005488608001511115611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f41424f56455f4d41585f504f53000000000000000000000000000000000000006044820152606401610329565b60208801516040517f0cd8b022000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff831690630cd8b02290602401602060405180830381865afa158015611ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af49190615a12565b8860e001518960800151611b089190615a2b565b1015611b70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f42454c4f575f4d494e5f504f53000000000000000000000000000000000000006044820152606401610329565b60008860e00151118015611c1c575060208801516040517f59a992d0000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff8316906359a992d090602401602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c149190615a12565b8860e0015110155b8015611cc0575060208801516040517f281b693c000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff83169063281b693c90602401602060405180830381865afa158015611c94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb89190615a12565b8860e0015111155b611d26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c455645524147455f494e434f525245435400000000000000000000000000006044820152606401610329565b851580611e465750600073aee4d11a16b2bc65edd6416fb626eb404a6d65bd63265aa621611d5560018a6156c7565b6040518263ffffffff1660e01b8152600401611d7391815260200190565b602060405180830381865afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db4919061578b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e449190615a12565b115b611ed2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4e4f5f434f52524553504f4e44494e475f4e46545f5350524541445f5245445560448201527f4354494f4e0000000000000000000000000000000000000000000000000000006064820152608401610329565b6101008801511580611f0657508760c00151611ef9578760a0015188610100015110611f06565b8760a00151886101000151115b611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f57524f4e475f54500000000000000000000000000000000000000000000000006044820152606401610329565b6101208801511580611fa057508760c00151611f93578760a0015188610120015111611fa0565b8760a00151886101200151105b612006576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f57524f4e475f534c0000000000000000000000000000000000000000000000006044820152606401610329565b60808801516040517f6e70e7b600000000000000000000000000000000000000000000000000000000815233600482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd602482018190526044820192909252636e70e7b690606401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b506000925061209f915050565b8760028111156120b1576120b1615a68565b146123945760208801516040517f44d44f5a000000000000000000000000000000000000000000000000000000008152336004820152602481019190915260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd906344d44f5a90604401602060405180830381865afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190615a12565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663d3b5fe70604051806101a001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018c6020015181526020018481526020018c6080015181526020018581526020018c60c00151151581526020018c60e0015181526020018c610100015181526020018c610120015181526020018c60a0015181526020018c60a00151815260200143815260200160008152506040518263ffffffff1660e01b815260040161223391906156de565b600060405180830381600087803b15801561224d57600080fd5b505af1158015612261573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16635ad9f9936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d4919061578b565b73ffffffffffffffffffffffffffffffffffffffff1663ec570610338b60200151848c6040518563ffffffff1660e01b81526004016123169493929190615a97565b600060405180830381600087803b15801561233057600080fd5b505af1158015612344573d6000803e3d6000fd5b5050506020808b0151604080513381529283019190915281018390527fdfabd6f206f17b7f2e1f9e0d33c40d30d1e8d7b6a4f520a03fdc1c1811059343915060600160405180910390a1506125ae565b60008373ffffffffffffffffffffffffffffffffffffffff1663fa8dd4988a6020015160008c60e001518d608001516123cd9190615a2b565b6040518463ffffffff1660e01b81526004016123eb93929190615ae1565b6020604051808303816000875af115801561240a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242e9190615a12565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663c76faf786040518060c001604052806040518061014001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018e60200151815260200160008152602001600081526020018e608001518152602001600081526020018e60c00151151581526020018e60e0015181526020018e610100015181526020018e61012001518152508152602001600081526020018c60a00151815260200189815260200185815260200160008152508360016040518463ffffffff1660e01b815260040161252e93929190615b09565b600060405180830381600087803b15801561254857600080fd5b505af115801561255c573d6000803e3d6000fd5b50505050602089810151604080513381529283019190915260018282015260608201839052517f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9181900360800190a1505b6040517f9d1a107300000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8516602482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd90639d1a107390604401600060405180830381600087803b15801561262f57600080fd5b505af1158015612643573d6000803e3d6000fd5b505050505050505050505050565b32331461265d57600080fd5b600354610100900460ff16156126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fa3a80ffe000000000000000000000000000000000000000000000000000000008152336004820152602481018390526044810182905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063a3a80ffe9060640161014060405180830381865afa15801561274b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276f9190615b30565b6040517f8c8ff1d5000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044810184905290915060009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd90638c8ff1d59060640160c060405180830381865afa1580156127eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280f9190615b4d565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16638049fde76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128949190615a12565b6040517ff7b3c6fd00000000000000000000000000000000000000000000000000000000815233600482015273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063f7b3c6fd90602401602060405180830381865afa1580156128fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129209190615a12565b10612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d41585f50454e44494e475f4f524445525300000000000000000000000000006044820152606401610329565b8060a00151156129f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f414c52454144595f4245494e475f434c4f5345440000000000000000000000006044820152606401610329565b60008260e0015111612a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f54524144450000000000000000000000000000000000000000000000006044820152606401610329565b600073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16633078fff56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae6919061578b565b73ffffffffffffffffffffffffffffffffffffffff1663fa8dd4988660016402540be40086602001518860e001518960600151612b239190615a2b565b612b2d9190615a2b565b612b379190615bf4565b6040518463ffffffff1660e01b8152600401612b5593929190615ae1565b6020604051808303816000875af1158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190615a12565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663c76faf786040518060c001604052806040518061014001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018981526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525081526020016000815260200160008152602001600081526020016000815260200160008152508360006040518463ffffffff1660e01b8152600401612c8193929190615b09565b600060405180830381600087803b158015612c9b57600080fd5b505af1158015612caf573d6000803e3d6000fd5b50506040805133815260208101899052600091810191909152606081018490527f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab925060800190505b60405180910390a15050505050565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8a919061578b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f474f565f4f4e4c590000000000000000000000000000000000000000000000006044820152606401610329565b6003805460ff61010080830482161581027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90931692909217928390556040517fc3a6f986261de9467c2838c6df8ef74f9107855159205600c0bc7a14cdfd3888936108cd9390049091161515815260200190565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f16919061578b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f474f565f4f4e4c590000000000000000000000000000000000000000000000006044820152606401610329565b60008111613014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f56414c55455f30000000000000000000000000000000000000000000000000006044820152606401610329565b6002819055604080518181526013918101919091527f6d61726b65744f726465727354696d656f7574000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab90608001610ea2565b32331461308c57600080fd5b600354610100900460ff1615613100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fa3a80ffe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602481018590526044810184905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063a3a80ffe9060640161014060405180830381865afa158015613190573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b49190615b30565b9050600182101580156131c8575060058211155b61322e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f57524f4e475f4e46545f545950450000000000000000000000000000000000006044820152606401610329565b3373aee4d11a16b2bc65edd6416fb626eb404a6d65bd63265aa6216132546001866156c7565b6040518263ffffffff1660e01b815260040161327291815260200190565b602060405180830381865afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b3919061578b565b73ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016132ed91815260200190565b602060405180830381865afa15801561330a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332e919061578b565b73ffffffffffffffffffffffffffffffffffffffff16146133ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4e4f5f4e465400000000000000000000000000000000000000000000000000006044820152606401610329565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663f8d24b486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561340a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342e9190615a12565b6040517faa3b7d770000000000000000000000000000000000000000000000000000000081526004810185905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063aa3b7d7790602401602060405180830381865afa158015613497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bb9190615a12565b6134c591906158e5565b43101561352e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f535543434553535f54494d454c4f434b000000000000000000000000000000006044820152606401610329565b600387600381111561354257613542615a68565b146135545760008160e0015111613604565b6040517fdcdf339a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018690526044810185905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063dcdf339a90606401602060405180830381865afa1580156135e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360491906155b6565b61366a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f54524144450000000000000000000000000000000000000000000000006044820152606401610329565b600187600381111561367e5761367e615a68565b14158061369057506000816101200151115b6136f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f4e4f5f534c0000000000000000000000000000000000000000000000000000006044820152606401610329565b600287600381111561370a5761370a615a68565b14158061371a5750610120810151155b613780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4841535f534c00000000000000000000000000000000000000000000000000006044820152606401610329565b600073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16633078fff56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613805919061578b565b905060008173ffffffffffffffffffffffffffffffffffffffff16635ad9f9936040518163ffffffff1660e01b8152600401602060405180830381865afa158015613854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613878919061578b565b9050600060405180608001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018b60038111156138c1576138c1615a68565b90526040517f21187a9200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8316906321187a9290613918908490600401615c88565b602060405180830381865afa158015613935573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395991906155b6565b15806139f357506040517ffc6dcafc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063fc6dcafc906139b2908490600401615c88565b602060405180830381865afa1580156139cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f391906155b6565b15613ed957600060038b6003811115613a0e57613a0e615a68565b1415613ae6576040517fb8878a2c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b166004820152602481018a90526044810189905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b8878a2c906064016101a060405180830381865afa158015613aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac891906155e5565b90508060c001518160600151613ade9190615a2b565b915050613bd2565b6040517f8c8ff1d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b166004820152602481018a90526044810189905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd90638c8ff1d59060640160c060405180830381865afa158015613b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b999190615b4d565b90506402540be4008660e0015182602001518860600151613bba9190615a2b565b613bc49190615a2b565b613bce9190615bf4565b9150505b6040517f6690a806000000000000000000000000000000000000000000000000000000008152336004820152602481018a90526044810182905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd90636690a80690606401600060405180830381600087803b158015613c4557600080fd5b505af1158015613c59573d6000803e3d6000fd5b5060009250505073ffffffffffffffffffffffffffffffffffffffff851663fa8dd4988b60038f6003811115613c9157613c91615a68565b14613c9d576003613ca0565b60025b856040518463ffffffff1660e01b8152600401613cbf93929190615ae1565b6020604051808303816000875af1158015613cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d029190615a12565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663817fa1a46040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018e73ffffffffffffffffffffffffffffffffffffffff1681526020018d81526020018c81526020018f6003811115613d9b57613d9b615a68565b815250836040518363ffffffff1660e01b8152600401613dbc929190615c9c565b600060405180830381600087803b158015613dd657600080fd5b505af1158015613dea573d6000803e3d6000fd5b50506040517fc23c886c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716925063c23c886c9150613e429086903390600401615d0a565b600060405180830381600087803b158015613e5c57600080fd5b505af1158015613e70573d6000803e3d6000fd5b50506040805133815273ffffffffffffffffffffffffffffffffffffffff8f1660208201529081018d9052606081018490527f25a4615e0f832491882811af92c23aeadd8e4ea8679eda01bb90f5276ffdf44f9250608001905060405180910390a15050613fb7565b6040517f46ea285b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906346ea285b90613f2d9084903390600401615d0a565b600060405180830381600087803b158015613f4757600080fd5b505af1158015613f5b573d6000803e3d6000fd5b50506040805133815273ffffffffffffffffffffffffffffffffffffffff8d1660208201529081018b90527fde7da272dc52e28c3b33c5c74b461da89b05bd790d845e82db2f69bbf08108e79250606001905060405180910390a15b50505050505050505050565b323314613fcf57600080fd5b600354610100900460ff1615614043576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fdcdf339a000000000000000000000000000000000000000000000000000000008152336004820152602481018390526044810182905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063dcdf339a90606401602060405180830381865afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd91906155b6565b614143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f4c494d49540000000000000000000000000000000000000000000000006044820152606401610329565b6040517fb8878a2c000000000000000000000000000000000000000000000000000000008152336004820152602481018390526044810182905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063b8878a2c906064016101a060405180830381865afa1580156141bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141e191906155e5565b9050600154816101600151436141f791906156c7565b101561425f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4c494d49545f54494d454c4f434b0000000000000000000000000000000000006044820152606401610329565b60608101516040517f6e70e7b600000000000000000000000000000000000000000000000000000000815273aee4d11a16b2bc65edd6416fb626eb404a6d65bd600482018190523360248301526044820192909252636e70e7b690606401600060405180830381600087803b1580156142d757600080fd5b505af11580156142eb573d6000803e3d6000fd5b50506040517fb4b0f567000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810185905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd925063b4b0f5679150606401600060405180830381600087803b15801561436257600080fd5b505af1158015614376573d6000803e3d6000fd5b505060408051338152602081018790529081018590527ff1b38881d7f4b2b12141c5f39c5124545d6112532eb6afbe9630cdbde3ee53e992506060019050610cac565b3233146143c557600080fd5b600354610100900460ff1615614439576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fa3a80ffe000000000000000000000000000000000000000000000000000000008152336004820152602481018490526044810183905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063a3a80ffe9060640161014060405180830381865afa1580156144b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d79190615b30565b6040517f8c8ff1d5000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810185905290915060009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd90638c8ff1d59060640160c060405180830381865afa158015614553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145779190615b4d565b905060008260e00151116145e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f54524144450000000000000000000000000000000000000000000000006044820152606401610329565b60008260e001516064604b8560a001516146019190615a2b565b61460b9190615bf4565b6146159190615bf4565b905083158061465457508260c0015161464057808360a0015161463891906158e5565b841115614654565b808360a0015161465091906156c7565b8410155b6146ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f534c5f544f4f5f424947000000000000000000000000000000000000000000006044820152606401610329565b60015460808301516146cc90436156c7565b1015614734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4c494d49545f54494d454c4f434b0000000000000000000000000000000000006044820152606401610329565b600073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff16633078fff56040518163ffffffff1660e01b8152600401602060405180830381865afa158015614795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147b9919061578b565b90508415806148af57508073ffffffffffffffffffffffffffffffffffffffff166335b03c176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561480e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614832919061578b565b73ffffffffffffffffffffffffffffffffffffffff166324abd3fb886040518263ffffffff1660e01b815260040161486c91815260200190565b602060405180830381865afa158015614889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148ad91906155b6565b155b15614994576040517fa354418100000000000000000000000000000000000000000000000000000000815233600482015260248101889052604481018790526064810186905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063a354418190608401600060405180830381600087803b15801561492e57600080fd5b505af1158015614942573d6000803e3d6000fd5b505060408051338152602081018b9052908101899052606081018890527f1fc4a6c7ffe506697979b8ed54dc4135cd1ecd26a2745f70b760a2492222b3169250608001905060405180910390a1614d5e565b60008460e00151846020015186606001516149af9190615a2b565b6149b99190615a2b565b905073aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff1663cfbacc1486602001518473ffffffffffffffffffffffffffffffffffffffff16633c88e8826040518163ffffffff1660e01b8152600401602060405180830381865afa158015614a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5f9190615a12565b614a699085615bf4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526004810192909252602482015260006044820181905260648201526084016020604051808303816000875af1158015614ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614af69190615a12565b85606001818151614b0791906156c7565b9052506040517fd4bda90800000000000000000000000000000000000000000000000000000000815273aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063d4bda90890614b5a908890600401615d3b565b600060405180830381600087803b158015614b7457600080fd5b505af1158015614b88573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff1663fa8dd4988a60046402540be40086614bbe9190615bf4565b6040518463ffffffff1660e01b8152600401614bdc93929190615ae1565b6020604051808303816000875af1158015614bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c1f9190615a12565b6040805160c08082018352338252602082018d81528284018d815260a0808d015160608601908152938d01511515608086019081529085018e815295517fb8213bfa00000000000000000000000000000000000000000000000000000000815260048101889052945173ffffffffffffffffffffffffffffffffffffffff90811660248701529251604486015290516064850152915160848401529051151560a4830152915160c482015291925084169063b8213bfa9060e401600060405180830381600087803b158015614cf357600080fd5b505af1158015614d07573d6000803e3d6000fd5b505060408051338152602081018d90529081018b9052606081018a9052608081018490527feab935bd2d632c4b4e1573d123433c1ec04a6fde3f29909c2bbe5d8ca4c01037925060a001905060405180910390a150505b50505050505050565b73aee4d11a16b2bc65edd6416fb626eb404a6d65bd73ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b8152600401602060405180830381865afa158015614dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dea919061578b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f474f565f4f4e4c590000000000000000000000000000000000000000000000006044820152606401610329565b60008111614ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f56414c55455f30000000000000000000000000000000000000000000000000006044820152606401610329565b6001819055604080518181526013918101919091527f6c696d69744f726465727354696d656c6f636b000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab90608001610ea2565b323314614f6057600080fd5b600354610100900460ff1615614fd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103299060208082526004908201527f444f4e4500000000000000000000000000000000000000000000000000000000604082015260600190565b6040517fa3a80ffe000000000000000000000000000000000000000000000000000000008152336004820152602481018490526044810183905260009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd9063a3a80ffe9060640161014060405180830381865afa15801561504e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150729190615b30565b6040517f8c8ff1d5000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810185905290915060009073aee4d11a16b2bc65edd6416fb626eb404a6d65bd90638c8ff1d59060640160c060405180830381865afa1580156150ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151129190615b4d565b905060008260e0015111615182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f5f54524144450000000000000000000000000000000000000000000000006044820152606401610329565b600154606082015161519490436156c7565b10156151fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4c494d49545f54494d454c4f434b0000000000000000000000000000000000006044820152606401610329565b6040517f7fdb96f300000000000000000000000000000000000000000000000000000000815233600482015260248101869052604481018590526064810184905273aee4d11a16b2bc65edd6416fb626eb404a6d65bd90637fdb96f390608401600060405180830381600087803b15801561527657600080fd5b505af115801561528a573d6000803e3d6000fd5b50506040805133815260208101899052908101879052606081018690527f7e06a81c7a47891ccc7455b5ccb2ed850e32bb655ccda67eb3ebaaeed83242a492506080019050612cf8565b600080600080600060a086880312156152ec57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561532157600080fd5b5035919050565b604051610140810167ffffffffffffffff81118282101715615373577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6040516101a0810167ffffffffffffffff81118282101715615373577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff811681146153e657600080fd5b50565b80356153f4816153c4565b919050565b80151581146153e657600080fd5b80356153f4816153f9565b8035600381106153f457600080fd5b60008060008060008587036101c081121561543b57600080fd5b6101408082121561544b57600080fd5b615453615328565b915061545e886153e9565b82526020880135602083015260408801356040830152606088013560608301526080880135608083015260a088013560a083015261549e60c08901615407565b60c083015260e088013560e08301526101008089013581840152506101208089013581840152508196506154d3818901615412565b95505050610160860135925061018086013591506154f46101a087016153e9565b90509295509295909350565b6000806040838503121561551357600080fd5b50508035926020909101359150565b60008060008060008060c0878903121561553b57600080fd5b86356004811061554a57600080fd5b9550602087013561555a816153c4565b95989597505050506040840135936060810135936080820135935060a0909101359150565b60008060006060848603121561559457600080fd5b505081359360208301359350604090920135919050565b80516153f4816153f9565b6000602082840312156155c857600080fd5b81516155d3816153f9565b9392505050565b80516153f4816153c4565b60006101a082840312156155f857600080fd5b615600615379565b615609836155da565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015261563f60a084016155ab565b60a082015260c0838101519082015260e080840151908201526101008084015190820152610120808401519082015261014080840151908201526101608084015190820152610180928301519281019290925250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156156d9576156d9615698565b500390565b815173ffffffffffffffffffffffffffffffffffffffff1681526101a081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015161573860a084018215159052565b5060c0838101519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018092830151929091019190915290565b60006020828403121561579d57600080fd5b81516155d3816153c4565b600061014082840312156157bb57600080fd5b6157c3615328565b90506157ce826155da565b81526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015261580e60c083016155ab565b60c082015260e082015160e082015261010080830151818301525061012080830151818301525092915050565b60006101e0828403121561584e57600080fd5b60405160c0810181811067ffffffffffffffff82111715615898577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040526158a584846157a8565b81526101408301516020820152610160830151604082015261018083015160608201526101a083015160808201526101c09092015160a083015250919050565b600082198211156158f8576158f8615698565b500190565b805173ffffffffffffffffffffffffffffffffffffffff1682526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015161595c60c084018215159052565b5060e08181015190830152610100808201519083015261012090810151910152565b6159898282516158fd565b60208101516101408301526040810151610160830152606081015161018083015260808101516101a083015260a001516101c090910152565b82815261020081016155d3602083018461597e565b6000825160005b818110156159f857602081860181015185830152016159de565b81811115615a07576000828501525b509190910192915050565b600060208284031215615a2457600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615a6357615a63615698565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8516815260208101849052604081018390526080810160038310615ad257615ad2615a68565b82606083015295945050505050565b8381526060810160058410615af857615af8615a68565b602082019390935260400152919050565b6102208101615b18828661597e565b836101e0830152821515610200830152949350505050565b60006101408284031215615b4357600080fd5b6155d383836157a8565b600060c08284031215615b5f57600080fd5b60405160c0810181811067ffffffffffffffff82111715615ba9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a0830151615be8816153f9565b60a08201529392505050565b600082615c2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60048110615c3f57615c3f615a68565b9052565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101516020830152604081015160408301526060810151615c836060840182615c2f565b505050565b60808101615c968284615c43565b92915050565b600060e08201905073ffffffffffffffffffffffffffffffffffffffff8085511683526020850151602084015280604086015116604084015250606084015160608301526080840151608083015260a0840151615cfc60a0840182615c2f565b508260c08301529392505050565b60a08101615d188285615c43565b73ffffffffffffffffffffffffffffffffffffffff831660808301529392505050565b6101408101615c9682846158fd56fea2646970667358221220f70ff450197ddb1d3e72b60c659cad915acf6a45316deaf5b3e375dbb033430464736f6c634300080b0033
Deployed Bytecode Sourcemap
11463:16598:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11841:36;;;;;;;;;160:25:1;;;148:2;133:18;11841:36:0;;;;;;;;11782;;;;;;19372:893;;;;;;:::i;:::-;;:::i;:::-;;11895:36;;;;;;14204:81;;;:::i;26452:669::-;;;;;;:::i;:::-;;:::i;12024:18::-;;;;;;;;;;;;;;;1101:14:1;;1094:22;1076:41;;1064:2;1049:18;12024::0;936:187:1;13514:171:0;;;;;;:::i;:::-;;:::i;27127:931::-;;;;;;:::i;:::-;;:::i;14409:3749::-;;;;;;:::i;:::-;;:::i;18195:1135::-;;;;;;:::i;:::-;;:::i;14291:72::-;;;:::i;11965:20::-;;;;;;;;;13910:265;;;;;;:::i;:::-;;:::i;23375:3046::-;;;;;;:::i;:::-;;:::i;20271:610::-;;;;;;:::i;:::-;;:::i;21509:1830::-;;;;;;:::i;:::-;;:::i;13691:213::-;;;;;;:::i;:::-;;:::i;20924:579::-;;;;;;:::i;:::-;;:::i;19372:893::-;13398:9;13411:10;13398:23;13390:32;;;;;;13463:6:::1;::::0;::::1;::::0;::::1;;;13462:7;13454:24;;;;;;;;;;;5467:2:1::0;5449:21;;;5506:1;5486:18;;;5479:29;5544:6;5539:2;5524:18;;5517:34;5583:2;5568:18;;5265:327;13454:24:0::1;;;;;;;;;19588:58:::2;::::0;;;;19615:10:::2;19588:58;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;11580:42:0::2;::::0;19588:26:::2;::::0;5904:18:1;;19588:58:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19580:79;;;::::0;::::2;::::0;;6691:2:1;19580:79:0::2;::::0;::::2;6673:21:1::0;6730:1;6710:18;;;6703:29;6768:10;6748:18;;;6741:38;6796:18;;19580:79:0::2;6489:331:1::0;19580:79:0::2;19717:58;::::0;;;;19744:10:::2;19717:58;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;19672:42:0::2;::::0;11580::::2;::::0;19717:26:::2;::::0;5904:18:1;;19717:58:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19672:103;;19820:19;;19809:1;:7;;;19794:12;:22;;;;:::i;:::-;:45;;19786:72;;;::::0;::::2;::::0;;8642:2:1;19786:72:0::2;::::0;::::2;8624:21:1::0;8681:2;8661:18;;;8654:30;8720:16;8700:18;;;8693:44;8754:18;;19786:72:0::2;8440:338:1::0;19786:72:0::2;19879:8:::0;;;:49:::2;;;19892:1;:5;;;:35;;19924:3;19915:6;:12;19892:35;;;19909:3;19900:6;:12;19892:35;19871:70;;;::::0;::::2;::::0;;8985:2:1;19871:70:0::2;::::0;::::2;8967:21:1::0;9024:1;9004:18;;;8997:29;9062:10;9042:18;;;9035:38;9090:18;;19871:70:0::2;8783:331:1::0;19871:70:0::2;19960:8:::0;;;:49:::2;;;19973:1;:5;;;:35;;20005:3;19996:6;:12;19973:35;;;19990:3;19981:6;:12;19973:35;19952:70;;;::::0;::::2;::::0;;9321:2:1;19952:70:0::2;::::0;::::2;9303:21:1::0;9360:1;9340:18;;;9333:29;9398:10;9378:18;;;9371:38;9426:18;;19952:70:0::2;9119:331:1::0;19952:70:0::2;20035:10;::::0;::::2;:19:::0;;;20065:10:::2;::::0;::::2;:19:::0;;;20097:4:::2;::::0;::::2;:10:::0;;;20118:4:::2;::::0;::::2;:10:::0;;;-1:-1:-1;20141:32:0;;;;11580:42:::2;::::0;20141:29:::2;::::0;:32:::2;::::0;20035:1;;20141:32:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;20191:66:0::2;::::0;;20208:10:::2;10917:74:1::0;;11022:2;11007:18;;11000:34;;;11050:18;;;11043:34;;;11108:2;11093:18;;11086:34;;;11151:3;11136:19;;11129:35;;;11195:3;11180:19;;11173:35;;;20191:66:0::2;::::0;-1:-1:-1;10904:3:1;10889:19;;-1:-1:-1;20191:66:0::2;;;;;;;19567:698;19372:893:::0;;;;;:::o;14204:81::-;11580:42;13327:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13313:28;;:10;:28;;;13305:49;;;;;;;11677:2:1;13305:49:0;;;11659:21:1;11716:1;11696:18;;;11689:29;11754:10;11734:18;;;11727:38;11782:18;;13305:49:0;11475:331:1;13305:49:0;14251:8:::1;::::0;;::::1;::::0;;::::1;14250:9;14239:20:::0;;;::::1;::::0;::::1;::::0;;;14266:16:::1;::::0;14273:8;;1101:14:1;1094:22;1076:41;;14266:16:0::1;::::0;1064:2:1;1049:18;14266:16:0::1;;;;;;;;14204:81::o:0;26452:669::-;13398:9;13411:10;13398:23;13390:32;;;;;;13463:6:::1;::::0;::::1;::::0;::::1;;;13462:7;13454:24;;;;;;;;;;;5467:2:1::0;5449:21;;;5506:1;5486:18;;;5479:29;5544:6;5539:2;5524:18;;5517:34;5583:2;5568:18;;5265:327;13454:24:0::1;26587:41:::2;::::0;;;;::::2;::::0;::::2;160:25:1::0;;;26538:46:0::2;::::0;11580:42:::2;::::0;26587:33:::2;::::0;133:18:1;;26587:41:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26675:7:::0;;26703::::2;::::0;::::2;::::0;26538:90;;-1:-1:-1;26675:7:0;26703:11;;;;:60:::2;;;26744:19;;26734:1;:7;;;:29;;;;:::i;:::-;26718:12;:45;;26703:60;26695:99;;;::::0;::::2;::::0;;13946:2:1;26695:99:0::2;::::0;::::2;13928:21:1::0;13985:2;13965:18;;;13958:30;14024:14;14004:18;;;13997:42;14056:18;;26695:99:0::2;13744:336:1::0;26695:99:0::2;26813:8:::0;;:22:::2;;26825:10;26813:22;26805:49;;;::::0;::::2;::::0;;14287:2:1;26805:49:0::2;::::0;::::2;14269:21:1::0;14326:2;14306:18;;;14299:30;14365:16;14345:18;;;14338:44;14399:18;;26805:49:0::2;14085:338:1::0;26805:49:0::2;26886:1;26873;:10;;;:14;26865:50;;;::::0;::::2;::::0;;14630:2:1;26865:50:0::2;::::0;::::2;14612:21:1::0;14669:2;14649:18;;;14642:30;14708:25;14688:18;;;14681:53;14751:18;;26865:50:0::2;14428:347:1::0;26865:50:0::2;26980:17;::::0;::::2;::::0;26928:70:::2;::::0;;;;11580:42:::2;26928:70;::::0;::::2;15043:34:1::0;;;26968:10:0::2;15093:18:1::0;;;15086:43;15145:18;;;15138:34;;;;26928:20:0::2;::::0;14955:18:1;;26928:70:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;27009:51:0::2;::::0;;;;::::2;::::0;::::2;15351:25:1::0;;;27055:4:0::2;15392:18:1::0;;;15385:50;11580:42:0::2;::::0;-1:-1:-1;27009:37:0::2;::::0;-1:-1:-1;15324:18:1;;27009:51:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;27078:35;27103:6;27111:1;27078:35;;;;;;;:::i;:::-;;;;;;;;26525:596;;26452:669:::0;:::o;13514:171::-;11580:42;13327:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13313:28;;:10;:28;;;13305:49;;;;;;;11677:2:1;13305:49:0;;;11659:21:1;11716:1;11696:18;;;11689:29;11754:10;11734:18;;;11727:38;11782:18;;13305:49:0;11475:331:1;13305:49:0;13589:1:::1;13582:4;:8;13574:28;;;::::0;::::1;::::0;;17120:2:1;13574:28:0::1;::::0;::::1;17102:21:1::0;17159:1;17139:18;;;17132:29;17197:9;17177:18;;;17170:37;17224:18;;13574:28:0::1;16918:330:1::0;13574:28:0::1;13613:9;:16:::0;;;13645:32:::1;::::0;;17465:21:1;;;17522:1;17502:18;;;17495:29;;;;17560:11;17555:2;17540:18;;17533:39;17639:4;17624:20;;17617:36;;;13645:32:0::1;::::0;17604:3:1;17589:19;13645:32:0::1;;;;;;;;13514:171:::0;:::o;27127:931::-;13398:9;13411:10;13398:23;13390:32;;;;;;13463:6:::1;::::0;::::1;::::0;::::1;;;13462:7;13454:24;;;;;;;;;;;5467:2:1::0;5449:21;;;5506:1;5486:18;;;5479:29;5544:6;5539:2;5524:18;;5517:34;5583:2;5568:18;;5265:327;13454:24:0::1;27263:41:::2;::::0;;;;::::2;::::0;::::2;160:25:1::0;;;27214:46:0::2;::::0;11580:42:::2;::::0;27263:33:::2;::::0;133:18:1;;27263:41:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27351:7:::0;;27379::::2;::::0;::::2;::::0;27214:90;;-1:-1:-1;27351:7:0;27379:11;;;;:60:::2;;;27420:19;;27410:1;:7;;;:29;;;;:::i;:::-;27394:12;:45;;27379:60;27371:99;;;::::0;::::2;::::0;;13946:2:1;27371:99:0::2;::::0;::::2;13928:21:1::0;13985:2;13965:18;;;13958:30;14024:14;14004:18;;;13997:42;14056:18;;27371:99:0::2;13744:336:1::0;27371:99:0::2;27489:8:::0;;:22:::2;;27501:10;27489:22;27481:49;;;::::0;::::2;::::0;;14287:2:1;27481:49:0::2;::::0;::::2;14269:21:1::0;14326:2;14306:18;;;14299:30;14365:16;14345:18;;;14338:44;14399:18;;27481:49:0::2;14085:338:1::0;27481:49:0::2;27549:10;::::0;::::2;::::0;:15;27541:51:::2;;;::::0;::::2;::::0;;14630:2:1;27541:51:0::2;::::0;::::2;14612:21:1::0;14669:2;14649:18;;;14642:30;14708:25;14688:18;;;14681:53;14751:18;;27541:51:0::2;14428:347:1::0;27541:51:0::2;27605:52;::::0;;;;::::2;::::0;::::2;15351:25:1::0;;;27651:5:0::2;15392:18:1::0;;;15385:50;11580:42:0::2;::::0;27605:37:::2;::::0;15324:18:1;;27605:52:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;27826:11:0::2;::::0;::::2;::::0;27856:7:::2;::::0;;::::2;::::0;27730:148;;::::2;::::0;::::2;17838:25:1::0;;;;17879:18;;;17872:34;27671:12:0::2;::::0;-1:-1:-1;27697:4:0::2;::::0;17811:18:1;;27730:148:0::2;::::0;;;;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;::::2;;;;::::0;;27689:200;::::2;::::0;27730:148;27689:200:::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27670:219;;;27906:7;27902:96;;27965:11;::::0;;::::2;::::0;27978:7:::2;::::0;;::::2;::::0;27934:52;;27953:10:::2;5931:74:1::0;;6021:18;;;6014:34;;;;6064:18;;6057:34;27934:52:0::2;::::0;5919:2:1;5904:18;27934:52:0::2;;;;;;;27902:96;28015:35;28040:6;28048:1;28015:35;;;;;;;:::i;:::-;;;;;;;;27201:857;;;27127:931:::0;:::o;14409:3749::-;13398:9;13411:10;13398:23;13390:32;;;;;;13463:6:::1;::::0;::::1;::::0;::::1;;;13462:7;13454:24;;;;;;;;;;;5467:2:1::0;5449:21;;;5506:1;5486:18;;;5479:29;5544:6;5539:2;5524:18;;5517:34;5583:2;5568:18;;5265:327;13454:24:0::1;14706:8:::2;::::0;::::2;;14705:9;14697:28;;;::::0;::::2;::::0;;18550:2:1;14697:28:0::2;::::0;::::2;18532:21:1::0;18589:1;18569:18;;;18562:29;18627:8;18607:18;;;18600:36;18653:18;;14697:28:0::2;18348:329:1::0;14697:28:0::2;14738:32;11580:42;14773:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14738:61;;14810:35;14848:10;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14810:63;;14886:21;14931:1:::0;14910:18:::2;:22;:77;;14986:1;14910:77;;;11580:42;14935:26;14962:20;14981:1;14962:18:::0;:20:::2;:::i;:::-;14935:48;;;;;;;;;;;;;160:25:1::0;;148:2;133:18;;14:177;14935:48:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14886:101;;11580:42;15190:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15175:11;::::0;::::2;::::0;15133:54:::2;::::0;;;;15163:10:::2;15133:54;::::0;::::2;19617:74:1::0;19707:18;;;19700:34;;;;11580:42:0::2;::::0;15133:29:::2;::::0;19590:18:1;;15133:54:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15104:11;::::0;::::2;::::0;15060:56:::2;::::0;;;;15092:10:::2;15060:56;::::0;::::2;19617:74:1::0;19707:18;;;19700:34;;;;11580:42:0::2;::::0;15060:31:::2;::::0;19590:18:1;;15060:56:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15045:11;::::0;::::2;::::0;15008:49:::2;::::0;;;;15033:10:::2;15008:49;::::0;::::2;19617:74:1::0;19707:18;;;19700:34;;;;11580:42:0::2;::::0;15008:24:::2;::::0;19590:18:1;;15008:49:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:108;;;;:::i;:::-;:179;;;;:::i;:::-;:209;15000:255;;;::::0;::::2;::::0;;19947:2:1;15000:255:0::2;::::0;::::2;19929:21:1::0;19986:2;19966:18;;;19959:30;20025:21;20005:18;;;19998:49;20064:18;;15000:255:0::2;19745:343:1::0;15000:255:0::2;11580:42;15320:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15276:41;::::0;;;;15306:10:::2;15276:41;::::0;::::2;20239:74:1::0;11580:42:0::2;::::0;15276:29:::2;::::0;20212:18:1;;15276:41:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;15268:122;;;::::0;::::2;::::0;;20526:2:1;15268:122:0::2;::::0;::::2;20508:21:1::0;20565:2;20545:18;;;20538:30;20604:20;20584:18;;;20577:48;20642:18;;15268:122:0::2;20324:342:1::0;15268:122:0::2;15432:9;;15411:1;:17;;;:30;;15403:56;;;::::0;::::2;::::0;;20873:2:1;15403:56:0::2;::::0;::::2;20855:21:1::0;20912:2;20892:18;;;20885:30;20951:15;20931:18;;;20924:43;20984:18;;15403:56:0::2;20671:337:1::0;15403:56:0::2;15541:11;::::0;::::2;::::0;15512:41:::2;::::0;;;;::::2;::::0;::::2;160:25:1::0;;;;15512:28:0::2;::::0;::::2;::::0;::::2;::::0;133:18:1;;15512:41:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15498:1;:10;;;15478:1;:17;;;:30;;;;:::i;:::-;:75;;15470:101;;;::::0;::::2;::::0;;21448:2:1;15470:101:0::2;::::0;::::2;21430:21:1::0;21487:2;21467:18;;;21460:30;21526:15;21506:18;;;21499:43;21559:18;;15470:101:0::2;21246:337:1::0;15470:101:0::2;15605:1;15592;:10;;;:14;:72;;;;-1:-1:-1::0;15652:11:0::2;::::0;::::2;::::0;15624:40:::2;::::0;;;;::::2;::::0;::::2;160:25:1::0;;;;15624:27:0::2;::::0;::::2;::::0;::::2;::::0;133:18:1;;15624:40:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15610:1;:10;;;:54;;15592:72;:144;;;;-1:-1:-1::0;15724:11:0::2;::::0;::::2;::::0;15696:40:::2;::::0;;;;::::2;::::0;::::2;160:25:1::0;;;;15696:27:0::2;::::0;::::2;::::0;::::2;::::0;133:18:1;;15696:40:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15682:1;:10;;;:54;;15592:144;15584:189;;;::::0;::::2;::::0;;21790:2:1;15584:189:0::2;::::0;::::2;21772:21:1::0;21829:2;21809:18;;;21802:30;21868:20;21848:18;;;21841:48;21906:18;;15584:189:0::2;21588:342:1::0;15584:189:0::2;15794:23:::0;;;:88:::2;;-1:-1:-1::0;15881:1:0::2;11580:42;15821:13;15835:20;15854:1;15835:18:::0;:20:::2;:::i;:::-;15821:35;;;;;;;;;;;;;160:25:1::0;;148:2;133:18;;14:177;15821:35:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;::::0;;;;15867:10:::2;15821:57;::::0;::::2;20239:74:1::0;15821:45:0::2;::::0;;;::::2;::::0;::::2;::::0;20212:18:1;;15821:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;15794:88;15786:151;;;::::0;::::2;::::0;;22415:2:1;15786:151:0::2;::::0;::::2;22397:21:1::0;22454:2;22434:18;;;22427:30;22493:34;22473:18;;;22466:62;22564:7;22544:18;;;22537:35;22589:19;;15786:151:0::2;22213:401:1::0;15786:151:0::2;15958:4;::::0;::::2;::::0;:9;;:62:::2;;;15972:1;:5;;;:47;;16008:1;:11;;;16001:1;:4;;;:18;15972:47;;;15987:1;:11;;;15980:1;:4;;;:18;15972:47;15950:83;;;::::0;::::2;::::0;;8985:2:1;15950:83:0::2;::::0;::::2;8967:21:1::0;9024:1;9004:18;;;8997:29;9062:10;9042:18;;;9035:38;9090:18;;15950:83:0::2;8783:331:1::0;15950:83:0::2;16052:4;::::0;::::2;::::0;:9;;:62:::2;;;16066:1;:5;;;:47;;16102:1;:11;;;16095:1;:4;;;:18;16066:47;;;16081:1;:11;;;16074:1;:4;;;:18;16066:47;16044:83;;;::::0;::::2;::::0;;9321:2:1;16044:83:0::2;::::0;::::2;9303:21:1::0;9360:1;9340:18;;;9333:29;9398:10;9378:18;;;9371:38;9426:18;;16044:83:0::2;9119:331:1::0;16044:83:0::2;16192:17;::::0;::::2;::::0;16140:70:::2;::::0;;;;16161:10:::2;16140:70;::::0;::::2;15043:34:1::0;11580:42:0::2;15093:18:1::0;;;15086:43;;;15145:18;;;15138:34;;;;16140:20:0::2;::::0;14955:18:1;;16140:70:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;16235:47:0::2;::::0;-1:-1:-1;16226:56:0::2;::::0;-1:-1:-1;;16226:56:0;::::2;:5;:56;;;;;;;;:::i;:::-;;16223:1870;;16357:11;::::0;::::2;::::0;16311:58:::2;::::0;;;;16345:10:::2;16311:58;::::0;::::2;19617:74:1::0;19707:18;;;19700:34;;;;16298:10:0::2;::::0;11580:42:::2;::::0;16311:33:::2;::::0;19590:18:1;;16311:58:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16298:71;;11580:42;16386:28;;;16433:468;;;;;;;;16489:10;16433:468;;;;;;16522:1;:11;;;16433:468;;;;16556:5;16433:468;;;;16584:1;:17;;;16433:468;;;;16624:16;16433:468;;;;16663:1;:5;;;16433:468;;;;;;16691:1;:10;;;16433:468;;;;16724:1;:4;;;16433:468;;;;16751:1;:4;;;16433:468;;;;16778:1;:11;;;16433:468;;;;16812:1;:11;;;16433:468;;;;16846:12;16433:468;;;;16881:1;16433:468;;::::0;16386:530:::2;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;16933:10;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;16979:10;16991:1;:11;;;17004:5;17011;16933:84;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;17067:11:0::2;::::0;;::::2;::::0;17039:47:::2;::::0;;17055:10:::2;5931:74:1::0;;6021:18;;;6014:34;;;;6064:18;;6057:34;;;17039:47:0::2;::::0;-1:-1:-1;5919:2:1;5904:18;17039:47:0::2;;;;;;;16283:817;16223:1870;;;17119:12;17134:10;:19;;;17172:1;:11;;;17203:43;17286:1;:10;;;17266:1;:17;;;:30;;;;:::i;:::-;17134:177;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17119:192;;11580:42;17328:32;;;17379:590;;;;;;;;17439:357;;;;;;;;17490:10;17439:357;;;;;;17527:1;:11;;;17439:357;;;;17565:1;17439:357;;;;17568:1;17439:357;;;;17596:1;:17;;;17439:357;;;;17640:1;17439:357;;;;17669:1;:5;;;17439:357;;;;;;17701:1;:10;;;17439:357;;;;17738:1;:4;;;17439:357;;;;17769:1;:4;;;17439:357;;::::0;17379:590:::2;;;;17819:1;17379:590;;;;17843:1;:11;;;17379:590;;;;17877:10;17379:590;;;;17910:16;17379:590;;;;17949:1;17379:590;;::::0;17971:7:::2;17980:4;17328:671;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;;18054:11:0::2;::::0;;::::2;::::0;18021:60:::2;::::0;;18042:10:::2;24669:74:1::0;;24759:18;;;24752:34;;;;18067:4:0::2;24802:18:1::0;;;24795:50;24876:2;24861:18;;24854:34;;;18021:60:0;::::2;::::0;;;;24656:3:1;18021:60:0;;::::2;17104:989;16223:1870;18105:45;::::0;;;;18128:10:::2;18105:45;::::0;::::2;25134:34:1::0;25083:42;25204:15;;25184:18;;;25177:43;11580:42:0::2;::::0;18105:22:::2;::::0;25046:18:1;;18105:45:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;14684:3474;;;14409:3749:::0;;;;;:::o;18195:1135::-;13398:9;13411:10;13398:23;13390:32;;;;;;13463:6:::1;::::0;::::1;::::0;::::1;;;13462:7;13454:24;;;;;;;;;;;5467:2:1::0;5449:21;;;5506:1;5486:18;;;5479:29;5544:6;5539:2;5524:18;;5517:34;5583:2;5568:18;;5265:327;13454:24:0::1;18336:51:::2;::::0;;;;18356:10:::2;18336:51;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;18300:33:0::2;::::0;11580:42:::2;::::0;18336:19:::2;::::0;5904:18:1;;18336:51:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18438:55;::::0;;;;18462:10:::2;18438:55;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;18300:87:0;;-1:-1:-1;18398:37:0::2;::::0;11580:42:::2;::::0;18438:23:::2;::::0;5904:18:1;;18438:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18398:95;;11580:42;18558:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18514:41;::::0;;;;18544:10:::2;18514:41;::::0;::::2;20239:74:1::0;11580:42:0::2;::::0;18514:29:::2;::::0;20212:18:1;;18514:41:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;18506:122;;;::::0;::::2;::::0;;20526:2:1;18506:122:0::2;::::0;::::2;20508:21:1::0;20565:2;20545:18;;;20538:30;20604:20;20584:18;;;20577:48;20642:18;;18506:122:0::2;20324:342:1::0;18506:122:0::2;18648:1;:19;;;18647:20;18639:53;;;::::0;::::2;::::0;;26650:2:1;18639:53:0::2;::::0;::::2;26632:21:1::0;26689:2;26669:18;;;26662:30;26728:22;26708:18;;;26701:50;26768:18;;18639:53:0::2;26448:344:1::0;18639:53:0::2;18724:1;18711;:10;;;:14;18703:35;;;::::0;::::2;::::0;;26999:2:1;18703:35:0::2;::::0;::::2;26981:21:1::0;27038:1;27018:18;;;27011:29;27076:10;27056:18;;;27049:38;27104:18;;18703:35:0::2;26797:331:1::0;18703:35:0::2;18751:12;11580:42;18766:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;;18816:10;18842:44;11684:4;18935:1;:15;;;18922:1;:10;;;18902:1;:17;;;:30;;;;:::i;:::-;:48;;;;:::i;:::-;:60;;;;:::i;:::-;18766:207;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18751:222;;11580:42;18986:32;;;19033:184;;;;;;;;19089:81;;;;;;;;19114:10;19089:81;;;;;;19126:10;19089:81;;;;19138:6;19089:81;;;;19146:1;19089:81;;;;19149:1;19089:81;;;;19152:1;19089:81;;;;19155:5;19089:81;;;;;;19162:1;19089:81;;;;19165:1;19089:81;;;;19168:1;19089:81;;::::0;19033:184:::2;;;;19189:1;19033:184;;;;19192:1;19033:184;;;;19195:1;19033:184;;;;19198:1;19033:184;;;;19201:1;19033:184;;::::0;19219:7:::2;19228:5;18986:258;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;19262:60:0::2;::::0;;19283:10:::2;24669:74:1::0;;24774:2;24759:18;;24752:34;;;19307:5:0::2;24802:18:1::0;;;24795:50;;;;24876:2;24861:18;;24854:34;;;19262:60:0::2;::::0;-1:-1:-1;24656:3:1;24641:19;;-1:-1:-1;19262:60:0::2;;;;;;;;18279:1051;;;18195:1135:::0;;:::o;14291:72::-;11580:42;13327:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13313:28;;:10;:28;;;13305:49;;;;;;;11677:2:1;13305:49:0;;;11659:21:1;11716:1;11696:18;;;11689:29;11754:10;11734:18;;;11727:38;11782:18;;13305:49:0;11475:331:1;13305:49:0;14335:6:::1;::::0;;::::1;;::::0;;::::1;::::0;::::1;14334:7;14325:16:::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;14348:12:::1;::::0;::::1;::::0;::::1;::::0;14353:6;::::1;::::0;;::::1;1101:14:1::0;1094:22;1076:41;;1064:2;1049:18;;936:187;13910:265:0;11580:42;13327:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13313:28;;:10;:28;;;13305:49;;;;;;;11677:2:1;13305:49:0;;;11659:21:1;11716:1;11696:18;;;11689:29;11754:10;11734:18;;;11727:38;11782:18;;13305:49:0;11475:331:1;13305:49:0;14027:1:::1;14004:20;:24;13996:44;;;::::0;::::1;::::0;;17120:2:1;13996:44:0::1;::::0;::::1;17102:21:1::0;17159:1;17139:18;;;17132:29;17197:9;17177:18;;;17170:37;17224:18;;13996:44:0::1;16918:330:1::0;13996:44:0::1;14051:19;:42:::0;;;14109:58:::1;::::0;;27624:21:1;;;27681:2;27661:18;;;27654:30;;;;27720:21;27715:2;27700:18;;27693:49;27809:4;27794:20;;27787:36;;;14109:58:0::1;::::0;27774:3:1;27759:19;14109:58:0::1;27412:417:1::0;23375:3046:0;13398:9;13411:10;13398:23;13390:32;;;;;;13463:6:::1;::::0;::::1;::::0;::::1;;;13462:7;13454:24;;;;;;;;;;;5467:2:1::0;5449:21;;;5506:1;5486:18;;;5479:29;5544:6;5539:2;5524:18;;5517:34;5583:2;5568:18;;5265:327;13454:24:0::1;23659:48:::2;::::0;;;;5961:42:1;5949:55;;23659:48:0::2;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;23623:33:0::2;::::0;11580:42:::2;::::0;23659:19:::2;::::0;5904:18:1;;23659:48:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23623:84;;23740:1;23728:8;:13;;:30;;;;;23757:1;23745:8;:13;;23728:30;23720:57;;;::::0;::::2;::::0;;28036:2:1;23720:57:0::2;::::0;::::2;28018:21:1::0;28075:2;28055:18;;;28048:30;28114:16;28094:18;;;28087:44;28148:18;;23720:57:0::2;27834:338:1::0;23720:57:0::2;23841:10;11580:42;23796:13;23810:10;23819:1;23810:8:::0;:10:::2;:::i;:::-;23796:25;;;;;;;;;;;;;160::1::0;;148:2;133:18;;14:177;23796:25:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;23830:6;23796:41;;;;;;;;;;;;;160:25:1::0;;148:2;133:18;;14:177;23796:41:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;;23788:74;;;::::0;::::2;::::0;;28379:2:1;23788:74:0::2;::::0;::::2;28361:21:1::0;28418:1;28398:18;;;28391:29;28456:8;28436:18;;;28429:36;28482:18;;23788:74:0::2;28177:329:1::0;23788:74:0::2;11580:42;23931:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23897:31;::::0;;;;::::2;::::0;::::2;160:25:1::0;;;11580:42:0::2;::::0;23897:23:::2;::::0;133:18:1;;23897:31:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;;;:::i;:::-;23881:12;:79;;23873:121;;;::::0;::::2;::::0;;28713:2:1;23873:121:0::2;::::0;::::2;28695:21:1::0;28752:2;28732:18;;;28725:30;28791:18;28771;;;28764:46;28827:18;;23873:121:0::2;28511:340:1::0;23873:121:0::2;24037:34;24023:10;:48;;;;;;;;:::i;:::-;;:136;;24158:1;24145;:10;;;:14;24023:136;;;24074:55;::::0;;;;5961:42:1;5949:55;;24074::0::2;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;11580:42:0::2;::::0;24074:26:::2;::::0;5904:18:1;;24074:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24015:157;;;::::0;::::2;::::0;;26999:2:1;24015:157:0::2;::::0;::::2;26981:21:1::0;27038:1;27018:18;;;27011:29;27076:10;27056:18;;;27049:38;27104:18;;24015:157:0::2;26797:331:1::0;24015:157:0::2;24205:32;24191:10;:46;;;;;;;;:::i;:::-;;;:58;;;;24248:1;24241;:4;;;:8;24191:58;24183:76;;;::::0;::::2;::::0;;29058:2:1;24183:76:0::2;::::0;::::2;29040:21:1::0;29097:1;29077:18;;;29070:29;29135:7;29115:18;;;29108:35;29160:18;;24183:76:0::2;28856:328:1::0;24183:76:0::2;24292:33;24278:10;:47;;;;;;;;:::i;:::-;;;:60;;;-1:-1:-1::0;24329:4:0::2;::::0;::::2;::::0;:9;24278:60:::2;24270:79;;;::::0;::::2;::::0;;29391:2:1;24270:79:0::2;::::0;::::2;29373:21:1::0;29430:1;29410:18;;;29403:29;29468:8;29448:18;;;29441:36;29494:18;;24270:79:0::2;29189:329:1::0;24270:79:0::2;24362:32;11580:42;24397:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24362:61;;24434:35;24472:10;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24434:61;;24508:62;24573:103;;;;;;;;24626:7;24573:103;;;;;;24635:10;24573:103;;;;24647:6;24573:103;;;;24655:10;24573:103;;;;;;;;:::i;:::-;::::0;;24693:41:::2;::::0;;;;24508:168;;-1:-1:-1;24693:23:0::2;::::0;::::2;::::0;::::2;::::0;:41:::2;::::0;24508:168;;24693:41:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24692:42;:86;;;-1:-1:-1::0;24738:40:0::2;::::0;;;;:22:::2;::::0;::::2;::::0;::::2;::::0;:40:::2;::::0;24761:16;;24738:40:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24689:1725;;;24808:20;24862:34;24848:10;:48;;;;;;;;:::i;:::-;;24845:479;;;24961:55;::::0;;;;5961:42:1;5949:55;;24961::0::2;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;24916:42:0::2;::::0;11580::::2;::::0;24961:26:::2;::::0;5904:18:1;;24961:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24916:100;;25070:1;:10;;;25053:1;:14;;;:27;;;;:::i;:::-;25035:45;;24897:199;24845:479;;;25159:52;::::0;;;;5961:42:1;5949:55;;25159:52:0::2;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;25119:37:0::2;::::0;11580:42:::2;::::0;25159:23:::2;::::0;5904:18:1;;25159:52:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25119:92;;11684:4;25286:1;:10;;;25268:1;:15;;;25248:1;:17;;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:60;;;;:::i;:::-;25230:78;;25100:224;24845:479;25340:74;::::0;;;;25374:10:::2;25340:74;::::0;::::2;5931::1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;11580:42:0::2;::::0;25340:33:::2;::::0;5904:18:1;;25340:74:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;25431:12:0::2;::::0;-1:-1:-1;;;25446:19:0::2;::::0;::::2;;25484:10:::0;25528:34:::2;25514:10;:48;;;;;;;;:::i;:::-;;:183;;25654:43;25514:183;;;25587:42;25514:183;25716:15;25446:300;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25431:315;;11580:42;25763:29;;;25811:240;;;;;;;;25868:10;25811:240;;;;;;25901:6;25811:240;;;;25930:7;25811:240;;;;;;25960:10;25811:240;;;;25993:6;25811:240;;;;26022:10;25811:240;;;;;;;;:::i;:::-;;;::::0;26053:7:::2;25763:312;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;26092:63:0::2;::::0;;;;:33:::2;::::0;::::2;::::0;-1:-1:-1;26092:33:0::2;::::0;-1:-1:-1;26092:63:0::2;::::0;26126:16;;26144:10:::2;::::0;26092:63:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;26175:59:0::2;::::0;;26193:10:::2;31801:34:1::0;;31750:42;31871:15;;31866:2;31851:18;;31844:43;31903:18;;;31896:34;;;31961:2;31946:18;;31939:34;;;26175:59:0::2;::::0;-1:-1:-1;31727:3:1;31712:19;;-1:-1:-1;26175:59:0::2;;;;;;;24779:1469;;24689:1725;;;26267:65;::::0;;;;:35:::2;::::0;::::2;::::0;::::2;::::0;:65:::2;::::0;26303:16;;26321:10:::2;::::0;26267:65:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;26352:50:0::2;::::0;;26370:10:::2;15043:34:1::0;;14992:42;15113:15;;15108:2;15093:18;;15086:43;15145:18;;;15138:34;;;26352:50:0::2;::::0;-1:-1:-1;14970:2:1;14955:18;;-1:-1:-1;26352:50:0::2;;;;;;;24689:1725;23610:2811;;;;23375:3046:::0;;;;;;:::o;20271:610::-;13398:9;13411:10;13398:23;13390:32;;;;;;13463:6:::1;::::0;::::1;::::0;::::1;;;13462:7;13454:24;;;;;;;;;;;5467:2:1::0;5449:21;;;5506:1;5486:18;;;5479:29;5544:6;5539:2;5524:18;;5517:34;5583:2;5568:18;;5265:327;13454:24:0::1;20380:58:::2;::::0;;;;20407:10:::2;20380:58;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;11580:42:0::2;::::0;20380:26:::2;::::0;5904:18:1;;20380:58:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20372:79;;;::::0;::::2;::::0;;6691:2:1;20372:79:0::2;::::0;::::2;6673:21:1::0;6730:1;6710:18;;;6703:29;6768:10;6748:18;;;6741:38;6796:18;;20372:79:0::2;6489:331:1::0;20372:79:0::2;20509:58;::::0;;;;20536:10:::2;20509:58;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;20464:42:0::2;::::0;11580::::2;::::0;20509:26:::2;::::0;5904:18:1;;20509:58:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20464:103;;20612:19;;20601:1;:7;;;20586:12;:22;;;;:::i;:::-;:45;;20578:72;;;::::0;::::2;::::0;;8642:2:1;20578:72:0::2;::::0;::::2;8624:21:1::0;8681:2;8661:18;;;8654:30;8720:16;8700:18;;;8693:44;8754:18;;20578:72:0::2;8440:338:1::0;20578:72:0::2;20715:14;::::0;::::2;::::0;20663:67:::2;::::0;;;;11580:42:::2;20663:67;::::0;::::2;15043:34:1::0;;;20703:10:0::2;15093:18:1::0;;;15086:43;15145:18;;;15138:34;;;;20663:20:0::2;::::0;14955:18:1;;20663:67:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;20741:65:0::2;::::0;;;;20775:10:::2;20741:65;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;11580:42:0::2;::::0;-1:-1:-1;20741:33:0::2;::::0;-1:-1:-1;5904:18:1;;20741:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;20824:49:0::2;::::0;;20842:10:::2;5931:74:1::0;;6036:2;6021:18;;6014:34;;;6064:18;;;6057:34;;;20824:49:0::2;::::0;-1:-1:-1;5919:2:1;5904:18;;-1:-1:-1;20824:49:0::2;5729:368:1::0;21509:1830:0;13398:9;13411:10;13398:23;13390:32;;;;;;13463:6:::1;::::0;::::1;::::0;::::1;;;13462:7;13454:24;;;;;;;;;;;5467:2:1::0;5449:21;;;5506:1;5486:18;;;5479:29;5544:6;5539:2;5524:18;;5517:34;5583:2;5568:18;;5265:327;13454:24:0::1;21647:51:::2;::::0;;;;21667:10:::2;21647:51;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;21611:33:0::2;::::0;11580:42:::2;::::0;21647:19:::2;::::0;5904:18:1;;21647:51:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21749:55;::::0;;;;21773:10:::2;21749:55;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;21611:87:0;;-1:-1:-1;21709:37:0::2;::::0;11580:42:::2;::::0;21749:23:::2;::::0;5904:18:1;;21749:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21709:95;;21838:1;21825;:10;;;:14;21817:35;;;::::0;::::2;::::0;;26999:2:1;21817:35:0::2;::::0;::::2;26981:21:1::0;27038:1;27018:18;;;27011:29;27076:10;27056:18;;;27049:38;27104:18;;21817:35:0::2;26797:331:1::0;21817:35:0::2;21865:14;21913:1;:10;;;21907:3;11720:2;21882:1;:11;;;:22;;;;:::i;:::-;:28;;;;:::i;:::-;:41;;;;:::i;:::-;21865:58:::0;-1:-1:-1;21942:11:0;;;:94:::2;;;21958:1;:5;;;:77;;22026:9;22012:1;:11;;;:23;;;;:::i;:::-;22002:6;:33;;21958:77;;;21990:9;21976:1;:11;;;:23;;;;:::i;:::-;21966:6;:33;;21958:77;21934:131;;;::::0;::::2;::::0;;32186:2:1;21934:131:0::2;::::0;::::2;32168:21:1::0;32225:2;32205:18;;;32198:30;32264:12;32244:18;;;32237:40;32294:18;;21934:131:0::2;31984:334:1::0;21934:131:0::2;22128:19;::::0;22109:15:::2;::::0;::::2;::::0;22094:30:::2;::::0;:12:::2;:30;:::i;:::-;:53;;22086:80;;;::::0;::::2;::::0;;8642:2:1;22086:80:0::2;::::0;::::2;8624:21:1::0;8681:2;8661:18;;;8654:30;8720:16;8700:18;;;8693:44;8754:18;;22086:80:0::2;8440:338:1::0;22086:80:0::2;22179:32;11580:42;22214:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22179:61:::0;-1:-1:-1;22256:11:0;;;:73:::2;;;22272:10;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;22318:10;22272:57;;;;;;;;;;;;;160:25:1::0;;148:2;133:18;;14:177;22272:57:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22271:58;22256:73;22253:1079;;;22347:57;::::0;;;;22365:10:::2;22347:57;::::0;::::2;32554:74:1::0;32644:18;;;32637:34;;;32687:18;;;32680:34;;;32730:18;;;32723:34;;;11580:42:0::2;::::0;22347:17:::2;::::0;32526:19:1;;22347:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;22424:49:0::2;::::0;;22434:10:::2;32554:74:1::0;;32659:2;32644:18;;32637:34;;;32687:18;;;32680:34;;;32745:2;32730:18;;32723:34;;;22424:49:0::2;::::0;-1:-1:-1;32541:3:1;32526:19;;-1:-1:-1;22424:49:0::2;;;;;;;22253:1079;;;22506:14;22561:1;:10;;;22543:1;:15;;;22523:1;:17;;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;22506:65;;11580:42;22609:25;;;22653:1;:11;;;22696:10;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22684:38;::::0;:9;:38:::2;:::i;:::-;22609:176;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;32987:25:1::0;;;;33028:18;;;33021:34;22741:5:0::2;33071:18:1::0;;;33064:50;;;33130:18;;;33123:50;32959:19;;22609:176:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22588:1;:17;;:197;;;;;;;:::i;:::-;::::0;;-1:-1:-1;22802:23:0::2;::::0;;;;11580:42:::2;::::0;22802:20:::2;::::0;:23:::2;::::0;22823:1;;22802:23:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;22842:12;22857:10;:19;;;22895:10;22924:41;11684:4;22985:9;:21;;;;:::i;:::-;22857:164;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23114:91;::::0;;::::2;::::0;;::::2;::::0;;23146:10:::2;23114:91:::0;;::::2;::::0;::::2;::::0;;;;;;;;;23178:11:::2;::::0;;::::2;::::0;23114:91;;;;;;23191:5;;::::2;::::0;23114:91:::2;;::::0;;;;;;;;;;;;23038:182;;;;;::::2;::::0;::::2;33655:25:1::0;;;33720:13;;23038:30:0::2;33716:62:1::0;;;33696:18;;;33689:90;33815:22;;33795:18;;;33788:50;33874:22;;33854:18;;;33847:50;33934:22;;33913:19;;;33906:51;34008:23;;34001:31;33994:39;33973:19;;;33966:68;34071:23;;34050:19;;;34043:52;22842:179:0;;-1:-1:-1;23038:30:0;::::2;::::0;::::2;::::0;33627:19:1;;23038:182:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;23254:66:0::2;::::0;;23272:10:::2;34365:74:1::0;;34470:2;34455:18;;34448:34;;;34498:18;;;34491:34;;;34556:2;34541:18;;34534:34;;;34599:3;34584:19;;34577:35;;;23254:66:0::2;::::0;-1:-1:-1;34352:3:1;34337:19;;-1:-1:-1;23254:66:0::2;;;;;;;22491:841;;22253:1079;21598:1741;;;;21509:1830:::0;;;:::o;13691:213::-;11580:42;13327:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13313:28;;:10;:28;;;13305:49;;;;;;;11677:2:1;13305:49:0;;;11659:21:1;11716:1;11696:18;;;11689:29;11754:10;11734:18;;;11727:38;11782:18;;13305:49:0;11475:331:1;13305:49:0;13782:1:::1;13772:7;:11;13764:31;;;::::0;::::1;::::0;;17120:2:1;13764:31:0::1;::::0;::::1;17102:21:1::0;17159:1;17139:18;;;17132:29;17197:9;17177:18;;;17170:37;17224:18;;13764:31:0::1;16918:330:1::0;13764:31:0::1;13806:19;:29:::0;;;13851:45:::1;::::0;;34835:21:1;;;34892:2;34872:18;;;34865:30;;;;34931:21;34926:2;34911:18;;34904:49;35020:4;35005:20;;34998:36;;;13851:45:0::1;::::0;34985:3:1;34970:19;13851:45:0::1;34623:417:1::0;20924:579:0;13398:9;13411:10;13398:23;13390:32;;;;;;13463:6:::1;::::0;::::1;::::0;::::1;;;13462:7;13454:24;;;;;;;;;;;5467:2:1::0;5449:21;;;5506:1;5486:18;;;5479:29;5544:6;5539:2;5524:18;;5517:34;5583:2;5568:18;;5265:327;13454:24:0::1;21062:51:::2;::::0;;;;21082:10:::2;21062:51;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;21026:33:0::2;::::0;11580:42:::2;::::0;21062:19:::2;::::0;5904:18:1;;21062:51:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21164:55;::::0;;;;21188:10:::2;21164:55;::::0;::::2;5931:74:1::0;6021:18;;;6014:34;;;6064:18;;;6057:34;;;21026:87:0;;-1:-1:-1;21124:37:0::2;::::0;11580:42:::2;::::0;21164:23:::2;::::0;5904:18:1;;21164:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21124:95;;21253:1;21240;:10;;;:14;21232:35;;;::::0;::::2;::::0;;26999:2:1;21232:35:0::2;::::0;::::2;26981:21:1::0;27038:1;27018:18;;;27011:29;27076:10;27056:18;;;27049:38;27104:18;;21232:35:0::2;26797:331:1::0;21232:35:0::2;21320:19;::::0;21301:15:::2;::::0;::::2;::::0;21286:30:::2;::::0;:12:::2;:30;:::i;:::-;:53;;21278:80;;;::::0;::::2;::::0;;8642:2:1;21278:80:0::2;::::0;::::2;8624:21:1::0;8681:2;8661:18;;;8654:30;8720:16;8700:18;;;8693:44;8754:18;;21278:80:0::2;8440:338:1::0;21278:80:0::2;21371:57;::::0;;;;21389:10:::2;21371:57;::::0;::::2;32554:74:1::0;32644:18;;;32637:34;;;32687:18;;;32680:34;;;32730:18;;;32723:34;;;11580:42:0::2;::::0;21371:17:::2;::::0;32526:19:1;;21371:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;21446:49:0::2;::::0;;21456:10:::2;32554:74:1::0;;32659:2;32644:18;;32637:34;;;32687:18;;;32680:34;;;32745:2;32730:18;;32723:34;;;21446:49:0::2;::::0;-1:-1:-1;32541:3:1;32526:19;;-1:-1:-1;21446:49:0::2;32323:440:1::0;196:454;291:6;299;307;315;323;376:3;364:9;355:7;351:23;347:33;344:53;;;393:1;390;383:12;344:53;-1:-1:-1;;416:23:1;;;486:2;471:18;;458:32;;-1:-1:-1;537:2:1;522:18;;509:32;;588:2;573:18;;560:32;;-1:-1:-1;639:3:1;624:19;611:33;;-1:-1:-1;196:454:1;-1:-1:-1;196:454:1:o;655:180::-;714:6;767:2;755:9;746:7;742:23;738:32;735:52;;;783:1;780;773:12;735:52;-1:-1:-1;806:23:1;;655:180;-1:-1:-1;655:180:1:o;1128:404::-;1195:2;1189:9;1237:6;1225:19;;1274:18;1259:34;;1295:22;;;1256:62;1253:242;;;1351:77;1348:1;1341:88;1452:4;1449:1;1442:15;1480:4;1477:1;1470:15;1253:242;1511:2;1504:22;1128:404;:::o;1537:406::-;1609:2;1603:9;1651:3;1639:16;;1685:18;1670:34;;1706:22;;;1667:62;1664:242;;;1762:77;1759:1;1752:88;1863:4;1860:1;1853:15;1891:4;1888:1;1881:15;1948:154;2034:42;2027:5;2023:54;2016:5;2013:65;2003:93;;2092:1;2089;2082:12;2003:93;1948:154;:::o;2107:134::-;2175:20;;2204:31;2175:20;2204:31;:::i;:::-;2107:134;;;:::o;2246:118::-;2332:5;2325:13;2318:21;2311:5;2308:32;2298:60;;2354:1;2351;2344:12;2369:128;2434:20;;2463:28;2434:20;2463:28;:::i;2502:159::-;2586:20;;2635:1;2625:12;;2615:40;;2651:1;2648;2641:12;2666:1329;2806:6;2814;2822;2830;2838;2882:9;2873:7;2869:23;2912:3;2908:2;2904:12;2901:32;;;2929:1;2926;2919:12;2901:32;2952:6;2978:2;2974;2970:11;2967:31;;;2994:1;2991;2984:12;2967:31;3020:17;;:::i;:::-;3007:30;;3060:29;3079:9;3060:29;:::i;:::-;3053:5;3046:44;3150:2;3139:9;3135:18;3122:32;3117:2;3110:5;3106:14;3099:56;3215:2;3204:9;3200:18;3187:32;3182:2;3175:5;3171:14;3164:56;3280:2;3269:9;3265:18;3252:32;3247:2;3240:5;3236:14;3229:56;3346:3;3335:9;3331:19;3318:33;3312:3;3305:5;3301:15;3294:58;3413:3;3402:9;3398:19;3385:33;3379:3;3372:5;3368:15;3361:58;3452:36;3483:3;3472:9;3468:19;3452:36;:::i;:::-;3446:3;3439:5;3435:15;3428:61;3550:3;3539:9;3535:19;3522:33;3516:3;3509:5;3505:15;3498:58;3575:3;3638:2;3627:9;3623:18;3610:32;3605:2;3598:5;3594:14;3587:56;;3662:3;3725:2;3714:9;3710:18;3697:32;3692:2;3685:5;3681:14;3674:56;;3749:5;3739:15;;3773:54;3823:2;3812:9;3808:18;3773:54;:::i;:::-;3763:64;;;;3874:3;3863:9;3859:19;3846:33;3836:43;;3926:3;3915:9;3911:19;3898:33;3888:43;;3950:39;3984:3;3973:9;3969:19;3950:39;:::i;:::-;3940:49;;2666:1329;;;;;;;;:::o;4000:248::-;4068:6;4076;4129:2;4117:9;4108:7;4104:23;4100:32;4097:52;;;4145:1;4142;4135:12;4097:52;-1:-1:-1;;4168:23:1;;;4238:2;4223:18;;;4210:32;;-1:-1:-1;4000:248:1:o;4253:686::-;4371:6;4379;4387;4395;4403;4411;4464:3;4452:9;4443:7;4439:23;4435:33;4432:53;;;4481:1;4478;4471:12;4432:53;4520:9;4507:23;4559:1;4552:5;4549:12;4539:40;;4575:1;4572;4565:12;4539:40;4598:5;-1:-1:-1;4655:2:1;4640:18;;4627:32;4668:33;4627:32;4668:33;:::i;:::-;4253:686;;4720:7;;-1:-1:-1;;;;4774:2:1;4759:18;;4746:32;;4825:2;4810:18;;4797:32;;4876:3;4861:19;;4848:33;;-1:-1:-1;4928:3:1;4913:19;;;4900:33;;-1:-1:-1;4253:686:1:o;4944:316::-;5021:6;5029;5037;5090:2;5078:9;5069:7;5065:23;5061:32;5058:52;;;5106:1;5103;5096:12;5058:52;-1:-1:-1;;5129:23:1;;;5199:2;5184:18;;5171:32;;-1:-1:-1;5250:2:1;5235:18;;;5222:32;;4944:316;-1:-1:-1;4944:316:1:o;6102:132::-;6178:13;;6200:28;6178:13;6200:28;:::i;6239:245::-;6306:6;6359:2;6347:9;6338:7;6334:23;6330:32;6327:52;;;6375:1;6372;6365:12;6327:52;6407:9;6401:16;6426:28;6448:5;6426:28;:::i;:::-;6473:5;6239:245;-1:-1:-1;;;6239:245:1:o;6825:138::-;6904:13;;6926:31;6904:13;6926:31;:::i;6968:1148::-;7069:6;7122:3;7110:9;7101:7;7097:23;7093:33;7090:53;;;7139:1;7136;7129:12;7090:53;7165:22;;:::i;:::-;7210:40;7240:9;7210:40;:::i;:::-;7203:5;7196:55;7304:2;7293:9;7289:18;7283:25;7278:2;7271:5;7267:14;7260:49;7362:2;7351:9;7347:18;7341:25;7336:2;7329:5;7325:14;7318:49;7420:2;7409:9;7405:18;7399:25;7394:2;7387:5;7383:14;7376:49;7479:3;7468:9;7464:19;7458:26;7452:3;7445:5;7441:15;7434:51;7518:47;7560:3;7549:9;7545:19;7518:47;:::i;:::-;7512:3;7501:15;;7494:72;7620:3;7605:19;;;7599:26;7582:15;;;7575:51;7680:3;7665:19;;;7659:26;7642:15;;;7635:51;7705:3;7746:18;;;7740:25;7724:14;;;7717:49;7785:3;7826:18;;;7820:25;7804:14;;;7797:49;7865:3;7906:18;;;7900:25;7884:14;;;7877:49;7945:3;7986:18;;;7980:25;7964:14;;;7957:49;8025:3;8066:18;;;8060:25;8044:14;;;8037:49;;;;-1:-1:-1;7505:5:1;6968:1148;-1:-1:-1;6968:1148:1:o;8121:184::-;8173:77;8170:1;8163:88;8270:4;8267:1;8260:15;8294:4;8291:1;8284:15;8310:125;8350:4;8378:1;8375;8372:8;8369:34;;;8383:18;;:::i;:::-;-1:-1:-1;8420:9:1;;8310:125::o;9455:1170::-;9683:13;;5674:42;5663:54;5651:67;;9651:3;9636:19;;9764:4;9756:6;9752:17;9746:24;9739:4;9728:9;9724:20;9717:54;9827:4;9819:6;9815:17;9809:24;9802:4;9791:9;9787:20;9780:54;9890:4;9882:6;9878:17;9872:24;9865:4;9854:9;9850:20;9843:54;9953:4;9945:6;9941:17;9935:24;9928:4;9917:9;9913:20;9906:54;10007:4;9999:6;9995:17;9989:24;10022:51;10067:4;10056:9;10052:20;10038:12;910:13;903:21;891:34;;840:91;10022:51;-1:-1:-1;10129:4:1;10117:17;;;10111:24;10089:20;;;10082:54;10192:4;10180:17;;;10174:24;10152:20;;;10145:54;10218:6;10266:15;;;10260:22;10240:18;;;10233:50;10302:6;10350:15;;;10344:22;10324:18;;;10317:50;10386:6;10434:15;;;10428:22;10408:18;;;10401:50;10470:6;10518:15;;;10512:22;10492:18;;;10485:50;10554:6;10602:15;;;10596:22;10576:18;;;;10569:50;;;;9455:1170;:::o;11219:251::-;11289:6;11342:2;11330:9;11321:7;11317:23;11313:32;11310:52;;;11358:1;11355;11348:12;11310:52;11390:9;11384:16;11409:31;11434:5;11409:31;:::i;11811:835::-;11874:5;11922:6;11910:9;11905:3;11901:19;11897:32;11894:52;;;11942:1;11939;11932:12;11894:52;11964:17;;:::i;:::-;11955:26;;12004:40;12034:9;12004:40;:::i;:::-;11997:5;11990:55;12098:2;12087:9;12083:18;12077:25;12072:2;12065:5;12061:14;12054:49;12156:2;12145:9;12141:18;12135:25;12130:2;12123:5;12119:14;12112:49;12214:2;12203:9;12199:18;12193:25;12188:2;12181:5;12177:14;12170:49;12273:3;12262:9;12258:19;12252:26;12246:3;12239:5;12235:15;12228:51;12333:3;12322:9;12318:19;12312:26;12306:3;12299:5;12295:15;12288:51;12372:47;12414:3;12403:9;12399:19;12372:47;:::i;:::-;12366:3;12359:5;12355:15;12348:72;12474:3;12463:9;12459:19;12453:26;12447:3;12440:5;12436:15;12429:51;12499:3;12555:2;12544:9;12540:18;12534:25;12529:2;12522:5;12518:14;12511:49;;12579:3;12635:2;12624:9;12620:18;12614:25;12609:2;12602:5;12598:14;12591:49;;11811:835;;;;:::o;12651:955::-;12756:6;12809:3;12797:9;12788:7;12784:23;12780:33;12777:53;;;12826:1;12823;12816:12;12777:53;12859:2;12853:9;12901:4;12893:6;12889:17;12972:6;12960:10;12957:22;12936:18;12924:10;12921:34;12918:62;12915:242;;;13013:77;13010:1;13003:88;13114:4;13111:1;13104:15;13142:4;13139:1;13132:15;12915:242;13173:2;13166:22;13212:54;13258:7;13247:9;13212:54;:::i;:::-;13197:70;;13323:3;13308:19;;13302:26;13295:4;13283:17;;13276:53;13383:3;13368:19;;13362:26;13357:2;13345:15;;13338:51;13445:3;13430:19;;13424:26;13417:4;13405:17;;13398:53;13507:3;13492:19;;13486:26;13479:4;13467:17;;13460:53;13569:3;13554:19;;;13548:26;13541:4;13529:17;;13522:53;-1:-1:-1;13204:6:1;12651:955;-1:-1:-1;12651:955:1:o;13611:128::-;13651:3;13682:1;13678:6;13675:1;13672:13;13669:39;;;13688:18;;:::i;:::-;-1:-1:-1;13724:9:1;;13611:128::o;15446:698::-;15524:12;;5674:42;5663:54;5651:67;;15591:4;15584:5;15580:16;15574:23;15567:4;15562:3;15558:14;15551:47;15647:4;15640:5;15636:16;15630:23;15623:4;15618:3;15614:14;15607:47;15703:4;15696:5;15692:16;15686:23;15679:4;15674:3;15670:14;15663:47;15759:4;15752:5;15748:16;15742:23;15735:4;15730:3;15726:14;15719:47;15815:4;15808:5;15804:16;15798:23;15791:4;15786:3;15782:14;15775:47;15868:4;15861:5;15857:16;15851:23;15883:45;15922:4;15917:3;15913:14;15899:12;910:13;903:21;891:34;;840:91;15883:45;-1:-1:-1;15977:4:1;15966:16;;;15960:23;15944:14;;;15937:47;16003:6;16045:14;;;16039:21;16025:12;;;16018:43;16080:6;16122:14;;;16116:21;16102:12;;16095:43;15446:698::o;16149:410::-;16221:42;16259:3;16251:5;16245:12;16221:42;:::i;:::-;16314:4;16303:16;;16297:23;16288:6;16279:16;;16272:49;16372:4;16361:16;;16355:23;16346:6;16337:16;;16330:49;16430:4;16419:16;;16413:23;16404:6;16395:16;;16388:49;16488:4;16477:16;;16471:23;16462:6;16453:16;;16446:49;16546:4;16535:16;16529:23;16520:6;16511:16;;;16504:49;16149:410::o;16564:349::-;16809:25;;;16796:3;16781:19;;16843:64;16903:2;16888:18;;16880:6;16843:64;:::i;17917:426::-;18046:3;18084:6;18078:13;18109:1;18119:129;18133:6;18130:1;18127:13;18119:129;;;18231:4;18215:14;;;18211:25;;18205:32;18192:11;;;18185:53;18148:12;18119:129;;;18266:6;18263:1;18260:13;18257:48;;;18301:1;18292:6;18287:3;18283:16;18276:27;18257:48;-1:-1:-1;18321:16:1;;;;;17917:426;-1:-1:-1;;17917:426:1:o;19254:184::-;19324:6;19377:2;19365:9;19356:7;19352:23;19348:32;19345:52;;;19393:1;19390;19383:12;19345:52;-1:-1:-1;19416:16:1;;19254:184;-1:-1:-1;19254:184:1:o;21013:228::-;21053:7;21179:1;21111:66;21107:74;21104:1;21101:81;21096:1;21089:9;21082:17;21078:105;21075:131;;;21186:18;;:::i;:::-;-1:-1:-1;21226:9:1;;21013:228::o;22619:184::-;22671:77;22668:1;22661:88;22768:4;22765:1;22758:15;22792:4;22789:1;22782:15;23094:517;23376:42;23364:55;;23346:74;;23451:2;23436:18;;23429:34;;;23494:2;23479:18;;23472:34;;;23333:3;23318:19;;23536:1;23525:13;;23515:47;;23542:18;;:::i;:::-;23598:6;23593:2;23582:9;23578:18;23571:34;23094:517;;;;;;;:::o;23616:386::-;23829:25;;;23817:2;23802:18;;23884:1;23873:13;;23863:47;;23890:18;;:::i;:::-;23941:2;23926:18;;23919:34;;;;23984:2;23969:18;23962:34;23616:386;;-1:-1:-1;23616:386:1:o;24007:432::-;24261:3;24246:19;;24274:55;24250:9;24311:6;24274:55;:::i;:::-;24366:6;24360:3;24349:9;24345:19;24338:35;24424:6;24417:14;24410:22;24404:3;24393:9;24389:19;24382:51;24007:432;;;;;;:::o;25231:245::-;25323:6;25376:3;25364:9;25355:7;25351:23;25347:33;25344:53;;;25393:1;25390;25383:12;25344:53;25416:54;25462:7;25451:9;25416:54;:::i;25481:962::-;25577:6;25630:3;25618:9;25609:7;25605:23;25601:33;25598:53;;;25647:1;25644;25637:12;25598:53;25680:2;25674:9;25722:3;25714:6;25710:16;25792:6;25780:10;25777:22;25756:18;25744:10;25741:34;25738:62;25735:242;;;25833:77;25830:1;25823:88;25934:4;25931:1;25924:15;25962:4;25959:1;25952:15;25735:242;25997:10;25993:2;25986:22;;26038:9;26032:16;26024:6;26017:32;26103:2;26092:9;26088:18;26082:25;26077:2;26069:6;26065:15;26058:50;26162:2;26151:9;26147:18;26141:25;26136:2;26128:6;26124:15;26117:50;26221:2;26210:9;26206:18;26200:25;26195:2;26187:6;26183:15;26176:50;26281:3;26270:9;26266:19;26260:26;26254:3;26246:6;26242:16;26235:52;26330:3;26319:9;26315:19;26309:26;26344:28;26366:5;26344:28;:::i;:::-;26400:3;26388:16;;26381:31;26392:6;25481:962;-1:-1:-1;;;25481:962:1:o;27133:274::-;27173:1;27199;27189:189;;27234:77;27231:1;27224:88;27335:4;27332:1;27325:15;27363:4;27360:1;27353:15;27189:189;-1:-1:-1;27392:9:1;;27133:274::o;29523:141::-;29605:1;29598:5;29595:12;29585:46;;29611:18;;:::i;:::-;29640;;29523:141::o;29669:379::-;29769:42;29761:5;29755:12;29751:61;29746:3;29739:74;29862:4;29855:5;29851:16;29845:23;29838:4;29833:3;29829:14;29822:47;29918:4;29911:5;29907:16;29901:23;29894:4;29889:3;29885:14;29878:47;29971:4;29964:5;29960:16;29954:23;29986:56;30036:4;30031:3;30027:14;30013:12;29986:56;:::i;:::-;;29669:379;;:::o;30053:272::-;30253:3;30238:19;;30266:53;30242:9;30301:6;30266:53;:::i;:::-;30053:272;;;;:::o;30330:776::-;30514:4;30556:3;30545:9;30541:19;30533:27;;30579:42;30667:2;30658:6;30652:13;30648:22;30637:9;30630:41;30727:4;30719:6;30715:17;30709:24;30702:4;30691:9;30687:20;30680:54;30802:2;30794:4;30786:6;30782:17;30776:24;30772:33;30765:4;30754:9;30750:20;30743:63;;30862:4;30854:6;30850:17;30844:24;30837:4;30826:9;30822:20;30815:54;30925:4;30917:6;30913:17;30907:24;30900:4;30889:9;30885:20;30878:54;30979:4;30971:6;30967:17;30961:24;30994:62;31050:4;31039:9;31035:20;31021:12;30994:62;:::i;:::-;;31093:6;31087:3;31076:9;31072:19;31065:35;30330:776;;;;;:::o;31111:393::-;31339:3;31324:19;;31352:53;31328:9;31387:6;31352:53;:::i;:::-;31454:42;31446:6;31442:55;31436:3;31425:9;31421:19;31414:84;31111:393;;;;;:::o;33184:239::-;33362:3;33347:19;;33375:42;33351:9;33399:6;33375:42;:::i
Swarm Source
ipfs://f70ff450197ddb1d3e72b60c659cad915acf6a45316deaf5b3e375dbb0334304
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.