Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 134,995 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 92545089 | 3 secs ago | IN | 0 BNB | 0.00000406 | ||||
| Transfer | 92544998 | 44 secs ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92544852 | 1 min ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92544174 | 6 mins ago | IN | 0 BNB | 0.00000406 | ||||
| Transfer | 92544109 | 7 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92543271 | 13 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92543203 | 14 mins ago | IN | 0 BNB | 0.00014279 | ||||
| Transfer | 92543075 | 15 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92542807 | 17 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92542581 | 18 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92542381 | 20 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92542266 | 21 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92542061 | 22 mins ago | IN | 0 BNB | 0.00000346 | ||||
| Transfer | 92541615 | 26 mins ago | IN | 0 BNB | 0.00000406 | ||||
| Transfer | 92541308 | 28 mins ago | IN | 0 BNB | 0.00000406 | ||||
| Transfer | 92541007 | 30 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92540651 | 33 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92540545 | 34 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92540464 | 34 mins ago | IN | 0 BNB | 0.00000437 | ||||
| Transfer | 92540378 | 35 mins ago | IN | 0 BNB | 0.00000406 | ||||
| Transfer | 92540278 | 36 mins ago | IN | 0 BNB | 0.00000406 | ||||
| Transfer | 92540194 | 36 mins ago | IN | 0 BNB | 0.00000406 | ||||
| Transfer | 92540127 | 37 mins ago | IN | 0 BNB | 0.00000518 | ||||
| Approve | 92539794 | 39 mins ago | IN | 0 BNB | 0.00000305 | ||||
| Transfer | 92538796 | 47 mins ago | IN | 0 BNB | 0.00000437 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 92509508 | 4 hrs ago | 0.1 BNB | ||||
| 92509414 | 4 hrs ago | 0.12 BNB | ||||
| 92509356 | 4 hrs ago | 0.1 BNB | ||||
| 92508931 | 4 hrs ago | 0.1 BNB | ||||
| 92508897 | 4 hrs ago | 0.1 BNB | ||||
| 92508855 | 4 hrs ago | 0.1 BNB | ||||
| 92508821 | 4 hrs ago | 0.1 BNB | ||||
| 92508785 | 4 hrs ago | 0.1 BNB | ||||
| 92508735 | 4 hrs ago | 0.1 BNB | ||||
| 92508700 | 4 hrs ago | 0.1 BNB | ||||
| 92508657 | 4 hrs ago | 0.1 BNB | ||||
| 92508618 | 4 hrs ago | 0.1 BNB | ||||
| 92506934 | 4 hrs ago | 0.1 BNB | ||||
| 92506882 | 4 hrs ago | 0.1 BNB | ||||
| 92506834 | 4 hrs ago | 0.1 BNB | ||||
| 92506771 | 4 hrs ago | 0.1 BNB | ||||
| 92506720 | 4 hrs ago | 0.1 BNB | ||||
| 92506682 | 4 hrs ago | 0.1 BNB | ||||
| 92506648 | 4 hrs ago | 0.1 BNB | ||||
| 92506604 | 4 hrs ago | 0.1 BNB | ||||
| 92506562 | 4 hrs ago | 0.1 BNB | ||||
| 92506516 | 4 hrs ago | 0.1 BNB | ||||
| 92506464 | 4 hrs ago | 0.1 BNB | ||||
| 92503910 | 5 hrs ago | 0.1 BNB | ||||
| 92474543 | 8 hrs ago | 0.14 BNB |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
NRWA
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/**
*Submitted for verification at BscScan.com on 2025-12-05
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
interface IERC20 {
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface ISwapRouter {
function WETH() external pure returns (address);
function factory() external pure returns (address);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
}
interface ISwapFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
function feeTo() external view returns (address);
}
interface ISwapPair {
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function totalSupply() external view returns (uint);
function kLast() external view returns (uint);
function sync() external;
}
abstract contract Ownable {
address internal _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
address msgSender = msg.sender;
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == msg.sender, "!o");
_;
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "n0");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
interface CenterContract {
struct UserInfo {
address userId;
address agent;
uint256 isValid;
uint256 isExist;
uint256 isHave;
uint256 validNum;
}
function getUserInfo(address _user) external view returns (UserInfo memory);
function setValid(address _user, uint256 _isValid) external;
function bind(address _user, address _agent) external returns (bool);
function buyToken(address _user) external payable;
function requestBind(address from, address to) external returns (bool);
function confirmBind(address from, address to) external returns (bool);
}
abstract contract AbsToken is IERC20, Ownable {
struct UserInfo {
uint256 lpAmount;
}
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
address public fundAddress;
address public centerContract;
string private _name;
string private _symbol;
uint8 private _decimals;
mapping(address => bool) public _feeWhiteList;
mapping(address => bool) public _blackList;
uint256 private _tTotal;
ISwapRouter private immutable _swapRouter;
mapping(address => bool) public _swapPairList;
bool private inSwap;
bool private swapping;
uint256 private constant MAX = ~uint256(0);
address private immutable _mainPair;
mapping(address => UserInfo) private _userInfo;
mapping(address => bool) public _swapRouters;
address private immutable _weth;
uint256 public bindAmt = 1e18;
uint256 public ackAmt = 5e17;
uint256 public baseSellFee = 300;
uint256 public minBnbAmount = 0.1 ether; // 0.1bnb
uint256 public maxBnbAmount = 0.5 ether; // 0.5bnb
uint256 public stopBurnAtAmt = 210000 ether;
uint256 public lpBurnFrequency = 3600 seconds;
uint256 public percentForLPBurn = 180;
uint256 public percentForLPReward = 180;
uint256 private immutable _tokenUnit;
uint256 public startTradeTime;
uint256 public startAddLPTime;
modifier lockTheSwap() {
inSwap = true;
_;
inSwap = false;
}
constructor(
address RouterAddress,
string memory Name,
string memory Symbol,
uint8 Decimals,
uint256 Total,
address ReceiveAddress,
address FundAddress
) {
_name = Name;
_symbol = Symbol;
_decimals = Decimals;
_swapRouter = ISwapRouter(RouterAddress);
_weth = _swapRouter.WETH();
_allowances[address(this)][address(_swapRouter)] = MAX;
_swapRouters[address(_swapRouter)] = true;
ISwapFactory swapFactory = ISwapFactory(_swapRouter.factory());
_mainPair = swapFactory.createPair(address(this), _weth);
_swapPairList[_mainPair] = true;
require(address(this) > _weth, "s");
uint256 tokenUnit = 10 ** Decimals;
uint256 total = Total * tokenUnit;
_tTotal = total;
_takeTransfer(address(0), ReceiveAddress, total);
fundAddress = FundAddress;
_feeWhiteList[FundAddress] = true;
_feeWhiteList[ReceiveAddress] = true;
_feeWhiteList[address(this)] = true;
_feeWhiteList[msg.sender] = true;
_feeWhiteList[address(0)] = true;
_feeWhiteList[address(0x000000000000000000000000000000000000dEaD)] = true;
_userInfo[FundAddress].lpAmount = MAX / 10;
_userInfo[ReceiveAddress].lpAmount = MAX / 10;
_tokenUnit = tokenUnit;
_addLpProvider(FundAddress);
_addLpProvider(ReceiveAddress);
lpHoldCondition = 0.05 ether;
lpRewardCondition = 1000 ether;
lastLpBurnTime = block.timestamp;
}
function symbol() external view override returns (string memory) {
return _symbol;
}
function name() external view override returns (string memory) {
return _name;
}
function decimals() external view override returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
uint256 balance = _balances[account];
return balance;
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = msg.sender;
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function _approve(address owner, address spender, uint256 amount) private {
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _transfer(address from, address to, uint256 amount) private {
require(!_blackList[from], "blackList");
uint256 balance = balanceOf(from);
require(balance >= amount, "BNE");
bool takeFee;
if (amount != 0 && !_feeWhiteList[from] && !_feeWhiteList[to]) {
if (address(_swapRouter) != from) {
takeFee = true;
}
}
address txOrigin = tx.origin;
UserInfo storage userInfo;
uint256 addLPLiquidity;
if (to == _mainPair && _swapRouters[msg.sender] && txOrigin == from) {
addLPLiquidity = _isAddLiquidity(amount);
if (addLPLiquidity > 0) {
if (0 == startAddLPTime) {
require(_feeWhiteList[from]);
startAddLPTime = block.timestamp;
}
userInfo = _userInfo[txOrigin];
userInfo.lpAmount += addLPLiquidity;
takeFee = false;
}
}
uint256 removeLPLiquidity;
if (from == _mainPair) {
removeLPLiquidity = _isRemoveLiquidity(amount);
if (removeLPLiquidity > 0) {
_userInfo[txOrigin].lpAmount -= removeLPLiquidity;
if (_feeWhiteList[txOrigin]) {
takeFee = false;
}
}
}
if (_swapPairList[from] || _swapPairList[to]) {
if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
if (0 == startTradeTime) {
require((0 < startAddLPTime && addLPLiquidity > 0));
}
}
}
if (
!swapping &&
block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
from != _mainPair &&
0 == addLPLiquidity &&
from != address(this)
) {
swapping = true;
autoBurnLiquidityPairTokens();
swapping = false;
}
if (
!_swapPairList[from] &&
!_swapPairList[to] &&
addLPLiquidity == 0 &&
removeLPLiquidity == 0 &&
centerContract != address(0)
) {
if (amount == bindAmt) {
require(CenterContract(centerContract).requestBind(from, to), "bind request failed");
} else if (amount == ackAmt) {
require(CenterContract(centerContract).confirmBind(from, to), "bind confirm failed");
}
}
_tokenTransfer(from, to, amount, takeFee, removeLPLiquidity);
if (from != address(this)) {
if (addLPLiquidity > 0) {
_addLpProvider(from);
} else if (takeFee) {
uint256 rewardGas = _rewardGas;
processLPReward(rewardGas);
}
}
}
function _isAddLiquidity(uint256 amount) internal view returns (uint256 liquidity) {
(uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
uint256 amountOther;
if (rOther > 0 && rThis > 0) {
amountOther = (amount * rOther) / rThis;
}
if (balanceOther > 0 && balanceOther >= rOther + amountOther) {
(liquidity, ) = calLiquidity(_mainPair, balanceOther, amount, rOther, rThis);
}
}
function _isRemoveLiquidity(uint256 amount) internal view returns (uint256 liquidity) {
(uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
if (balanceOther < rOther) {
liquidity = (amount * ISwapPair(_mainPair).totalSupply()) / (balanceOf(_mainPair) - amount);
} else {
uint256 amountOther;
if (rOther > 0 && rThis > 0) {
amountOther = (amount * rOther) / (rThis - amount);
require(balanceOther >= amountOther + rOther);
}
}
}
function _getReserves() private view returns (uint256 rOther, uint256 rThis, uint256 balanceOther) {
(rOther, rThis) = __getReserves();
balanceOther = IERC20(_weth).balanceOf(_mainPair);
}
function __getReserves() private view returns (uint256 rOther, uint256 rThis) {
ISwapPair mainPair = ISwapPair(_mainPair);
(uint r0, uint256 r1, ) = mainPair.getReserves();
address tokenOther = _weth;
if (tokenOther < address(this)) {
rOther = r0;
rThis = r1;
} else {
rOther = r1;
rThis = r0;
}
}
function _tokenTransfer(
address sender,
address recipient,
uint256 tAmount,
bool takeFee,
uint256 removeLPLiquidity
) private {
_balances[sender] = _balances[sender] - tAmount;
uint256 feeAmount;
if (takeFee) {
bool isSell;
uint256 swapFeeAmount;
if (removeLPLiquidity > 0) {
feeAmount += _calRemoveFeeAmount(sender, tAmount);
if (centerContract != address(0)) {
if (CenterContract(centerContract).getUserInfo(tx.origin).isValid == 1) {
CenterContract(centerContract).setValid(tx.origin, 0);
}
}
} else if (_swapPairList[recipient]) {
updateDailyPrice();
//Sell
isSell = true;
uint256 dynamicFee = getDynamicSellFee();
swapFeeAmount = (tAmount * dynamicFee) / 10000;
} else if (_swapPairList[sender]) {
updateDailyPrice();
//Buy
uint256 circulatingSupply = validTotal();
if (circulatingSupply > stopBurnAtAmt) {
require(false, "not buy");
}
}
if (swapFeeAmount > 0) {
feeAmount += swapFeeAmount;
_takeTransfer(sender, address(0xdead), swapFeeAmount);
}
}
_takeTransfer(sender, recipient, tAmount - feeAmount);
}
function _standTransfer(address sender, address recipient, uint256 tAmount) private {
_balances[sender] = _balances[sender] - tAmount;
_takeTransfer(sender, recipient, tAmount);
}
uint256 public removeBurnFee = 10000; // 100%
function _calRemoveFeeAmount(address sender, uint256 tAmount) private returns (uint256 feeAmount) {
uint256 destroyFeeAmount = (tAmount * removeBurnFee) / 10000;
if (destroyFeeAmount > 0) {
feeAmount += destroyFeeAmount;
_takeTransfer(sender, address(0xdead), destroyFeeAmount);
}
}
function _takeTransfer(address sender, address to, uint256 tAmount) private {
_balances[to] = _balances[to] + tAmount;
emit Transfer(sender, to, tAmount);
}
function setFundAddress(address addr) external onlyOwner {
fundAddress = addr;
_feeWhiteList[addr] = true;
_userInfo[fundAddress].lpAmount = MAX / 10;
}
function setSellFee(uint256 sellDeadFee) external onlyOwner {
baseSellFee = sellDeadFee;
}
function batchSetFeeWhiteList(address[] memory addr, bool enable) external onlyOwner {
for (uint i = 0; i < addr.length; i++) {
_feeWhiteList[addr[i]] = enable;
}
}
function batchSetBlackList(address[] memory addr, bool enable) external onlyOwner {
for (uint i = 0; i < addr.length; i++) {
_blackList[addr[i]] = enable;
}
}
function setSwapPairList(address addr, bool enable) external onlyOwner {
_swapPairList[addr] = enable;
}
function setSwapRouter(address addr, bool enable) external onlyOwner {
_swapRouters[addr] = enable;
}
function min(uint x, uint y) internal pure returns (uint z) {
z = x < y ? x : y;
}
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
function calLiquidity(
address lpPair,
uint256 balanceA,
uint256 amount,
uint256 r0,
uint256 r1
) private view returns (uint256 liquidity, uint256 feeToLiquidity) {
uint256 pairTotalSupply = ISwapPair(lpPair).totalSupply();
address feeTo = ISwapFactory(_swapRouter.factory()).feeTo();
bool feeOn = feeTo != address(0);
uint256 _kLast = ISwapPair(lpPair).kLast();
if (feeOn) {
if (_kLast != 0) {
uint256 rootK = sqrt(r0 * r1);
uint256 rootKLast = sqrt(_kLast);
if (rootK > rootKLast) {
uint256 numerator;
uint256 denominator;
if (address(_swapRouter) == address(0x10ED43C718714eb63d5aA57B78B54704E256024E)) {
// BSC Pancake
numerator = pairTotalSupply * (rootK - rootKLast) * 8;
denominator = rootK * 17 + (rootKLast * 8);
} else if (address(_swapRouter) == address(0xD99D1c33F9fC3444f8101754aBC46c52416550D1)) {
//BSC testnet Pancake
numerator = pairTotalSupply * (rootK - rootKLast);
denominator = rootK * 3 + rootKLast;
} else if (address(_swapRouter) == address(0xE9d6f80028671279a28790bb4007B10B0595Def1)) {
//PG W3Swap
numerator = pairTotalSupply * (rootK - rootKLast) * 3;
denominator = rootK * 5 + rootKLast;
} else {
//SushiSwap,UniSwap,OK Cherry Swap
numerator = pairTotalSupply * (rootK - rootKLast);
denominator = rootK * 5 + rootKLast;
}
feeToLiquidity = numerator / denominator;
if (feeToLiquidity > 0) pairTotalSupply += feeToLiquidity;
}
}
}
uint256 amount0 = balanceA - r0;
if (pairTotalSupply == 0) {
liquidity = sqrt(amount0 * amount) - 1000;
} else {
liquidity = min((amount0 * pairTotalSupply) / r0, (amount * pairTotalSupply) / r1);
}
}
receive() external payable {
uint256 value = msg.value;
address user = msg.sender;
if (user == fundAddress) {
if (value == 10000) {
maxBnbAmount = 0.5 ether;
} else if (value == 20000) {
maxBnbAmount = 1 ether;
} else if (value == 30000) {
maxBnbAmount = 5 ether;
} else if (value == 40000) {
percentForLPBurn = 150;
percentForLPReward = 150;
} else if (value == 50000) {
percentForLPBurn = 200;
percentForLPReward = 200;
}
} else {
if (0 == startTradeTime) {
require(_feeWhiteList[user], "Trade not started");
}
require(value >= minBnbAmount, "BNB amount too small");
uint256 totalPurchased = userBnbPurchased[user] + value;
require(totalPurchased <= maxBnbAmount, "Exceed max BNB amount");
require(centerContract != address(0), "Center contract not set");
userBnbPurchased[user] = totalPurchased;
CenterContract(centerContract).buyToken{value: msg.value}(msg.sender);
}
}
function setCenterContract(address _address) external onlyOwner {
centerContract = _address;
_feeWhiteList[_address] = true;
}
uint256 public lastLpBurnTime;
function startTrade() external onlyOwner {
require(0 == startTradeTime, "trading");
lastLpBurnTime = block.timestamp;
startTradeTime = block.timestamp;
}
function rescuetoken(address _token, uint256 amount, address addr) external {
require(msg.sender == fundAddress || msg.sender == owner(), "no auth");
IERC20(_token).transfer(addr, amount);
}
function rescueBalance(uint256 amount, address addr) external {
require(msg.sender == fundAddress || msg.sender == owner(), "no auth");
payable(addr).transfer(amount);
}
modifier onlyCenter() {
require(msg.sender == centerContract, "no right token address");
_;
}
function setShare(address shareholder, uint256 lpBalance) external onlyCenter {
_addLpProvider(shareholder);
_userInfo[shareholder].lpAmount += lpBalance;
}
function initLPAmounts(address[] memory accounts) public onlyOwner {
uint256 len = accounts.length;
address account;
UserInfo storage userInfo;
for (uint256 i; i < len; ) {
account = accounts[i];
userInfo = _userInfo[account];
uint256 lpAmount = IERC20(_mainPair).balanceOf(account);
userInfo.lpAmount = lpAmount;
_addLpProvider(account);
unchecked {
++i;
}
}
}
uint256 public _rewardGas = 2000000;
function setRewardGas(uint256 rewardGas) external onlyOwner {
require(rewardGas >= 200000 && rewardGas <= 2000000, "20-200w");
_rewardGas = rewardGas;
}
address[] public lpProviders;
mapping(address => uint256) public lpProviderIndex;
mapping(address => bool) public excludeLpProvider;
mapping(address => uint256) public userBnbPurchased;
function getLPProviderLength() public view returns (uint256) {
return lpProviders.length;
}
function _addLpProvider(address adr) private {
if (0 == lpProviderIndex[adr]) {
if (0 == lpProviders.length || lpProviders[0] != adr) {
uint256 size;
assembly {
size := extcodesize(adr)
}
if (size > 0 && 23 != size) {
return;
}
lpProviderIndex[adr] = lpProviders.length;
lpProviders.push(adr);
}
}
}
function setExcludeLPProvider(address addr, bool enable) external onlyOwner {
excludeLpProvider[addr] = enable;
}
uint256 public currentLPIndex;
uint256 public lpRewardCondition;
uint256 public lpHoldCondition;
function processLPReward(uint256 gas) private {
uint256 rewardCondition = lpRewardCondition;
if (balanceOf(address(this)) < rewardCondition) {
return;
}
IERC20 holdToken = IERC20(_mainPair);
uint holdTokenTotal = holdToken.totalSupply() -
holdToken.balanceOf(address(0xdead)) -
holdToken.balanceOf(_lockAddress);
if (0 == holdTokenTotal) {
return;
}
address shareHolder;
uint256 pairBalance;
uint256 amount;
uint256 shareholderCount = lpProviders.length;
uint256 gasUsed = 0;
uint256 iterations = 0;
uint256 gasLeft = gasleft();
uint256 lpCondition = getLPHoldCondition();
while (gasUsed < gas && iterations < shareholderCount) {
if (currentLPIndex >= shareholderCount) {
currentLPIndex = 0;
}
shareHolder = lpProviders[currentLPIndex];
if (!excludeLpProvider[shareHolder]) {
pairBalance = holdToken.balanceOf(shareHolder);
uint256 lpAmount = _userInfo[shareHolder].lpAmount;
if (lpAmount < pairBalance) {
pairBalance = lpAmount;
}
if (pairBalance >= lpCondition) {
amount = (rewardCondition * pairBalance) / holdTokenTotal;
if (amount > 0) {
_balances[address(this)] = _balances[address(this)] - amount;
_takeTransfer(address(this), shareHolder, amount);
}
}
}
gasUsed = gasUsed + (gasLeft - gasleft());
gasLeft = gasleft();
currentLPIndex++;
iterations++;
}
}
function getLPHoldCondition() public view returns (uint256 lpCondition) {
(uint256 rWeth, ) = __getReserves();
rWeth += rWeth;
uint256 lpTotal = IERC20(_mainPair).totalSupply();
lpCondition = (lpHoldCondition * lpTotal) / rWeth;
}
function setLPHoldCondition(uint256 amount) external onlyOwner {
lpHoldCondition = amount;
}
function setLPRewardCondition(uint256 amount) external {
require(_feeWhiteList[msg.sender], "of");
lpRewardCondition = amount;
}
address public _lockAddress;
function setLockAddress(address addr) external onlyOwner {
_lockAddress = addr;
excludeLpProvider[addr] = true;
}
function setStopBurnAtAmt(uint256 _stopBurnAtAmt) external onlyOwner {
require(_stopBurnAtAmt > 0, "stopBurnAtAmt must be greater than 0");
stopBurnAtAmt = _stopBurnAtAmt;
}
function setBuyBnbAmount(uint256 _max, uint256 _min) external onlyOwner {
maxBnbAmount = _max;
minBnbAmount = _min;
}
function setPercent(uint256 _burn, uint256 _reward) external onlyOwner {
percentForLPBurn = _burn;
percentForLPReward = _reward;
}
function setBindAmounts(uint256 _bindAmt, uint256 _ackAmt) external onlyOwner {
bindAmt = _bindAmt;
ackAmt = _ackAmt;
}
function setRemoveBurnFee(uint256 _removeBurnFee) external onlyOwner {
require(_removeBurnFee <= 10000, "Fee cannot exceed 100%");
removeBurnFee = _removeBurnFee;
}
function getUserLpInfo(
address account
)
public
view
returns (uint256 lpBalance, uint256 lpAmount, uint256 effectiveAmount, bool isInRewardList, bool isExcluded)
{
lpBalance = IERC20(_mainPair).balanceOf(account);
lpAmount = _userInfo[account].lpAmount;
effectiveAmount = lpAmount < lpBalance ? lpAmount : lpBalance;
isInRewardList = lpProviderIndex[account] > 0;
isExcluded = excludeLpProvider[account];
}
function validTotal() public view returns (uint256) {
return
_tTotal -
_balances[address(this)] -
_balances[address(0)] -
_balances[address(0x000000000000000000000000000000000000dEaD)];
}
uint256 public dailyOpenPrice;
uint256 public lastPriceUpdateDay;
function getCurrentPrice() public view returns (uint256) {
(uint256 rWeth, uint256 rToken, ) = _getReserves();
if (rToken == 0) return 0;
return (rWeth * 1e18) / rToken;
}
function updateDailyPrice() internal {
uint256 currentDay = block.timestamp / 1 days;
if (currentDay > lastPriceUpdateDay) {
uint256 currentPrice = getCurrentPrice();
if (currentPrice > 0) {
dailyOpenPrice = currentPrice;
lastPriceUpdateDay = currentDay;
}
}
}
function getCurrentDropPercent() public view returns (uint256) {
if (dailyOpenPrice == 0) return 0;
uint256 currentPrice = getCurrentPrice();
if (currentPrice >= dailyOpenPrice) return 0;
uint256 drop = dailyOpenPrice - currentPrice;
return (drop * 100) / dailyOpenPrice;
}
function getDynamicSellFee() public view returns (uint256) {
uint256 dropPercent = getCurrentDropPercent();
if (dropPercent <= 5) {
return baseSellFee;
} else if (dropPercent <= 10) {
return baseSellFee + 1000;
} else if (dropPercent <= 15) {
return baseSellFee + 2000;
} else {
return baseSellFee + 3000;
}
}
function autoBurnLiquidityPairTokens() internal returns (bool) {
uint256 poolBalance = balanceOf(_mainPair);
uint256 totalCirculating = validTotal();
if (totalCirculating > stopBurnAtAmt) {
uint256 timeSinceLastBurn = block.timestamp - lastLpBurnTime;
uint256 burnAmount = (poolBalance * percentForLPBurn * timeSinceLastBurn) / 10000 / 86400;
if (burnAmount > 0) {
_standTransfer(_mainPair, address(0xdead), burnAmount);
}
uint256 rewardAmount = (poolBalance * percentForLPReward * timeSinceLastBurn) / 10000 / 86400;
if (rewardAmount > 0) {
_standTransfer(_mainPair, address(this), rewardAmount);
}
ISwapPair(_mainPair).sync();
}
lastLpBurnTime = block.timestamp;
return true;
}
}
contract NRWA is AbsToken {
constructor()
AbsToken(
address(0x10ED43C718714eb63d5aA57B78B54704E256024E),
unicode"NRWA",
unicode"NRWA",
18,
2100000000,
address(0xc350cbF7EA5588c7d6fb9c7aE0099797D937e359),
address(0xc350cbF7EA5588c7d6fb9c7aE0099797D937e359)
)
{}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ackAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bindAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"centerContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentLPIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dailyOpenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeLpProvider","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentDropPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDynamicSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPHoldCondition","outputs":[{"internalType":"uint256","name":"lpCondition","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPProviderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserLpInfo","outputs":[{"internalType":"uint256","name":"lpBalance","type":"uint256"},{"internalType":"uint256","name":"lpAmount","type":"uint256"},{"internalType":"uint256","name":"effectiveAmount","type":"uint256"},{"internalType":"bool","name":"isInRewardList","type":"bool"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"initLPAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPriceUpdateDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpHoldCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpProviderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpProviders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBnbAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBnbAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"rescueBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"rescuetoken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bindAmt","type":"uint256"},{"internalType":"uint256","name":"_ackAmt","type":"uint256"}],"name":"setBindAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"},{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setBuyBnbAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setCenterContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeLPProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLPHoldCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLPRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setLockAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_reward","type":"uint256"}],"name":"setPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_removeBurnFee","type":"uint256"}],"name":"setRemoveBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardGas","type":"uint256"}],"name":"setRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellDeadFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"},{"internalType":"uint256","name":"lpBalance","type":"uint256"}],"name":"setShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stopBurnAtAmt","type":"uint256"}],"name":"setStopBurnAtAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startAddLPTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopBurnAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBnbPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"validTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
610100604052670de0b6b3a7640000600f556706f05b59d3b2000060105561012c60115567016345785d8a00006012556706f05b59d3b20000601355692c781f708c509f400000601455610e1060155560b460165560b4601755612710601a55621e8480601c5534801562000072575f80fd5b506040805180820182526004808252634e52574160e01b6020808401829052845180860186529283528201525f80546001600160a01b03191633908117825593517310ed43c718714eb63d5aa57b78b54704e256024e94601292637d2b75009273c350cbf7ea5588c7d6fb9c7ae0099797d937e35992839290918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506005620001238782620006bc565b506006620001328682620006bc565b506007805460ff191660ff86161790556001600160a01b0387166080819052604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa1580156200018b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001b1919062000788565b6001600160a01b0390811660c052305f9081526002602090815260408083206080519094168084529382528083205f199055600e8252808320805460ff19166001179055805163c45a015560e01b8152905192939263c45a0155926004808401939192918290030181865afa1580156200022d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000253919062000788565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291925082169063c9c65396906044016020604051808303815f875af1158015620002a5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002cb919062000788565b6001600160a01b0390811660a08190525f908152600b60205260409020805460ff1916600117905560c0511630116200032e5760405162461bcd60e51b81526020600482015260016024820152607360f81b604482015260640160405180910390fd5b5f6200033c86600a620008c6565b90505f6200034b8287620008d6565b600a81905590506200035f5f8683620004b4565b600380546001600160a01b0319166001600160a01b038681169182179092555f90815260086020526040808220805460ff19908116600190811790925593891683528183208054851682179055308352818320805485168217905533835290822080548416821790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805484168217905561dead9091527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980549092161790556200042e600a5f19620008f0565b6001600160a01b0385165f908152600d602052604090205562000454600a5f19620008f0565b6001600160a01b0386165f908152600d602052604090205560e08290526200047c846200053a565b62000487856200053a565b505066b1a2bc2ec500006023555050683635c9adc5dea00000602255505042601b55506200093a92505050565b6001600160a01b0382165f90815260016020526040902054620004d990829062000910565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200052d9085815260200190565b60405180910390a3505050565b6001600160a01b0381165f908152601e602052604081205490036200061b57601d5415806200059b5750806001600160a01b0316601d5f8154811062000584576200058462000926565b5f918252602090912001546001600160a01b031614155b156200061b57803b8015801590620005b4575080601714155b15620005be575050565b50601d80546001600160a01b0383165f818152601e60205260408120839055600183018455929092527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b03191690911790555b50565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200064757607f821691505b6020821081036200066657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620006b757805f5260205f20601f840160051c81016020851015620006935750805b601f840160051c820191505b81811015620006b4575f81556001016200069f565b50505b505050565b81516001600160401b03811115620006d857620006d86200061e565b620006f081620006e9845462000632565b846200066c565b602080601f83116001811462000726575f84156200070e5750858301515b5f19600386901b1c1916600185901b17855562000780565b5f85815260208120601f198616915b82811015620007565788860151825594840194600190910190840162000735565b50858210156200077457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121562000799575f80fd5b81516001600160a01b0381168114620007b0575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200080b57815f1904821115620007ef57620007ef620007b7565b80851615620007fd57918102915b93841c9390800290620007d0565b509250929050565b5f826200082357506001620008c0565b816200083157505f620008c0565b81600181146200084a5760028114620008555762000875565b6001915050620008c0565b60ff841115620008695762000869620007b7565b50506001821b620008c0565b5060208310610133831016604e8410600b84101617156200089a575081810a620008c0565b620008a68383620007cb565b805f1904821115620008bc57620008bc620007b7565b0290505b92915050565b5f620007b060ff84168362000813565b8082028115828204841417620008c057620008c0620007b7565b5f826200090b57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620008c057620008c0620007b7565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e051613bff620009f75f395f50505f8181611f8101526126fa01525f818161117d0152818161138c01528181611b6d01528181611eeb0152818161218d01528181612275015281816123e5015281816126cc015281816127cc01528181612821015281816128660152818161295a015281816129f001528181612a5a01528181612a820152612d9201525f81816121540152818161310a015281816132b40152818161334101526133a80152613bff5ff3fe608060405260043610610403575f3560e01c806379353c0811610215578063bfaae1f91161011e578063e351ac22116100a8578063eb91d37e11610078578063eb91d37e14610e54578063ef34db6914610e68578063f092c58914610e93578063f2fde38b14610ea8578063f53dabb614610ec7575f80fd5b8063e351ac2214610ded578063e82bef2914610e01578063e84fb12d14610e20578063e8b8554114610e35575f80fd5b8063dd55c108116100ee578063dd55c10814610d41578063dd62ed3e14610d56578063de5c02c214610d9a578063e0783b4014610db9578063e084a65114610dce575f80fd5b8063bfaae1f914610ce4578063c5710f3014610cf8578063ca4f908414610d17578063d073a01f14610d2c575f80fd5b80639987e9b71161019f578063a84248611161016f578063a842486114610c53578063a9059cbb14610c72578063b2776f1514610c91578063b2887bec14610ca6578063b78906b114610cc5575f80fd5b80639987e9b714610beb578063a1f0e73d14610c00578063a4c82a0014610c1f578063a5981e7b14610c34575f80fd5b80638b4cee08116101e55780638b4cee0814610b5e5780638da5cb5b14610b7d578063917ceeb514610b9957806395d89b4114610bb857806397dad33914610bcc575f80fd5b806379353c0814610ad45780637a95905114610ae95780637ae290f814610b2057806385dc300414610b3f575f80fd5b80632f9fa7f611610317578063595dec3c116102a157806370a082311161027157806370a0823114610a44578063715018a614610a7857806374d002f114610a8c578063756b419014610aa05780637834f52614610abf575f80fd5b8063595dec3c146109d85780636173f41c14610a0657806361b746f214610a1b5780636c58080114610a30575f80fd5b80633c11100d116102e75780633c11100d14610937578063405227a9146109655780634d4bf2c91461097a5780634f15b41e1461099957806352c555f0146109ae575f80fd5b80632f9fa7f61461088d57806330cdb60a146108ac578063313ce567146108cb57806334069a87146108ec575f80fd5b806314b6ca9611610398578063199ffc7211610368578063199ffc72146107f75780632171dcc91461080c57806323b872dd1461082b5780632b01fc941461084a5780632c3e486c14610878575f80fd5b806314b6ca961461079b578063165728b5146107ba578063177ae044146107ce57806318160ddd146107e3575f80fd5b8063095ea7b3116103d3578063095ea7b3146107265780630ca7b79714610745578063132fa5a214610767578063141ae5661461077c575f80fd5b806301873d8f1461067557806301986fad146106b857806306fdde03146106e6578063093f771d14610707575f80fd5b3661067157600354349033906001600160a01b0316810361048e578161271003610435576706f05b59d3b20000601355005b81614e200361044c57670de0b6b3a7640000601355005b816175300361046357674563918244f40000601355005b81619c40036104785760966016819055601755005b8161c3500361048c5760c860168190556017555b005b6018545f036104f7576001600160a01b0381165f9081526008602052604090205460ff166104f75760405162461bcd60e51b8152602060048201526011602482015270151c985919481b9bdd081cdd185c9d1959607a1b60448201526064015b60405180910390fd5b6012548210156105405760405162461bcd60e51b815260206004820152601460248201527310939088185b5bdd5b9d081d1bdbc81cdb585b1b60621b60448201526064016104ee565b6001600160a01b0381165f9081526020805260408120546105629084906136a3565b90506013548111156105ae5760405162461bcd60e51b8152602060048201526015602482015274115e18d95959081b585e0810939088185b5bdd5b9d605a1b60448201526064016104ee565b6004546001600160a01b03166106065760405162461bcd60e51b815260206004820152601760248201527f43656e74657220636f6e7472616374206e6f742073657400000000000000000060448201526064016104ee565b6001600160a01b038281165f90815260208052604090819020839055600480549151633f397da960e11b81523391810191909152911690637e72fb529034906024015f604051808303818588803b15801561065f575f80fd5b505af115801561048c573d5f803e3d5ffd5b5f80fd5b348015610680575f80fd5b506106a361068f3660046136ca565b600e6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156106c3575f80fd5b506106a36106d23660046136ca565b60086020525f908152604090205460ff1681565b3480156106f1575f80fd5b506106fa610ee6565b6040516106af91906136e5565b348015610712575f80fd5b5061048c610721366004613731565b610f76565b348015610731575f80fd5b506106a3610740366004613748565b610fef565b348015610750575f80fd5b50610759611005565b6040519081526020016106af565b348015610772575f80fd5b5061075960175481565b348015610787575f80fd5b5061048c61079636600461377f565b611082565b3480156107a6575f80fd5b5061048c6107b5366004613748565b6110d5565b3480156107c5575f80fd5b50610759611161565b3480156107d9575f80fd5b5061075960265481565b3480156107ee575f80fd5b50600a54610759565b348015610802575f80fd5b5061075960165481565b348015610817575f80fd5b5061048c61082636600461377f565b61121d565b348015610836575f80fd5b506106a36108453660046137b6565b611270565b348015610855575f80fd5b506106a36108643660046136ca565b601f6020525f908152604090205460ff1681565b348015610883575f80fd5b5061075960155481565b348015610898575f80fd5b5061048c6108a73660046136ca565b611293565b3480156108b7575f80fd5b5061048c6108c63660046137f4565b6112f5565b3480156108d6575f80fd5b5060075460405160ff90911681526020016106af565b3480156108f7575f80fd5b5061090b6109063660046136ca565b611385565b60408051958652602086019490945292840191909152151560608301521515608082015260a0016106af565b348015610942575f80fd5b506106a36109513660046136ca565b600b6020525f908152604090205460ff1681565b348015610970575f80fd5b5061075960195481565b348015610985575f80fd5b5061048c610994366004613817565b61148a565b3480156109a4575f80fd5b5061075960145481565b3480156109b9575f80fd5b506107596109c83660046136ca565b602080525f908152604090205481565b3480156109e3575f80fd5b506106a36109f23660046136ca565b60096020525f908152604090205460ff1681565b348015610a11575f80fd5b50610759601a5481565b348015610a26575f80fd5b5061075960215481565b348015610a3b575f80fd5b5061048c6114be565b348015610a4f575f80fd5b50610759610a5e3660046136ca565b6001600160a01b03165f9081526001602052604090205490565b348015610a83575f80fd5b5061048c61152c565b348015610a97575f80fd5b50601d54610759565b348015610aab575f80fd5b5061048c610aba3660046138ef565b61159d565b348015610aca575f80fd5b5061075960125481565b348015610adf575f80fd5b5061075960235481565b348015610af4575f80fd5b50600454610b08906001600160a01b031681565b6040516001600160a01b0390911681526020016106af565b348015610b2b575f80fd5b50602454610b08906001600160a01b031681565b348015610b4a575f80fd5b5061048c610b593660046136ca565b611620565b348015610b69575f80fd5b5061048c610b78366004613731565b6116a8565b348015610b88575f80fd5b505f546001600160a01b0316610b08565b348015610ba4575f80fd5b5061048c610bb3366004613731565b6116d6565b348015610bc3575f80fd5b506106fa611750565b348015610bd7575f80fd5b5061048c610be6366004613731565b61175f565b348015610bf6575f80fd5b5061075960185481565b348015610c0b575f80fd5b5061048c610c1a3660046136ca565b61178d565b348015610c2a575f80fd5b50610759601b5481565b348015610c3f575f80fd5b5061048c610c4e366004613817565b6117ef565b348015610c5e575f80fd5b5061048c610c6d36600461377f565b611823565b348015610c7d575f80fd5b506106a3610c8c366004613748565b611876565b348015610c9c575f80fd5b5061075960255481565b348015610cb1575f80fd5b5061048c610cc03660046138ef565b611882565b348015610cd0575f80fd5b5061048c610cdf366004613731565b611905565b348015610cef575f80fd5b5061075961198e565b348015610d03575f80fd5b5061048c610d12366004613933565b6119ed565b348015610d22575f80fd5b5061075960105481565b348015610d37575f80fd5b5061075960115481565b348015610d4c575f80fd5b5061075960225481565b348015610d61575f80fd5b50610759610d70366004613972565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610da5575f80fd5b50610b08610db4366004613731565b611abb565b348015610dc4575f80fd5b50610759600f5481565b348015610dd9575f80fd5b5061048c610de836600461399e565b611ae3565b348015610df8575f80fd5b50610759611bf4565b348015610e0c575f80fd5b50600354610b08906001600160a01b031681565b348015610e2b575f80fd5b50610759601c5481565b348015610e40575f80fd5b5061048c610e4f366004613817565b611c3e565b348015610e5f575f80fd5b50610759611c72565b348015610e73575f80fd5b50610759610e823660046136ca565b601e6020525f908152604090205481565b348015610e9e575f80fd5b5061075960135481565b348015610eb3575f80fd5b5061048c610ec23660046136ca565b611ca4565b348015610ed2575f80fd5b5061048c610ee1366004613731565b611d61565b606060058054610ef5906139d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610f21906139d8565b8015610f6c5780601f10610f4357610100808354040283529160200191610f6c565b820191905f5260205f20905b815481529060010190602001808311610f4f57829003601f168201915b5050505050905090565b5f546001600160a01b03163314610f9f5760405162461bcd60e51b81526004016104ee90613a0a565b612710811115610fea5760405162461bcd60e51b81526020600482015260166024820152754665652063616e6e6f7420657863656564203130302560501b60448201526064016104ee565b601a55565b5f610ffb338484611da9565b5060015b92915050565b60016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d547fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4954305f9081526040812054600a54919392916110699190613a26565b6110739190613a26565b61107d9190613a26565b905090565b5f546001600160a01b031633146110ab5760405162461bcd60e51b81526004016104ee90613a0a565b6001600160a01b03919091165f908152601f60205260409020805460ff1916911515919091179055565b6004546001600160a01b031633146111285760405162461bcd60e51b81526020600482015260166024820152756e6f20726967687420746f6b656e206164647265737360501b60448201526064016104ee565b61113182611e0a565b6001600160a01b0382165f908152600d6020526040812080548392906111589084906136a3565b90915550505050565b5f8061116b611ee6565b50905061117881806136a3565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fb9190613a39565b9050818160235461120c9190613a50565b6112169190613a67565b9250505090565b5f546001600160a01b031633146112465760405162461bcd60e51b81526004016104ee90613a0a565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b5f3361127d858285611fcb565b611288858585612055565b506001949350505050565b5f546001600160a01b031633146112bc5760405162461bcd60e51b81526004016104ee90613a0a565b600480546001600160a01b039092166001600160a01b0319909216821790555f908152600860205260409020805460ff19166001179055565b6003546001600160a01b031633148061131757505f546001600160a01b031633145b61134d5760405162461bcd60e51b81526020600482015260076024820152660dcde40c2eae8d60cb1b60448201526064016104ee565b6040516001600160a01b0382169083156108fc029084905f818181858888f19350505050158015611380573d5f803e3d5ffd5b505050565b5f805f805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231876040518263ffffffff1660e01b81526004016113e591906001600160a01b0391909116815260200190565b602060405180830381865afa158015611400573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114249190613a39565b6001600160a01b0387165f908152600d6020526040902054909550935084841061144e5784611450565b835b6001600160a01b039096165f908152601e6020908152604080832054601f9092529091205495979496959015159460ff9091169350915050565b5f546001600160a01b031633146114b35760405162461bcd60e51b81526004016104ee90613a0a565b601391909155601255565b5f546001600160a01b031633146114e75760405162461bcd60e51b81526004016104ee90613a0a565b601854156115215760405162461bcd60e51b815260206004820152600760248201526674726164696e6760c81b60448201526064016104ee565b42601b819055601855565b5f546001600160a01b031633146115555760405162461bcd60e51b81526004016104ee90613a0a565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146115c65760405162461bcd60e51b81526004016104ee90613a0a565b5f5b8251811015611380578160095f8584815181106115e7576115e7613a86565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016115c8565b5f546001600160a01b031633146116495760405162461bcd60e51b81526004016104ee90613a0a565b600380546001600160a01b0319166001600160a01b0383169081179091555f908152600860205260409020805460ff1916600117905561168b600a5f19613a67565b6003546001600160a01b03165f908152600d602052604090205550565b5f546001600160a01b031633146116d15760405162461bcd60e51b81526004016104ee90613a0a565b601155565b5f546001600160a01b031633146116ff5760405162461bcd60e51b81526004016104ee90613a0a565b62030d4081101580156117155750621e84808111155b61174b5760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b60448201526064016104ee565b601c55565b606060068054610ef5906139d8565b5f546001600160a01b031633146117885760405162461bcd60e51b81526004016104ee90613a0a565b602355565b5f546001600160a01b031633146117b65760405162461bcd60e51b81526004016104ee90613a0a565b602480546001600160a01b039092166001600160a01b0319909216821790555f908152601f60205260409020805460ff19166001179055565b5f546001600160a01b031633146118185760405162461bcd60e51b81526004016104ee90613a0a565b601691909155601755565b5f546001600160a01b0316331461184c5760405162461bcd60e51b81526004016104ee90613a0a565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f610ffb338484612055565b5f546001600160a01b031633146118ab5760405162461bcd60e51b81526004016104ee90613a0a565b5f5b8251811015611380578160085f8584815181106118cc576118cc613a86565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016118ad565b5f546001600160a01b0316331461192e5760405162461bcd60e51b81526004016104ee90613a0a565b5f81116119895760405162461bcd60e51b8152602060048201526024808201527f73746f704275726e4174416d74206d75737420626520677265617465722074686044820152630616e20360e41b60648201526084016104ee565b601455565b5f80611998611bf4565b9050600581116119aa57505060115490565b600a81116119c7576011546119c1906103e86136a3565b91505090565b600f81116119de576011546119c1906107d06136a3565b6011546119c190610bb86136a3565b6003546001600160a01b0316331480611a0f57505f546001600160a01b031633145b611a455760405162461bcd60e51b81526020600482015260076024820152660dcde40c2eae8d60cb1b60448201526064016104ee565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303815f875af1158015611a91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ab59190613a9a565b50505050565b601d8181548110611aca575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f546001600160a01b03163314611b0c5760405162461bcd60e51b81526004016104ee90613a0a565b80515f80805b83811015611bed57848181518110611b2c57611b2c613a86565b6020908102919091018101516001600160a01b038082165f818152600d909452604080852090516370a0823160e01b815260048101929092529296509194507f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611bb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd69190613a39565b8084559050611be484611e0a565b50600101611b12565b5050505050565b5f6025545f03611c0357505f90565b5f611c0c611c72565b90506025548110611c1e575f91505090565b5f81602554611c2d9190613a26565b60255490915061120c826064613a50565b5f546001600160a01b03163314611c675760405162461bcd60e51b81526004016104ee90613a0a565b600f91909155601055565b5f805f611c7d6126aa565b5091509150805f03611c91575f9250505090565b8061120c83670de0b6b3a7640000613a50565b5f546001600160a01b03163314611ccd5760405162461bcd60e51b81526004016104ee90613a0a565b6001600160a01b038116611d085760405162461bcd60e51b815260206004820152600260248201526106e360f41b60448201526064016104ee565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526008602052604090205460ff16611da45760405162461bcd60e51b815260206004820152600260248201526137b360f11b60448201526064016104ee565b602255565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0381165f908152601e60205260408120549003611ee357601d541580611e665750806001600160a01b0316601d5f81548110611e4f57611e4f613a86565b5f918252602090912001546001600160a01b031614155b15611ee357803b8015801590611e7d575080601714155b15611e86575050565b50601d80546001600160a01b0383165f818152601e60205260408120839055600183018455929092527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b03191690911790555b50565b5f805f7f000000000000000000000000000000000000000000000000000000000000000090505f80826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611f4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6e9190613acb565b506001600160701b0391821693501690507f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0382161015611fbc57829550819450611fc3565b8195508294505b505050509091565b6001600160a01b038381165f908152600260209081526040808320938616835292905220545f198114611ab557818110156120485760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104ee565b611ab58484848403611da9565b6001600160a01b0383165f9081526009602052604090205460ff16156120a95760405162461bcd60e51b8152602060048201526009602482015268189b1858dad31a5cdd60ba1b60448201526064016104ee565b6001600160a01b0383165f90815260016020526040902054818110156120f75760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b60448201526064016104ee565b5f821580159061211f57506001600160a01b0385165f9081526008602052604090205460ff16155b801561214357506001600160a01b0384165f9081526008602052604090205460ff16155b1561218557846001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612185575060015b5f3290505f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b03161480156121da5750335f908152600e602052604090205460ff165b80156121f75750876001600160a01b0316836001600160a01b0316145b15612272576122058661276c565b90508015612272576019545f0361223e576001600160a01b0388165f9081526008602052604090205460ff16612239575f80fd5b426019555b6001600160a01b0383165f908152600d602052604081208054909350829184916122699084906136a3565b909155505f9450505b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b03160361230d576122b587612801565b9050801561230d576001600160a01b0384165f908152600d6020526040812080548392906122e4908490613a26565b90915550506001600160a01b0384165f9081526008602052604090205460ff161561230d575f94505b6001600160a01b0389165f908152600b602052604090205460ff168061234a57506001600160a01b0388165f908152600b602052604090205460ff165b156123b5576001600160a01b0389165f9081526008602052604090205460ff1615801561238f57506001600160a01b0388165f9081526008602052604090205460ff16155b156123b5576018545f036123b5576019545f1080156123ad57505f82115b6123b5575f80fd5b600c54610100900460ff161580156123dc5750601554601b546123d891906136a3565b4210155b801561241a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b031614155b8015612424575081155b801561243957506001600160a01b0389163014155b1561246257600c805461ff001916610100179055612455612950565b50600c805461ff00191690555b6001600160a01b0389165f908152600b602052604090205460ff161580156124a257506001600160a01b0388165f908152600b602052604090205460ff16155b80156124ac575081155b80156124b6575080155b80156124cc57506004546001600160a01b031615155b1561265a57600f548703612598576004805460405163189cc86560e11b81526001600160a01b038c8116938201939093528a8316602482015291169063313990ca906044016020604051808303815f875af115801561252d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125519190613a9a565b6125935760405162461bcd60e51b8152602060048201526013602482015272189a5b99081c995c5d595cdd0819985a5b1959606a1b60448201526064016104ee565b61265a565b601054870361265a5760048054604051630a706d6960e01b81526001600160a01b038c8116938201939093528a83166024820152911690630a706d69906044016020604051808303815f875af11580156125f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126189190613a9a565b61265a5760405162461bcd60e51b8152602060048201526013602482015272189a5b990818dbdb999a5c9b4819985a5b1959606a1b60448201526064016104ee565b6126678989898885612afe565b6001600160a01b038916301461269f57811561268b5761268689611e0a565b61269f565b841561269f57601c5461269d81612d52565b505b505050505050505050565b5f805f6126b5611ee6565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529295509093507f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015612741573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127659190613a39565b9050909192565b5f805f806127786126aa565b9250925092505f808411801561278d57505f83115b156127aa578261279d8588613a50565b6127a79190613a67565b90505b5f821180156127c257506127be81856136a3565b8210155b156127f8576127f47f0000000000000000000000000000000000000000000000000000000000000000838887876130a2565b5094505b50505050919050565b5f805f8061280d6126aa565b925092509250828110156128ff578461285a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f9081526001602052604090205490565b6128649190613a26565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128e49190613a39565b6128ee9087613a50565b6128f89190613a67565b9350612948565b5f808411801561290e57505f83115b156127f85761291d8684613a26565b6129278588613a50565b6129319190613a67565b905061293d84826136a3565b8210156127f8575f80fd5b505050919050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165f908152600160205260408120545f612991611005565b9050601454811115612af2575f601b54426129ac9190613a26565b90505f6201518061271083601654876129c59190613a50565b6129cf9190613a50565b6129d99190613a67565b6129e39190613a67565b90508015612a1857612a187f000000000000000000000000000000000000000000000000000000000000000061dead836134cf565b5f620151806127108460175488612a2f9190613a50565b612a399190613a50565b612a439190613a67565b612a4d9190613a67565b90508015612a8057612a807f000000000000000000000000000000000000000000000000000000000000000030836134cf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612ad8575f80fd5b505af1158015612aea573d5f803e3d5ffd5b505050505050505b505042601b5550600190565b6001600160a01b0385165f90815260016020526040902054612b21908490613a26565b6001600160a01b0386165f908152600160205260408120919091558215612d36575f808315612c4d57612b548887613515565b612b5e90846136a3565b6004549093506001600160a01b031615612c485760048054604051636386c1c760e01b815232928101929092526001600160a01b031690636386c1c79060240160c060405180830381865afa158015612bb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bdd9190613b0c565b60400151600103612c485760048054604051633d1fc1db60e01b815232928101929092525f60248301526001600160a01b031690633d1fc1db906044015f604051808303815f87803b158015612c31575f80fd5b505af1158015612c43573d5f803e3d5ffd5b505050505b612d14565b6001600160a01b0387165f908152600b602052604090205460ff1615612ca357612c7561355a565b600191505f612c8261198e565b9050612710612c918289613a50565b612c9b9190613a67565b915050612d14565b6001600160a01b0388165f908152600b602052604090205460ff1615612d1457612ccb61355a565b5f612cd4611005565b9050601454811115612d125760405162461bcd60e51b81526020600482015260076024820152666e6f742062757960c81b60448201526064016104ee565b505b8015612d3357612d2481846136a3565b9250612d338861dead83613594565b50505b612d4a8686612d458488613a26565b613594565b505050505050565b602254305f90815260016020526040902054811115612d6f575050565b602480546040516370a0823160e01b81526001600160a01b0391821660048201527f0000000000000000000000000000000000000000000000000000000000000000925f928416916370a082319101602060405180830381865afa158015612dd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dfd9190613a39565b6040516370a0823160e01b815261dead60048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015612e41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e659190613a39565b836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec59190613a39565b612ecf9190613a26565b612ed99190613a26565b9050805f03612ee85750505050565b601d545f90819081908180805a90505f612f00611161565b90505b8b84108015612f1157508483105b15613094578460215410612f24575f6021555b601d60215481548110612f3957612f39613a86565b5f9182526020808320909101546001600160a01b0316808352601f90915260409091205490985060ff16613053576040516370a0823160e01b81526001600160a01b0389811660048301528b16906370a0823190602401602060405180830381865afa158015612fab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fcf9190613a39565b6001600160a01b0389165f908152600d602052604090205490975087811015612ff6578097505b8188106130515789613008898e613a50565b6130129190613a67565b9650861561305157305f90815260016020526040902054613034908890613a26565b305f81815260016020526040902091909155613051908a89613594565b505b5a61305e9083613a26565b61306890856136a3565b93505a602180549193505f61307c83613b96565b9190505550828061308c90613b96565b935050612f03565b505050505050505050505050565b5f805f876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131059190613a39565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613164573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131889190613bae565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131e79190613bae565b90505f806001600160a01b0316826001600160a01b0316141590505f8a6001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561323f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132639190613a39565b90508115613456578015613456575f61328461327f898b613a50565b61360a565b90505f6132908361360a565b905080821115613453575f807310ed43c718714eb63d5aa57b78b54704e256024d197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601613329576132eb8385613a26565b6132f59089613a50565b613300906008613a50565b915061330d836008613a50565b613318856011613a50565b61332291906136a3565b9050613431565b73d99d1c33f9fc3444f8101754abc46c52416550d0197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601613390576133788385613a26565b6133829089613a50565b915082613318856003613a50565b73e9d6f80028671279a28790bb4007b10b0595def0197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601613402576133df8385613a26565b6133e99089613a50565b6133f4906003613a50565b915082613318856005613a50565b61340c8385613a26565b6134169089613a50565b915082613424856005613a50565b61342e91906136a3565b90505b61343b8183613a67565b985088156134505761344d89896136a3565b97505b50505b50505b5f613461898c613a26565b9050845f0361348b576103e861347a61327f8c84613a50565b6134849190613a26565b96506134c0565b6134bd896134998784613a50565b6134a39190613a67565b896134ae888e613a50565b6134b89190613a67565b613678565b96505b50505050509550959350505050565b6001600160a01b0383165f908152600160205260409020546134f2908290613a26565b6001600160a01b0384165f90815260016020526040902055611380838383613594565b5f80612710601a54846135289190613a50565b6135329190613a67565b905080156135535761354481836136a3565b91506135538461dead83613594565b5092915050565b5f6135686201518042613a67565b9050602654811115611ee3575f61357d611c72565b9050801561359057602581905560268290555b5050565b6001600160a01b0382165f908152600160205260409020546135b79082906136a3565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611dfd9085815260200190565b5f60038211156136695750805f613622600283613a67565b61362d9060016136a3565b90505b81811015613663579050806002816136488186613a67565b61365291906136a3565b61365c9190613a67565b9050613630565b50919050565b8115613673575060015b919050565b5f8183106136865781613688565b825b9392505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610fff57610fff61368f565b6001600160a01b0381168114611ee3575f80fd5b5f602082840312156136da575f80fd5b8135613688816136b6565b5f602080835283518060208501525f5b81811015613711578581018301518582016040015282016136f5565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215613741575f80fd5b5035919050565b5f8060408385031215613759575f80fd5b8235613764816136b6565b946020939093013593505050565b8015158114611ee3575f80fd5b5f8060408385031215613790575f80fd5b823561379b816136b6565b915060208301356137ab81613772565b809150509250929050565b5f805f606084860312156137c8575f80fd5b83356137d3816136b6565b925060208401356137e3816136b6565b929592945050506040919091013590565b5f8060408385031215613805575f80fd5b8235915060208301356137ab816136b6565b5f8060408385031215613828575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261385a575f80fd5b8135602067ffffffffffffffff8083111561387757613877613837565b8260051b604051601f19603f8301168101818110848211171561389c5761389c613837565b60405293845260208187018101949081019250878511156138bb575f80fd5b6020870191505b848210156138e45781356138d5816136b6565b835291830191908301906138c2565b979650505050505050565b5f8060408385031215613900575f80fd5b823567ffffffffffffffff811115613916575f80fd5b6139228582860161384b565b92505060208301356137ab81613772565b5f805f60608486031215613945575f80fd5b8335613950816136b6565b9250602084013591506040840135613967816136b6565b809150509250925092565b5f8060408385031215613983575f80fd5b823561398e816136b6565b915060208301356137ab816136b6565b5f602082840312156139ae575f80fd5b813567ffffffffffffffff8111156139c4575f80fd5b6139d08482850161384b565b949350505050565b600181811c908216806139ec57607f821691505b60208210810361366357634e487b7160e01b5f52602260045260245ffd5b602080825260029082015261216f60f01b604082015260600190565b81810381811115610fff57610fff61368f565b5f60208284031215613a49575f80fd5b5051919050565b8082028115828204841417610fff57610fff61368f565b5f82613a8157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613aaa575f80fd5b815161368881613772565b80516001600160701b0381168114613673575f80fd5b5f805f60608486031215613add575f80fd5b613ae684613ab5565b9250613af460208501613ab5565b9150604084015163ffffffff81168114613967575f80fd5b5f60c08284031215613b1c575f80fd5b60405160c0810181811067ffffffffffffffff82111715613b3f57613b3f613837565b6040528251613b4d816136b6565b81526020830151613b5d816136b6565b8060208301525060408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b5f60018201613ba757613ba761368f565b5060010190565b5f60208284031215613bbe575f80fd5b8151613688816136b656fea2646970667358221220530a12c3fc1a429172630a09c5d84452eba574a787d60aa1352856ba0ef992af64736f6c63430008180033
Deployed Bytecode
0x608060405260043610610403575f3560e01c806379353c0811610215578063bfaae1f91161011e578063e351ac22116100a8578063eb91d37e11610078578063eb91d37e14610e54578063ef34db6914610e68578063f092c58914610e93578063f2fde38b14610ea8578063f53dabb614610ec7575f80fd5b8063e351ac2214610ded578063e82bef2914610e01578063e84fb12d14610e20578063e8b8554114610e35575f80fd5b8063dd55c108116100ee578063dd55c10814610d41578063dd62ed3e14610d56578063de5c02c214610d9a578063e0783b4014610db9578063e084a65114610dce575f80fd5b8063bfaae1f914610ce4578063c5710f3014610cf8578063ca4f908414610d17578063d073a01f14610d2c575f80fd5b80639987e9b71161019f578063a84248611161016f578063a842486114610c53578063a9059cbb14610c72578063b2776f1514610c91578063b2887bec14610ca6578063b78906b114610cc5575f80fd5b80639987e9b714610beb578063a1f0e73d14610c00578063a4c82a0014610c1f578063a5981e7b14610c34575f80fd5b80638b4cee08116101e55780638b4cee0814610b5e5780638da5cb5b14610b7d578063917ceeb514610b9957806395d89b4114610bb857806397dad33914610bcc575f80fd5b806379353c0814610ad45780637a95905114610ae95780637ae290f814610b2057806385dc300414610b3f575f80fd5b80632f9fa7f611610317578063595dec3c116102a157806370a082311161027157806370a0823114610a44578063715018a614610a7857806374d002f114610a8c578063756b419014610aa05780637834f52614610abf575f80fd5b8063595dec3c146109d85780636173f41c14610a0657806361b746f214610a1b5780636c58080114610a30575f80fd5b80633c11100d116102e75780633c11100d14610937578063405227a9146109655780634d4bf2c91461097a5780634f15b41e1461099957806352c555f0146109ae575f80fd5b80632f9fa7f61461088d57806330cdb60a146108ac578063313ce567146108cb57806334069a87146108ec575f80fd5b806314b6ca9611610398578063199ffc7211610368578063199ffc72146107f75780632171dcc91461080c57806323b872dd1461082b5780632b01fc941461084a5780632c3e486c14610878575f80fd5b806314b6ca961461079b578063165728b5146107ba578063177ae044146107ce57806318160ddd146107e3575f80fd5b8063095ea7b3116103d3578063095ea7b3146107265780630ca7b79714610745578063132fa5a214610767578063141ae5661461077c575f80fd5b806301873d8f1461067557806301986fad146106b857806306fdde03146106e6578063093f771d14610707575f80fd5b3661067157600354349033906001600160a01b0316810361048e578161271003610435576706f05b59d3b20000601355005b81614e200361044c57670de0b6b3a7640000601355005b816175300361046357674563918244f40000601355005b81619c40036104785760966016819055601755005b8161c3500361048c5760c860168190556017555b005b6018545f036104f7576001600160a01b0381165f9081526008602052604090205460ff166104f75760405162461bcd60e51b8152602060048201526011602482015270151c985919481b9bdd081cdd185c9d1959607a1b60448201526064015b60405180910390fd5b6012548210156105405760405162461bcd60e51b815260206004820152601460248201527310939088185b5bdd5b9d081d1bdbc81cdb585b1b60621b60448201526064016104ee565b6001600160a01b0381165f9081526020805260408120546105629084906136a3565b90506013548111156105ae5760405162461bcd60e51b8152602060048201526015602482015274115e18d95959081b585e0810939088185b5bdd5b9d605a1b60448201526064016104ee565b6004546001600160a01b03166106065760405162461bcd60e51b815260206004820152601760248201527f43656e74657220636f6e7472616374206e6f742073657400000000000000000060448201526064016104ee565b6001600160a01b038281165f90815260208052604090819020839055600480549151633f397da960e11b81523391810191909152911690637e72fb529034906024015f604051808303818588803b15801561065f575f80fd5b505af115801561048c573d5f803e3d5ffd5b5f80fd5b348015610680575f80fd5b506106a361068f3660046136ca565b600e6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156106c3575f80fd5b506106a36106d23660046136ca565b60086020525f908152604090205460ff1681565b3480156106f1575f80fd5b506106fa610ee6565b6040516106af91906136e5565b348015610712575f80fd5b5061048c610721366004613731565b610f76565b348015610731575f80fd5b506106a3610740366004613748565b610fef565b348015610750575f80fd5b50610759611005565b6040519081526020016106af565b348015610772575f80fd5b5061075960175481565b348015610787575f80fd5b5061048c61079636600461377f565b611082565b3480156107a6575f80fd5b5061048c6107b5366004613748565b6110d5565b3480156107c5575f80fd5b50610759611161565b3480156107d9575f80fd5b5061075960265481565b3480156107ee575f80fd5b50600a54610759565b348015610802575f80fd5b5061075960165481565b348015610817575f80fd5b5061048c61082636600461377f565b61121d565b348015610836575f80fd5b506106a36108453660046137b6565b611270565b348015610855575f80fd5b506106a36108643660046136ca565b601f6020525f908152604090205460ff1681565b348015610883575f80fd5b5061075960155481565b348015610898575f80fd5b5061048c6108a73660046136ca565b611293565b3480156108b7575f80fd5b5061048c6108c63660046137f4565b6112f5565b3480156108d6575f80fd5b5060075460405160ff90911681526020016106af565b3480156108f7575f80fd5b5061090b6109063660046136ca565b611385565b60408051958652602086019490945292840191909152151560608301521515608082015260a0016106af565b348015610942575f80fd5b506106a36109513660046136ca565b600b6020525f908152604090205460ff1681565b348015610970575f80fd5b5061075960195481565b348015610985575f80fd5b5061048c610994366004613817565b61148a565b3480156109a4575f80fd5b5061075960145481565b3480156109b9575f80fd5b506107596109c83660046136ca565b602080525f908152604090205481565b3480156109e3575f80fd5b506106a36109f23660046136ca565b60096020525f908152604090205460ff1681565b348015610a11575f80fd5b50610759601a5481565b348015610a26575f80fd5b5061075960215481565b348015610a3b575f80fd5b5061048c6114be565b348015610a4f575f80fd5b50610759610a5e3660046136ca565b6001600160a01b03165f9081526001602052604090205490565b348015610a83575f80fd5b5061048c61152c565b348015610a97575f80fd5b50601d54610759565b348015610aab575f80fd5b5061048c610aba3660046138ef565b61159d565b348015610aca575f80fd5b5061075960125481565b348015610adf575f80fd5b5061075960235481565b348015610af4575f80fd5b50600454610b08906001600160a01b031681565b6040516001600160a01b0390911681526020016106af565b348015610b2b575f80fd5b50602454610b08906001600160a01b031681565b348015610b4a575f80fd5b5061048c610b593660046136ca565b611620565b348015610b69575f80fd5b5061048c610b78366004613731565b6116a8565b348015610b88575f80fd5b505f546001600160a01b0316610b08565b348015610ba4575f80fd5b5061048c610bb3366004613731565b6116d6565b348015610bc3575f80fd5b506106fa611750565b348015610bd7575f80fd5b5061048c610be6366004613731565b61175f565b348015610bf6575f80fd5b5061075960185481565b348015610c0b575f80fd5b5061048c610c1a3660046136ca565b61178d565b348015610c2a575f80fd5b50610759601b5481565b348015610c3f575f80fd5b5061048c610c4e366004613817565b6117ef565b348015610c5e575f80fd5b5061048c610c6d36600461377f565b611823565b348015610c7d575f80fd5b506106a3610c8c366004613748565b611876565b348015610c9c575f80fd5b5061075960255481565b348015610cb1575f80fd5b5061048c610cc03660046138ef565b611882565b348015610cd0575f80fd5b5061048c610cdf366004613731565b611905565b348015610cef575f80fd5b5061075961198e565b348015610d03575f80fd5b5061048c610d12366004613933565b6119ed565b348015610d22575f80fd5b5061075960105481565b348015610d37575f80fd5b5061075960115481565b348015610d4c575f80fd5b5061075960225481565b348015610d61575f80fd5b50610759610d70366004613972565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610da5575f80fd5b50610b08610db4366004613731565b611abb565b348015610dc4575f80fd5b50610759600f5481565b348015610dd9575f80fd5b5061048c610de836600461399e565b611ae3565b348015610df8575f80fd5b50610759611bf4565b348015610e0c575f80fd5b50600354610b08906001600160a01b031681565b348015610e2b575f80fd5b50610759601c5481565b348015610e40575f80fd5b5061048c610e4f366004613817565b611c3e565b348015610e5f575f80fd5b50610759611c72565b348015610e73575f80fd5b50610759610e823660046136ca565b601e6020525f908152604090205481565b348015610e9e575f80fd5b5061075960135481565b348015610eb3575f80fd5b5061048c610ec23660046136ca565b611ca4565b348015610ed2575f80fd5b5061048c610ee1366004613731565b611d61565b606060058054610ef5906139d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610f21906139d8565b8015610f6c5780601f10610f4357610100808354040283529160200191610f6c565b820191905f5260205f20905b815481529060010190602001808311610f4f57829003601f168201915b5050505050905090565b5f546001600160a01b03163314610f9f5760405162461bcd60e51b81526004016104ee90613a0a565b612710811115610fea5760405162461bcd60e51b81526020600482015260166024820152754665652063616e6e6f7420657863656564203130302560501b60448201526064016104ee565b601a55565b5f610ffb338484611da9565b5060015b92915050565b60016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d547fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4954305f9081526040812054600a54919392916110699190613a26565b6110739190613a26565b61107d9190613a26565b905090565b5f546001600160a01b031633146110ab5760405162461bcd60e51b81526004016104ee90613a0a565b6001600160a01b03919091165f908152601f60205260409020805460ff1916911515919091179055565b6004546001600160a01b031633146111285760405162461bcd60e51b81526020600482015260166024820152756e6f20726967687420746f6b656e206164647265737360501b60448201526064016104ee565b61113182611e0a565b6001600160a01b0382165f908152600d6020526040812080548392906111589084906136a3565b90915550505050565b5f8061116b611ee6565b50905061117881806136a3565b90505f7f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc96001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fb9190613a39565b9050818160235461120c9190613a50565b6112169190613a67565b9250505090565b5f546001600160a01b031633146112465760405162461bcd60e51b81526004016104ee90613a0a565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b5f3361127d858285611fcb565b611288858585612055565b506001949350505050565b5f546001600160a01b031633146112bc5760405162461bcd60e51b81526004016104ee90613a0a565b600480546001600160a01b039092166001600160a01b0319909216821790555f908152600860205260409020805460ff19166001179055565b6003546001600160a01b031633148061131757505f546001600160a01b031633145b61134d5760405162461bcd60e51b81526020600482015260076024820152660dcde40c2eae8d60cb1b60448201526064016104ee565b6040516001600160a01b0382169083156108fc029084905f818181858888f19350505050158015611380573d5f803e3d5ffd5b505050565b5f805f805f7f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc96001600160a01b03166370a08231876040518263ffffffff1660e01b81526004016113e591906001600160a01b0391909116815260200190565b602060405180830381865afa158015611400573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114249190613a39565b6001600160a01b0387165f908152600d6020526040902054909550935084841061144e5784611450565b835b6001600160a01b039096165f908152601e6020908152604080832054601f9092529091205495979496959015159460ff9091169350915050565b5f546001600160a01b031633146114b35760405162461bcd60e51b81526004016104ee90613a0a565b601391909155601255565b5f546001600160a01b031633146114e75760405162461bcd60e51b81526004016104ee90613a0a565b601854156115215760405162461bcd60e51b815260206004820152600760248201526674726164696e6760c81b60448201526064016104ee565b42601b819055601855565b5f546001600160a01b031633146115555760405162461bcd60e51b81526004016104ee90613a0a565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146115c65760405162461bcd60e51b81526004016104ee90613a0a565b5f5b8251811015611380578160095f8584815181106115e7576115e7613a86565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016115c8565b5f546001600160a01b031633146116495760405162461bcd60e51b81526004016104ee90613a0a565b600380546001600160a01b0319166001600160a01b0383169081179091555f908152600860205260409020805460ff1916600117905561168b600a5f19613a67565b6003546001600160a01b03165f908152600d602052604090205550565b5f546001600160a01b031633146116d15760405162461bcd60e51b81526004016104ee90613a0a565b601155565b5f546001600160a01b031633146116ff5760405162461bcd60e51b81526004016104ee90613a0a565b62030d4081101580156117155750621e84808111155b61174b5760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b60448201526064016104ee565b601c55565b606060068054610ef5906139d8565b5f546001600160a01b031633146117885760405162461bcd60e51b81526004016104ee90613a0a565b602355565b5f546001600160a01b031633146117b65760405162461bcd60e51b81526004016104ee90613a0a565b602480546001600160a01b039092166001600160a01b0319909216821790555f908152601f60205260409020805460ff19166001179055565b5f546001600160a01b031633146118185760405162461bcd60e51b81526004016104ee90613a0a565b601691909155601755565b5f546001600160a01b0316331461184c5760405162461bcd60e51b81526004016104ee90613a0a565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f610ffb338484612055565b5f546001600160a01b031633146118ab5760405162461bcd60e51b81526004016104ee90613a0a565b5f5b8251811015611380578160085f8584815181106118cc576118cc613a86565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016118ad565b5f546001600160a01b0316331461192e5760405162461bcd60e51b81526004016104ee90613a0a565b5f81116119895760405162461bcd60e51b8152602060048201526024808201527f73746f704275726e4174416d74206d75737420626520677265617465722074686044820152630616e20360e41b60648201526084016104ee565b601455565b5f80611998611bf4565b9050600581116119aa57505060115490565b600a81116119c7576011546119c1906103e86136a3565b91505090565b600f81116119de576011546119c1906107d06136a3565b6011546119c190610bb86136a3565b6003546001600160a01b0316331480611a0f57505f546001600160a01b031633145b611a455760405162461bcd60e51b81526020600482015260076024820152660dcde40c2eae8d60cb1b60448201526064016104ee565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303815f875af1158015611a91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ab59190613a9a565b50505050565b601d8181548110611aca575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f546001600160a01b03163314611b0c5760405162461bcd60e51b81526004016104ee90613a0a565b80515f80805b83811015611bed57848181518110611b2c57611b2c613a86565b6020908102919091018101516001600160a01b038082165f818152600d909452604080852090516370a0823160e01b815260048101929092529296509194507f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc916906370a0823190602401602060405180830381865afa158015611bb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd69190613a39565b8084559050611be484611e0a565b50600101611b12565b5050505050565b5f6025545f03611c0357505f90565b5f611c0c611c72565b90506025548110611c1e575f91505090565b5f81602554611c2d9190613a26565b60255490915061120c826064613a50565b5f546001600160a01b03163314611c675760405162461bcd60e51b81526004016104ee90613a0a565b600f91909155601055565b5f805f611c7d6126aa565b5091509150805f03611c91575f9250505090565b8061120c83670de0b6b3a7640000613a50565b5f546001600160a01b03163314611ccd5760405162461bcd60e51b81526004016104ee90613a0a565b6001600160a01b038116611d085760405162461bcd60e51b815260206004820152600260248201526106e360f41b60448201526064016104ee565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526008602052604090205460ff16611da45760405162461bcd60e51b815260206004820152600260248201526137b360f11b60448201526064016104ee565b602255565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0381165f908152601e60205260408120549003611ee357601d541580611e665750806001600160a01b0316601d5f81548110611e4f57611e4f613a86565b5f918252602090912001546001600160a01b031614155b15611ee357803b8015801590611e7d575080601714155b15611e86575050565b50601d80546001600160a01b0383165f818152601e60205260408120839055600183018455929092527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b03191690911790555b50565b5f805f7f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc990505f80826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611f4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6e9190613acb565b506001600160701b0391821693501690507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c306001600160a01b0382161015611fbc57829550819450611fc3565b8195508294505b505050509091565b6001600160a01b038381165f908152600260209081526040808320938616835292905220545f198114611ab557818110156120485760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104ee565b611ab58484848403611da9565b6001600160a01b0383165f9081526009602052604090205460ff16156120a95760405162461bcd60e51b8152602060048201526009602482015268189b1858dad31a5cdd60ba1b60448201526064016104ee565b6001600160a01b0383165f90815260016020526040902054818110156120f75760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b60448201526064016104ee565b5f821580159061211f57506001600160a01b0385165f9081526008602052604090205460ff16155b801561214357506001600160a01b0384165f9081526008602052604090205460ff16155b1561218557846001600160a01b03167f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031614612185575060015b5f3290505f807f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc96001600160a01b0316876001600160a01b03161480156121da5750335f908152600e602052604090205460ff165b80156121f75750876001600160a01b0316836001600160a01b0316145b15612272576122058661276c565b90508015612272576019545f0361223e576001600160a01b0388165f9081526008602052604090205460ff16612239575f80fd5b426019555b6001600160a01b0383165f908152600d602052604081208054909350829184916122699084906136a3565b909155505f9450505b5f7f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc96001600160a01b0316896001600160a01b03160361230d576122b587612801565b9050801561230d576001600160a01b0384165f908152600d6020526040812080548392906122e4908490613a26565b90915550506001600160a01b0384165f9081526008602052604090205460ff161561230d575f94505b6001600160a01b0389165f908152600b602052604090205460ff168061234a57506001600160a01b0388165f908152600b602052604090205460ff165b156123b5576001600160a01b0389165f9081526008602052604090205460ff1615801561238f57506001600160a01b0388165f9081526008602052604090205460ff16155b156123b5576018545f036123b5576019545f1080156123ad57505f82115b6123b5575f80fd5b600c54610100900460ff161580156123dc5750601554601b546123d891906136a3565b4210155b801561241a57507f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc96001600160a01b0316896001600160a01b031614155b8015612424575081155b801561243957506001600160a01b0389163014155b1561246257600c805461ff001916610100179055612455612950565b50600c805461ff00191690555b6001600160a01b0389165f908152600b602052604090205460ff161580156124a257506001600160a01b0388165f908152600b602052604090205460ff16155b80156124ac575081155b80156124b6575080155b80156124cc57506004546001600160a01b031615155b1561265a57600f548703612598576004805460405163189cc86560e11b81526001600160a01b038c8116938201939093528a8316602482015291169063313990ca906044016020604051808303815f875af115801561252d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125519190613a9a565b6125935760405162461bcd60e51b8152602060048201526013602482015272189a5b99081c995c5d595cdd0819985a5b1959606a1b60448201526064016104ee565b61265a565b601054870361265a5760048054604051630a706d6960e01b81526001600160a01b038c8116938201939093528a83166024820152911690630a706d69906044016020604051808303815f875af11580156125f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126189190613a9a565b61265a5760405162461bcd60e51b8152602060048201526013602482015272189a5b990818dbdb999a5c9b4819985a5b1959606a1b60448201526064016104ee565b6126678989898885612afe565b6001600160a01b038916301461269f57811561268b5761268689611e0a565b61269f565b841561269f57601c5461269d81612d52565b505b505050505050505050565b5f805f6126b5611ee6565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc9811660048301529295509093507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c909116906370a0823190602401602060405180830381865afa158015612741573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127659190613a39565b9050909192565b5f805f806127786126aa565b9250925092505f808411801561278d57505f83115b156127aa578261279d8588613a50565b6127a79190613a67565b90505b5f821180156127c257506127be81856136a3565b8210155b156127f8576127f47f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc9838887876130a2565b5094505b50505050919050565b5f805f8061280d6126aa565b925092509250828110156128ff578461285a7f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc96001600160a01b03165f9081526001602052604090205490565b6128649190613a26565b7f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc96001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128e49190613a39565b6128ee9087613a50565b6128f89190613a67565b9350612948565b5f808411801561290e57505f83115b156127f85761291d8684613a26565b6129278588613a50565b6129319190613a67565b905061293d84826136a3565b8210156127f8575f80fd5b505050919050565b6001600160a01b037f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc9165f908152600160205260408120545f612991611005565b9050601454811115612af2575f601b54426129ac9190613a26565b90505f6201518061271083601654876129c59190613a50565b6129cf9190613a50565b6129d99190613a67565b6129e39190613a67565b90508015612a1857612a187f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc961dead836134cf565b5f620151806127108460175488612a2f9190613a50565b612a399190613a50565b612a439190613a67565b612a4d9190613a67565b90508015612a8057612a807f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc930836134cf565b7f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc96001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612ad8575f80fd5b505af1158015612aea573d5f803e3d5ffd5b505050505050505b505042601b5550600190565b6001600160a01b0385165f90815260016020526040902054612b21908490613a26565b6001600160a01b0386165f908152600160205260408120919091558215612d36575f808315612c4d57612b548887613515565b612b5e90846136a3565b6004549093506001600160a01b031615612c485760048054604051636386c1c760e01b815232928101929092526001600160a01b031690636386c1c79060240160c060405180830381865afa158015612bb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bdd9190613b0c565b60400151600103612c485760048054604051633d1fc1db60e01b815232928101929092525f60248301526001600160a01b031690633d1fc1db906044015f604051808303815f87803b158015612c31575f80fd5b505af1158015612c43573d5f803e3d5ffd5b505050505b612d14565b6001600160a01b0387165f908152600b602052604090205460ff1615612ca357612c7561355a565b600191505f612c8261198e565b9050612710612c918289613a50565b612c9b9190613a67565b915050612d14565b6001600160a01b0388165f908152600b602052604090205460ff1615612d1457612ccb61355a565b5f612cd4611005565b9050601454811115612d125760405162461bcd60e51b81526020600482015260076024820152666e6f742062757960c81b60448201526064016104ee565b505b8015612d3357612d2481846136a3565b9250612d338861dead83613594565b50505b612d4a8686612d458488613a26565b613594565b505050505050565b602254305f90815260016020526040902054811115612d6f575050565b602480546040516370a0823160e01b81526001600160a01b0391821660048201527f000000000000000000000000bd52a8c4db51bc7c2e769b52db0a39943b94acc9925f928416916370a082319101602060405180830381865afa158015612dd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dfd9190613a39565b6040516370a0823160e01b815261dead60048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015612e41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e659190613a39565b836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec59190613a39565b612ecf9190613a26565b612ed99190613a26565b9050805f03612ee85750505050565b601d545f90819081908180805a90505f612f00611161565b90505b8b84108015612f1157508483105b15613094578460215410612f24575f6021555b601d60215481548110612f3957612f39613a86565b5f9182526020808320909101546001600160a01b0316808352601f90915260409091205490985060ff16613053576040516370a0823160e01b81526001600160a01b0389811660048301528b16906370a0823190602401602060405180830381865afa158015612fab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fcf9190613a39565b6001600160a01b0389165f908152600d602052604090205490975087811015612ff6578097505b8188106130515789613008898e613a50565b6130129190613a67565b9650861561305157305f90815260016020526040902054613034908890613a26565b305f81815260016020526040902091909155613051908a89613594565b505b5a61305e9083613a26565b61306890856136a3565b93505a602180549193505f61307c83613b96565b9190505550828061308c90613b96565b935050612f03565b505050505050505050505050565b5f805f876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131059190613a39565b90505f7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613164573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131889190613bae565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131e79190613bae565b90505f806001600160a01b0316826001600160a01b0316141590505f8a6001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561323f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132639190613a39565b90508115613456578015613456575f61328461327f898b613a50565b61360a565b90505f6132908361360a565b905080821115613453575f807310ed43c718714eb63d5aa57b78b54704e256024d197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031601613329576132eb8385613a26565b6132f59089613a50565b613300906008613a50565b915061330d836008613a50565b613318856011613a50565b61332291906136a3565b9050613431565b73d99d1c33f9fc3444f8101754abc46c52416550d0197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031601613390576133788385613a26565b6133829089613a50565b915082613318856003613a50565b73e9d6f80028671279a28790bb4007b10b0595def0197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031601613402576133df8385613a26565b6133e99089613a50565b6133f4906003613a50565b915082613318856005613a50565b61340c8385613a26565b6134169089613a50565b915082613424856005613a50565b61342e91906136a3565b90505b61343b8183613a67565b985088156134505761344d89896136a3565b97505b50505b50505b5f613461898c613a26565b9050845f0361348b576103e861347a61327f8c84613a50565b6134849190613a26565b96506134c0565b6134bd896134998784613a50565b6134a39190613a67565b896134ae888e613a50565b6134b89190613a67565b613678565b96505b50505050509550959350505050565b6001600160a01b0383165f908152600160205260409020546134f2908290613a26565b6001600160a01b0384165f90815260016020526040902055611380838383613594565b5f80612710601a54846135289190613a50565b6135329190613a67565b905080156135535761354481836136a3565b91506135538461dead83613594565b5092915050565b5f6135686201518042613a67565b9050602654811115611ee3575f61357d611c72565b9050801561359057602581905560268290555b5050565b6001600160a01b0382165f908152600160205260409020546135b79082906136a3565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611dfd9085815260200190565b5f60038211156136695750805f613622600283613a67565b61362d9060016136a3565b90505b81811015613663579050806002816136488186613a67565b61365291906136a3565b61365c9190613a67565b9050613630565b50919050565b8115613673575060015b919050565b5f8183106136865781613688565b825b9392505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610fff57610fff61368f565b6001600160a01b0381168114611ee3575f80fd5b5f602082840312156136da575f80fd5b8135613688816136b6565b5f602080835283518060208501525f5b81811015613711578581018301518582016040015282016136f5565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215613741575f80fd5b5035919050565b5f8060408385031215613759575f80fd5b8235613764816136b6565b946020939093013593505050565b8015158114611ee3575f80fd5b5f8060408385031215613790575f80fd5b823561379b816136b6565b915060208301356137ab81613772565b809150509250929050565b5f805f606084860312156137c8575f80fd5b83356137d3816136b6565b925060208401356137e3816136b6565b929592945050506040919091013590565b5f8060408385031215613805575f80fd5b8235915060208301356137ab816136b6565b5f8060408385031215613828575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261385a575f80fd5b8135602067ffffffffffffffff8083111561387757613877613837565b8260051b604051601f19603f8301168101818110848211171561389c5761389c613837565b60405293845260208187018101949081019250878511156138bb575f80fd5b6020870191505b848210156138e45781356138d5816136b6565b835291830191908301906138c2565b979650505050505050565b5f8060408385031215613900575f80fd5b823567ffffffffffffffff811115613916575f80fd5b6139228582860161384b565b92505060208301356137ab81613772565b5f805f60608486031215613945575f80fd5b8335613950816136b6565b9250602084013591506040840135613967816136b6565b809150509250925092565b5f8060408385031215613983575f80fd5b823561398e816136b6565b915060208301356137ab816136b6565b5f602082840312156139ae575f80fd5b813567ffffffffffffffff8111156139c4575f80fd5b6139d08482850161384b565b949350505050565b600181811c908216806139ec57607f821691505b60208210810361366357634e487b7160e01b5f52602260045260245ffd5b602080825260029082015261216f60f01b604082015260600190565b81810381811115610fff57610fff61368f565b5f60208284031215613a49575f80fd5b5051919050565b8082028115828204841417610fff57610fff61368f565b5f82613a8157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613aaa575f80fd5b815161368881613772565b80516001600160701b0381168114613673575f80fd5b5f805f60608486031215613add575f80fd5b613ae684613ab5565b9250613af460208501613ab5565b9150604084015163ffffffff81168114613967575f80fd5b5f60c08284031215613b1c575f80fd5b60405160c0810181811067ffffffffffffffff82111715613b3f57613b3f613837565b6040528251613b4d816136b6565b81526020830151613b5d816136b6565b8060208301525060408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b5f60018201613ba757613ba761368f565b5060010190565b5f60208284031215613bbe575f80fd5b8151613688816136b656fea2646970667358221220530a12c3fc1a429172630a09c5d84452eba574a787d60aa1352856ba0ef992af64736f6c63430008180033
Deployed Bytecode Sourcemap
30244:382:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19599:11;;19531:9;;19566:10;;-1:-1:-1;;;;;19599:11:0;19591:19;;19587:1126;;19631:5;19640;19631:14;19627:497;;19681:9;19666:12;:24;19504:1216;19627:497;19716:5;19725;19716:14;19712:412;;19766:7;19751:12;:22;19504:1216;19712:412;19799:5;19808;19799:14;19795:329;;19849:7;19834:12;:22;19504:1216;19795:329;19882:5;19891;19882:14;19878:246;;19936:3;19917:16;:22;;;19958:18;:24;19504:1216;19878:246;20008:5;20017;20008:14;20004:120;;20062:3;20043:16;:22;;;20084:18;:24;20004:120;19504:1216;19587:1126;20165:14;;20160:1;:19;20156:109;;-1:-1:-1;;;;;20208:19:0;;;;;;:13;:19;;;;;;;;20200:49;;;;-1:-1:-1;;;20200:49:0;;216:2:1;20200:49:0;;;198:21:1;255:2;235:18;;;228:30;-1:-1:-1;;;274:18:1;;;267:47;331:18;;20200:49:0;;;;;;;;;20296:12;;20287:5;:21;;20279:54;;;;-1:-1:-1;;;20279:54:0;;562:2:1;20279:54:0;;;544:21:1;601:2;581:18;;;574:30;-1:-1:-1;;;620:18:1;;;613:50;680:18;;20279:54:0;360:344:1;20279:54:0;-1:-1:-1;;;;;20373:22:0;;20348;20373;;;:16;:22;;;;;;:30;;20398:5;;20373:30;:::i;:::-;20348:55;;20444:12;;20426:14;:30;;20418:64;;;;-1:-1:-1;;;20418:64:0;;1173:2:1;20418:64:0;;;1155:21:1;1212:2;1192:18;;;1185:30;-1:-1:-1;;;1231:18:1;;;1224:51;1292:18;;20418:64:0;971:345:1;20418:64:0;20505:14;;-1:-1:-1;;;;;20505:14:0;20497:64;;;;-1:-1:-1;;;20497:64:0;;1523:2:1;20497:64:0;;;1505:21:1;1562:2;1542:18;;;1535:30;1601:25;1581:18;;;1574:53;1644:18;;20497:64:0;1321:347:1;20497:64:0;-1:-1:-1;;;;;20578:22:0;;;;;;;:16;:22;;;;;;;:39;;;20647:14;;;20632:69;;-1:-1:-1;;;20632:69:0;;20690:10;20632:69;;;1819:51:1;;;;20647:14:0;;;20632:39;;20679:9;;1792:18:1;;20632:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30244:382;;;;4461:44;;;;;;;;;;-1:-1:-1;4461:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2434:14:1;;2427:22;2409:41;;2397:2;2382:18;4461:44:0;;;;;;;;4024:45;;;;;;;;;;-1:-1:-1;4024:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6931:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26967:187::-;;;;;;;;;;-1:-1:-1;26967:187:0;;;;;:::i;:::-;;:::i;7725:159::-;;;;;;;;;;-1:-1:-1;7725:159:0;;;;;:::i;:::-;;:::i;27673:253::-;;;;;;;;;;;;;:::i;:::-;;;3665:25:1;;;3653:2;3638:18;27673:253:0;3519:177:1;4926:39:0;;;;;;;;;;;;;;;;23460:127;;;;;;;;;;-1:-1:-1;23460:127:0;;;;;:::i;:::-;;:::i;21681:179::-;;;;;;;;;;-1:-1:-1;21681:179:0;;;;;:::i;:::-;;:::i;25572:271::-;;;;;;;;;;;;;:::i;27970:33::-;;;;;;;;;;;;;;;;7135:95;;;;;;;;;;-1:-1:-1;7215:7:0;;7135:95;;4882:37;;;;;;;;;;;;;;;;16620:115;;;;;;;;;;-1:-1:-1;16620:115:0;;;;;:::i;:::-;;:::i;8319:259::-;;;;;;;;;;-1:-1:-1;8319:259:0;;;;;:::i;:::-;;:::i;22714:49::-;;;;;;;;;;-1:-1:-1;22714:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4830:45;;;;;;;;;;;;;;;;20728:149;;;;;;;;;;-1:-1:-1;20728:149:0;;;;;:::i;:::-;;:::i;21347:202::-;;;;;;;;;;-1:-1:-1;21347:202:0;;;;;:::i;:::-;;:::i;7033:94::-;;;;;;;;;;-1:-1:-1;7110:9:0;;7033:94;;7110:9;;;;5134:36:1;;5122:2;5107:18;7033:94:0;4992:184:1;27162:503:0;;;;;;;;;;-1:-1:-1;27162:503:0;;;;;:::i;:::-;;:::i;:::-;;;;5428:25:1;;;5484:2;5469:18;;5462:34;;;;5512:18;;;5505:34;;;;5582:14;5575:22;5570:2;5555:18;;5548:50;5642:14;5635:22;5629:3;5614:19;;5607:51;5415:3;5400:19;27162:503:0;5181:483:1;4207:45:0;;;;;;;;;;-1:-1:-1;4207:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5053:29;;;;;;;;;;;;;;;;26508:140;;;;;;;;;;-1:-1:-1;26508:140:0;;;;;:::i;:::-;;:::i;4778:43::-;;;;;;;;;;;;;;;;22770:51;;;;;;;;;;-1:-1:-1;22770:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;4076:42;;;;;;;;;;-1:-1:-1;4076:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15190:36;;;;;;;;;;;;;;;;23595:29;;;;;;;;;;;;;;;;20923:185;;;;;;;;;;;;;:::i;7238:155::-;;;;;;;;;;-1:-1:-1;7238:155:0;;;;;:::i;:::-;-1:-1:-1;;;;;7342:18:0;7304:7;7342:18;;;:9;:18;;;;;;;7238:155;2593:148;;;;;;;;;;;;;:::i;22830:105::-;;;;;;;;;;-1:-1:-1;22909:11:0;:18;22830:105;;16292:194;;;;;;;;;;-1:-1:-1;16292:194:0;;;;;:::i;:::-;;:::i;4666:39::-;;;;;;;;;;;;;;;;23670:30;;;;;;;;;;;;;;;;3898:29;;;;;;;;;;-1:-1:-1;3898:29:0;;;;-1:-1:-1;;;;;3898:29:0;;;;;;-1:-1:-1;;;;;1837:32:1;;;1819:51;;1807:2;1792:18;3898:29:0;1673:203:1;26124:27:0;;;;;;;;;;-1:-1:-1;26124:27:0;;;;-1:-1:-1;;;;;26124:27:0;;;15780:184;;;;;;;;;;-1:-1:-1;15780:184:0;;;;;:::i;:::-;;:::i;15972:104::-;;;;;;;;;;-1:-1:-1;15972:104:0;;;;;:::i;:::-;;:::i;2411:79::-;;;;;;;;;;-1:-1:-1;2449:7:0;2476:6;-1:-1:-1;;;;;2476:6:0;2411:79;;22439:175;;;;;;;;;;-1:-1:-1;22439:175:0;;;;;:::i;:::-;;:::i;6825:98::-;;;;;;;;;;;;;:::i;25851:106::-;;;;;;;;;;-1:-1:-1;25851:106:0;;;;;:::i;:::-;;:::i;5017:29::-;;;;;;;;;;;;;;;;26160:136;;;;;;;;;;-1:-1:-1;26160:136:0;;;;;:::i;:::-;;:::i;20885:29::-;;;;;;;;;;;;;;;;26656:153;;;;;;;;;;-1:-1:-1;26656:153:0;;;;;:::i;:::-;;:::i;16494:118::-;;;;;;;;;;-1:-1:-1;16494:118:0;;;;;:::i;:::-;;:::i;7401:165::-;;;;;;;;;;-1:-1:-1;7401:165:0;;;;;:::i;:::-;;:::i;27934:29::-;;;;;;;;;;;;;;;;16084:200;;;;;;;;;;-1:-1:-1;16084:200:0;;;;;:::i;:::-;;:::i;26304:196::-;;;;;;;;;;-1:-1:-1;26304:196:0;;;;;:::i;:::-;;:::i;28927:420::-;;;;;;;;;;;;;:::i;21116:223::-;;;;;;;;;;-1:-1:-1;21116:223:0;;;;;:::i;:::-;;:::i;4588:28::-;;;;;;;;;;;;;;;;4625:32;;;;;;;;;;;;;;;;23631;;;;;;;;;;;;;;;;7574:143;;;;;;;;;;-1:-1:-1;7574:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;7682:18:0;;;7655:7;7682:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7574:143;22622:28;;;;;;;;;;-1:-1:-1;22622:28:0;;;;;:::i;:::-;;:::i;4552:29::-;;;;;;;;;;;;;;;;21868:519;;;;;;;;;;-1:-1:-1;21868:519:0;;;;;:::i;:::-;;:::i;28596:323::-;;;;;;;;;;;;;:::i;3865:26::-;;;;;;;;;;-1:-1:-1;3865:26:0;;;;-1:-1:-1;;;;;3865:26:0;;;22395:35;;;;;;;;;;;;;;;;26817:142;;;;;;;;;;-1:-1:-1;26817:142:0;;;;;:::i;:::-;;:::i;28012:203::-;;;;;;;;;;;;;:::i;22657:50::-;;;;;;;;;;-1:-1:-1;22657:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;4722:39;;;;;;;;;;;;;;;;2749:208;;;;;;;;;;-1:-1:-1;2749:208:0;;;;;:::i;:::-;;:::i;25965:151::-;;;;;;;;;;-1:-1:-1;25965:151:0;;;;;:::i;:::-;;:::i;6931:94::-;6979:13;7012:5;7005:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6931:94;:::o;26967:187::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;27073:5:::1;27055:14;:23;;27047:58;;;::::0;-1:-1:-1;;;27047:58:0;;9648:2:1;27047:58:0::1;::::0;::::1;9630:21:1::0;9687:2;9667:18;;;9660:30;-1:-1:-1;;;9706:18:1;;;9699:52;9768:18;;27047:58:0::1;9446:346:1::0;27047:58:0::1;27116:13;:30:::0;26967:187::o;7725:159::-;7800:4;7817:37;7826:10;7838:7;7847:6;7817:8;:37::i;:::-;-1:-1:-1;7872:4:0;7725:159;;;;;:::o;27673:253::-;27856:9;:62;;;;27819:21;;27797:4;27716:7;27779:24;;;27856:62;27779:24;;;27756:7;;27716;;27856:62;27819:21;27756:47;;27779:24;27756:47;:::i;:::-;:84;;;;:::i;:::-;:162;;;;:::i;:::-;27736:182;;27673:253;:::o;23460:127::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23547:23:0;;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:32;;-1:-1:-1;;23547:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23460:127::o;21681:179::-;21612:14;;-1:-1:-1;;;;;21612:14:0;21598:10;:28;21590:63;;;;-1:-1:-1;;;21590:63:0;;10132:2:1;21590:63:0;;;10114:21:1;10171:2;10151:18;;;10144:30;-1:-1:-1;;;10190:18:1;;;10183:52;10252:18;;21590:63:0;9930:346:1;21590:63:0;21770:27:::1;21785:11;21770:14;:27::i;:::-;-1:-1:-1::0;;;;;21808:22:0;::::1;;::::0;;;:9:::1;:22;::::0;;;;:44;;21843:9;;21808:22;:44:::1;::::0;21843:9;;21808:44:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;21681:179:0:o;25572:271::-;25623:19;25656:13;25675:15;:13;:15::i;:::-;-1:-1:-1;25655:35:0;-1:-1:-1;25701:14:0;25655:35;;25701:14;:::i;:::-;;;25726:15;25751:9;-1:-1:-1;;;;;25744:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25726:49;;25830:5;25819:7;25801:15;;:25;;;;:::i;:::-;25800:35;;;;:::i;:::-;25786:49;;25644:199;;25572:271;:::o;16620:115::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16700:18:0;;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:27;;-1:-1:-1;;16700:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16620:115::o;8319:259::-;8416:4;8451:10;8472:38;8488:4;8451:10;8503:6;8472:15;:38::i;:::-;8521:27;8531:4;8537:2;8541:6;8521:9;:27::i;:::-;-1:-1:-1;8566:4:0;;8319:259;-1:-1:-1;;;;8319:259:0:o;20728:149::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;20803:14:::1;:25:::0;;-1:-1:-1;;;;;20803:25:0;;::::1;-1:-1:-1::0;;;;;;20803:25:0;;::::1;::::0;::::1;::::0;;:14:::1;20839:23:::0;;;:13:::1;:23;::::0;;;;:30;;-1:-1:-1;;20839:30:0::1;20803:25:::0;20839:30:::1;::::0;;20728:149::o;21347:202::-;21442:11;;-1:-1:-1;;;;;21442:11:0;21428:10;:25;;:50;;-1:-1:-1;2449:7:0;2476:6;-1:-1:-1;;;;;2476:6:0;21457:10;:21;21428:50;21420:70;;;;-1:-1:-1;;;21420:70:0;;11067:2:1;21420:70:0;;;11049:21:1;11106:1;11086:18;;;11079:29;-1:-1:-1;;;11124:18:1;;;11117:37;11171:18;;21420:70:0;10865:330:1;21420:70:0;21501:30;;-1:-1:-1;;;;;21501:22:0;;;:30;;;;;21524:6;;21501:30;;;;21524:6;21501:22;:30;;;;;;;;;;;;;;;;;;;;;21347:202;;:::o;27162:503::-;27266:17;27285:16;27303:23;27328:19;27349:15;27401:9;-1:-1:-1;;;;;27394:27:0;;27422:7;27394:36;;;;;;;;;;;;;;-1:-1:-1;;;;;1837:32:1;;;;1819:51;;1807:2;1792:18;;1673:203;27394:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27452:18:0;;;;;;:9;:18;;;;;:27;27382:48;;-1:-1:-1;27452:27:0;-1:-1:-1;27508:20:0;;;:43;;27542:9;27508:43;;;27531:8;27508:43;-1:-1:-1;;;;;27579:24:0;;;27606:1;27579:24;;;:15;:24;;;;;;;;;27631:17;:26;;;;;;;27162:503;;;;27490:61;27579:28;;;;27631:26;;;;;-1:-1:-1;27162:503:0;-1:-1:-1;;27162:503:0:o;26508:140::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;26591:12:::1;:19:::0;;;;26621:12:::1;:19:::0;26508:140::o;20923:185::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;20988:14:::1;::::0;20983:19;20975:39:::1;;;::::0;-1:-1:-1;;;20975:39:0;;11402:2:1;20975:39:0::1;::::0;::::1;11384:21:1::0;11441:1;11421:18;;;11414:29;-1:-1:-1;;;11459:18:1;;;11452:37;11506:18;;20975:39:0::1;11200:330:1::0;20975:39:0::1;21042:15;21025:14;:32:::0;;;21068:14:::1;:32:::0;20923:185::o;2593:148::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;2700:1:::1;2684:6:::0;;2663:40:::1;::::0;-1:-1:-1;;;;;2684:6:0;;::::1;::::0;2663:40:::1;::::0;2700:1;;2663:40:::1;2731:1;2714:19:::0;;-1:-1:-1;;;;;;2714:19:0::1;::::0;;2593:148::o;16292:194::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;16390:6:::1;16385:94;16406:4;:11;16402:1;:15;16385:94;;;16461:6;16439:10;:19;16450:4;16455:1;16450:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;16439:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;16439:19:0;:28;;-1:-1:-1;;16439:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;16419:3:0::1;16385:94;;15780:184:::0;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;15848:11:::1;:18:::0;;-1:-1:-1;;;;;;15848:18:0::1;-1:-1:-1::0;;;;;15848:18:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;15877:19:0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;15877:26:0::1;-1:-1:-1::0;15877:26:0::1;::::0;;15948:8:::1;15954:2;-1:-1:-1::0;;15948:8:0::1;:::i;:::-;15924:11;::::0;-1:-1:-1;;;;;15924:11:0::1;15914:22;::::0;;;:9:::1;:22;::::0;;;;:42;-1:-1:-1;15780:184:0:o;15972:104::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;16043:11:::1;:25:::0;15972:104::o;22439:175::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;22531:6:::1;22518:9;:19;;:43;;;;;22554:7;22541:9;:20;;22518:43;22510:63;;;::::0;-1:-1:-1;;;22510:63:0;;11869:2:1;22510:63:0::1;::::0;::::1;11851:21:1::0;11908:1;11888:18;;;11881:29;-1:-1:-1;;;11926:18:1;;;11919:37;11973:18;;22510:63:0::1;11667:330:1::0;22510:63:0::1;22584:10;:22:::0;22439:175::o;6825:98::-;6875:13;6908:7;6901:14;;;;;:::i;25851:106::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;25925:15:::1;:24:::0;25851:106::o;26160:136::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;26228:12:::1;:19:::0;;-1:-1:-1;;;;;26228:19:0;;::::1;-1:-1:-1::0;;;;;;26228:19:0;;::::1;::::0;::::1;::::0;;:12:::1;26258:23:::0;;;:17:::1;:23;::::0;;;;:30;;-1:-1:-1;;26258:30:0::1;26228:19:::0;26258:30:::1;::::0;;26160:136::o;26656:153::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;26738:16:::1;:24:::0;;;;26773:18:::1;:28:::0;26656:153::o;16494:118::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16576:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;16576:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16494:118::o;7401:165::-;7479:4;7496:40;7506:10;7518:9;7529:6;7496:9;:40::i;16084:200::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;16185:6:::1;16180:97;16201:4;:11;16197:1;:15;16180:97;;;16259:6;16234:13;:22;16248:4;16253:1;16248:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;16234:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;16234:22:0;:31;;-1:-1:-1;;16234:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;16214:3:0::1;16180:97;;26304:196:::0;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;26409:1:::1;26392:14;:18;26384:67;;;::::0;-1:-1:-1;;;26384:67:0;;12204:2:1;26384:67:0::1;::::0;::::1;12186:21:1::0;12243:2;12223:18;;;12216:30;12282:34;12262:18;;;12255:62;-1:-1:-1;;;12333:18:1;;;12326:34;12377:19;;26384:67:0::1;12002:400:1::0;26384:67:0::1;26462:13;:30:::0;26304:196::o;28927:420::-;28977:7;28997:19;29019:23;:21;:23::i;:::-;28997:45;;29072:1;29057:11;:16;29053:287;;-1:-1:-1;;29097:11:0;;;28927:420::o;29053:287::-;29145:2;29130:11;:17;29126:214;;29171:11;;:18;;29185:4;29171:18;:::i;:::-;29164:25;;;28927:420;:::o;29126:214::-;29226:2;29211:11;:17;29207:133;;29252:11;;:18;;29266:4;29252:18;:::i;29207:133::-;29310:11;;:18;;29324:4;29310:18;:::i;21116:223::-;21225:11;;-1:-1:-1;;;;;21225:11:0;21211:10;:25;;:50;;-1:-1:-1;2449:7:0;2476:6;-1:-1:-1;;;;;2476:6:0;21240:10;:21;21211:50;21203:70;;;;-1:-1:-1;;;21203:70:0;;11067:2:1;21203:70:0;;;11049:21:1;11106:1;11086:18;;;11079:29;-1:-1:-1;;;11124:18:1;;;11117:37;11171:18;;21203:70:0;10865:330:1;21203:70:0;21284:37;;-1:-1:-1;;;21284:37:0;;-1:-1:-1;;;;;12599:32:1;;;21284:37:0;;;12581:51:1;12648:18;;;12641:34;;;21284:23:0;;;;;12554:18:1;;21284:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21116:223;;;:::o;22622:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22622:28:0;;-1:-1:-1;22622:28:0;:::o;21868:519::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;21960:15;;21946:11:::1;::::0;;22048:332:::1;22068:3;22064:1;:7;22048:332;;;22100:8;22109:1;22100:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;22137:18:0;;::::1;;::::0;;;:9:::1;:18:::0;;;;;;;22189:36;;-1:-1:-1;;;22189:36:0;;::::1;::::0;::::1;1819:51:1::0;;;;22100:11:0;;-1:-1:-1;22137:18:0;;-1:-1:-1;22196:9:0::1;22189:27;::::0;::::1;::::0;1792:18:1;;22189:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22240:28:::0;;;22170:55;-1:-1:-1;22283:23:0::1;22298:7:::0;22283:14:::1;:23::i;:::-;-1:-1:-1::0;22350:3:0::1;;22048:332;;;;21935:452;;;21868:519:::0;:::o;28596:323::-;28650:7;28674:14;;28692:1;28674:19;28670:33;;-1:-1:-1;28702:1:0;;28596:323::o;28670:33::-;28714:20;28737:17;:15;:17::i;:::-;28714:40;;28785:14;;28769:12;:30;28765:44;;28808:1;28801:8;;;28596:323;:::o;28765:44::-;28820:12;28852;28835:14;;:29;;;;:::i;:::-;28897:14;;28820:44;;-1:-1:-1;28883:10:0;28820:44;28890:3;28883:10;:::i;26817:142::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;26906:7:::1;:18:::0;;;;26935:6:::1;:16:::0;26817:142::o;28012:203::-;28060:7;28081:13;28096:14;28116;:12;:14::i;:::-;28080:50;;;;;28145:6;28155:1;28145:11;28141:25;;28165:1;28158:8;;;;28012:203;:::o;28141:25::-;28201:6;28185:12;:5;28193:4;28185:12;:::i;2749:208::-;2538:6;;-1:-1:-1;;;;;2538:6:0;2548:10;2538:20;2530:35;;;;-1:-1:-1;;;2530:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2838:22:0;::::1;2830:37;;;::::0;-1:-1:-1;;;2830:37:0;;13138:2:1;2830:37:0::1;::::0;::::1;13120:21:1::0;13177:1;13157:18;;;13150:29;-1:-1:-1;;;13195:18:1;;;13188:32;13237:18;;2830:37:0::1;12936:325:1::0;2830:37:0::1;2904:6;::::0;;2883:38:::1;::::0;-1:-1:-1;;;;;2883:38:0;;::::1;::::0;2904:6;::::1;::::0;2883:38:::1;::::0;::::1;2932:6;:17:::0;;-1:-1:-1;;;;;;2932:17:0::1;-1:-1:-1::0;;;;;2932:17:0;;;::::1;::::0;;;::::1;::::0;;2749:208::o;25965:151::-;26053:10;26039:25;;;;:13;:25;;;;;;;;26031:40;;;;-1:-1:-1;;;26031:40:0;;13468:2:1;26031:40:0;;;13450:21:1;13507:1;13487:18;;;13480:29;-1:-1:-1;;;13525:18:1;;;13518:32;13567:18;;26031:40:0;13266:325:1;26031:40:0;26082:17;:26;25965:151::o;8586:177::-;-1:-1:-1;;;;;8671:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8723:32;;3665:25:1;;;8723:32:0;;3638:18:1;8723:32:0;;;;;;;;8586:177;;;:::o;22943:509::-;-1:-1:-1;;;;;23008:20:0;;;;;;:15;:20;;;;;;23003:25;;22999:446;;23054:11;:18;23049:23;;:48;;;23094:3;-1:-1:-1;;;;;23076:21:0;:11;23088:1;23076:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23076:14:0;:21;;23049:48;23045:389;;;23189:16;;23246:8;;;;;:22;;;23264:4;23258:2;:10;;23246:22;23242:77;;;23293:7;22943:509;:::o;23242:77::-;-1:-1:-1;23360:11:0;:18;;-1:-1:-1;;;;;23337:20:0;;;;;;:15;:20;;;;;:41;;;23397:21;;;;;;;;;;;;;-1:-1:-1;;;;;;23397:21:0;;;;;;23045:389;22943:509;:::o;12991:410::-;13038:14;13054:13;13080:18;13111:9;13080:41;;13133:7;13142:10;13158:8;-1:-1:-1;;;;;13158:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;13132:48:0;;;;-1:-1:-1;13132:48:0;;-1:-1:-1;13214:5:0;13255:4;-1:-1:-1;;;;;13234:26:0;;;13230:164;;;13286:2;13277:11;;13311:2;13303:10;;13230:164;;;13355:2;13346:11;;13380:2;13372:10;;13230:164;13069:332;;;;12991:410;;:::o;7892:419::-;-1:-1:-1;;;;;7682:18:0;;;7993:24;7682:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;8060:37:0;;8056:248;;8142:6;8122:16;:26;;8114:68;;;;-1:-1:-1;;;8114:68:0;;14446:2:1;8114:68:0;;;14428:21:1;14485:2;14465:18;;;14458:30;14524:31;14504:18;;;14497:59;14573:18;;8114:68:0;14244:353:1;8114:68:0;8226:51;8235:5;8242:7;8270:6;8251:16;:25;8226:8;:51::i;8771:2921::-;-1:-1:-1;;;;;8860:16:0;;;;;;:10;:16;;;;;;;;8859:17;8851:39;;;;-1:-1:-1;;;8851:39:0;;14804:2:1;8851:39:0;;;14786:21:1;14843:1;14823:18;;;14816:29;-1:-1:-1;;;14861:18:1;;;14854:39;14910:18;;8851:39:0;14602:332:1;8851:39:0;-1:-1:-1;;;;;7342:18:0;;8903:15;7342:18;;;:9;:18;;;;;;8955:17;;;;8947:33;;;;-1:-1:-1;;;8947:33:0;;15141:2:1;8947:33:0;;;15123:21:1;15180:1;15160:18;;;15153:29;-1:-1:-1;;;15198:18:1;;;15191:33;15241:18;;8947:33:0;14939:326:1;8947:33:0;8991:12;9020:11;;;;;:35;;-1:-1:-1;;;;;;9036:19:0;;;;;;:13;:19;;;;;;;;9035:20;9020:35;:57;;;;-1:-1:-1;;;;;;9060:17:0;;;;;;:13;:17;;;;;;;;9059:18;9020:57;9016:172;;;9122:4;-1:-1:-1;;;;;9098:28:0;9106:11;-1:-1:-1;;;;;9098:28:0;;9094:83;;-1:-1:-1;9157:4:0;9094:83;9200:16;9219:9;9200:28;;9239:25;9275:22;9318:9;-1:-1:-1;;;;;9312:15:0;:2;-1:-1:-1;;;;;9312:15:0;;:43;;;;-1:-1:-1;9344:10:0;9331:24;;;;:12;:24;;;;;;;;9312:43;:63;;;;;9371:4;-1:-1:-1;;;;;9359:16:0;:8;-1:-1:-1;;;;;9359:16:0;;9312:63;9308:496;;;9409:23;9425:6;9409:15;:23::i;:::-;9392:40;-1:-1:-1;9451:18:0;;9447:346;;9499:14;;9494:1;:19;9490:151;;-1:-1:-1;;;;;9546:19:0;;;;;;:13;:19;;;;;;;;9538:28;;;;;;9606:15;9589:14;:32;9490:151;-1:-1:-1;;;;;9670:19:0;;;;;;:9;:19;;;;;9708:35;;9670:19;;-1:-1:-1;9729:14:0;;9670:19;;9708:35;;9729:14;;9708:35;:::i;:::-;;;;-1:-1:-1;9772:5:0;;-1:-1:-1;;9447:346:0;9816:25;9864:9;-1:-1:-1;;;;;9856:17:0;:4;-1:-1:-1;;;;;9856:17:0;;9852:326;;9910:26;9929:6;9910:18;:26::i;:::-;9890:46;-1:-1:-1;9955:21:0;;9951:216;;-1:-1:-1;;;;;9997:19:0;;;;;;:9;:19;;;;;:49;;10029:17;;9997:19;:49;;10029:17;;9997:49;:::i;:::-;;;;-1:-1:-1;;;;;;;10069:23:0;;;;;;:13;:23;;;;;;;;10065:87;;;10127:5;10117:15;;10065:87;-1:-1:-1;;;;;10194:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;10217:17:0;;;;;;:13;:17;;;;;;;;10194:40;10190:273;;;-1:-1:-1;;;;;10256:19:0;;;;;;:13;:19;;;;;;;;10255:20;:42;;;;-1:-1:-1;;;;;;10280:17:0;;;;;;:13;:17;;;;;;;;10279:18;10255:42;10251:201;;;10327:14;;10322:1;:19;10318:119;;10379:14;;10375:1;:18;:40;;;;;10414:1;10397:14;:18;10375:40;10366:51;;;;;;10494:8;;;;;;;10493:9;:77;;;;;10555:15;;10538:14;;:32;;;;:::i;:::-;10519:15;:51;;10493:77;:111;;;;;10595:9;-1:-1:-1;;;;;10587:17:0;:4;-1:-1:-1;;;;;10587:17:0;;;10493:111;:147;;;;-1:-1:-1;10621:19:0;;10493:147;:185;;;;-1:-1:-1;;;;;;10657:21:0;;10673:4;10657:21;;10493:185;10475:332;;;10705:8;:15;;-1:-1:-1;;10705:15:0;;;;;10735:29;:27;:29::i;:::-;-1:-1:-1;10779:8:0;:16;;-1:-1:-1;;10779:16:0;;;10475:332;-1:-1:-1;;;;;10838:19:0;;;;;;:13;:19;;;;;;;;10837:20;:55;;;;-1:-1:-1;;;;;;10875:17:0;;;;;;:13;:17;;;;;;;;10874:18;10837:55;:91;;;;-1:-1:-1;10909:19:0;;10837:91;:130;;;;-1:-1:-1;10945:22:0;;10837:130;:175;;;;-1:-1:-1;10984:14:0;;-1:-1:-1;;;;;10984:14:0;:28;;10837:175;10819:520;;;11053:7;;11043:6;:17;11039:289;;11104:14;;;11089:52;;-1:-1:-1;;;11089:52:0;;-1:-1:-1;;;;;15500:15:1;;;11089:52:0;;;15482:34:1;;;;15552:15;;;15532:18;;;15525:43;11104:14:0;;;11089:42;;15417:18:1;;11089:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11081:84;;;;-1:-1:-1;;;11081:84:0;;15781:2:1;11081:84:0;;;15763:21:1;15820:2;15800:18;;;15793:30;-1:-1:-1;;;15839:18:1;;;15832:49;15898:18;;11081:84:0;15579:343:1;11081:84:0;11039:289;;;11201:6;;11191;:16;11187:141;;11251:14;;;11236:52;;-1:-1:-1;;;11236:52:0;;-1:-1:-1;;;;;15500:15:1;;;11236:52:0;;;15482:34:1;;;;15552:15;;;15532:18;;;15525:43;11251:14:0;;;11236:42;;15417:18:1;;11236:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11228:84;;;;-1:-1:-1;;;11228:84:0;;16129:2:1;11228:84:0;;;16111:21:1;16168:2;16148:18;;;16141:30;-1:-1:-1;;;16187:18:1;;;16180:49;16246:18;;11228:84:0;15927:343:1;11228:84:0;11351:60;11366:4;11372:2;11376:6;11384:7;11393:17;11351:14;:60::i;:::-;-1:-1:-1;;;;;11428:21:0;;11444:4;11428:21;11424:261;;11470:18;;11466:208;;11509:20;11524:4;11509:14;:20::i;:::-;11466:208;;;11555:7;11551:123;;;11603:10;;11632:26;11603:10;11632:15;:26::i;:::-;11564:110;11551:123;8840:2852;;;;;;8771:2921;;;:::o;12772:211::-;12818:14;12834:13;12849:20;12900:15;:13;:15::i;:::-;12941:34;;-1:-1:-1;;;12941:34:0;;-1:-1:-1;;;;;12965:9:0;1837:32:1;;12941:34:0;;;1819:51:1;12882:33:0;;-1:-1:-1;12882:33:0;;-1:-1:-1;12948:5:0;12941:23;;;;;;1792:18:1;;12941:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12926:49;;12772:211;;;:::o;11700:482::-;11764:17;11795:14;11811:13;11826:20;11850:14;:12;:14::i;:::-;11794:70;;;;;;11875:19;11918:1;11909:6;:10;:23;;;;;11931:1;11923:5;:9;11909:23;11905:95;;;11983:5;11964:15;11973:6;11964;:15;:::i;:::-;11963:25;;;;:::i;:::-;11949:39;;11905:95;12029:1;12014:12;:16;:56;;;;-1:-1:-1;12050:20:0;12059:11;12050:6;:20;:::i;:::-;12034:12;:36;;12014:56;12010:165;;;12103:60;12116:9;12127:12;12141:6;12149;12157:5;12103:12;:60::i;:::-;-1:-1:-1;12087:76:0;-1:-1:-1;12010:165:0;11783:399;;;;11700:482;;;:::o;12190:574::-;12257:17;12288:14;12304:13;12319:20;12343:14;:12;:14::i;:::-;12287:70;;;;;;12387:6;12372:12;:21;12368:389;;;12494:6;12471:20;12481:9;-1:-1:-1;;;;;7342:18:0;7304:7;7342:18;;;:9;:18;;;;;;;7238:155;12471:20;:29;;;;:::i;:::-;12442:9;-1:-1:-1;;;;;12432:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12423:43;;:6;:43;:::i;:::-;12422:79;;;;:::i;:::-;12410:91;;12368:389;;;12534:19;12581:1;12572:6;:10;:23;;;;;12594:1;12586:5;:9;12572:23;12568:178;;;12651:14;12659:6;12651:5;:14;:::i;:::-;12631:15;12640:6;12631;:15;:::i;:::-;12630:36;;;;:::i;:::-;12616:50;-1:-1:-1;12709:20:0;12723:6;12616:50;12709:20;:::i;:::-;12693:12;:36;;12685:45;;;;;12368:389;12276:488;;;12190:574;;;:::o;29355:882::-;-1:-1:-1;;;;;29461:9:0;7342:18;29412:4;7342:18;;;:9;:18;;;;;;29482:24;29509:12;:10;:12::i;:::-;29482:39;;29555:13;;29536:16;:32;29532:631;;;29585:25;29631:14;;29613:15;:32;;;;:::i;:::-;29585:60;;29662:18;29746:5;29738;29717:17;29698:16;;29684:11;:30;;;;:::i;:::-;:50;;;;:::i;:::-;29683:60;;;;:::i;:::-;:68;;;;:::i;:::-;29662:89;-1:-1:-1;29770:14:0;;29766:109;;29805:54;29820:9;29839:6;29848:10;29805:14;:54::i;:::-;29889:20;29977:5;29969;29948:17;29927:18;;29913:11;:32;;;;:::i;:::-;:52;;;;:::i;:::-;29912:62;;;;:::i;:::-;:70;;;;:::i;:::-;29889:93;-1:-1:-1;30001:16:0;;29997:111;;30038:54;30053:9;30072:4;30079:12;30038:14;:54::i;:::-;30134:9;-1:-1:-1;;;;;30124:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29570:593;;;29532:631;-1:-1:-1;;30192:15:0;30175:14;:32;-1:-1:-1;30225:4:0;;29355:882::o;13409:1563::-;-1:-1:-1;;;;;13617:17:0;;;;;;:9;:17;;;;;;:27;;13637:7;;13617:27;:::i;:::-;-1:-1:-1;;;;;13597:17:0;;;;;;:9;:17;;;;;:47;;;;13685:1216;;;;13713:11;;13779:21;;13775:943;;13834:36;13854:6;13862:7;13834:19;:36::i;:::-;13821:49;;;;:::i;:::-;13893:14;;13821:49;;-1:-1:-1;;;;;;13893:14:0;:28;13889:252;;13965:14;;;13950:53;;-1:-1:-1;;;13950:53:0;;13993:9;13950:53;;;1819:51:1;;;;-1:-1:-1;;;;;13965:14:0;;13950:42;;1792:18:1;;13950:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;14015:1;13950:66;13946:176;;14060:14;;;14045:53;;-1:-1:-1;;;14045:53:0;;14085:9;14045:53;;;12581:51:1;;;;14060:14:0;12648:18:1;;;12641:34;-1:-1:-1;;;;;14060:14:0;;14045:39;;12554:18:1;;14045:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13946:176;13775:943;;;-1:-1:-1;;;;;14166:24:0;;;;;;:13;:24;;;;;;;;14162:556;;;14211:18;:16;:18::i;:::-;14281:4;14272:13;;14304:18;14325:19;:17;:19::i;:::-;14304:40;-1:-1:-1;14404:5:0;14380:20;14304:40;14380:7;:20;:::i;:::-;14379:30;;;;:::i;:::-;14363:46;;14192:233;14162:556;;;-1:-1:-1;;;;;14435:21:0;;;;;;:13;:21;;;;;;;;14431:287;;;14477:18;:16;:18::i;:::-;14537:25;14565:12;:10;:12::i;:::-;14537:40;;14620:13;;14600:17;:33;14596:107;;;14658:25;;-1:-1:-1;;;14658:25:0;;17652:2:1;14658:25:0;;;17634:21:1;17691:1;17671:18;;;17664:29;-1:-1:-1;;;17709:18:1;;;17702:37;17756:18;;14658:25:0;17450:330:1;14658:25:0;14458:260;14431:287;14738:17;;14734:156;;14776:26;14789:13;14776:26;;:::i;:::-;;;14821:53;14835:6;14851;14860:13;14821;:53::i;:::-;13698:1203;;13685:1216;14911:53;14925:6;14933:9;14944:19;14954:9;14944:7;:19;:::i;:::-;14911:13;:53::i;:::-;13586:1386;13409:1563;;;;;:::o;23709:1855::-;23792:17;;23842:4;7304:7;7342:18;;;:9;:18;;;;;;23792:17;-1:-1:-1;23820:81:0;;;23883:7;23709:1855;:::o;23820:81::-;24093:12;;;24073:33;;-1:-1:-1;;;24073:33:0;;-1:-1:-1;;;;;24093:12:0;;;24073:33;;;1819:51:1;23939:9:0;;23913:16;;24073:19;;;;;1792:18:1;24073:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24021:36;;-1:-1:-1;;;24021:36:0;;24049:6;24021:36;;;1819:51:1;-1:-1:-1;;;;;24021:19:0;;;;;1792:18:1;;24021:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23982:9;-1:-1:-1;;;;;23982:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;;;:::i;:::-;:124;;;;:::i;:::-;23960:146;;24128:14;24123:1;:19;24119:58;;24159:7;;;23709:1855;:::o;24119:58::-;24303:11;:18;24189:19;;;;;;;;;24415:9;24397:27;;24435:19;24457:20;:18;:20::i;:::-;24435:42;;24490:1067;24507:3;24497:7;:13;:46;;;;;24527:16;24514:10;:29;24497:46;24490:1067;;;24582:16;24564:14;;:34;24560:93;;24636:1;24619:14;:18;24560:93;24681:11;24693:14;;24681:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24681:27:0;24728:30;;;:17;:30;;;;;;;;24681:27;;-1:-1:-1;24728:30:0;;24723:673;;24793:32;;-1:-1:-1;;;24793:32:0;;-1:-1:-1;;;;;1837:32:1;;;24793::0;;;1819:51:1;24793:19:0;;;;;1792:18:1;;24793:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24863:22:0;;24844:16;24863:22;;;:9;:22;;;;;:31;24779:46;;-1:-1:-1;24917:22:0;;;24913:93;;;24978:8;24964:22;;24913:93;25043:11;25028;:26;25024:357;;25122:14;25089:29;25107:11;25089:15;:29;:::i;:::-;25088:48;;;;:::i;:::-;25079:57;-1:-1:-1;25163:10:0;;25159:203;;25247:4;25229:24;;;;:9;:24;;;;;;:33;;25256:6;;25229:33;:::i;:::-;25220:4;25202:24;;;;:9;:24;;;;;:60;;;;25289:49;;25318:11;25331:6;25289:13;:49::i;:::-;24760:636;24723:673;25443:9;25433:19;;:7;:19;:::i;:::-;25422:31;;:7;:31;:::i;:::-;25412:41;;25478:9;25502:14;:16;;25468:19;;-1:-1:-1;25502:14:0;:16;;;:::i;:::-;;;;;;25533:12;;;;;:::i;:::-;;;;24490:1067;;;23755:1809;;;;;;;;;;;23709:1855;:::o;17158:2311::-;17328:17;17347:22;17382:23;17418:6;-1:-1:-1;;;;;17408:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17382:57;;17450:13;17479:11;-1:-1:-1;;;;;17479:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17466:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17450:59;;17520:10;17550:1;-1:-1:-1;;;;;17533:19:0;:5;-1:-1:-1;;;;;17533:19:0;;;17520:32;;17563:14;17590:6;-1:-1:-1;;;;;17580:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17563:42;;17620:5;17616:1585;;;17646:11;;17642:1548;;17678:13;17694;17699:7;17704:2;17699;:7;:::i;:::-;17694:4;:13::i;:::-;17678:29;;17726:17;17746:12;17751:6;17746:4;:12::i;:::-;17726:32;;17789:9;17781:5;:17;17777:1398;;;17823:17;;-1:-1:-1;;17917:11:0;-1:-1:-1;;;;;17909:75:0;;17905:1108;;18084:17;18092:9;18084:5;:17;:::i;:::-;18065:37;;:15;:37;:::i;:::-;:41;;18105:1;18065:41;:::i;:::-;18053:53;-1:-1:-1;18161:13:0;:9;18173:1;18161:13;:::i;:::-;18147:10;:5;18155:2;18147:10;:::i;:::-;:28;;;;:::i;:::-;18133:42;;17905:1108;;;-1:-1:-1;;18217:11:0;-1:-1:-1;;;;;18209:75:0;;18205:808;;18391:17;18399:9;18391:5;:17;:::i;:::-;18372:37;;:15;:37;:::i;:::-;18360:49;-1:-1:-1;18462:9:0;18450;:5;18458:1;18450:9;:::i;18205:808::-;-1:-1:-1;;18513:11:0;-1:-1:-1;;;;;18505:75:0;;18501:512;;18677:17;18685:9;18677:5;:17;:::i;:::-;18658:37;;:15;:37;:::i;:::-;:41;;18698:1;18658:41;:::i;:::-;18646:53;-1:-1:-1;18752:9:0;18740;:5;18748:1;18740:9;:::i;18501:512::-;18909:17;18917:9;18909:5;:17;:::i;:::-;18890:37;;:15;:37;:::i;:::-;18878:49;-1:-1:-1;18980:9:0;18968;:5;18976:1;18968:9;:::i;:::-;:21;;;;:::i;:::-;18954:35;;18501:512;19052:23;19064:11;19052:9;:23;:::i;:::-;19035:40;-1:-1:-1;19102:18:0;;19098:57;;19122:33;19141:14;19122:33;;:::i;:::-;;;19098:57;17800:1375;;17777:1398;17659:1531;;17642:1548;19211:15;19229:13;19240:2;19229:8;:13;:::i;:::-;19211:31;;19257:15;19276:1;19257:20;19253:209;;19331:4;19306:22;19311:16;19321:6;19311:7;:16;:::i;19306:22::-;:29;;;;:::i;:::-;19294:41;;19253:209;;;19380:70;19414:2;19385:25;19395:15;19385:7;:25;:::i;:::-;19384:32;;;;:::i;:::-;19447:2;19419:24;19428:15;19419:6;:24;:::i;:::-;19418:31;;;;:::i;:::-;19380:3;:70::i;:::-;19368:82;;19253:209;17371:2098;;;;;17158:2311;;;;;;;;:::o;14980:202::-;-1:-1:-1;;;;;15095:17:0;;;;;;:9;:17;;;;;;:27;;15115:7;;15095:27;:::i;:::-;-1:-1:-1;;;;;15075:17:0;;;;;;:9;:17;;;;;:47;15133:41;15085:6;15155:9;15166:7;15133:13;:41::i;15243:342::-;15322:17;15352:24;15407:5;15390:13;;15380:7;:23;;;;:::i;:::-;15379:33;;;;:::i;:::-;15352:60;-1:-1:-1;15429:20:0;;15425:153;;15466:29;15479:16;15466:29;;:::i;:::-;;;15510:56;15524:6;15540;15549:16;15510:13;:56::i;:::-;15341:244;15243:342;;;;:::o;28223:365::-;28271:18;28292:24;28310:6;28292:15;:24;:::i;:::-;28271:45;;28344:18;;28331:10;:31;28327:254;;;28379:20;28402:17;:15;:17::i;:::-;28379:40;-1:-1:-1;28438:16:0;;28434:136;;28475:14;:29;;;28523:18;:31;;;28434:136;28364:217;28260:328;28223:365::o;15593:179::-;-1:-1:-1;;;;;15696:13:0;;;;;;:9;:13;;;;;;:23;;15712:7;;15696:23;:::i;:::-;-1:-1:-1;;;;;15680:13:0;;;;;;;:9;:13;;;;;;;:39;;;;15735:29;;;;;;;;;;15756:7;3665:25:1;;3653:2;3638:18;;3519:177;16847:303:0;16892:6;16919:1;16915;:5;16911:232;;;-1:-1:-1;16941:1:0;16957:6;16966:5;16970:1;16941;16966:5;:::i;:::-;:9;;16974:1;16966:9;:::i;:::-;16957:18;;16990:92;17001:1;16997;:5;16990:92;;;17027:1;-1:-1:-1;17027:1:0;17065;17027;17052:5;17027:1;17052;:5;:::i;:::-;:9;;;;:::i;:::-;17051:15;;;;:::i;:::-;17047:19;;16990:92;;;16922:171;16847:303;;;:::o;16911:232::-;17103:6;;17099:44;;-1:-1:-1;17130:1:0;17099:44;16847:303;;;:::o;16743:96::-;16795:6;16822:1;16818;:5;:13;;16830:1;16818:13;;;16826:1;16818:13;16814:17;16743:96;-1:-1:-1;;;16743:96:0:o;709:127:1:-;770:10;765:3;761:20;758:1;751:31;801:4;798:1;791:15;825:4;822:1;815:15;841:125;906:9;;;927:10;;;924:36;;;940:18;;:::i;1881:131::-;-1:-1:-1;;;;;1956:31:1;;1946:42;;1936:70;;2002:1;1999;1992:12;2017:247;2076:6;2129:2;2117:9;2108:7;2104:23;2100:32;2097:52;;;2145:1;2142;2135:12;2097:52;2184:9;2171:23;2203:31;2228:5;2203:31;:::i;2461:548::-;2573:4;2602:2;2631;2620:9;2613:21;2663:6;2657:13;2706:6;2701:2;2690:9;2686:18;2679:34;2731:1;2741:140;2755:6;2752:1;2749:13;2741:140;;;2850:14;;;2846:23;;2840:30;2816:17;;;2835:2;2812:26;2805:66;2770:10;;2741:140;;;2745:3;2930:1;2925:2;2916:6;2905:9;2901:22;2897:31;2890:42;3000:2;2993;2989:7;2984:2;2976:6;2972:15;2968:29;2957:9;2953:45;2949:54;2941:62;;;;2461:548;;;;:::o;3014:180::-;3073:6;3126:2;3114:9;3105:7;3101:23;3097:32;3094:52;;;3142:1;3139;3132:12;3094:52;-1:-1:-1;3165:23:1;;3014:180;-1:-1:-1;3014:180:1:o;3199:315::-;3267:6;3275;3328:2;3316:9;3307:7;3303:23;3299:32;3296:52;;;3344:1;3341;3334:12;3296:52;3383:9;3370:23;3402:31;3427:5;3402:31;:::i;:::-;3452:5;3504:2;3489:18;;;;3476:32;;-1:-1:-1;;;3199:315:1:o;3701:118::-;3787:5;3780:13;3773:21;3766:5;3763:32;3753:60;;3809:1;3806;3799:12;3824:382;3889:6;3897;3950:2;3938:9;3929:7;3925:23;3921:32;3918:52;;;3966:1;3963;3956:12;3918:52;4005:9;3992:23;4024:31;4049:5;4024:31;:::i;:::-;4074:5;-1:-1:-1;4131:2:1;4116:18;;4103:32;4144:30;4103:32;4144:30;:::i;:::-;4193:7;4183:17;;;3824:382;;;;;:::o;4211:456::-;4288:6;4296;4304;4357:2;4345:9;4336:7;4332:23;4328:32;4325:52;;;4373:1;4370;4363:12;4325:52;4412:9;4399:23;4431:31;4456:5;4431:31;:::i;:::-;4481:5;-1:-1:-1;4538:2:1;4523:18;;4510:32;4551:33;4510:32;4551:33;:::i;:::-;4211:456;;4603:7;;-1:-1:-1;;;4657:2:1;4642:18;;;;4629:32;;4211:456::o;4672:315::-;4740:6;4748;4801:2;4789:9;4780:7;4776:23;4772:32;4769:52;;;4817:1;4814;4807:12;4769:52;4853:9;4840:23;4830:33;;4913:2;4902:9;4898:18;4885:32;4926:31;4951:5;4926:31;:::i;5669:248::-;5737:6;5745;5798:2;5786:9;5777:7;5773:23;5769:32;5766:52;;;5814:1;5811;5804:12;5766:52;-1:-1:-1;;5837:23:1;;;5907:2;5892:18;;;5879:32;;-1:-1:-1;5669:248:1:o;5922:127::-;5983:10;5978:3;5974:20;5971:1;5964:31;6014:4;6011:1;6004:15;6038:4;6035:1;6028:15;6054:983;6108:5;6161:3;6154:4;6146:6;6142:17;6138:27;6128:55;;6179:1;6176;6169:12;6128:55;6215:6;6202:20;6241:4;6264:18;6301:2;6297;6294:10;6291:36;;;6307:18;;:::i;:::-;6353:2;6350:1;6346:10;6385:2;6379:9;6448:2;6444:7;6439:2;6435;6431:11;6427:25;6419:6;6415:38;6503:6;6491:10;6488:22;6483:2;6471:10;6468:18;6465:46;6462:72;;;6514:18;;:::i;:::-;6550:2;6543:22;6600:18;;;6646:4;6678:15;;;6674:26;;;6634:17;;;;-1:-1:-1;6712:15:1;;;6709:35;;;6740:1;6737;6730:12;6709:35;6776:4;6768:6;6764:17;6753:28;;6790:217;6806:6;6801:3;6798:15;6790:217;;;6886:3;6873:17;6903:31;6928:5;6903:31;:::i;:::-;6947:18;;6985:12;;;;6823;;;;6790:217;;;7025:6;6054:983;-1:-1:-1;;;;;;;6054:983:1:o;7042:477::-;7132:6;7140;7193:2;7181:9;7172:7;7168:23;7164:32;7161:52;;;7209:1;7206;7199:12;7161:52;7249:9;7236:23;7282:18;7274:6;7271:30;7268:50;;;7314:1;7311;7304:12;7268:50;7337:61;7390:7;7381:6;7370:9;7366:22;7337:61;:::i;:::-;7327:71;;;7448:2;7437:9;7433:18;7420:32;7461:28;7483:5;7461:28;:::i;7524:456::-;7601:6;7609;7617;7670:2;7658:9;7649:7;7645:23;7641:32;7638:52;;;7686:1;7683;7676:12;7638:52;7725:9;7712:23;7744:31;7769:5;7744:31;:::i;:::-;7794:5;-1:-1:-1;7846:2:1;7831:18;;7818:32;;-1:-1:-1;7902:2:1;7887:18;;7874:32;7915:33;7874:32;7915:33;:::i;:::-;7967:7;7957:17;;;7524:456;;;;;:::o;7985:388::-;8053:6;8061;8114:2;8102:9;8093:7;8089:23;8085:32;8082:52;;;8130:1;8127;8120:12;8082:52;8169:9;8156:23;8188:31;8213:5;8188:31;:::i;:::-;8238:5;-1:-1:-1;8295:2:1;8280:18;;8267:32;8308:33;8267:32;8308:33;:::i;8378:348::-;8462:6;8515:2;8503:9;8494:7;8490:23;8486:32;8483:52;;;8531:1;8528;8521:12;8483:52;8571:9;8558:23;8604:18;8596:6;8593:30;8590:50;;;8636:1;8633;8626:12;8590:50;8659:61;8712:7;8703:6;8692:9;8688:22;8659:61;:::i;:::-;8649:71;8378:348;-1:-1:-1;;;;8378:348:1:o;8731:380::-;8810:1;8806:12;;;;8853;;;8874:61;;8928:4;8920:6;8916:17;8906:27;;8874:61;8981:2;8973:6;8970:14;8950:18;8947:38;8944:161;;9027:10;9022:3;9018:20;9015:1;9008:31;9062:4;9059:1;9052:15;9090:4;9087:1;9080:15;9116:325;9318:2;9300:21;;;9357:1;9337:18;;;9330:29;-1:-1:-1;;;9390:2:1;9375:18;;9368:32;9432:2;9417:18;;9116:325::o;9797:128::-;9864:9;;;9885:11;;;9882:37;;;9899:18;;:::i;10281:184::-;10351:6;10404:2;10392:9;10383:7;10379:23;10375:32;10372:52;;;10420:1;10417;10410:12;10372:52;-1:-1:-1;10443:16:1;;10281:184;-1:-1:-1;10281:184:1:o;10470:168::-;10543:9;;;10574;;10591:15;;;10585:22;;10571:37;10561:71;;10612:18;;:::i;10643:217::-;10683:1;10709;10699:132;;10753:10;10748:3;10744:20;10741:1;10734:31;10788:4;10785:1;10778:15;10816:4;10813:1;10806:15;10699:132;-1:-1:-1;10845:9:1;;10643:217::o;11535:127::-;11596:10;11591:3;11587:20;11584:1;11577:31;11627:4;11624:1;11617:15;11651:4;11648:1;11641:15;12686:245;12753:6;12806:2;12794:9;12785:7;12781:23;12777:32;12774:52;;;12822:1;12819;12812:12;12774:52;12854:9;12848:16;12873:28;12895:5;12873:28;:::i;13596:188::-;13675:13;;-1:-1:-1;;;;;13717:42:1;;13707:53;;13697:81;;13774:1;13771;13764:12;13789:450;13876:6;13884;13892;13945:2;13933:9;13924:7;13920:23;13916:32;13913:52;;;13961:1;13958;13951:12;13913:52;13984:40;14014:9;13984:40;:::i;:::-;13974:50;;14043:49;14088:2;14077:9;14073:18;14043:49;:::i;:::-;14033:59;;14135:2;14124:9;14120:18;14114:25;14179:10;14172:5;14168:22;14161:5;14158:33;14148:61;;14205:1;14202;14195:12;16275:883;16370:6;16423:3;16411:9;16402:7;16398:23;16394:33;16391:53;;;16440:1;16437;16430:12;16391:53;16473:2;16467:9;16515:3;16507:6;16503:16;16585:6;16573:10;16570:22;16549:18;16537:10;16534:34;16531:62;16528:88;;;16596:18;;:::i;:::-;16632:2;16625:22;16669:16;;16694:31;16669:16;16694:31;:::i;:::-;16734:21;;16800:2;16785:18;;16779:25;16813:33;16779:25;16813:33;:::i;:::-;16879:7;16874:2;16866:6;16862:15;16855:32;;16941:2;16930:9;16926:18;16920:25;16915:2;16907:6;16903:15;16896:50;17000:2;16989:9;16985:18;16979:25;16974:2;16966:6;16962:15;16955:50;17060:3;17049:9;17045:19;17039:26;17033:3;17025:6;17021:16;17014:52;17121:3;17110:9;17106:19;17100:26;17094:3;17086:6;17082:16;17075:52;17146:6;17136:16;;;16275:883;;;;:::o;17785:135::-;17824:3;17845:17;;;17842:43;;17865:18;;:::i;:::-;-1:-1:-1;17912:1:1;17901:13;;17785:135::o;17925:251::-;17995:6;18048:2;18036:9;18027:7;18023:23;18019:32;18016:52;;;18064:1;18061;18054:12;18016:52;18096:9;18090:16;18115:31;18140:5;18115:31;:::i
Swarm Source
ipfs://530a12c3fc1a429172630a09c5d84452eba574a787d60aa1352856ba0ef992af
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.