Contract 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1

Contract Overview

Balance:
126.439166002567511035 CRO

CRO Value:
$19.28 (@ $0.15/CRO)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcc8b85279c3ee188010e3005a9c86b450e1b27085c5f9136e6f5e7c032eca5c1Approve127520692024-02-27 8:08:5430 days 23 hrs ago0x59209c701ef80a260dcb2a379f02849b0b4baa4c IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.471136117 10,097
0xbb7fda8dee66155b6290d9602cf2b76ae16e6bfabd388b8b97fe503581ddd5e3Transfer127520662024-02-27 8:08:3830 days 23 hrs ago0x00d0fb176bd33e5a431e7ffa04ad8b933e327a87 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO4.27994570
0x36ae2f5f2b983f13318b2071d6099b61c32ccdb3958c26ad88908e63bdcb13dcApprove123232972024-01-30 10:48:1958 days 20 hrs ago0x984b5e6d9a3fe9a68a276f976dfb3b7420af8323 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.471182778 10,098
0x0099d589c7a261d677db3be43c195462d7c27f9450daf36e4d5d63078d6342f1Approve116082712023-12-14 23:09:10105 days 8 hrs ago0xcd52ee9a2fe0768e5e39a81f121f2603b31f01b9 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.213508565168 4,602.965725317
0x009fdc37410e343e58aa81d0249889f6783a29907c10ae884007fff579bc64d4Approve116082592023-12-14 23:08:02105 days 8 hrs ago0xb857ac1b0b306dc9f54ac9c5f96979e41e700e6d IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.232031397 5,001
0x829ea4b52ac156b1884fa2cbf1d37dc6a2b315615038db943503d500a4db2e3cApprove116082122023-12-14 23:03:40105 days 8 hrs ago0x95c0901bf4fdda66b80412bd510b2c3cec0c8d10 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.213563862587 4,602.967057944
0x84955c5b1d5f3423b14d2a35ffad14403d12054052f20d547d4fcdb4a583e712Approve105605212023-10-07 17:07:04173 days 14 hrs ago0x102773854b80fe995116fccced2ac7b99d3d8499 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.11700960
0x0feab2261229639109c1cc232ca7ccb4bcdbd098fd2380ae60b8c2f9e9305634Approve96560212023-08-09 17:03:59232 days 14 hrs ago0x62b4265f8f66abc1c78b2c33bbaa7b8d38835716 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.218327454083 4,689.868624655
0x3a987fcc1b6a85d5182d9e7f4197eec47ac497fded004178aeffcc95ae69bde6Approve89525752023-06-24 20:47:31278 days 10 hrs ago0x6fa9319af87ef94169a6854001e2ccd3677b4454 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.231911373 5,001
0x2044208c22cc1bd7a06947140e648ca422ac634209d810af109b8b3c96ae5e9dApprove81656702023-05-04 7:53:05329 days 23 hrs ago0x95dbd2a02ab38c575e701ed36a4fd26714ff1893 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.22201631406 4,758.070209827
0x591f9a2aa46c39f360b59f533b7abe661e355b610508e8fd9dae0cd09eeb52bbApprove81096602023-04-30 15:54:21333 days 15 hrs ago0x83450c4fea1fd742054a654b9e699b801e2819c2 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.222136490871 4,760.645739946
0x749783fbdd9c49ff7e3b457819d15782806d582919c6896b5dddbd57d56c6e8cTransfer73929882023-03-14 18:59:16380 days 12 hrs ago0xdcd5b409aa447b357b8600e4396e4b712b75c4f5 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO2.4366762241730
0xfe2cff7b5f686211490aeb2f9eac86a525a243cc3be72d84c6446ad155ea0238Transfer67268712023-01-30 5:26:02424 days 2 hrs ago0x38e403b1c7aada21ef321073900ff8265d7815e2 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.82610387191 4,824.10506532
0x4a5d1e94d65e55fcb93e009db09910aac04eed0fbb5e291325489af9cf4ee173Transfer65157972023-01-16 8:58:13437 days 22 hrs ago0x9551759537e96647a9c37f7fcd1bb12daeb74098 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.189174928293 4,833.73003501
0xb046c076a903b1688e345930e830035af281d6d58c28c437fe9d259a57bac47dTransfer65157932023-01-16 8:57:50437 days 22 hrs ago0xaf7fb93e08fc1ff879fb333d87970e62317bd8b6 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.189174953491 4,833.730137436
0x99e7fa874e509a64bf00165e11178c3f33e5b95a119117de42c73a0d98aded20Transfer63233892023-01-03 18:36:03450 days 12 hrs ago0x843eb0c262590cdbe0fc41706326c6a36a984d4d IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.191343560071 4,842.545038011
0xc9c8e97d081f3fbfe59482f116ec4a4cb2e3f40a228da27535367bd6a94afdadTransfer63231382023-01-03 18:12:22450 days 13 hrs ago0xaf7fb93e08fc1ff879fb333d87970e62317bd8b6 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.191302777539 4,842.556421319
0x213d65bd575aa4b8612f6af4932f9213afbe54a7db9eee36bfcb4ff5961894aeTransfer63231112023-01-03 18:09:50450 days 13 hrs ago0x9551759537e96647a9c37f7fcd1bb12daeb74098 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.59646050231 4,842.557632291
0x45b5fb4dc839bec15cef1f94cf9515d459bccf68a2bc6281c1ba9887fcf3c17fApprove61888052022-12-25 23:23:33459 days 8 hrs ago0x17f96cb27cfe9b8c360cf867ecebf9d17e822f09 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO0.216065434128 4,848.756404215
0x6a451c023bee3984d33a87e9d02fd4a7d0aa1340a3c0e441aa314a6469ec817bTransfer60376662022-12-16 2:06:16469 days 5 hrs ago0x5a5263419b17fbb1ba268134782c4a2628772bd4 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.194592988882 4,855.753239148
0x7b2068541e4c906682c368fc02cf473bc6134b62c7d5a4a45e8e0e74ecaa4b0cTransfer60376612022-12-16 2:05:48469 days 5 hrs ago0x38e403b1c7aada21ef321073900ff8265d7815e2 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.194593045997 4,855.753471308
0x2274576380749a525da7bbcda5867adcae24cb63f3a0d42e88de77406bec398eTransfer60376542022-12-16 2:05:09469 days 5 hrs ago0xebd94220338e37bce9637c75537f0f07b05c74dc IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.23494929407 4,855.753789691
0xb84122f005506c5a7ee8dae327369461a54fe7f9e5af6b9e8c3d7a78c9826f6bTransfer57200942022-11-25 5:30:12490 days 2 hrs ago0x5a5263419b17fbb1ba268134782c4a2628772bd4 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.198205682661 4,870.438031108
0x0dc8c31f94d88f0ae645d42d858ba186024aa0ed04f42aacfdf03f533ec01f33Transfer57200892022-11-25 5:29:43490 days 2 hrs ago0x38e403b1c7aada21ef321073900ff8265d7815e2 IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.238727784096 4,870.438255285
0xdcaacbf869bca3c19771b4c6787be33bf435a61fa052c42d569954b500f7ab7eTransfer57200842022-11-25 5:29:15490 days 2 hrs ago0xebd94220338e37bce9637c75537f0f07b05c74dc IN  0x1bc42539e00f05ad5b7576fa31814c9801f35bd10 CRO1.198205794335 4,870.43848504
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x5d9e40ad7fd1751d0a24cc652989e4d491910239ff6a3557d72b6a21a7339f6367268872023-01-30 5:27:32424 days 2 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 0x991e65957bdb78847572d0bfbc1617c4ff65501642.770509125459318325 CRO
0x5d9e40ad7fd1751d0a24cc652989e4d491910239ff6a3557d72b6a21a7339f6367268872023-01-30 5:27:32424 days 2 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 Mad Meerkat Finance: Master Meerkat & Router42.770509125459318322 CRO
0x5d9e40ad7fd1751d0a24cc652989e4d491910239ff6a3557d72b6a21a7339f6367268872023-01-30 5:27:32424 days 2 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x1bc42539e00f05ad5b7576fa31814c9801f35bd10.659002106022329563 CRO
0x5d9e40ad7fd1751d0a24cc652989e4d491910239ff6a3557d72b6a21a7339f6367268872023-01-30 5:27:32424 days 2 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 Mad Meerkat Finance: Master Meerkat & Router42.770509125459318322 CRO
0x5d9e40ad7fd1751d0a24cc652989e4d491910239ff6a3557d72b6a21a7339f6367268872023-01-30 5:27:32424 days 2 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd10xe2b97bc28609849c848dc1fe421858dcfc55378c85.541018250918636645 CRO
0x5d9e40ad7fd1751d0a24cc652989e4d491910239ff6a3557d72b6a21a7339f6367268872023-01-30 5:27:32424 days 2 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd10x5f5b8fa24953ad063840c3da1445042b34fb9187256.623054752755909936 CRO
0x5d9e40ad7fd1751d0a24cc652989e4d491910239ff6a3557d72b6a21a7339f6367268872023-01-30 5:27:32424 days 2 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1470.47560038005250155 CRO
0x75dc69c1f5f89bcdb8947d34aed6967289753d63bd24a061888d12c945ebf44b54072412022-11-04 15:33:16510 days 15 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 0x991e65957bdb78847572d0bfbc1617c4ff65501661.757762344048069502 CRO
0x75dc69c1f5f89bcdb8947d34aed6967289753d63bd24a061888d12c945ebf44b54072412022-11-04 15:33:16510 days 15 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 Mad Meerkat Finance: Master Meerkat & Router61.757762344048069499 CRO
0x75dc69c1f5f89bcdb8947d34aed6967289753d63bd24a061888d12c945ebf44b54072412022-11-04 15:33:16510 days 15 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x1bc42539e00f05ad5b7576fa31814c9801f35bd11.173228994777963043 CRO
0x75dc69c1f5f89bcdb8947d34aed6967289753d63bd24a061888d12c945ebf44b54072412022-11-04 15:33:16510 days 15 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 Mad Meerkat Finance: Master Meerkat & Router61.757762344048069499 CRO
0x75dc69c1f5f89bcdb8947d34aed6967289753d63bd24a061888d12c945ebf44b54072412022-11-04 15:33:16510 days 15 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd10xe2b97bc28609849c848dc1fe421858dcfc55378c123.515524688096138999 CRO
0x75dc69c1f5f89bcdb8947d34aed6967289753d63bd24a061888d12c945ebf44b54072412022-11-04 15:33:16510 days 15 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd10x5f5b8fa24953ad063840c3da1445042b34fb9187370.546574064288416997 CRO
0x75dc69c1f5f89bcdb8947d34aed6967289753d63bd24a061888d12c945ebf44b54072412022-11-04 15:33:16510 days 15 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1679.335385784528764496 CRO
0x1f328cb4f7222862f1b0e447e5f2e8d531d754e74715df7d51efcbd4f15b2c7742637962022-08-21 13:29:19585 days 18 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 0x991e65957bdb78847572d0bfbc1617c4ff65501685.976160712185891498 CRO
0x1f328cb4f7222862f1b0e447e5f2e8d531d754e74715df7d51efcbd4f15b2c7742637962022-08-21 13:29:19585 days 18 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 Mad Meerkat Finance: Master Meerkat & Router85.976160712185891495 CRO
0x1f328cb4f7222862f1b0e447e5f2e8d531d754e74715df7d51efcbd4f15b2c7742637962022-08-21 13:29:19585 days 18 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x1bc42539e00f05ad5b7576fa31814c9801f35bd12.063469874115838895 CRO
0x1f328cb4f7222862f1b0e447e5f2e8d531d754e74715df7d51efcbd4f15b2c7742637962022-08-21 13:29:19585 days 18 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 Mad Meerkat Finance: Master Meerkat & Router85.976160712185891495 CRO
0x1f328cb4f7222862f1b0e447e5f2e8d531d754e74715df7d51efcbd4f15b2c7742637962022-08-21 13:29:19585 days 18 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd10xe2b97bc28609849c848dc1fe421858dcfc55378c171.95232142437178299 CRO
0x1f328cb4f7222862f1b0e447e5f2e8d531d754e74715df7d51efcbd4f15b2c7742637962022-08-21 13:29:19585 days 18 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd10x5f5b8fa24953ad063840c3da1445042b34fb9187515.856964273115348972 CRO
0x1f328cb4f7222862f1b0e447e5f2e8d531d754e74715df7d51efcbd4f15b2c7742637962022-08-21 13:29:19585 days 18 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1945.73776783404480645 CRO
0xfe052318f040bf1bdd3bd839869323baa8eaca875e8047f3a56cf68d9d3e7b3a40437592022-08-07 2:57:18600 days 4 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 0x991e65957bdb78847572d0bfbc1617c4ff655016130.559723213335551363 CRO
0xfe052318f040bf1bdd3bd839869323baa8eaca875e8047f3a56cf68d9d3e7b3a40437592022-08-07 2:57:18600 days 4 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 Mad Meerkat Finance: Master Meerkat & Router130.55972321333555136 CRO
0xfe052318f040bf1bdd3bd839869323baa8eaca875e8047f3a56cf68d9d3e7b3a40437592022-08-07 2:57:18600 days 4 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x1bc42539e00f05ad5b7576fa31814c9801f35bd13.761302856021431181 CRO
0xfe052318f040bf1bdd3bd839869323baa8eaca875e8047f3a56cf68d9d3e7b3a40437592022-08-07 2:57:18600 days 4 hrs ago 0x1bc42539e00f05ad5b7576fa31814c9801f35bd1 Mad Meerkat Finance: Master Meerkat & Router130.55972321333555136 CRO
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Kronos

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-04-13
*/

// DISCORD: http://discord.gg/Kronos-Sale
// WEBSITE: https://www.KronosSale.com
// TWITTER: https://www.twitter.com/KronosSale
// REDDIT: https://www.reddit.com/r/KronosSale
// TG: https://t.me/KronosSalePortal
// SPDX-License-Identifier: MIT

pragma solidity 0.8.12;

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

	function _msgData() internal view virtual returns (bytes calldata) {
		this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
		return msg.data;
	}
}

interface IMeerkatV2Factory {
	event PairCreated(address indexed token0, address indexed token1, address pair, uint);

	function feeTo() external view returns (address);
	function feeToSetter() external view returns (address);

	function getPair(address tokenA, address tokenB) external view returns (address pair);
	function allPairs(uint) external view returns (address pair);
	function allPairsLength() external view returns (uint);

	function createPair(address tokenA, address tokenB) external returns (address pair);

	function setFeeTo(address) external;
	function setFeeToSetter(address) external;
}

interface IMeerkatV2Router01 {
	function factory() external pure returns (address);
	function WETH() external pure returns (address);

	function addLiquidity(
		address tokenA,
		address tokenB,
		uint amountADesired,
		uint amountBDesired,
		uint amountAMin,
		uint amountBMin,
		address to,
		uint deadline
	) external returns (uint amountA, uint amountB, uint liquidity);
	function addLiquidityETH(
		address token,
		uint amountTokenDesired,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external payable returns (uint amountToken, uint amountETH, uint liquidity);
	function removeLiquidity(
		address tokenA,
		address tokenB,
		uint liquidity,
		uint amountAMin,
		uint amountBMin,
		address to,
		uint deadline
	) external returns (uint amountA, uint amountB);
	function removeLiquidityETH(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external returns (uint amountToken, uint amountETH);
	function removeLiquidityWithPermit(
		address tokenA,
		address tokenB,
		uint liquidity,
		uint amountAMin,
		uint amountBMin,
		address to,
		uint deadline,
		bool approveMax, uint8 v, bytes32 r, bytes32 s
	) external returns (uint amountA, uint amountB);
	function removeLiquidityETHWithPermit(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline,
		bool approveMax, uint8 v, bytes32 r, bytes32 s
	) external returns (uint amountToken, uint amountETH);
	function swapExactTokensForTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external returns (uint[] memory amounts);
	function swapTokensForExactTokens(
		uint amountOut,
		uint amountInMax,
		address[] calldata path,
		address to,
		uint deadline
	) external returns (uint[] memory amounts);
	function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
	external
	payable
	returns (uint[] memory amounts);
	function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
	external
	returns (uint[] memory amounts);
	function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
	external
	returns (uint[] memory amounts);
	function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
	external
	payable
	returns (uint[] memory amounts);

	function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
	function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
	function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
	function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
	function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IMeerkatV2Router02 is IMeerkatV2Router01 {
	function removeLiquidityETHSupportingFeeOnTransferTokens(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external returns (uint amountETH);
	function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline,
		bool approveMax, uint8 v, bytes32 r, bytes32 s
	) external returns (uint amountETH);

	function swapExactTokensForTokensSupportingFeeOnTransferTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external;
	function swapExactETHForTokensSupportingFeeOnTransferTokens(
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external payable;
	function swapExactTokensForETHSupportingFeeOnTransferTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external;
}

interface IMeerkatV2Pair {
	event Approval(address indexed owner, address indexed spender, uint value);
	event Transfer(address indexed from, address indexed to, uint value);

	function name() external pure returns (string memory);
	function symbol() external pure returns (string memory);
	function decimals() external pure returns (uint8);
	function totalSupply() external view returns (uint);
	function balanceOf(address owner) external view returns (uint);
	function allowance(address owner, address spender) external view returns (uint);

	function approve(address spender, uint value) external returns (bool);
	function transfer(address to, uint value) external returns (bool);
	function transferFrom(address from, address to, uint value) external returns (bool);

	function DOMAIN_SEPARATOR() external view returns (bytes32);
	function PERMIT_TYPEHASH() external pure returns (bytes32);
	function nonces(address owner) external view returns (uint);

	function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

	event Mint(address indexed sender, uint amount0, uint amount1);
	event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
	event Swap(
		address indexed sender,
		uint amount0In,
		uint amount1In,
		uint amount0Out,
		uint amount1Out,
		address indexed to
	);
	event Sync(uint112 reserve0, uint112 reserve1);

	function MINIMUM_LIQUIDITY() external pure returns (uint);
	function factory() external view returns (address);
	function token0() external view returns (address);
	function token1() external view returns (address);
	function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
	function price0CumulativeLast() external view returns (uint);
	function price1CumulativeLast() external view returns (uint);
	function kLast() external view returns (uint);
	function mint(address to) external returns (uint liquidity);
	function burn(address to) external returns (uint amount0, uint amount1);
	function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
	function skim(address to) external;
	function sync() external;
	function initialize(address, address) external;
}

interface ICRC20 {
	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 ICRC20Metadata is ICRC20 {
	function name() external view returns (string memory);
	function symbol() external view returns (string memory);
	function decimals() external view returns (uint8);
}

interface DividendPayingTokenInterface {
	function dividendOf(address _owner) external view returns(uint256);
	function distributeDividends() external payable;
	function withdrawDividend() external;
	event DividendsDistributed(
		address indexed from,
		uint256 weiAmount
	);
	event DividendWithdrawn(
		address indexed to,
		uint256 weiAmount
	);
}

interface DividendPayingTokenOptionalInterface {
	function withdrawableDividendOf(address _owner) external view returns(uint256);
	function withdrawnDividendOf(address _owner) external view returns(uint256);
	function accumulativeDividendOf(address _owner) external view returns(uint256);
}

library SafeMath {

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

		return c;
	}

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

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

		return c;
	}

	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
		// benefit is lost if 'b' is also tested.
		// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
		if (a == 0) {
			return 0;
		}

		uint256 c = a * b;
		require(c / a == b, "SafeMath: multiplication overflow");

		return c;
	}

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

	function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b > 0, errorMessage);
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold

		return c;
	}

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

	function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b != 0, errorMessage);
		return a % b;
	}
}

library SafeMathInt {
	int256 private constant MIN_INT256 = int256(1) << 255;
	int256 private constant MAX_INT256 = ~(int256(1) << 255);

	function mul(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a * b;

		// Detect overflow when multiplying MIN_INT256 with -1
		require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
		require((b == 0) || (c / b == a));
		return c;
	}
	function div(int256 a, int256 b) internal pure returns (int256) {
		// Prevent overflow when dividing MIN_INT256 by -1
		require(b != -1 || a != MIN_INT256);

		// Solidity already throws when dividing by 0.
		return a / b;
	}
	function sub(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a - b;
		require((b >= 0 && c <= a) || (b < 0 && c > a));
		return c;
	}
	function add(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a + b;
		require((b >= 0 && c >= a) || (b < 0 && c < a));
		return c;
	}
	function abs(int256 a) internal pure returns (int256) {
		require(a != MIN_INT256);
		return a < 0 ? -a : a;
	}
	function toUint256Safe(int256 a) internal pure returns (uint256) {
		require(a >= 0);
		return uint256(a);
	}
}

library SafeMathUint {
	function toInt256Safe(uint256 a) internal pure returns (int256) {
		int256 b = int256(a);
		require(b >= 0);
		return b;
	}
}

library IterableMapping {
	struct Map {
		address[] keys;
		mapping(address => uint) values;
		mapping(address => uint) indexOf;
		mapping(address => bool) inserted;
	}

	function get(Map storage map, address key) public view returns (uint) {
		return map.values[key];
	}

	function getIndexOfKey(Map storage map, address key) public view returns (int) {
		if(!map.inserted[key]) {
			return -1;
		}
		return int(map.indexOf[key]);
	}

	function getKeyAtIndex(Map storage map, uint index) public view returns (address) {
		return map.keys[index];
	}

	function size(Map storage map) public view returns (uint) {
		return map.keys.length;
	}

	function set(Map storage map, address key, uint val) public {
		if (map.inserted[key]) {
			map.values[key] = val;
		} else {
			map.inserted[key] = true;
			map.values[key] = val;
			map.indexOf[key] = map.keys.length;
			map.keys.push(key);
		}
	}

	function remove(Map storage map, address key) public {
		if (!map.inserted[key]) {
			return;
		}

		delete map.inserted[key];
		delete map.values[key];

		uint index = map.indexOf[key];
		uint lastIndex = map.keys.length - 1;
		address lastKey = map.keys[lastIndex];

		map.indexOf[lastKey] = index;
		delete map.indexOf[key];

		map.keys[index] = lastKey;
		map.keys.pop();
	}
}

contract Ownable is Context {
	address private _owner;

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

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

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

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

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

	function transferOwnership(address newOwner) public virtual onlyOwner {
		require(newOwner != address(0), "Ownable: new owner is the zero address");
		emit OwnershipTransferred(_owner, newOwner);
		_owner = newOwner;
	}
}

contract CRC20 is Context, ICRC20, ICRC20Metadata {
	using SafeMath for uint256;

	mapping(address => uint256) private _balances;
	mapping(address => mapping(address => uint256)) private _allowances;

	uint256 private _totalSupply;
	string private _name;
	string private _symbol;

	constructor(string memory name_, string memory symbol_) {
		_name = name_;
		_symbol = symbol_;
	}

	function name() public view virtual override returns (string memory) {
		return _name;
	}

	function symbol() public view virtual override returns (string memory) {
		return _symbol;
	}

	function decimals() public view virtual override returns (uint8) {
		return 18;
	}

	function totalSupply() public view virtual override returns (uint256) {
		return _totalSupply;
	}

	function balanceOf(address account) public view virtual override returns (uint256) {
		return _balances[account];
	}

	function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
		_transfer(_msgSender(), recipient, amount);
		return true;
	}

	function allowance(address owner, address spender) public view virtual override returns (uint256) {
		return _allowances[owner][spender];
	}

	function approve(address spender, uint256 amount) public virtual override returns (bool) {
		_approve(_msgSender(), spender, amount);
		return true;
	}

	function transferFrom(
		address sender,
		address recipient,
		uint256 amount
	) public virtual override returns (bool) {
		_transfer(sender, recipient, amount);
		_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "CRC20: transfer amount exceeds allowance"));
		return true;
	}

	function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
		return true;
	}

	function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "CRC20: decreased allowance below zero"));
		return true;
	}

	function _transfer(
		address sender,
		address recipient,
		uint256 amount
	) internal virtual {
		require(sender != address(0), "CRC20: transfer from the zero address");
		require(recipient != address(0), "CRC20: transfer to the zero address");
		_beforeTokenTransfer(sender, recipient, amount);
		_balances[sender] = _balances[sender].sub(amount, "CRC20: transfer amount exceeds balance");
		_balances[recipient] = _balances[recipient].add(amount);
		emit Transfer(sender, recipient, amount);
	}

	function _mint(address account, uint256 amount) internal virtual {
		require(account != address(0), "CRC20: mint to the zero address");
		_beforeTokenTransfer(address(0), account, amount);
		_totalSupply = _totalSupply.add(amount);
		_balances[account] = _balances[account].add(amount);
		emit Transfer(address(0), account, amount);
	}

	function _burn(address account, uint256 amount) internal virtual {
		require(account != address(0), "CRC20: burn from the zero address");
		_beforeTokenTransfer(account, address(0), amount);
		_balances[account] = _balances[account].sub(amount, "CRC20: burn amount exceeds balance");
		_totalSupply = _totalSupply.sub(amount);
		emit Transfer(account, address(0), amount);
	}

	function _approve(
		address owner,
		address spender,
		uint256 amount
	) internal virtual {
		require(owner != address(0), "CRC20: approve from the zero address");
		require(spender != address(0), "CRC20: approve to the zero address");
		_allowances[owner][spender] = amount;
		emit Approval(owner, spender, amount);
	}

	function _beforeTokenTransfer(
		address from,
		address to,
		uint256 amount
	) internal virtual {}
}

contract DividendPayingToken is CRC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
	using SafeMath for uint256;
	using SafeMathUint for uint256;
	using SafeMathInt for int256;

	uint256 constant internal magnitude = 2**128;
	uint256 internal magnifiedDividendPerShare;
	uint256 public totalDividendsDistributed;
	address public rewardToken;
	IMeerkatV2Router02 public meerkatV2Router;

	mapping(address => int256) internal magnifiedDividendCorrections;
	mapping(address => uint256) internal withdrawnDividends;

	constructor(string memory _name, string memory _symbol) CRC20(_name, _symbol) {}

	receive() external payable {
		distributeDividends();
	}

	function distributeDividends() public override onlyOwner payable {
		require(totalSupply() > 0);
		if (msg.value > 0) {
			magnifiedDividendPerShare = magnifiedDividendPerShare.add((msg.value).mul(magnitude) / totalSupply());
			emit DividendsDistributed(msg.sender, msg.value);
			totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
		}
	}
	function withdrawDividend() public virtual override onlyOwner {
		_withdrawDividendOfUser(payable(msg.sender));
	}
	function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
		uint256 _withdrawableDividend = withdrawableDividendOf(user);
		if (_withdrawableDividend > 0) {
			withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
			emit DividendWithdrawn(user, _withdrawableDividend);
			if (rewardToken == meerkatV2Router.WETH()) {
				(bool success,) = user.call{value: _withdrawableDividend, gas: 3000}("");
				if(!success) {
					withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
					return 0;
				}
				return _withdrawableDividend;
			} else {
				return swapCROForTokensAndWithdrawDividend(user, _withdrawableDividend);
			}
		}
		return 0;
	}
	function swapCROForTokensAndWithdrawDividend(address holder, uint256 croAmount) private returns(uint256) {
		address[] memory path = new address[](2);
		path[0] = meerkatV2Router.WETH();
		path[1] = address(rewardToken);

		try meerkatV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : croAmount}(
			0, // accept any amount of tokens
			path,
			address(holder),
			block.timestamp
		) {
			return croAmount;
		} catch {
			withdrawnDividends[holder] = withdrawnDividends[holder].sub(croAmount);
			return 0;
		}
	}
	function dividendOf(address _owner) public view override returns(uint256) {
		return withdrawableDividendOf(_owner);
	}
	function withdrawableDividendOf(address _owner) public view override returns(uint256) {
		return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
	}
	function withdrawnDividendOf(address _owner) public view override returns(uint256) {
		return withdrawnDividends[_owner];
	}
	function accumulativeDividendOf(address _owner) public view override returns(uint256) {
		return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
		.add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
	}
	function _transfer(address from, address to, uint256 value) internal virtual override {
		require(false);
		int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
		magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
		magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
	}
	function _mint(address account, uint256 value) internal override {
		super._mint(account, value);
		magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
		.sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
	}
	function _burn(address account, uint256 value) internal override {
		super._burn(account, value);
		magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
		.add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
	}
	function _setBalance(address account, uint256 newBalance) internal {
		uint256 currentBalance = balanceOf(account);
		if(newBalance > currentBalance) {
			uint256 mintAmount = newBalance.sub(currentBalance);
			_mint(account, mintAmount);
		} else if(newBalance < currentBalance) {
			uint256 burnAmount = currentBalance.sub(newBalance);
			_burn(account, burnAmount);
		}
	}
	function _setRewardToken(address token) internal onlyOwner {
		rewardToken = token;
	}
	function _setMeerkatRouter(address router) internal onlyOwner {
		meerkatV2Router = IMeerkatV2Router02(router);
	}
}

contract Kronos is Ownable, CRC20 {
	mapping (address => bool) private _isAllowedToTradeWhenDisabled;
	mapping (address => bool) private _isExcludedFromFee;
	mapping (address => bool) private _isExcludedFromMaxWalletLimit;
	mapping (address => bool) private _isExcludedFromMaxTxLimit;
	mapping (address => bool) public _isBlacklisted;
	mapping (address => bool) public liquidityPair;

	KronosDividendTracker public dividendTracker;
	IMeerkatV2Router02 public meerkatV2Router;
	address public immutable meerkatV2Pair;

	string private constant _name = "Kronos";
	string private constant _symbol = "$KRO";
	uint8 private constant _decimals = 18;
	uint256 private constant TOTAL_SUPPLY = 100_000_000 * (10**_decimals);  

	bool public isTradingEnabled;
	uint256 private _tradingPausedTimestamp;
	bool private _isLaunched;
	uint256 public _launchStartTimestamp;
	uint256 public _launchBlockNumber;
    
	uint256 public maxWalletAmount = TOTAL_SUPPLY * 15 / 1000; //max wallet is 1.5% of total supply
    uint256 public maxTxAmount = TOTAL_SUPPLY * 5 / 1000; //max transaction is 0.5% of total supply

	bool private _swapping;
    bool public SwapAndLiquifyEnabled;
	uint256 public minimumTokensBeforeSwap = TOTAL_SUPPLY * 25 / 10000; 
	uint256 public gasForProcessing = 300000;

	address public dividendToken = 0xc21223249CA28397B4B6541dfFaEcC539BfF0c59; //USDC

	address payable public marketingWallet = payable (0x5F5B8fa24953ad063840c3dA1445042b34fB9187);
	address payable public teamWallet = payable (0xe2B97bc28609849c848dc1fE421858DcfC55378C);
    address payable public rewardPoolWallet = payable (0xa514a0c9eAE1134706cDB5e2B93b839e6093Bd43);

	struct Taxes {
		uint256 liquidity;
		uint256 marketing;
		uint256 team;
		uint256 rewards;
        uint256 rewardPool;
	}

	Taxes public _taxBuy = Taxes({
        liquidity: 2,
        marketing: 4,
        team: 2,
        rewards: 1,
        rewardPool: 1
        });

	Taxes public _taxSell = Taxes({
		liquidity: 2,
		marketing: 4,
		team: 2,
		rewards: 1,
        rewardPool: 1
	});
	
	Taxes public _taxTransfer = _taxSell;

	uint256 private constant _blacklistTimeLimit = 43200; //12 hours to blacklist

	uint256 private _liquidityFee;
	uint256 private _marketingFee;
	uint256 private _teamFee;
	uint256 private _rewardsFee;
    uint256 private _rewardPoolFee;
	uint256 private _totalFee;

	event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
	event DividendTrackerChange(address indexed newAddress, address indexed oldAddress);
	event MeerkatV2RouterChange(address indexed newAddress, address indexed oldAddress);
	event WalletChange(string indexed indentifier, address indexed newWallet, address indexed oldWallet);
	event PresaleAddressAssigned(address indexed account);
	event GasForProcessingChange(uint256 indexed newValue, uint256 indexed oldValue);
	event FeeChange(string indexed identifier, uint256 liquidityFee, uint256 marketingFee, uint256 teamFee, uint256 rewardsFee, uint256 rewardPoolFee);
	event BlacklistedAccount(address indexed holder, bool indexed status);
	event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
    event MaxTxAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event ExcludeFromFeesChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxTxChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
	event ExcludeFromDividendsChange(address indexed account, bool isExcluded);
	event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
	event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
	event DividendsSent(uint256 tokensSwapped);
	event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity);
	event ClaimCroOverflow(uint256 amount);
    event USDCSent(uint256 amount);
	event ProcessedDividendTracker(
		uint256 iterations,
		uint256 claims,
		uint256 lastProcessedIndex,
		bool indexed automatic,
		uint256 gas,
		address indexed processor
	);
	event FeesApplied(uint256 liquidityFee, uint256 marketingFee, uint256 teamFee, uint256 rewardsFee, uint256 rewardPoolFee, uint256 totalFee);

	constructor() CRC20(_name, _symbol) {      
		dividendTracker = new KronosDividendTracker();
		dividendTracker.setMeerkatRouter(0x145677FC4d9b8F19B5D56d1820c48e0443049a30);
		dividendTracker.setRewardToken(dividendToken);



		IMeerkatV2Router02 _meerkatV2Router = IMeerkatV2Router02(0x145677FC4d9b8F19B5D56d1820c48e0443049a30);
		address _meerkatV2Pair = IMeerkatV2Factory(_meerkatV2Router.factory()).createPair(address(this), _meerkatV2Router.WETH());
		meerkatV2Router = _meerkatV2Router;
		meerkatV2Pair = _meerkatV2Pair;
		_setAutomatedMarketMakerPair(_meerkatV2Pair, true);


        _approve(msg.sender, address(meerkatV2Router), type(uint256).max);
        _approve(address(this), address(meerkatV2Router), type(uint256).max);

		_isExcludedFromFee[owner()] = true;
		_isExcludedFromFee[address(this)] = true;
		_isExcludedFromFee[address(dividendTracker)] = true;

		dividendTracker.excludeFromDividends(address(dividendTracker));
		dividendTracker.excludeFromDividends(address(this));
		dividendTracker.excludeFromDividends(address(0x000000000000000000000000000000000000dEaD));
		dividendTracker.excludeFromDividends(owner());
		dividendTracker.excludeFromDividends(address(_meerkatV2Router));     

		_isAllowedToTradeWhenDisabled[owner()] = true;

		_isExcludedFromMaxWalletLimit[_meerkatV2Pair] = true;
		_isExcludedFromMaxWalletLimit[address(dividendTracker)] = true;
		_isExcludedFromMaxWalletLimit[address(meerkatV2Router)] = true;
		_isExcludedFromMaxWalletLimit[address(this)] = true;
		_isExcludedFromMaxWalletLimit[owner()] = true;

		_isExcludedFromMaxTxLimit[_meerkatV2Pair] = true;
		_isExcludedFromMaxTxLimit[address(dividendTracker)] = true;
		_isExcludedFromMaxTxLimit[address(meerkatV2Router)] = true;
		_isExcludedFromMaxTxLimit[address(this)] = true;
		_isExcludedFromMaxTxLimit[owner()] = true;

		_mint(owner(), TOTAL_SUPPLY);
	}

	receive() external payable {}

	function decimals() public view virtual override returns (uint8) {
		return _decimals;
	}

	function launch() external onlyOwner {
		_launchStartTimestamp = block.timestamp;
		_launchBlockNumber = block.number;
		isTradingEnabled = true;
		_isLaunched = true;
        SwapAndLiquifyEnabled = true;
	}

	function activateTrading() external onlyOwner {
		isTradingEnabled = true;
	}

	function deactivateTrading() external onlyOwner {
		isTradingEnabled = false;
		_tradingPausedTimestamp = block.timestamp;
	}

	function updateDividendTracker(address newAddress) external onlyOwner {
		require(newAddress != address(dividendTracker), "Kronos: The dividend tracker already has that address");
		KronosDividendTracker newDividendTracker = KronosDividendTracker(payable(newAddress));
		require(newDividendTracker.owner() == address(this), "Kronos: The new dividend tracker must be owned by the Kronos token contract");
		newDividendTracker.excludeFromDividends(address(newDividendTracker));
		newDividendTracker.excludeFromDividends(address(this));
		newDividendTracker.excludeFromDividends(owner());
		newDividendTracker.excludeFromDividends(address(meerkatV2Router));
		newDividendTracker.excludeFromDividends(address(meerkatV2Pair));
		emit DividendTrackerChange(newAddress, address(dividendTracker));
		dividendTracker = newDividendTracker;
	}

	function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(liquidityPair[pair] != value, "Kronos: Automated market maker pair is already set to that value");
		liquidityPair[pair] = value;
		if(value) {
			dividendTracker.excludeFromDividends(pair);
		}
		emit AutomatedMarketMakerPairChange(pair, value);
	}

	function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}

	function excludeFromFees(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromFee[account] != excluded, "Kronos: Account is already the value of 'excluded'");
		_isExcludedFromFee[account] = excluded;
		emit ExcludeFromFeesChange(account, excluded);
	}

	function excludeFromDividends(address account) external onlyOwner {
		dividendTracker.excludeFromDividends(account);
		emit ExcludeFromDividendsChange(account, true);		
	}

	function includeInDividends(address account) external onlyOwner {
		dividendTracker.includeInDividends(account);
		emit ExcludeFromDividendsChange(account, false);			
	}

	function includeMeInDividends() external {
		dividendTracker.includeInDividends(msg.sender);
		emit ExcludeFromDividendsChange(msg.sender, false);			
	}

	function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxWalletLimit[account] != excluded, "Kronos: Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
		emit ExcludeFromMaxWalletChange(account, excluded);
	}

	function excludeFromMaxTxLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxTxLimit[account] != excluded, "Kronos: Account is already the value of 'excluded'");
		_isExcludedFromMaxTxLimit[account] = excluded;
		emit ExcludeFromMaxTxChange(account, excluded);
	}   

	function blacklistAccount(address account) external onlyOwner {
		uint256 currentTimestamp = block.timestamp;
		require(!_isBlacklisted[account], "Kronos: Account is already blocked");
		require(!liquidityPair[account], "Kronos: Cannot blacklist pair");
		require(account != address(meerkatV2Router), "Kronos: Cannot blacklist router address");		
		if (_isLaunched) {
			require((currentTimestamp - _launchStartTimestamp) < _blacklistTimeLimit, "Kronos: Time to block accounts has expired");
		}
		_isBlacklisted[account] = true;
		emit BlacklistedAccount(account, true);
	}

	function unblacklistAccount(address account) external onlyOwner {
		require(_isBlacklisted[account], "Kronos: Account is not blcoked");
		_isBlacklisted[account] = false;
		emit BlacklistedAccount(account, false);
	}

	function setWallets( address payable newMarketingWallet, address payable newteamWallet, address payable newRewardPoolWallet) external onlyOwner {
		if(marketingWallet != newMarketingWallet) {
			require(newMarketingWallet != address(0), "Kronos: The marketingWallet cannot be 0");
			emit WalletChange("marketingWallet", newMarketingWallet, marketingWallet);
			marketingWallet = newMarketingWallet;
		}
		if(teamWallet != newteamWallet) {
			require(newteamWallet != address(0), "Kronos: The teamWallet cannot be 0");
			emit WalletChange("teamWallet", newteamWallet, teamWallet);
			teamWallet = newteamWallet;
		}
		if(rewardPoolWallet != newRewardPoolWallet) {
			require(newteamWallet != address(0), "Kronos: The rewardPoolWallet cannot be 0");
			emit WalletChange("rewardPoolWallet", newRewardPoolWallet, rewardPoolWallet);
			rewardPoolWallet = newRewardPoolWallet;
		}        
	}

	function setMeerkatRouter(address newAddress) external onlyOwner {
		require(newAddress != address(meerkatV2Router), "Kronos: The router already has that address");
		emit MeerkatV2RouterChange(newAddress, address(meerkatV2Router));
		meerkatV2Router = IMeerkatV2Router02(newAddress);
		dividendTracker.setMeerkatRouter(newAddress);
        _approve(address(this), address(meerkatV2Router), type(uint256).max);        
	}

	function setGasForProcessing(uint256 newValue) external onlyOwner {
		require(newValue != gasForProcessing, "Kronos: Cannot update gasForProcessing to same value");
		emit GasForProcessingChange(newValue, gasForProcessing);
		gasForProcessing = newValue;
	}

	function setMaxWalletAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxWalletAmount, "Kronos: Cannot update maxWalletAmount to same value");
        require(newValue >= TOTAL_SUPPLY / 1000, "Kronos: Cannot update maxWalletAmount to less than 0.1% of supply");
		emit MaxWalletAmountChange(newValue, maxWalletAmount);
		maxWalletAmount = newValue;
	}

	function setMaxTxAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxTxAmount, "Kronos: Cannot update maxTxAmount to same value");
        require(newValue >= TOTAL_SUPPLY / 1000, "Kronos: Cannot update maxTxAmount to less than 0.1% of supply");
		emit MaxTxAmountChange(newValue, maxWalletAmount);
		maxTxAmount = newValue;
	}   

	function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
		require(newValue != minimumTokensBeforeSwap, "Kronos: Cannot update minimumTokensBeforeSwap to same value");
		emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
		minimumTokensBeforeSwap = newValue;
	}

	function setMinimumTokenBalanceForDividends(uint256 newValue) external onlyOwner {
		dividendTracker.setTokenBalanceForDividends(newValue);
	}

	function setPresaleAddress(address presaleAddress) external onlyOwner {
		_isExcludedFromFee[presaleAddress] = true;
		dividendTracker.excludeFromDividends(presaleAddress);
		_isAllowedToTradeWhenDisabled[presaleAddress] = true;
		_isExcludedFromMaxWalletLimit[presaleAddress] = true;
		_isExcludedFromMaxTxLimit[presaleAddress] = true;
		emit PresaleAddressAssigned(presaleAddress);
	}

    function setTaxBuy(uint256 _liquidity, uint256 _marketing, uint256 _team, uint256 _rewards, uint256 _rewardPool) external onlyOwner {
        uint256 totalTax = _liquidity + _marketing + _team + _rewards + _rewardPool;
        require(totalTax <= 20, "Kronos: Cannot update taxes to more than 20%");
        _taxBuy = Taxes(_liquidity, _marketing, _team, _rewards, _rewardPool);
        emit FeeChange("Buy", _liquidity, _marketing, _team, _rewards, _rewardPool);
    }

    function setTaxSell(uint256 _liquidity, uint256 _marketing, uint256 _team, uint256 _rewards, uint256 _rewardPool) external onlyOwner {
        uint256 totalTax = _liquidity + _marketing + _team + _rewards + _rewardPool;
        require(totalTax <= 20, "Kronos: Cannot update taxes to more than 20%");        
        _taxSell = Taxes(_liquidity, _marketing, _team, _rewards, _rewardPool);
        emit FeeChange("Sell", _liquidity, _marketing, _team, _rewards, _rewardPool);
    }

    function setTaxTransfer(uint256 _liquidity, uint256 _marketing, uint256 _team, uint256 _rewards, uint256 _rewardPool) external onlyOwner {
        uint256 totalTax = _liquidity + _marketing + _team + _rewards + _rewardPool;
        require(totalTax <= 20, "Kronos: Cannot update taxes to more than 20%");
        _taxTransfer = Taxes(_liquidity, _marketing, _team, _rewards, _rewardPool);
        emit FeeChange("Transfer", _liquidity, _marketing, _team, _rewards, _rewardPool);
    }    

    function toggleSwapAndLiquify(bool enable) external onlyOwner {
        require(SwapAndLiquifyEnabled != enable, "swapAndLiquify status already set to desire choice");
        SwapAndLiquifyEnabled = enable;
    }

	function claim() external {
		dividendTracker.processAccount(payable(msg.sender), false);
	}

	function claimCroOverflow() external onlyOwner {
        uint256 amount = address(this).balance;
		(bool success,) = address(owner()).call{value : amount}("");
		if (success){
			emit ClaimCroOverflow(amount);
		}
	}

	// Getters
	function getTotalDividendsDistributed() external view returns (uint256) {
		return dividendTracker.totalDividendsDistributed();
	}

	function withdrawableDividendOf(address account) external view returns(uint256) {
		return dividendTracker.withdrawableDividendOf(account);
	}

	function dividendTokenBalanceOf(address account) external view returns (uint256) {
		return dividendTracker.balanceOf(account);
	}

	function getAccountDividendsInfo(address account)
		external view returns (
		address,
		int256,
		int256,
		uint256,
		uint256,
		uint256,
		uint256,
		uint256) {
		return dividendTracker.getAccount(account);
	}

	function getNumberOfDividendTokenHolders() external view returns(uint256) {
		return dividendTracker.getNumberOfTokenHolders();
	}

	// Main
	function _transfer(
		address from,
		address to,
		uint256 amount
		) internal override {
		require(from != address(0), "CRC20: transfer from the zero address");
		require(to != address(0), "CRC20: transfer to the zero address");

		if(amount == 0) {
			super._transfer(from, to, 0);
			return;
		}

		bool isBuyFromLp = liquidityPair[from];
		bool isSelltoLp = liquidityPair[to];

		if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
			require(isTradingEnabled, "Kronos: Trading is currently disabled.");
			require(!_isBlacklisted[to], "Kronos: Account is blocked");
			require(!_isBlacklisted[from], "Kronos: Account is blocked");

			if (!_isExcludedFromMaxWalletLimit[to]) {
				require((balanceOf(to) + amount) <= maxWalletAmount, "Kronos: Expected wallet amount exceeds the maxWalletAmount.");
			}

            if (liquidityPair[from] || liquidityPair[to]) {
                if (!_isExcludedFromMaxTxLimit[from] || !_isExcludedFromMaxTxLimit[to]) {
                    require(amount <= maxTxAmount, "Kronos: Amount exceeds maxTxAmount");
                }
            }
		}

		_adjustTaxes(isBuyFromLp, isSelltoLp);
		bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

		if (
			isTradingEnabled &&
			canSwap &&
			!_swapping &&
			_totalFee > 0 &&
			liquidityPair[to] &&
			from != marketingWallet && to != marketingWallet &&
			from != teamWallet && to != teamWallet &&
            SwapAndLiquifyEnabled
		) {
			_swapping = true;
			_swapAndLiquify();
			_swapping = false;
		}

		bool takeFee = !_swapping && isTradingEnabled;

		if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
			takeFee = false;
		}
		if (takeFee) {
			uint256 fee = amount * _totalFee / 100;
			amount = amount - fee;
			super._transfer(from, address(this), fee);
		}

		super._transfer(from, to, amount);

		try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
		try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}

		if(!_swapping) {
			uint256 gas = gasForProcessing;
			try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
				emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin);
			}
			catch {}
		}
	}
	function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private {
		_liquidityFee = 0;
		_marketingFee = 0;
		_teamFee = 0;
		_rewardsFee = 0;
        _rewardPoolFee = 0;

		if (isBuyFromLp) {
			_liquidityFee = _taxBuy.liquidity;
			_marketingFee = _taxBuy.marketing;
			_teamFee = _taxBuy.team;
			_rewardsFee = _taxBuy.rewards;
            _rewardPoolFee = _taxBuy.rewardPool;
		}
		else if (isSelltoLp) {
			_liquidityFee = _taxSell.liquidity;
			_marketingFee = _taxSell.marketing;
			_teamFee = _taxSell.team;
			_rewardsFee = _taxSell.rewards;
            _rewardPoolFee = _taxSell.rewardPool;
		}
		else {
			_liquidityFee = _taxTransfer.liquidity;
			_marketingFee = _taxTransfer.marketing;
			_teamFee = _taxTransfer.team;
			_rewardsFee = _taxTransfer.rewards;
            _rewardPoolFee = _taxTransfer.rewardPool;
		}
		_totalFee = _liquidityFee + _marketingFee + _teamFee + _rewardsFee + _rewardPoolFee;
		emit FeesApplied(_liquidityFee, _marketingFee, _teamFee, _rewardsFee, _rewardPoolFee, _totalFee);
	}

	function _swapAndLiquify() private {
        if(allowance(address(this), address(meerkatV2Router)) != type(uint256).max) {
            _approve(address(this), address(meerkatV2Router), type(uint256).max);
        }        
		uint256 contractBalance = balanceOf(address(this));
		uint256 initialCROBalance = address(this).balance;
		uint256 totalFeePrior = _totalFee;

		uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2;
		uint256 amountToSwap = contractBalance - amountToLiquify;

		_swapTokensForCRO(amountToSwap);

		uint256 croBalanceAfterSwap = address(this).balance - initialCROBalance;
		uint256 totalCROFee = _totalFee - (_liquidityFee / 2);
		uint256 amountCROLiquidity = croBalanceAfterSwap * _liquidityFee / totalCROFee / 2;
		uint256 amountCROMarketing = croBalanceAfterSwap * _marketingFee / totalCROFee;
		uint256 amountCROTeam = croBalanceAfterSwap * _teamFee / totalCROFee;
        uint256 amountCRORewardPool = croBalanceAfterSwap * _rewardPoolFee / totalCROFee;
		uint256 amountCRORewards = croBalanceAfterSwap - (amountCROLiquidity + amountCROMarketing + amountCROTeam + amountCRORewardPool);

        if(amountCROMarketing > 0)
    		marketingWallet.transfer(amountCROMarketing);
        if(amountCROTeam > 0)
    		teamWallet.transfer(amountCROTeam);

		if(amountToLiquify > 0) {
			_addLiquidity(amountToLiquify, amountCROLiquidity);
			emit SwapAndLiquify(amountToSwap, amountCROLiquidity, amountToLiquify);
		}

        if(amountCRORewardPool > 0) {
            _swapAndSendUSDC(amountCRORewardPool);
            emit USDCSent(amountCRORewardPool);
        }

        if(amountCRORewards > 0) {
            (bool dividendSuccess,) = address(dividendTracker).call{value: amountCRORewards}("");
            if(dividendSuccess) {
                emit DividendsSent(amountCRORewards);
            }
        }
		_totalFee = totalFeePrior;
	}

	function _swapTokensForCRO(uint256 tokenAmount) private {
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = meerkatV2Router.WETH();
		_approve(address(this), address(meerkatV2Router), tokenAmount);
		meerkatV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			0, // accept any amount of ETH
			path,
			address(this),
			block.timestamp
		);
	}

    function _swapAndSendUSDC(uint256 croAmount) private {
		address[] memory path = new address[](2);
		path[0] = meerkatV2Router.WETH();
		path[1] = dividendToken;

        meerkatV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : croAmount}(
        0, // accept any amount of tokens
        path,
        rewardPoolWallet,
        block.timestamp 
        );       
    }

	function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
		_approve(address(this), address(meerkatV2Router), tokenAmount);
		meerkatV2Router.addLiquidityETH{value: ethAmount}(
			address(this),
			tokenAmount,
			0, // slippage is unavoidable
			0, // slippage is unavoidable
			teamWallet,
			block.timestamp
		);
	}

    function manualSwap() external onlyOwner {
        _swapAndLiquify();
    }
}

contract KronosDividendTracker is DividendPayingToken {
	using SafeMath for uint256;
	using SafeMathInt for int256;
	using IterableMapping for IterableMapping.Map;

	IterableMapping.Map private tokenHoldersMap;

	uint256 public lastProcessedIndex;
	mapping (address => bool) public excludedFromDividends;
	mapping (address => uint256) public lastClaimTimes;
	uint256 public claimWait;
	uint256 public minimumTokenBalanceForDividends;

	event ExcludeFromDividends(address indexed account);
	event IncludeInDividends(address indexed account);	
	event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
	event Claim(address indexed account, uint256 amount, bool indexed automatic);

	constructor() DividendPayingToken("Kronos_Dividend_Tracker", "Kronos_Dividend_Tracker") {
		claimWait = 3600; //distribute hourly
		minimumTokenBalanceForDividends = 1_000 * (10**18); //must hold 0.001% of supply to receive dividends
	}
	function setRewardToken(address token) external onlyOwner {
		_setRewardToken(token);
	}
	function setMeerkatRouter(address router) external onlyOwner {
		_setMeerkatRouter(router);
	}
	function _transfer(address, address, uint256) internal pure override {
		require(false, "Kronos_Dividend_Tracker: No transfers allowed");
	}
	function excludeFromDividends(address account) external onlyOwner {
		require(!excludedFromDividends[account]);
		excludedFromDividends[account] = true;
		_setBalance(account, 0);
		tokenHoldersMap.remove(account);
		emit ExcludeFromDividends(account);
	}
	function includeInDividends(address account) external onlyOwner {
		require(excludedFromDividends[account]);
		excludedFromDividends[account] = false;
		emit IncludeInDividends(account);
	}
	function setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
		require(minimumTokenBalanceForDividends != newValue, "Kronos_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'.");
		minimumTokenBalanceForDividends = newValue;
	}
	function updateClaimWait(uint256 newClaimWait) external onlyOwner {
		require(newClaimWait >= 3600 && newClaimWait <= 86400, "Kronos_Dividend_Tracker: claimWait must be updated to between 1 and 24 hours");
		require(newClaimWait != claimWait, "Kronos_Dividend_Tracker: Cannot update claimWait to same value");
		emit ClaimWaitUpdated(newClaimWait, claimWait);
		claimWait = newClaimWait;
	}
	function getLastProcessedIndex() external view returns(uint256) {
		return lastProcessedIndex;
	}
	function getNumberOfTokenHolders() external view returns(uint256) {
		return tokenHoldersMap.keys.length;
	}
	function getAccount(address _account)
		public view returns (
		address account,
		int256 index,
		int256 iterationsUntilProcessed,
		uint256 withdrawableDividends,
		uint256 totalDividends,
		uint256 lastClaimTime,
		uint256 nextClaimTime,
		uint256 secondsUntilAutoClaimAvailable) {
		account = _account;

		index = tokenHoldersMap.getIndexOfKey(account);
		iterationsUntilProcessed = -1;
		if(index >= 0) {
			if(uint256(index) > lastProcessedIndex) {
				iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
			}
			else {
				uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length.sub(lastProcessedIndex) : 0;
				iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
			}
		}
		withdrawableDividends = withdrawableDividendOf(account);
		totalDividends = accumulativeDividendOf(account);
		lastClaimTime = lastClaimTimes[account];
		nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
		secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
	}
	function getAccountAtIndex(uint256 index)
		public view returns (
		address,
		int256,
		int256,
		uint256,
		uint256,
		uint256,
		uint256,
		uint256) {
		if(index >= tokenHoldersMap.size()) {
			return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0);
		}
		address account = tokenHoldersMap.getKeyAtIndex(index);
		return getAccount(account);
	}
	function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
		if(lastClaimTime > block.timestamp)  {
			return false;
		}
		return block.timestamp.sub(lastClaimTime) >= claimWait;
	}
	function setBalance(address payable account, uint256 newBalance) external onlyOwner {
		if(excludedFromDividends[account]) {
			return;
		}
		if(newBalance >= minimumTokenBalanceForDividends) {
			_setBalance(account, newBalance);
			tokenHoldersMap.set(account, newBalance);
		}
		else {
			_setBalance(account, 0);
			tokenHoldersMap.remove(account);
		}
		processAccount(account, true);
	}
	function process(uint256 gas) public onlyOwner returns (uint256, uint256, uint256) {
		uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;
		if(numberOfTokenHolders == 0) {
			return (0, 0, lastProcessedIndex);
		}

		uint256 _lastProcessedIndex = lastProcessedIndex;
		uint256 gasUsed = 0;
		uint256 gasLeft = gasleft();
		uint256 iterations = 0;
		uint256 claims = 0;

		while(gasUsed < gas && iterations < numberOfTokenHolders) {
			_lastProcessedIndex++;
			if(_lastProcessedIndex >= tokenHoldersMap.keys.length) {
				_lastProcessedIndex = 0;
			}
			address account = tokenHoldersMap.keys[_lastProcessedIndex];
			if(canAutoClaim(lastClaimTimes[account])) {
				if(processAccount(payable(account), true)) {
					claims++;
				}
			}

			iterations++;
			uint256 newGasLeft = gasleft();
			if(gasLeft > newGasLeft) {
				gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
			}
			gasLeft = newGasLeft;
		}
		lastProcessedIndex = _lastProcessedIndex;
		return (iterations, claims, lastProcessedIndex);
	}
	function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
		uint256 amount = _withdrawDividendOfUser(account);
		if(amount > 0) {
			lastClaimTimes[account] = block.timestamp;
			emit Claim(account, amount, automatic);
			return true;
		}
		return false;
	}
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlacklistedAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimCroOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"DividendTrackerChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTxChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPoolFee","type":"uint256"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPoolFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTxAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"MeerkatV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","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":"account","type":"address"}],"name":"PresaleAddressAssigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"USDCSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"SwapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_launchBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_launchStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxBuy","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"rewardPool","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSell","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"rewardPool","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxTransfer","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"rewardPool","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimCroOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract KronosDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"includeMeInDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"meerkatV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"meerkatV2Router","outputs":[{"internalType":"contract IMeerkatV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPoolWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMeerkatRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleAddress","type":"address"}],"name":"setPresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_rewardPool","type":"uint256"}],"name":"setTaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_rewardPool","type":"uint256"}],"name":"setTaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_rewardPool","type":"uint256"}],"name":"setTaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingWallet","type":"address"},{"internalType":"address payable","name":"newteamWallet","type":"address"},{"internalType":"address payable","name":"newRewardPoolWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526103e8620000156012600a62000f87565b62000025906305f5e10062000f9f565b6200003290600f62000f9f565b6200003e919062000fc1565b6012556103e86012600a62000054919062000f87565b62000064906305f5e10062000f9f565b6200007190600562000f9f565b6200007d919062000fc1565b601355612710620000916012600a62000f87565b620000a1906305f5e10062000f9f565b620000ae90601962000f9f565b620000ba919062000fc1565b601555620493e0601655601780546001600160a01b031990811673c21223249ca28397b4b6541dffaecc539bff0c5917909155601880548216735f5b8fa24953ad063840c3da1445042b34fb918717905560198054821673e2b97bc28609849c848dc1fe421858dcfc55378c179055601a805490911673a514a0c9eae1134706cdb5e2b93b839e6093bd431790556040805160a08082018352600280835260046020808501829052848601839052600160608087018290526080968701829052601b859055601c849055601d859055601e829055601f829055875195860188528486528583018490529685018490529584018690529290930184905290819055602182905560228190556023839055602483905560258190556026919091556027556028819055602955348015620001f157600080fd5b50604051806040016040528060068152602001654b726f6e6f7360d01b81525060405180604001604052806004815260200163244b524f60e01b815250600062000240620009a960201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200029f90600490602085019062000dc0565b508051620002b590600590602084019062000dc0565b505050604051620002c69062000e4f565b604051809103906000f080158015620002e3573d6000803e3d6000fd5b50600c80546001600160a01b0319166001600160a01b03929092169182179055604051630f2d699f60e21b815273145677fc4d9b8f19b5d56d1820c48e0443049a306004820152633cb5a67c90602401600060405180830381600087803b1580156200034e57600080fd5b505af115801562000363573d6000803e3d6000fd5b5050600c54601754604051638aee812760e01b81526001600160a01b03918216600482015291169250638aee81279150602401600060405180830381600087803b158015620003b157600080fd5b505af1158015620003c6573d6000803e3d6000fd5b50505050600073145677fc4d9b8f19b5d56d1820c48e0443049a3090506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044a919062000fe4565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000498573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004be919062000fe4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200050c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000532919062000fe4565b600d80546001600160a01b0319166001600160a01b03858116919091179091558116608052905062000566816001620009ad565b600d54620005829033906001600160a01b031660001962000b16565b600d546200059e9030906001600160a01b031660001962000b16565b600160076000620005b76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007909352818320805485166001908117909155600c805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b1580156200064d57600080fd5b505af115801562000662573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620006ac57600080fd5b505af1158015620006c1573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b5050600c546001600160a01b031691506331e79db090506200074c6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200078e57600080fd5b505af1158015620007a3573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b158015620007ef57600080fd5b505af115801562000804573d6000803e3d6000fd5b505050506001600660006200081e62000c3e60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790558582168152600893849052828120805486166001908117909155600c54831682528382208054871682179055600d549092168152828120805486168317905530815291822080549094168117909355620008ae6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790558582168152600993849052828120805486166001908117909155600c54831682528382208054871682179055600d5490921681528281208054861683179055308152918220805490941681179093556200093e6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620009a16200097d6000546001600160a01b031690565b6200098b6012600a62000f87565b6200099b906305f5e10062000f9f565b62000c4d565b505062001067565b3390565b6001600160a01b0382166000908152600b602052604090205460ff161515811515141562000a4a576040805162461bcd60e51b81526020600482015260248101919091527f4b726f6e6f733a204175746f6d61746564206d61726b6574206d616b6572207060448201527f61697220697320616c72656164792073657420746f20746861742076616c756560648201526084015b60405180910390fd5b6001600160a01b0382166000908152600b60205260409020805460ff1916821580159190911790915562000ada57600c5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000ac057600080fd5b505af115801562000ad5573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03831662000b7a5760405162461bcd60e51b8152602060048201526024808201527f43524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000a41565b6001600160a01b03821662000bdd5760405162461bcd60e51b815260206004820152602260248201527f43524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000a41565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031690565b6001600160a01b03821662000ca55760405162461bcd60e51b815260206004820152601f60248201527f43524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000a41565b62000cc18160035462000d5460201b62002e551790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000cf691839062002e5562000d54821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000d489085815260200190565b60405180910390a35050565b60008062000d6383856200100f565b90508381101562000db75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000a41565b90505b92915050565b82805462000dce906200102a565b90600052602060002090601f01602090048101928262000df2576000855562000e3d565b82601f1062000e0d57805160ff191683800117855562000e3d565b8280016001018555821562000e3d579182015b8281111562000e3d57825182559160200191906001019062000e20565b5062000e4b92915062000e5d565b5090565b612825806200585983390190565b5b8082111562000e4b576000815560010162000e5e565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000ecb57816000190482111562000eaf5762000eaf62000e74565b8085161562000ebd57918102915b93841c939080029062000e8f565b509250929050565b60008262000ee45750600162000dba565b8162000ef35750600062000dba565b816001811462000f0c576002811462000f175762000f37565b600191505062000dba565b60ff84111562000f2b5762000f2b62000e74565b50506001821b62000dba565b5060208310610133831016604e8410600b841016171562000f5c575081810a62000dba565b62000f68838362000e8a565b806000190482111562000f7f5762000f7f62000e74565b029392505050565b600062000f9860ff84168362000ed3565b9392505050565b600081600019048311821515161562000fbc5762000fbc62000e74565b500290565b60008262000fdf57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000ff757600080fd5b81516001600160a01b038116811462000db757600080fd5b6000821982111562001025576200102562000e74565b500190565b600181811c908216806200103f57607f821691505b602082108114156200106157634e487b7160e01b600052602260045260246000fd5b50919050565b6080516147cf6200108a6000396000818161068601526121a101526147cf6000f3fe6080604052600436106103e85760003560e01c80636d7331ed11610208578063a8b9d24011610118578063c0246668116100ab578063d37b34d71161007a578063d37b34d714610bf5578063dd62ed3e14610c15578063ec28438a14610c5b578063ee24565014610c7b578063f2fde38b14610c9b57600080fd5b8063c024666814610b7f578063c0f306ef14610b9f578063d2d7ad8314610bbf578063d322157614610bd557600080fd5b8063ad56c13c116100e7578063ad56c13c14610aaa578063aee50b1e14610b0f578063b7677cb214610b2f578063bdb9f28d14610b5f57600080fd5b8063a8b9d24014610a3e578063a9059cbb14610a5e578063aa4bde2814610a7e578063abfa71e914610a9457600080fd5b806388bdd9be1161019b57806395d89b411161016a57806395d89b41146109ac5780639c1b8af5146109c1578063a25d11d5146109d7578063a457c2d7146109f7578063a4fbec3314610a1757600080fd5b806388bdd9be146109435780638c0b5e22146109635780638da5cb5b1461097957806395ccca7a1461099757600080fd5b806375cb1bd1116101d757806375cb1bd1146108c357806375f0a874146108e3578063781edb3c146109035780637d210f411461092357600080fd5b80636d7331ed1461083857806370a0823114610858578063715018a61461088e57806371ea980c146108a357600080fd5b806331e79db0116103035780634e71d92d116102965780635ebf4db9116102655780635ebf4db9146107ad5780636318be01146107cd57806364b0f653146107e35780636843cd84146107f857806369fc3a061461081857600080fd5b80634e71d92d1461074357806351bc3c85146107585780635960e46d1461076d578063599270441461078d57600080fd5b80633a1ce746116102d25780633a1ce746146106c85780633cb5a67c146106dd578063423ce9cc146106fd5780634597c5fe1461071c57600080fd5b806331e79db01461063f57806334cf1fea1461065f57806335c200d41461067457806339509351146106a857600080fd5b80631d31a7901161037b57806327a14fc21161034a57806327a14fc2146105ce5780632c1f5216146105ee57806330bb4cff1461060e578063313ce5671461062357600080fd5b80631d31a7901461051f5780631e3eed7c1461056e57806323b872dd1461058e57806323cc6601146105ae57600080fd5b80630bd05b69116103b75780630bd05b69146104835780631582358e1461049857806318160ddd146104d05780631cdd3be3146104ef57600080fd5b806301339c21146103f4578063064a59d01461040b57806306fdde0314610441578063095ea7b31461046357600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610cbb565b005b34801561041757600080fd5b50600d5461042c90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561044d57600080fd5b50610456610d27565b604051610438919061403c565b34801561046f57600080fd5b5061042c61047e3660046140a6565b610db9565b34801561048f57600080fd5b50610409610dd0565b3480156104a457600080fd5b506017546104b8906001600160a01b031681565b6040516001600160a01b039091168152602001610438565b3480156104dc57600080fd5b506003545b604051908152602001610438565b3480156104fb57600080fd5b5061042c61050a3660046140d2565b600a6020526000908152604090205460ff1681565b34801561052b57600080fd5b50602554602654602754602854602954610546949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610438565b34801561057a57600080fd5b506104096105893660046140ef565b610e0f565b34801561059a57600080fd5b5061042c6105a936600461412a565b610f3a565b3480156105ba57600080fd5b506104096105c9366004614179565b610fa3565b3480156105da57600080fd5b506104096105e93660046141b2565b61106c565b3480156105fa57600080fd5b50600c546104b8906001600160a01b031681565b34801561061a57600080fd5b506104e16111dd565b34801561062f57600080fd5b5060405160128152602001610438565b34801561064b57600080fd5b5061040961065a3660046140d2565b611250565b34801561066b57600080fd5b5061040961131c565b34801561068057600080fd5b506104b87f000000000000000000000000000000000000000000000000000000000000000081565b3480156106b457600080fd5b5061042c6106c33660046140a6565b611359565b3480156106d457600080fd5b5061040961138f565b3480156106e957600080fd5b506104096106f83660046140d2565b611460565b34801561070957600080fd5b5060145461042c90610100900460ff1681565b34801561072857600080fd5b50601b54601c54601d54601e54601f54610546949392919085565b34801561074f57600080fd5b506104096115ca565b34801561076457600080fd5b5061040961163f565b34801561077957600080fd5b506104096107883660046141b2565b611673565b34801561079957600080fd5b506019546104b8906001600160a01b031681565b3480156107b957600080fd5b506104096107c83660046141b2565b61173f565b3480156107d957600080fd5b506104e160115481565b3480156107ef57600080fd5b506104e16117ca565b34801561080457600080fd5b506104e16108133660046140d2565b611814565b34801561082457600080fd5b506104096108333660046141cb565b611884565b34801561084457600080fd5b506104096108533660046140d2565b611942565b34801561086457600080fd5b506104e16108733660046140d2565b6001600160a01b031660009081526001602052604090205490565b34801561089a57600080fd5b50610409611a21565b3480156108af57600080fd5b50601a546104b8906001600160a01b031681565b3480156108cf57600080fd5b506104096108de3660046141e8565b611a95565b3480156108ef57600080fd5b506018546104b8906001600160a01b031681565b34801561090f57600080fd5b5061040961091e366004614179565b611d98565b34801561092f57600080fd5b50600d546104b8906001600160a01b031681565b34801561094f57600080fd5b5061040961095e3660046140d2565b611e59565b34801561096f57600080fd5b506104e160135481565b34801561098557600080fd5b506000546001600160a01b03166104b8565b3480156109a357600080fd5b50610409612266565b3480156109b857600080fd5b506104566122fb565b3480156109cd57600080fd5b506104e160165481565b3480156109e357600080fd5b506104096109f23660046140ef565b61230a565b348015610a0357600080fd5b5061042c610a123660046140a6565b6123d6565b348015610a2357600080fd5b50602054602154602254602354602454610546949392919085565b348015610a4a57600080fd5b506104e1610a593660046140d2565b612425565b348015610a6a57600080fd5b5061042c610a793660046140a6565b612458565b348015610a8a57600080fd5b506104e160125481565b348015610aa057600080fd5b506104e160105481565b348015610ab657600080fd5b50610aca610ac53660046140d2565b612465565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610438565b348015610b1b57600080fd5b50610409610b2a3660046141b2565b6124ff565b348015610b3b57600080fd5b5061042c610b4a3660046140d2565b600b6020526000908152604090205460ff1681565b348015610b6b57600080fd5b50610409610b7a3660046140d2565b6125d4565b348015610b8b57600080fd5b50610409610b9a366004614179565b6126ec565b348015610bab57600080fd5b50610409610bba3660046140d2565b6127ad565b348015610bcb57600080fd5b506104e160155481565b348015610be157600080fd5b50610409610bf0366004614179565b612872565b348015610c0157600080fd5b50610409610c103660046140d2565b6128f4565b348015610c2157600080fd5b506104e1610c30366004614233565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610c6757600080fd5b50610409610c763660046141b2565b612b3a565b348015610c8757600080fd5b50610409610c963660046140ef565b612c9d565b348015610ca757600080fd5b50610409610cb63660046140d2565b612d6b565b6000546001600160a01b03163314610cee5760405162461bcd60e51b8152600401610ce590614261565b60405180910390fd5b4260105543601155600d805460ff60a01b1916600160a01b179055600f805460ff191660011790556014805461ff001916610100179055565b606060048054610d3690614296565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6290614296565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b5050505050905090565b6000610dc6338484612ebb565b5060015b92915050565b6000546001600160a01b03163314610dfa5760405162461bcd60e51b8152600401610ce590614261565b600d805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610e395760405162461bcd60e51b8152600401610ce590614261565b6000818385610e48888a6142e7565b610e5291906142e7565b610e5c91906142e7565b610e6691906142e7565b90506014811115610e895760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a08101825287815260208101879052808201869052606081018590526080018390526025879055602686905560278590556028849055602983905551672a3930b739b332b960c11b81526008015b60408051918290038220888352602083018890529082018690526060820185905260808201849052907f18313eafd26b263470e815300393e601ee24084135005dfe66a3bc4bbba795669060a00160405180910390a2505050505050565b6000610f47848484612fe0565b610f998433610f9485604051806060016040528060288152602001614772602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061373e565b612ebb565b5060019392505050565b6000546001600160a01b03163314610fcd5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526009602052604090205460ff161515811515141561100c5760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527f46a87ba9eb6bc0a74eae283c9908175809a666189b7de3c2f9df3fcbbe924d3591015b60405180910390a25050565b6000546001600160a01b031633146110965760405162461bcd60e51b8152600401610ce590614261565b6012548114156111045760405162461bcd60e51b815260206004820152603360248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d617857616c6c6574416044820152726d6f756e7420746f2073616d652076616c756560681b6064820152608401610ce5565b6103e86111136012600a614481565b611121906305f5e100614490565b61112b91906144af565b8110156111aa5760405162461bcd60e51b815260206004820152604160248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d617857616c6c65744160448201527f6d6f756e7420746f206c657373207468616e20302e3125206f6620737570706c6064820152607960f81b608482015260a401610ce5565b60125460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3601255565b600c54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b91906144d1565b905090565b6000546001600160a01b0316331461127a5760405162461bcd60e51b8152600401610ce590614261565b600c5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156112c157600080fd5b505af11580156112d5573d6000803e3d6000fd5b5050604051600181526001600160a01b03841692507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa991506020015b60405180910390a250565b6000546001600160a01b031633146113465760405162461bcd60e51b8152600401610ce590614261565b600d805460ff60a01b1916905542600e55565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610dc6918590610f949086612e55565b6000546001600160a01b031633146113b95760405162461bcd60e51b8152600401610ce590614261565b4760006113ce6000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611418576040519150601f19603f3d011682016040523d82523d6000602084013e61141d565b606091505b50509050801561145c576040518281527f7119601cabfe7d71a345076e0c5cdd24f8d5e021f3208294b317988bc692edcd906020015b60405180910390a15b5050565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610ce590614261565b600d546001600160a01b03828116911614156114fc5760405162461bcd60e51b815260206004820152602b60248201527f4b726f6e6f733a2054686520726f7574657220616c726561647920686173207460448201526a686174206164647265737360a81b6064820152608401610ce5565b600d546040516001600160a01b03918216918316907f683c3b49bd4be33811cc81bd567058dd43bf6a6ec34076d5f9e0581f56758b1590600090a3600d80546001600160a01b0319166001600160a01b03838116918217909255600c54604051630f2d699f60e21b8152600481019290925290911690633cb5a67c90602401600060405180830381600087803b15801561159557600080fd5b505af11580156115a9573d6000803e3d6000fd5b5050600d546115c792503091506001600160a01b0316600019612ebb565b50565b600c5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af115801561161b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c791906144ea565b6000546001600160a01b031633146116695760405162461bcd60e51b8152600401610ce590614261565b611671613778565b565b6000546001600160a01b0316331461169d5760405162461bcd60e51b8152600401610ce590614261565b60165481141561170c5760405162461bcd60e51b815260206004820152603460248201527f4b726f6e6f733a2043616e6e6f742075706461746520676173466f7250726f63604482015273657373696e6720746f2073616d652076616c756560601b6064820152608401610ce5565b60165460405182907f79282993055b3a4cfa0a12ead12d58cc3aad216fcbbae5a73d942c1ee861fb9a90600090a3601655565b6000546001600160a01b031633146117695760405162461bcd60e51b8152600401610ce590614261565b600c5460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401600060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b5050505050565b600c54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611227573d6000803e3d6000fd5b600c546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611860573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dca91906144d1565b6000546001600160a01b031633146118ae5760405162461bcd60e51b8152600401610ce590614261565b60145460ff61010090910416151581151514156119285760405162461bcd60e51b815260206004820152603260248201527f73776170416e644c6971756966792073746174757320616c72656164792073656044820152717420746f206465736972652063686f69636560701b6064820152608401610ce5565b601480549115156101000261ff0019909216919091179055565b6000546001600160a01b0316331461196c5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381166000908152600a602052604090205460ff166119d45760405162461bcd60e51b815260206004820152601e60248201527f4b726f6e6f733a204163636f756e74206973206e6f7420626c636f6b656400006044820152606401610ce5565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055519091907f22dfccad3b8536e5d2741216ca2aa1324ca91414ac6daeb7ed374d9501997298908390a350565b6000546001600160a01b03163314611a4b5760405162461bcd60e51b8152600401610ce590614261565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611abf5760405162461bcd60e51b8152600401610ce590614261565b6018546001600160a01b03848116911614611bb3576001600160a01b038316611b3a5760405162461bcd60e51b815260206004820152602760248201527f4b726f6e6f733a20546865206d61726b6574696e6757616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610ce5565b6018546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601880546001600160a01b0319166001600160a01b0385161790555b6019546001600160a01b03838116911614611c9d576001600160a01b038216611c295760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a20546865207465616d57616c6c65742063616e6e6f74206265604482015261020360f41b6064820152608401610ce5565b601954604051691d19585b55d85b1b195d60b21b81526001600160a01b0391821691841690600a01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601980546001600160a01b0319166001600160a01b0384161790555b601a546001600160a01b03828116911614611d93576001600160a01b038216611d195760405162461bcd60e51b815260206004820152602860248201527f4b726f6e6f733a2054686520726577617264506f6f6c57616c6c65742063616e60448201526706e6f7420626520360c41b6064820152608401610ce5565b601a546040516f1c995dd85c99141bdbdb15d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601a80546001600160a01b0319166001600160a01b0383161790555b505050565b6000546001600160a01b03163314611dc25760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526008602052604090205460ff1615158115151415611e015760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611060565b6000546001600160a01b03163314611e835760405162461bcd60e51b8152600401610ce590614261565b600c546001600160a01b0382811691161415611eff5760405162461bcd60e51b815260206004820152603560248201527f4b726f6e6f733a20546865206469766964656e6420747261636b657220616c7260448201527465616479206861732074686174206164647265737360581b6064820152608401610ce5565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f709190614507565b6001600160a01b0316146120005760405162461bcd60e51b815260206004820152604b60248201527f4b726f6e6f733a20546865206e6577206469766964656e6420747261636b657260448201527f206d757374206265206f776e656420627920746865204b726f6e6f7320746f6b60648201526a195b8818dbdb9d1c9858dd60aa1b608482015260a401610ce5565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b15801561209b57600080fd5b505af11580156120af573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db06120d46000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b5050600d5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505060405163031e79db60e41b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152841692506331e79db09150602401600060405180830381600087803b1580156121ef57600080fd5b505af1158015612203573d6000803e3d6000fd5b5050600c546040516001600160a01b03918216935090851691507f43c6eb9010459f8dbe15160295e5e1477f0b15c2bf0d127bfccc6c67fca7f69090600090a3600c80546001600160a01b0319166001600160a01b039290921691909117905550565b600c5460405163c0f306ef60e01b81523360048201526001600160a01b039091169063c0f306ef90602401600060405180830381600087803b1580156122ab57600080fd5b505af11580156122bf573d6000803e3d6000fd5b5050604051600081523392507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa9915060200160405180910390a2565b606060058054610d3690614296565b6000546001600160a01b031633146123345760405162461bcd60e51b8152600401610ce590614261565b6000818385612343888a6142e7565b61234d91906142e7565b61235791906142e7565b61236191906142e7565b905060148111156123845760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a0810182528781526020810187905280820186905260608101859052608001839052601b879055601c869055601d859055601e849055601f839055516242757960e81b8152600301610edc565b6000610dc63384610f948560405180606001604052806025815260200161474d602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061373e565b600c546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611843565b6000610dc6338484612fe0565b600c5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f19060240161010060405180830381865afa1580156124c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e49190614524565b97509750975097509750975097509750919395975091939597565b6000546001600160a01b031633146125295760405162461bcd60e51b8152600401610ce590614261565b6015548114156125a15760405162461bcd60e51b815260206004820152603b60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d696e696d756d546f6b60448201527f656e734265666f72655377617020746f2073616d652076616c756500000000006064820152608401610ce5565b60155460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3601555565b6000546001600160a01b031633146125fe5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381811660008181526007602052604090819020805460ff19166001179055600c54905163031e79db60e41b81526004810192909252909116906331e79db090602401600060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b505050506001600160a01b03811660008181526006602090815260408083208054600160ff1991821681179092556008845282852080548216831790556009909352818420805490931617909155517f3727916e5d01f0ec2bcea88f550181aee40774d9790b1f1240616a15005857999190a250565b6000546001600160a01b031633146127165760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526007602052604090205460ff16151581151514156127555760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611060565b6000546001600160a01b031633146127d75760405162461bcd60e51b8152600401610ce590614261565b600c5460405163c0f306ef60e01b81526001600160a01b0383811660048301529091169063c0f306ef90602401600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b5050604051600081526001600160a01b03841692507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa99150602001611311565b6000546001600160a01b0316331461289c5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611060565b6000546001600160a01b0316331461291e5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381166000908152600a6020526040902054429060ff16156129945760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a204163636f756e7420697320616c726561647920626c6f636b604482015261195960f21b6064820152608401610ce5565b6001600160a01b0382166000908152600b602052604090205460ff16156129fd5760405162461bcd60e51b815260206004820152601d60248201527f4b726f6e6f733a2043616e6e6f7420626c61636b6c69737420706169720000006044820152606401610ce5565b600d546001600160a01b0383811691161415612a6b5760405162461bcd60e51b815260206004820152602760248201527f4b726f6e6f733a2043616e6e6f7420626c61636b6c69737420726f75746572206044820152666164647265737360c81b6064820152608401610ce5565b600f5460ff1615612ae75761a8c060105482612a87919061458e565b10612ae75760405162461bcd60e51b815260206004820152602a60248201527f4b726f6e6f733a2054696d6520746f20626c6f636b206163636f756e74732068604482015269185cc8195e1c1a5c995960b21b6064820152608401610ce5565b6001600160a01b0382166000818152600a6020526040808220805460ff1916600190811790915590519092917f22dfccad3b8536e5d2741216ca2aa1324ca91414ac6daeb7ed374d950199729891a35050565b6000546001600160a01b03163314612b645760405162461bcd60e51b8152600401610ce590614261565b601354811415612bce5760405162461bcd60e51b815260206004820152602f60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d61785478416d6f756e60448201526e7420746f2073616d652076616c756560881b6064820152608401610ce5565b6103e8612bdd6012600a614481565b612beb906305f5e100614490565b612bf591906144af565b811015612c6a5760405162461bcd60e51b815260206004820152603d60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d61785478416d6f756e60448201527f7420746f206c657373207468616e20302e3125206f6620737570706c790000006064820152608401610ce5565b60125460405182907fe3052f2f134f247948088ca6829f4168989b7313f1b54de88cc18178a249de4b90600090a3601355565b6000546001600160a01b03163314612cc75760405162461bcd60e51b8152600401610ce590614261565b6000818385612cd6888a6142e7565b612ce091906142e7565b612cea91906142e7565b612cf491906142e7565b90506014811115612d175760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a08101825287815260208082018890528183018790526060820186905260809091018490528790556021869055602285905560238490556024839055516314d95b1b60e21b8152600401610edc565b6000546001600160a01b03163314612d955760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b038116612dfa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ce5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080612e6283856142e7565b905083811015612eb45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ce5565b9392505050565b6001600160a01b038316612f1d5760405162461bcd60e51b8152602060048201526024808201527f43524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b038216612f7e5760405162461bcd60e51b815260206004820152602260248201527f43524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166130065760405162461bcd60e51b8152600401610ce5906145a5565b6001600160a01b03821661302c5760405162461bcd60e51b8152600401610ce5906145ea565b8061303d57611d9383836000613ab7565b6001600160a01b038084166000818152600b6020908152604080832054948716835280832054938352600690915290205460ff92831692918216911615801561309f57506001600160a01b03841660009081526006602052604090205460ff16155b1561338657600d54600160a01b900460ff1661310c5760405162461bcd60e51b815260206004820152602660248201527f4b726f6e6f733a2054726164696e672069732063757272656e746c792064697360448201526530b13632b21760d11b6064820152608401610ce5565b6001600160a01b0384166000908152600a602052604090205460ff16156131755760405162461bcd60e51b815260206004820152601a60248201527f4b726f6e6f733a204163636f756e7420697320626c6f636b65640000000000006044820152606401610ce5565b6001600160a01b0385166000908152600a602052604090205460ff16156131de5760405162461bcd60e51b815260206004820152601a60248201527f4b726f6e6f733a204163636f756e7420697320626c6f636b65640000000000006044820152606401610ce5565b6001600160a01b03841660009081526008602052604090205460ff1661329f5760125483613221866001600160a01b031660009081526001602052604090205490565b61322b91906142e7565b111561329f5760405162461bcd60e51b815260206004820152603b60248201527f4b726f6e6f733a2045787065637465642077616c6c657420616d6f756e74206560448201527f78636565647320746865206d617857616c6c6574416d6f756e742e00000000006064820152608401610ce5565b6001600160a01b0385166000908152600b602052604090205460ff16806132de57506001600160a01b0384166000908152600b602052604090205460ff165b15613386576001600160a01b03851660009081526009602052604090205460ff16158061332457506001600160a01b03841660009081526009602052604090205460ff16155b15613386576013548311156133865760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a20416d6f756e742065786365656473206d61785478416d6f756044820152611b9d60f21b6064820152608401610ce5565b6133908282613bc3565b60155430600090815260016020526040902054600d5491111590600160a01b900460ff1680156133bd5750805b80156133cc575060145460ff16155b80156133da57506000602f54115b80156133fe57506001600160a01b0385166000908152600b602052604090205460ff165b801561341857506018546001600160a01b03878116911614155b801561343257506018546001600160a01b03868116911614155b801561344c57506019546001600160a01b03878116911614155b801561346657506019546001600160a01b03868116911614155b80156134795750601454610100900460ff165b1561349e576014805460ff19166001179055613493613778565b6014805460ff191690555b60145460009060ff161580156134bd5750600d54600160a01b900460ff165b6001600160a01b03881660009081526007602052604090205490915060ff16806134ff57506001600160a01b03861660009081526007602052604090205460ff165b15613508575060005b80156135455760006064602f54876135209190614490565b61352a91906144af565b9050613536818761458e565b9550613543883083613ab7565b505b613550878787613ab7565b600c546001600160a01b031663e30443bc88613581816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156135c757600080fd5b505af19250505080156135d8575060015b50600c546001600160a01b031663e30443bc8761360a816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561365057600080fd5b505af1925050508015613661575060015b5060145460ff1661373557601654600c546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156136d9575060408051601f3d908101601f191682019092526136d69181019061462d565b60015b6136e257613733565b60408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b50505050505050565b600081848411156137625760405162461bcd60e51b8152600401610ce5919061403c565b50600061376f848661458e565b95945050505050565b600d543060009081526002602090815260408083206001600160a01b0390941683529290522054600019146137c157600d546137c19030906001600160a01b0316600019612ebb565b30600090815260016020526040812054602f54602a549192479260029083906137ea9087614490565b6137f491906144af565b6137fe91906144af565b9050600061380c828661458e565b905061381781613cea565b6000613823854761458e565b905060006002602a5461383691906144af565b602f54613843919061458e565b90506000600282602a54856138589190614490565b61386291906144af565b61386c91906144af565b9050600082602b548561387f9190614490565b61388991906144af565b9050600083602c548661389c9190614490565b6138a691906144af565b9050600084602e54876138b99190614490565b6138c391906144af565b9050600081836138d386886142e7565b6138dd91906142e7565b6138e791906142e7565b6138f1908861458e565b90508315613935576018546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015613933573d6000803e3d6000fd5b505b8215613977576019546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613975573d6000803e3d6000fd5b505b88156139c9576139878986613e44565b60408051898152602081018790529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8115613a0c576139d882613ef1565b6040518281527f18dc4e882f216aaedbdea3c2afca1d207744d2f22cad841aba3c8c6314bd38f79060200160405180910390a15b8015613aa457600c546040516000916001600160a01b03169083908381818185875af1925050503d8060008114613a5f576040519150601f19603f3d011682016040523d82523d6000602084013e613a64565b606091505b505090508015613aa2576040518281527fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9699060200160405180910390a15b505b505050602f969096555050505050505050565b6001600160a01b038316613add5760405162461bcd60e51b8152600401610ce5906145a5565b6001600160a01b038216613b035760405162461bcd60e51b8152600401610ce5906145ea565b613b4081604051806060016040528060268152602001614727602691396001600160a01b038616600090815260016020526040902054919061373e565b6001600160a01b038085166000908152600160205260408082209390935590841681522054613b6f9082612e55565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612fd39085815260200190565b6000602a819055602b819055602c819055602d819055602e558115613c0557601b54602a55601c54602b55601d54602c55601e54602d55601f54602e55613c4d565b8015613c2e57602054602a55602154602b55602254602c55602354602d55602454602e55613c4d565b602554602a55602654602b55602754602c55602854602d55602954602e555b602e54602d54602c54602b54602a54613c6691906142e7565b613c7091906142e7565b613c7a91906142e7565b613c8491906142e7565b602f819055602a54602b54602c54602d54602e54604080519586526020860194909452928401919091526060830152608082015260a08101919091527f24b7b85246369f5fb87526971064f357b39a0f399bca1c50e11af8c3c8f4bbd69060c001611453565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d1f57613d1f61465b565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9c9190614507565b81600181518110613daf57613daf61465b565b6001600160a01b039283166020918202929092010152600d54613dd59130911684612ebb565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e0e9085906000908690309042906004016146b5565b600060405180830381600087803b158015613e2857600080fd5b505af1158015613e3c573d6000803e3d6000fd5b505050505050565b600d54613e5c9030906001600160a01b031684612ebb565b600d5460195460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613ecc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117c3919061462d565b6040805160028082526060820183526000926020830190803683375050600d54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7f9190614507565b81600081518110613f9257613f9261465b565b6001600160a01b039283166020918202929092010152601754825191169082906001908110613fc357613fc361465b565b6001600160a01b039283166020918202929092010152600d54601a5460405163b6f9de9560e01b81529183169263b6f9de9592869261400f9260009288929091169042906004016146f1565b6000604051808303818588803b15801561402857600080fd5b505af1158015613735573d6000803e3d6000fd5b600060208083528351808285015260005b818110156140695785810183015185820160400152820161404d565b8181111561407b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146115c757600080fd5b600080604083850312156140b957600080fd5b82356140c481614091565b946020939093013593505050565b6000602082840312156140e457600080fd5b8135612eb481614091565b600080600080600060a0868803121561410757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060006060848603121561413f57600080fd5b833561414a81614091565b9250602084013561415a81614091565b929592945050506040919091013590565b80151581146115c757600080fd5b6000806040838503121561418c57600080fd5b823561419781614091565b915060208301356141a78161416b565b809150509250929050565b6000602082840312156141c457600080fd5b5035919050565b6000602082840312156141dd57600080fd5b8135612eb48161416b565b6000806000606084860312156141fd57600080fd5b833561420881614091565b9250602084013561421881614091565b9150604084013561422881614091565b809150509250925092565b6000806040838503121561424657600080fd5b823561425181614091565b915060208301356141a781614091565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806142aa57607f821691505b602082108114156142cb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156142fa576142fa6142d1565b500190565b6020808252602c908201527f4b726f6e6f733a2043616e6e6f742075706461746520746178657320746f206d60408201526b6f7265207468616e2032302560a01b606082015260800190565b60208082526032908201527f4b726f6e6f733a204163636f756e7420697320616c7265616479207468652076604082015271616c7565206f6620276578636c756465642760701b606082015260800190565b600181815b808511156143d85781600019048211156143be576143be6142d1565b808516156143cb57918102915b93841c93908002906143a2565b509250929050565b6000826143ef57506001610dca565b816143fc57506000610dca565b8160018114614412576002811461441c57614438565b6001915050610dca565b60ff84111561442d5761442d6142d1565b50506001821b610dca565b5060208310610133831016604e8410600b841016171561445b575081810a610dca565b614465838361439d565b8060001904821115614479576144796142d1565b029392505050565b6000612eb460ff8416836143e0565b60008160001904831182151516156144aa576144aa6142d1565b500290565b6000826144cc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156144e357600080fd5b5051919050565b6000602082840312156144fc57600080fd5b8151612eb48161416b565b60006020828403121561451957600080fd5b8151612eb481614091565b600080600080600080600080610100898b03121561454157600080fd5b885161454c81614091565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b6000828210156145a0576145a06142d1565b500390565b60208082526025908201527f43524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f43524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008060006060848603121561464257600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156146aa5781516001600160a01b031687529582019590820190600101614685565b509495945050505050565b85815284602082015260a0604082015260006146d460a0830186614671565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061470a6080830186614671565b6001600160a01b0394909416604083015250606001529291505056fe43524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c6286ff8df4e21e7c34925ed322c5b634811972ad73a99be433c4604272a0da664736f6c634300080c003360806040523480156200001157600080fd5b5060408051808201825260178082527f4b726f6e6f735f4469766964656e645f547261636b6572000000000000000000602080840182815285518087019096529285528401528151919291839183916200006e9160039162000106565b5080516200008490600490602084019062000106565b5050506000620000996200010260201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060135550683635c9adc5dea00000601455620001e9565b3390565b8280546200011490620001ac565b90600052602060002090601f01602090048101928262000138576000855562000183565b82601f106200015357805160ff191683800117855562000183565b8280016001018555821562000183579182015b828111156200018357825182559160200191906001019062000166565b506200019192915062000195565b5090565b5b8082111562000191576000815560010162000196565b600181811c90821680620001c157607f821691505b60208210811415620001e357634e487b7160e01b600052602260045260246000fd5b50919050565b61262c80620001f96000396000f3fe60806040526004361061024a5760003560e01c80637d210f4111610139578063bc4c4b37116100b6578063e7841ec01161007a578063e7841ec014610732578063e98030c714610747578063f2fde38b14610767578063f7c618c114610787578063fbcbc0f1146107a7578063ffb2c479146107c757600080fd5b8063bc4c4b3714610676578063be10b61414610696578063c0f306ef146106ac578063dd62ed3e146106cc578063e30443bc1461071257600080fd5b806395d89b41116100fd57806395d89b41146105cb578063a457c2d7146105e0578063a8b9d24014610600578063a9059cbb14610620578063aafd847a1461064057600080fd5b80637d210f411461051f57806385a6b3ae146105575780638aee81271461056d5780638da5cb5b1461058d57806391b89fba146105ab57600080fd5b8063313ce567116101c75780635183d6fd1161018b5780635183d6fd146104445780636a474002146104a95780636f2789ec146104be57806370a08231146104d4578063715018a61461050a57600080fd5b8063313ce5671461039857806331e79db0146103b457806339509351146103d45780633cb5a67c146103f45780634e7b827f1461041457600080fd5b806318160ddd1161020e57806318160ddd14610300578063226cfa3d1461031557806323b872dd1461034257806327ce0147146103625780633009a6091461038257600080fd5b806303c833021461025e57806306fdde0314610266578063095ea7b31461029157806309bbedde146102c1578063163c7cef146102e057600080fd5b3661025957610257610802565b005b600080fd5b610257610802565b34801561027257600080fd5b5061027b6108c8565b60405161028891906121c7565b60405180910390f35b34801561029d57600080fd5b506102b16102ac366004612231565b61095a565b6040519015158152602001610288565b3480156102cd57600080fd5b50600c545b604051908152602001610288565b3480156102ec57600080fd5b506102576102fb36600461225d565b610971565b34801561030c57600080fd5b506002546102d2565b34801561032157600080fd5b506102d2610330366004612276565b60126020526000908152604090205481565b34801561034e57600080fd5b506102b161035d366004612293565b610a3e565b34801561036e57600080fd5b506102d261037d366004612276565b610aa7565b34801561038e57600080fd5b506102d260105481565b3480156103a457600080fd5b5060405160128152602001610288565b3480156103c057600080fd5b506102576103cf366004612276565b610b03565b3480156103e057600080fd5b506102b16103ef366004612231565b610c2a565b34801561040057600080fd5b5061025761040f366004612276565b610c60565b34801561042057600080fd5b506102b161042f366004612276565b60116020526000908152604090205460ff1681565b34801561045057600080fd5b5061046461045f36600461225d565b610c96565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610288565b3480156104b557600080fd5b50610257610dea565b3480156104ca57600080fd5b506102d260135481565b3480156104e057600080fd5b506102d26104ef366004612276565b6001600160a01b031660009081526020819052604090205490565b34801561051657600080fd5b50610257610e1d565b34801561052b57600080fd5b5060095461053f906001600160a01b031681565b6040516001600160a01b039091168152602001610288565b34801561056357600080fd5b506102d260075481565b34801561057957600080fd5b50610257610588366004612276565b610e91565b34801561059957600080fd5b506005546001600160a01b031661053f565b3480156105b757600080fd5b506102d26105c6366004612276565b610ec4565b3480156105d757600080fd5b5061027b610ecf565b3480156105ec57600080fd5b506102b16105fb366004612231565b610ede565b34801561060c57600080fd5b506102d261061b366004612276565b610f2d565b34801561062c57600080fd5b506102b161063b366004612231565b610f59565b34801561064c57600080fd5b506102d261065b366004612276565b6001600160a01b03166000908152600b602052604090205490565b34801561068257600080fd5b506102b16106913660046122d4565b610f66565b3480156106a257600080fd5b506102d260145481565b3480156106b857600080fd5b506102576106c7366004612276565b611014565b3480156106d857600080fd5b506102d26106e7366004612312565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561071e57600080fd5b5061025761072d366004612231565b6110ac565b34801561073e57600080fd5b506010546102d2565b34801561075357600080fd5b5061025761076236600461225d565b61121a565b34801561077357600080fd5b50610257610782366004612276565b61138b565b34801561079357600080fd5b5060085461053f906001600160a01b031681565b3480156107b357600080fd5b506104646107c2366004612276565b611476565b3480156107d357600080fd5b506107e76107e236600461225d565b6115df565b60408051938452602084019290925290820152606001610288565b6005546001600160a01b031633146108355760405162461bcd60e51b815260040161082c90612340565b60405180910390fd5b600061084060025490565b1161084a57600080fd5b34156108c65761087d61085c60025490565b61086a34600160801b611724565b610874919061238b565b600654906117aa565b60065560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26007546108c290346117aa565b6007555b565b6060600380546108d7906123ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610903906123ad565b80156109505780601f1061092557610100808354040283529160200191610950565b820191906000526020600020905b81548152906001019060200180831161093357829003601f168201915b5050505050905090565b6000610967338484611809565b5060015b92915050565b6005546001600160a01b0316331461099b5760405162461bcd60e51b815260040161082c90612340565b806014541415610a395760405162461bcd60e51b815260206004820152605960248201527f4b726f6e6f735f4469766964656e645f547261636b65723a206d696e696d756d60448201527f546f6b656e42616c616e6365466f724469766964656e647320616c726561647960648201527f207468652076616c7565206f6620276e657756616c7565272e00000000000000608482015260a40161082c565b601455565b6000610a4b84848461192d565b610a9d8433610a98856040518060600160405280602881526020016125cf602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061198b565b611809565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b92610af992610af492610aee91610ae99190611724565b6119c5565b906119d5565b611a13565b61096b919061238b565b6005546001600160a01b03163314610b2d5760405162461bcd60e51b815260040161082c90612340565b6001600160a01b03811660009081526011602052604090205460ff1615610b5357600080fd5b6001600160a01b0381166000908152601160205260408120805460ff19166001179055610b81908290611a26565b60405163131836e760e21b8152600c60048201526001600160a01b038216602482015273e7bb54c5e2801def1ae710c01fdd6ccd804027df90634c60db9c9060440160006040518083038186803b158015610bdb57600080fd5b505af4158015610bef573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610967918590610a9890866117aa565b6005546001600160a01b03163314610c8a5760405162461bcd60e51b815260040161082c90612340565b610c9381611a85565b50565b600080600080600080600080600c73e7bb54c5e2801def1ae710c01fdd6ccd804027df63deb3d89690916040518263ffffffff1660e01b8152600401610cde91815260200190565b602060405180830381865af4158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f91906123e8565b8910610d44575060009650600019955085945086935083925082915081905080610ddf565b6040516368d54f3f60e11b8152600c6004820152602481018a905260009073e7bb54c5e2801def1ae710c01fdd6ccd804027df9063d1aa9e7e90604401602060405180830381865af4158015610d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc29190612401565b9050610dcd81611476565b98509850985098509850985098509850505b919395975091939597565b6005546001600160a01b03163314610e145760405162461bcd60e51b815260040161082c90612340565b610c9333611ad1565b6005546001600160a01b03163314610e475760405162461bcd60e51b815260040161082c90612340565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610ebb5760405162461bcd60e51b815260040161082c90612340565b610c9381611cae565b600061096b82610f2d565b6060600480546108d7906123ad565b60006109673384610a98856040518060600160405280602581526020016125aa602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061198b565b6001600160a01b0381166000908152600b602052604081205461096b90610f5384610aa7565b90611cfa565b600061096733848461192d565b6005546000906001600160a01b03163314610f935760405162461bcd60e51b815260040161082c90612340565b6000610f9e84611ad1565b9050801561100a576001600160a01b038416600081815260126020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610ff89085815260200190565b60405180910390a3600191505061096b565b5060009392505050565b6005546001600160a01b0316331461103e5760405162461bcd60e51b815260040161082c90612340565b6001600160a01b03811660009081526011602052604090205460ff1661106357600080fd5b6001600160a01b038116600081815260116020526040808220805460ff19169055517f40a78dcf8526b72f2eaf598af1c7e49c8d5fc577f6c8f1bed887f3e4dfa289329190a250565b6005546001600160a01b031633146110d65760405162461bcd60e51b815260040161082c90612340565b6001600160a01b03821660009081526011602052604090205460ff16156110fb575050565b601454811061118c5761110e8282611a26565b604051632f0ad01760e21b8152600c60048201526001600160a01b03831660248201526044810182905273e7bb54c5e2801def1ae710c01fdd6ccd804027df9063bc2b405c9060640160006040518083038186803b15801561116f57600080fd5b505af4158015611183573d6000803e3d6000fd5b5050505061120a565b611197826000611a26565b60405163131836e760e21b8152600c60048201526001600160a01b038316602482015273e7bb54c5e2801def1ae710c01fdd6ccd804027df90634c60db9c9060440160006040518083038186803b1580156111f157600080fd5b505af4158015611205573d6000803e3d6000fd5b505050505b611215826001610f66565b505050565b6005546001600160a01b031633146112445760405162461bcd60e51b815260040161082c90612340565b610e1081101580156112595750620151808111155b6112e05760405162461bcd60e51b815260206004820152604c60248201527f4b726f6e6f735f4469766964656e645f547261636b65723a20636c61696d576160448201527f6974206d757374206265207570646174656420746f206265747765656e20312060648201526b616e6420323420686f75727360a01b608482015260a40161082c565b6013548114156113585760405162461bcd60e51b815260206004820152603e60248201527f4b726f6e6f735f4469766964656e645f547261636b65723a2043616e6e6f742060448201527f75706461746520636c61696d5761697420746f2073616d652076616c75650000606482015260840161082c565b60135460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601355565b6005546001600160a01b031633146113b55760405162461bcd60e51b815260040161082c90612340565b6001600160a01b03811661141a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6040516317e142d160e01b8152600c60048201526001600160a01b0382166024820152819060009081908190819081908190819073e7bb54c5e2801def1ae710c01fdd6ccd804027df906317e142d190604401602060405180830381865af41580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150a91906123e8565b965060001995506000871261156c5760105487111561153857601054611531908890611d3c565b955061156c565b601054600c546000911061154d57600061155c565b601054600c5461155c91611cfa565b905061156888826119d5565b9650505b61157588610f2d565b945061158088610aa7565b6001600160a01b0389166000908152601260205260409020549094509250826115aa5760006115b8565b6013546115b89084906117aa565b91504282116115c85760006115d2565b6115d28242611cfa565b9050919395975091939597565b600554600090819081906001600160a01b031633146116105760405162461bcd60e51b815260040161082c90612340565b600c54806116295750506010546000925082915061171d565b6010546000805a90506000805b898410801561164457508582105b1561170c57846116538161241e565b600c549096508610905061166657600094505b6000600c600001868154811061167e5761167e612439565b60009182526020808320909101546001600160a01b031680835260129091526040909120549091506116af90611d79565b156116d2576116bf816001610f66565b156116d257816116ce8161241e565b9250505b826116dc8161241e565b93505060005a905080851115611703576117006116f98683611cfa565b87906117aa565b95505b93506116369050565b601085905590975095509193505050505b9193909250565b6000826117335750600061096b565b600061173f838561244f565b90508261174c858361238b565b146117a35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161082c565b9392505050565b6000806117b7838561246e565b9050838110156117a35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161082c565b6001600160a01b03831661186b5760405162461bcd60e51b8152602060048201526024808201527f43524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082c565b6001600160a01b0382166118cc5760405162461bcd60e51b815260206004820152602260248201527f43524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602d60248201527f4b726f6e6f735f4469766964656e645f547261636b65723a204e6f207472616e60448201526c1cd9995c9cc8185b1b1bddd959609a1b606482015260840161082c565b600081848411156119af5760405162461bcd60e51b815260040161082c91906121c7565b5060006119bc8486612486565b95945050505050565b6000818181121561096b57600080fd5b6000806119e2838561249d565b9050600083121580156119f55750838112155b80611a0a5750600083128015611a0a57508381125b6117a357600080fd5b600080821215611a2257600080fd5b5090565b6001600160a01b03821660009081526020819052604090205480821115611a65576000611a538383611cfa565b9050611a5f8482611da0565b50505050565b80821015611215576000611a798284611cfa565b9050611a5f8482611e04565b6005546001600160a01b03163314611aaf5760405162461bcd60e51b815260040161082c90612340565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600080611add83610f2d565b90508015611ca5576001600160a01b0383166000908152600b6020526040902054611b0890826117aa565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d90611b579084815260200190565b60405180910390a2600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd69190612401565b6008546001600160a01b0390811691161415611c9b576000836001600160a01b031682610bb890604051600060405180830381858888f193505050503d8060008114611c3e576040519150601f19603f3d011682016040523d82523d6000602084013e611c43565b606091505b5050905080611c94576001600160a01b0384166000908152600b6020526040902054611c6f9083611cfa565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b6117a38382611e48565b50600092915050565b6005546001600160a01b03163314611cd85760405162461bcd60e51b815260040161082c90612340565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006117a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061198b565b600080611d4983856124de565b905060008312158015611d5c5750838113155b80611a0a5750600083128015611a0a57508381136117a357600080fd5b600042821115611d8b57506000919050565b601354611d984284611cfa565b101592915050565b611daa8282611fe4565b611de4611dc5610ae98360065461172490919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611d3c565b6001600160a01b039092166000908152600a602052604090209190915550565b611e0e82826120c3565b611de4611e29610ae98360065461172490919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906119d5565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eda9190612401565b81600081518110611eed57611eed612439565b6001600160a01b039283166020918202929092010152600854825191169082906001908110611f1e57611f1e612439565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de95908590611f649060009086908a90429060040161251d565b6000604051808303818588803b158015611f7d57600080fd5b505af193505050508015611f8f575060015b611fdb576001600160a01b0384166000908152600b6020526040902054611fb69084611cfa565b6001600160a01b0385166000908152600b6020526040812091909155915061096b9050565b8291505061096b565b6001600160a01b03821661203a5760405162461bcd60e51b815260206004820152601f60248201527f43524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161082c565b60025461204790826117aa565b6002556001600160a01b03821660009081526020819052604090205461206d90826117aa565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b0382166121235760405162461bcd60e51b815260206004820152602160248201527f43524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161082c565b61216081604051806060016040528060228152602001612588602291396001600160a01b038516600090815260208190526040902054919061198b565b6001600160a01b0383166000908152602081905260409020556002546121869082611cfa565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016120b7565b600060208083528351808285015260005b818110156121f4578581018301518582016040015282016121d8565b81811115612206576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610c9357600080fd5b6000806040838503121561224457600080fd5b823561224f8161221c565b946020939093013593505050565b60006020828403121561226f57600080fd5b5035919050565b60006020828403121561228857600080fd5b81356117a38161221c565b6000806000606084860312156122a857600080fd5b83356122b38161221c565b925060208401356122c38161221c565b929592945050506040919091013590565b600080604083850312156122e757600080fd5b82356122f28161221c565b91506020830135801515811461230757600080fd5b809150509250929050565b6000806040838503121561232557600080fd5b82356123308161221c565b915060208301356123078161221c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826123a857634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806123c157607f821691505b602082108114156123e257634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156123fa57600080fd5b5051919050565b60006020828403121561241357600080fd5b81516117a38161221c565b600060001982141561243257612432612375565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600081600019048311821515161561246957612469612375565b500290565b6000821982111561248157612481612375565b500190565b60008282101561249857612498612375565b500390565b600080821280156001600160ff1b03849003851316156124bf576124bf612375565b600160ff1b83900384128116156124d8576124d8612375565b50500190565b60008083128015600160ff1b8501841216156124fc576124fc612375565b6001600160ff1b038401831381161561251757612517612375565b50500390565b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156125675784516001600160a01b031683529383019391830191600101612542565b50506001600160a01b03969096166040850152505050606001529291505056fe43524332303a206275726e20616d6f756e7420657863656564732062616c616e636543524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220544bfc720ea377887eb09e962d4b060c1fc432fb058ca534700e2ac7cf917b4064736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106103e85760003560e01c80636d7331ed11610208578063a8b9d24011610118578063c0246668116100ab578063d37b34d71161007a578063d37b34d714610bf5578063dd62ed3e14610c15578063ec28438a14610c5b578063ee24565014610c7b578063f2fde38b14610c9b57600080fd5b8063c024666814610b7f578063c0f306ef14610b9f578063d2d7ad8314610bbf578063d322157614610bd557600080fd5b8063ad56c13c116100e7578063ad56c13c14610aaa578063aee50b1e14610b0f578063b7677cb214610b2f578063bdb9f28d14610b5f57600080fd5b8063a8b9d24014610a3e578063a9059cbb14610a5e578063aa4bde2814610a7e578063abfa71e914610a9457600080fd5b806388bdd9be1161019b57806395d89b411161016a57806395d89b41146109ac5780639c1b8af5146109c1578063a25d11d5146109d7578063a457c2d7146109f7578063a4fbec3314610a1757600080fd5b806388bdd9be146109435780638c0b5e22146109635780638da5cb5b1461097957806395ccca7a1461099757600080fd5b806375cb1bd1116101d757806375cb1bd1146108c357806375f0a874146108e3578063781edb3c146109035780637d210f411461092357600080fd5b80636d7331ed1461083857806370a0823114610858578063715018a61461088e57806371ea980c146108a357600080fd5b806331e79db0116103035780634e71d92d116102965780635ebf4db9116102655780635ebf4db9146107ad5780636318be01146107cd57806364b0f653146107e35780636843cd84146107f857806369fc3a061461081857600080fd5b80634e71d92d1461074357806351bc3c85146107585780635960e46d1461076d578063599270441461078d57600080fd5b80633a1ce746116102d25780633a1ce746146106c85780633cb5a67c146106dd578063423ce9cc146106fd5780634597c5fe1461071c57600080fd5b806331e79db01461063f57806334cf1fea1461065f57806335c200d41461067457806339509351146106a857600080fd5b80631d31a7901161037b57806327a14fc21161034a57806327a14fc2146105ce5780632c1f5216146105ee57806330bb4cff1461060e578063313ce5671461062357600080fd5b80631d31a7901461051f5780631e3eed7c1461056e57806323b872dd1461058e57806323cc6601146105ae57600080fd5b80630bd05b69116103b75780630bd05b69146104835780631582358e1461049857806318160ddd146104d05780631cdd3be3146104ef57600080fd5b806301339c21146103f4578063064a59d01461040b57806306fdde0314610441578063095ea7b31461046357600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610cbb565b005b34801561041757600080fd5b50600d5461042c90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561044d57600080fd5b50610456610d27565b604051610438919061403c565b34801561046f57600080fd5b5061042c61047e3660046140a6565b610db9565b34801561048f57600080fd5b50610409610dd0565b3480156104a457600080fd5b506017546104b8906001600160a01b031681565b6040516001600160a01b039091168152602001610438565b3480156104dc57600080fd5b506003545b604051908152602001610438565b3480156104fb57600080fd5b5061042c61050a3660046140d2565b600a6020526000908152604090205460ff1681565b34801561052b57600080fd5b50602554602654602754602854602954610546949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610438565b34801561057a57600080fd5b506104096105893660046140ef565b610e0f565b34801561059a57600080fd5b5061042c6105a936600461412a565b610f3a565b3480156105ba57600080fd5b506104096105c9366004614179565b610fa3565b3480156105da57600080fd5b506104096105e93660046141b2565b61106c565b3480156105fa57600080fd5b50600c546104b8906001600160a01b031681565b34801561061a57600080fd5b506104e16111dd565b34801561062f57600080fd5b5060405160128152602001610438565b34801561064b57600080fd5b5061040961065a3660046140d2565b611250565b34801561066b57600080fd5b5061040961131c565b34801561068057600080fd5b506104b87f000000000000000000000000884d1ecf63597b368e2c0d0aad9eb38908c4c32781565b3480156106b457600080fd5b5061042c6106c33660046140a6565b611359565b3480156106d457600080fd5b5061040961138f565b3480156106e957600080fd5b506104096106f83660046140d2565b611460565b34801561070957600080fd5b5060145461042c90610100900460ff1681565b34801561072857600080fd5b50601b54601c54601d54601e54601f54610546949392919085565b34801561074f57600080fd5b506104096115ca565b34801561076457600080fd5b5061040961163f565b34801561077957600080fd5b506104096107883660046141b2565b611673565b34801561079957600080fd5b506019546104b8906001600160a01b031681565b3480156107b957600080fd5b506104096107c83660046141b2565b61173f565b3480156107d957600080fd5b506104e160115481565b3480156107ef57600080fd5b506104e16117ca565b34801561080457600080fd5b506104e16108133660046140d2565b611814565b34801561082457600080fd5b506104096108333660046141cb565b611884565b34801561084457600080fd5b506104096108533660046140d2565b611942565b34801561086457600080fd5b506104e16108733660046140d2565b6001600160a01b031660009081526001602052604090205490565b34801561089a57600080fd5b50610409611a21565b3480156108af57600080fd5b50601a546104b8906001600160a01b031681565b3480156108cf57600080fd5b506104096108de3660046141e8565b611a95565b3480156108ef57600080fd5b506018546104b8906001600160a01b031681565b34801561090f57600080fd5b5061040961091e366004614179565b611d98565b34801561092f57600080fd5b50600d546104b8906001600160a01b031681565b34801561094f57600080fd5b5061040961095e3660046140d2565b611e59565b34801561096f57600080fd5b506104e160135481565b34801561098557600080fd5b506000546001600160a01b03166104b8565b3480156109a357600080fd5b50610409612266565b3480156109b857600080fd5b506104566122fb565b3480156109cd57600080fd5b506104e160165481565b3480156109e357600080fd5b506104096109f23660046140ef565b61230a565b348015610a0357600080fd5b5061042c610a123660046140a6565b6123d6565b348015610a2357600080fd5b50602054602154602254602354602454610546949392919085565b348015610a4a57600080fd5b506104e1610a593660046140d2565b612425565b348015610a6a57600080fd5b5061042c610a793660046140a6565b612458565b348015610a8a57600080fd5b506104e160125481565b348015610aa057600080fd5b506104e160105481565b348015610ab657600080fd5b50610aca610ac53660046140d2565b612465565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610438565b348015610b1b57600080fd5b50610409610b2a3660046141b2565b6124ff565b348015610b3b57600080fd5b5061042c610b4a3660046140d2565b600b6020526000908152604090205460ff1681565b348015610b6b57600080fd5b50610409610b7a3660046140d2565b6125d4565b348015610b8b57600080fd5b50610409610b9a366004614179565b6126ec565b348015610bab57600080fd5b50610409610bba3660046140d2565b6127ad565b348015610bcb57600080fd5b506104e160155481565b348015610be157600080fd5b50610409610bf0366004614179565b612872565b348015610c0157600080fd5b50610409610c103660046140d2565b6128f4565b348015610c2157600080fd5b506104e1610c30366004614233565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610c6757600080fd5b50610409610c763660046141b2565b612b3a565b348015610c8757600080fd5b50610409610c963660046140ef565b612c9d565b348015610ca757600080fd5b50610409610cb63660046140d2565b612d6b565b6000546001600160a01b03163314610cee5760405162461bcd60e51b8152600401610ce590614261565b60405180910390fd5b4260105543601155600d805460ff60a01b1916600160a01b179055600f805460ff191660011790556014805461ff001916610100179055565b606060048054610d3690614296565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6290614296565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b5050505050905090565b6000610dc6338484612ebb565b5060015b92915050565b6000546001600160a01b03163314610dfa5760405162461bcd60e51b8152600401610ce590614261565b600d805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610e395760405162461bcd60e51b8152600401610ce590614261565b6000818385610e48888a6142e7565b610e5291906142e7565b610e5c91906142e7565b610e6691906142e7565b90506014811115610e895760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a08101825287815260208101879052808201869052606081018590526080018390526025879055602686905560278590556028849055602983905551672a3930b739b332b960c11b81526008015b60408051918290038220888352602083018890529082018690526060820185905260808201849052907f18313eafd26b263470e815300393e601ee24084135005dfe66a3bc4bbba795669060a00160405180910390a2505050505050565b6000610f47848484612fe0565b610f998433610f9485604051806060016040528060288152602001614772602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061373e565b612ebb565b5060019392505050565b6000546001600160a01b03163314610fcd5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526009602052604090205460ff161515811515141561100c5760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527f46a87ba9eb6bc0a74eae283c9908175809a666189b7de3c2f9df3fcbbe924d3591015b60405180910390a25050565b6000546001600160a01b031633146110965760405162461bcd60e51b8152600401610ce590614261565b6012548114156111045760405162461bcd60e51b815260206004820152603360248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d617857616c6c6574416044820152726d6f756e7420746f2073616d652076616c756560681b6064820152608401610ce5565b6103e86111136012600a614481565b611121906305f5e100614490565b61112b91906144af565b8110156111aa5760405162461bcd60e51b815260206004820152604160248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d617857616c6c65744160448201527f6d6f756e7420746f206c657373207468616e20302e3125206f6620737570706c6064820152607960f81b608482015260a401610ce5565b60125460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3601255565b600c54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b91906144d1565b905090565b6000546001600160a01b0316331461127a5760405162461bcd60e51b8152600401610ce590614261565b600c5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156112c157600080fd5b505af11580156112d5573d6000803e3d6000fd5b5050604051600181526001600160a01b03841692507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa991506020015b60405180910390a250565b6000546001600160a01b031633146113465760405162461bcd60e51b8152600401610ce590614261565b600d805460ff60a01b1916905542600e55565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610dc6918590610f949086612e55565b6000546001600160a01b031633146113b95760405162461bcd60e51b8152600401610ce590614261565b4760006113ce6000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611418576040519150601f19603f3d011682016040523d82523d6000602084013e61141d565b606091505b50509050801561145c576040518281527f7119601cabfe7d71a345076e0c5cdd24f8d5e021f3208294b317988bc692edcd906020015b60405180910390a15b5050565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610ce590614261565b600d546001600160a01b03828116911614156114fc5760405162461bcd60e51b815260206004820152602b60248201527f4b726f6e6f733a2054686520726f7574657220616c726561647920686173207460448201526a686174206164647265737360a81b6064820152608401610ce5565b600d546040516001600160a01b03918216918316907f683c3b49bd4be33811cc81bd567058dd43bf6a6ec34076d5f9e0581f56758b1590600090a3600d80546001600160a01b0319166001600160a01b03838116918217909255600c54604051630f2d699f60e21b8152600481019290925290911690633cb5a67c90602401600060405180830381600087803b15801561159557600080fd5b505af11580156115a9573d6000803e3d6000fd5b5050600d546115c792503091506001600160a01b0316600019612ebb565b50565b600c5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af115801561161b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c791906144ea565b6000546001600160a01b031633146116695760405162461bcd60e51b8152600401610ce590614261565b611671613778565b565b6000546001600160a01b0316331461169d5760405162461bcd60e51b8152600401610ce590614261565b60165481141561170c5760405162461bcd60e51b815260206004820152603460248201527f4b726f6e6f733a2043616e6e6f742075706461746520676173466f7250726f63604482015273657373696e6720746f2073616d652076616c756560601b6064820152608401610ce5565b60165460405182907f79282993055b3a4cfa0a12ead12d58cc3aad216fcbbae5a73d942c1ee861fb9a90600090a3601655565b6000546001600160a01b031633146117695760405162461bcd60e51b8152600401610ce590614261565b600c5460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401600060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b5050505050565b600c54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611227573d6000803e3d6000fd5b600c546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611860573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dca91906144d1565b6000546001600160a01b031633146118ae5760405162461bcd60e51b8152600401610ce590614261565b60145460ff61010090910416151581151514156119285760405162461bcd60e51b815260206004820152603260248201527f73776170416e644c6971756966792073746174757320616c72656164792073656044820152717420746f206465736972652063686f69636560701b6064820152608401610ce5565b601480549115156101000261ff0019909216919091179055565b6000546001600160a01b0316331461196c5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381166000908152600a602052604090205460ff166119d45760405162461bcd60e51b815260206004820152601e60248201527f4b726f6e6f733a204163636f756e74206973206e6f7420626c636f6b656400006044820152606401610ce5565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055519091907f22dfccad3b8536e5d2741216ca2aa1324ca91414ac6daeb7ed374d9501997298908390a350565b6000546001600160a01b03163314611a4b5760405162461bcd60e51b8152600401610ce590614261565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611abf5760405162461bcd60e51b8152600401610ce590614261565b6018546001600160a01b03848116911614611bb3576001600160a01b038316611b3a5760405162461bcd60e51b815260206004820152602760248201527f4b726f6e6f733a20546865206d61726b6574696e6757616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610ce5565b6018546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601880546001600160a01b0319166001600160a01b0385161790555b6019546001600160a01b03838116911614611c9d576001600160a01b038216611c295760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a20546865207465616d57616c6c65742063616e6e6f74206265604482015261020360f41b6064820152608401610ce5565b601954604051691d19585b55d85b1b195d60b21b81526001600160a01b0391821691841690600a01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601980546001600160a01b0319166001600160a01b0384161790555b601a546001600160a01b03828116911614611d93576001600160a01b038216611d195760405162461bcd60e51b815260206004820152602860248201527f4b726f6e6f733a2054686520726577617264506f6f6c57616c6c65742063616e60448201526706e6f7420626520360c41b6064820152608401610ce5565b601a546040516f1c995dd85c99141bdbdb15d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601a80546001600160a01b0319166001600160a01b0383161790555b505050565b6000546001600160a01b03163314611dc25760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526008602052604090205460ff1615158115151415611e015760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611060565b6000546001600160a01b03163314611e835760405162461bcd60e51b8152600401610ce590614261565b600c546001600160a01b0382811691161415611eff5760405162461bcd60e51b815260206004820152603560248201527f4b726f6e6f733a20546865206469766964656e6420747261636b657220616c7260448201527465616479206861732074686174206164647265737360581b6064820152608401610ce5565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f709190614507565b6001600160a01b0316146120005760405162461bcd60e51b815260206004820152604b60248201527f4b726f6e6f733a20546865206e6577206469766964656e6420747261636b657260448201527f206d757374206265206f776e656420627920746865204b726f6e6f7320746f6b60648201526a195b8818dbdb9d1c9858dd60aa1b608482015260a401610ce5565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b15801561209b57600080fd5b505af11580156120af573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db06120d46000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b5050600d5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505060405163031e79db60e41b81526001600160a01b037f000000000000000000000000884d1ecf63597b368e2c0d0aad9eb38908c4c32781166004830152841692506331e79db09150602401600060405180830381600087803b1580156121ef57600080fd5b505af1158015612203573d6000803e3d6000fd5b5050600c546040516001600160a01b03918216935090851691507f43c6eb9010459f8dbe15160295e5e1477f0b15c2bf0d127bfccc6c67fca7f69090600090a3600c80546001600160a01b0319166001600160a01b039290921691909117905550565b600c5460405163c0f306ef60e01b81523360048201526001600160a01b039091169063c0f306ef90602401600060405180830381600087803b1580156122ab57600080fd5b505af11580156122bf573d6000803e3d6000fd5b5050604051600081523392507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa9915060200160405180910390a2565b606060058054610d3690614296565b6000546001600160a01b031633146123345760405162461bcd60e51b8152600401610ce590614261565b6000818385612343888a6142e7565b61234d91906142e7565b61235791906142e7565b61236191906142e7565b905060148111156123845760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a0810182528781526020810187905280820186905260608101859052608001839052601b879055601c869055601d859055601e849055601f839055516242757960e81b8152600301610edc565b6000610dc63384610f948560405180606001604052806025815260200161474d602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061373e565b600c546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611843565b6000610dc6338484612fe0565b600c5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f19060240161010060405180830381865afa1580156124c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e49190614524565b97509750975097509750975097509750919395975091939597565b6000546001600160a01b031633146125295760405162461bcd60e51b8152600401610ce590614261565b6015548114156125a15760405162461bcd60e51b815260206004820152603b60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d696e696d756d546f6b60448201527f656e734265666f72655377617020746f2073616d652076616c756500000000006064820152608401610ce5565b60155460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3601555565b6000546001600160a01b031633146125fe5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381811660008181526007602052604090819020805460ff19166001179055600c54905163031e79db60e41b81526004810192909252909116906331e79db090602401600060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b505050506001600160a01b03811660008181526006602090815260408083208054600160ff1991821681179092556008845282852080548216831790556009909352818420805490931617909155517f3727916e5d01f0ec2bcea88f550181aee40774d9790b1f1240616a15005857999190a250565b6000546001600160a01b031633146127165760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526007602052604090205460ff16151581151514156127555760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611060565b6000546001600160a01b031633146127d75760405162461bcd60e51b8152600401610ce590614261565b600c5460405163c0f306ef60e01b81526001600160a01b0383811660048301529091169063c0f306ef90602401600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b5050604051600081526001600160a01b03841692507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa99150602001611311565b6000546001600160a01b0316331461289c5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611060565b6000546001600160a01b0316331461291e5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381166000908152600a6020526040902054429060ff16156129945760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a204163636f756e7420697320616c726561647920626c6f636b604482015261195960f21b6064820152608401610ce5565b6001600160a01b0382166000908152600b602052604090205460ff16156129fd5760405162461bcd60e51b815260206004820152601d60248201527f4b726f6e6f733a2043616e6e6f7420626c61636b6c69737420706169720000006044820152606401610ce5565b600d546001600160a01b0383811691161415612a6b5760405162461bcd60e51b815260206004820152602760248201527f4b726f6e6f733a2043616e6e6f7420626c61636b6c69737420726f75746572206044820152666164647265737360c81b6064820152608401610ce5565b600f5460ff1615612ae75761a8c060105482612a87919061458e565b10612ae75760405162461bcd60e51b815260206004820152602a60248201527f4b726f6e6f733a2054696d6520746f20626c6f636b206163636f756e74732068604482015269185cc8195e1c1a5c995960b21b6064820152608401610ce5565b6001600160a01b0382166000818152600a6020526040808220805460ff1916600190811790915590519092917f22dfccad3b8536e5d2741216ca2aa1324ca91414ac6daeb7ed374d950199729891a35050565b6000546001600160a01b03163314612b645760405162461bcd60e51b8152600401610ce590614261565b601354811415612bce5760405162461bcd60e51b815260206004820152602f60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d61785478416d6f756e60448201526e7420746f2073616d652076616c756560881b6064820152608401610ce5565b6103e8612bdd6012600a614481565b612beb906305f5e100614490565b612bf591906144af565b811015612c6a5760405162461bcd60e51b815260206004820152603d60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d61785478416d6f756e60448201527f7420746f206c657373207468616e20302e3125206f6620737570706c790000006064820152608401610ce5565b60125460405182907fe3052f2f134f247948088ca6829f4168989b7313f1b54de88cc18178a249de4b90600090a3601355565b6000546001600160a01b03163314612cc75760405162461bcd60e51b8152600401610ce590614261565b6000818385612cd6888a6142e7565b612ce091906142e7565b612cea91906142e7565b612cf491906142e7565b90506014811115612d175760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a08101825287815260208082018890528183018790526060820186905260809091018490528790556021869055602285905560238490556024839055516314d95b1b60e21b8152600401610edc565b6000546001600160a01b03163314612d955760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b038116612dfa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ce5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080612e6283856142e7565b905083811015612eb45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ce5565b9392505050565b6001600160a01b038316612f1d5760405162461bcd60e51b8152602060048201526024808201527f43524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b038216612f7e5760405162461bcd60e51b815260206004820152602260248201527f43524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166130065760405162461bcd60e51b8152600401610ce5906145a5565b6001600160a01b03821661302c5760405162461bcd60e51b8152600401610ce5906145ea565b8061303d57611d9383836000613ab7565b6001600160a01b038084166000818152600b6020908152604080832054948716835280832054938352600690915290205460ff92831692918216911615801561309f57506001600160a01b03841660009081526006602052604090205460ff16155b1561338657600d54600160a01b900460ff1661310c5760405162461bcd60e51b815260206004820152602660248201527f4b726f6e6f733a2054726164696e672069732063757272656e746c792064697360448201526530b13632b21760d11b6064820152608401610ce5565b6001600160a01b0384166000908152600a602052604090205460ff16156131755760405162461bcd60e51b815260206004820152601a60248201527f4b726f6e6f733a204163636f756e7420697320626c6f636b65640000000000006044820152606401610ce5565b6001600160a01b0385166000908152600a602052604090205460ff16156131de5760405162461bcd60e51b815260206004820152601a60248201527f4b726f6e6f733a204163636f756e7420697320626c6f636b65640000000000006044820152606401610ce5565b6001600160a01b03841660009081526008602052604090205460ff1661329f5760125483613221866001600160a01b031660009081526001602052604090205490565b61322b91906142e7565b111561329f5760405162461bcd60e51b815260206004820152603b60248201527f4b726f6e6f733a2045787065637465642077616c6c657420616d6f756e74206560448201527f78636565647320746865206d617857616c6c6574416d6f756e742e00000000006064820152608401610ce5565b6001600160a01b0385166000908152600b602052604090205460ff16806132de57506001600160a01b0384166000908152600b602052604090205460ff165b15613386576001600160a01b03851660009081526009602052604090205460ff16158061332457506001600160a01b03841660009081526009602052604090205460ff16155b15613386576013548311156133865760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a20416d6f756e742065786365656473206d61785478416d6f756044820152611b9d60f21b6064820152608401610ce5565b6133908282613bc3565b60155430600090815260016020526040902054600d5491111590600160a01b900460ff1680156133bd5750805b80156133cc575060145460ff16155b80156133da57506000602f54115b80156133fe57506001600160a01b0385166000908152600b602052604090205460ff165b801561341857506018546001600160a01b03878116911614155b801561343257506018546001600160a01b03868116911614155b801561344c57506019546001600160a01b03878116911614155b801561346657506019546001600160a01b03868116911614155b80156134795750601454610100900460ff165b1561349e576014805460ff19166001179055613493613778565b6014805460ff191690555b60145460009060ff161580156134bd5750600d54600160a01b900460ff165b6001600160a01b03881660009081526007602052604090205490915060ff16806134ff57506001600160a01b03861660009081526007602052604090205460ff165b15613508575060005b80156135455760006064602f54876135209190614490565b61352a91906144af565b9050613536818761458e565b9550613543883083613ab7565b505b613550878787613ab7565b600c546001600160a01b031663e30443bc88613581816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156135c757600080fd5b505af19250505080156135d8575060015b50600c546001600160a01b031663e30443bc8761360a816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561365057600080fd5b505af1925050508015613661575060015b5060145460ff1661373557601654600c546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156136d9575060408051601f3d908101601f191682019092526136d69181019061462d565b60015b6136e257613733565b60408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b50505050505050565b600081848411156137625760405162461bcd60e51b8152600401610ce5919061403c565b50600061376f848661458e565b95945050505050565b600d543060009081526002602090815260408083206001600160a01b0390941683529290522054600019146137c157600d546137c19030906001600160a01b0316600019612ebb565b30600090815260016020526040812054602f54602a549192479260029083906137ea9087614490565b6137f491906144af565b6137fe91906144af565b9050600061380c828661458e565b905061381781613cea565b6000613823854761458e565b905060006002602a5461383691906144af565b602f54613843919061458e565b90506000600282602a54856138589190614490565b61386291906144af565b61386c91906144af565b9050600082602b548561387f9190614490565b61388991906144af565b9050600083602c548661389c9190614490565b6138a691906144af565b9050600084602e54876138b99190614490565b6138c391906144af565b9050600081836138d386886142e7565b6138dd91906142e7565b6138e791906142e7565b6138f1908861458e565b90508315613935576018546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015613933573d6000803e3d6000fd5b505b8215613977576019546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613975573d6000803e3d6000fd5b505b88156139c9576139878986613e44565b60408051898152602081018790529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8115613a0c576139d882613ef1565b6040518281527f18dc4e882f216aaedbdea3c2afca1d207744d2f22cad841aba3c8c6314bd38f79060200160405180910390a15b8015613aa457600c546040516000916001600160a01b03169083908381818185875af1925050503d8060008114613a5f576040519150601f19603f3d011682016040523d82523d6000602084013e613a64565b606091505b505090508015613aa2576040518281527fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9699060200160405180910390a15b505b505050602f969096555050505050505050565b6001600160a01b038316613add5760405162461bcd60e51b8152600401610ce5906145a5565b6001600160a01b038216613b035760405162461bcd60e51b8152600401610ce5906145ea565b613b4081604051806060016040528060268152602001614727602691396001600160a01b038616600090815260016020526040902054919061373e565b6001600160a01b038085166000908152600160205260408082209390935590841681522054613b6f9082612e55565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612fd39085815260200190565b6000602a819055602b819055602c819055602d819055602e558115613c0557601b54602a55601c54602b55601d54602c55601e54602d55601f54602e55613c4d565b8015613c2e57602054602a55602154602b55602254602c55602354602d55602454602e55613c4d565b602554602a55602654602b55602754602c55602854602d55602954602e555b602e54602d54602c54602b54602a54613c6691906142e7565b613c7091906142e7565b613c7a91906142e7565b613c8491906142e7565b602f819055602a54602b54602c54602d54602e54604080519586526020860194909452928401919091526060830152608082015260a08101919091527f24b7b85246369f5fb87526971064f357b39a0f399bca1c50e11af8c3c8f4bbd69060c001611453565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d1f57613d1f61465b565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9c9190614507565b81600181518110613daf57613daf61465b565b6001600160a01b039283166020918202929092010152600d54613dd59130911684612ebb565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e0e9085906000908690309042906004016146b5565b600060405180830381600087803b158015613e2857600080fd5b505af1158015613e3c573d6000803e3d6000fd5b505050505050565b600d54613e5c9030906001600160a01b031684612ebb565b600d5460195460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613ecc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117c3919061462d565b6040805160028082526060820183526000926020830190803683375050600d54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7f9190614507565b81600081518110613f9257613f9261465b565b6001600160a01b039283166020918202929092010152601754825191169082906001908110613fc357613fc361465b565b6001600160a01b039283166020918202929092010152600d54601a5460405163b6f9de9560e01b81529183169263b6f9de9592869261400f9260009288929091169042906004016146f1565b6000604051808303818588803b15801561402857600080fd5b505af1158015613735573d6000803e3d6000fd5b600060208083528351808285015260005b818110156140695785810183015185820160400152820161404d565b8181111561407b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146115c757600080fd5b600080604083850312156140b957600080fd5b82356140c481614091565b946020939093013593505050565b6000602082840312156140e457600080fd5b8135612eb481614091565b600080600080600060a0868803121561410757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060006060848603121561413f57600080fd5b833561414a81614091565b9250602084013561415a81614091565b929592945050506040919091013590565b80151581146115c757600080fd5b6000806040838503121561418c57600080fd5b823561419781614091565b915060208301356141a78161416b565b809150509250929050565b6000602082840312156141c457600080fd5b5035919050565b6000602082840312156141dd57600080fd5b8135612eb48161416b565b6000806000606084860312156141fd57600080fd5b833561420881614091565b9250602084013561421881614091565b9150604084013561422881614091565b809150509250925092565b6000806040838503121561424657600080fd5b823561425181614091565b915060208301356141a781614091565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806142aa57607f821691505b602082108114156142cb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156142fa576142fa6142d1565b500190565b6020808252602c908201527f4b726f6e6f733a2043616e6e6f742075706461746520746178657320746f206d60408201526b6f7265207468616e2032302560a01b606082015260800190565b60208082526032908201527f4b726f6e6f733a204163636f756e7420697320616c7265616479207468652076604082015271616c7565206f6620276578636c756465642760701b606082015260800190565b600181815b808511156143d85781600019048211156143be576143be6142d1565b808516156143cb57918102915b93841c93908002906143a2565b509250929050565b6000826143ef57506001610dca565b816143fc57506000610dca565b8160018114614412576002811461441c57614438565b6001915050610dca565b60ff84111561442d5761442d6142d1565b50506001821b610dca565b5060208310610133831016604e8410600b841016171561445b575081810a610dca565b614465838361439d565b8060001904821115614479576144796142d1565b029392505050565b6000612eb460ff8416836143e0565b60008160001904831182151516156144aa576144aa6142d1565b500290565b6000826144cc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156144e357600080fd5b5051919050565b6000602082840312156144fc57600080fd5b8151612eb48161416b565b60006020828403121561451957600080fd5b8151612eb481614091565b600080600080600080600080610100898b03121561454157600080fd5b885161454c81614091565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b6000828210156145a0576145a06142d1565b500390565b60208082526025908201527f43524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f43524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008060006060848603121561464257600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156146aa5781516001600160a01b031687529582019590820190600101614685565b509495945050505050565b85815284602082015260a0604082015260006146d460a0830186614671565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061470a6080830186614671565b6001600160a01b0394909416604083015250606001529291505056fe43524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c6286ff8df4e21e7c34925ed322c5b634811972ad73a99be433c4604272a0da664736f6c634300080c0033

Library Used



Deployed ByteCode Sourcemap

22925:23104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29297:214;;;;;;;;;;;;;:::i;:::-;;23662:28;;;;;;;;;;-1:-1:-1;23662:28:0;;;;-1:-1:-1;;;23662:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;23662:28:0;;;;;;;;14828:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15652:154::-;;;;;;;;;;-1:-1:-1;15652:154:0;;;;;:::i;:::-;;:::i;29516:79::-;;;;;;;;;;;;;:::i;24232:73::-;;;;;;;;;;-1:-1:-1;24232:73:0;;;;-1:-1:-1;;;;;24232:73:0;;;;;;-1:-1:-1;;;;;1428:32:1;;;1410:51;;1398:2;1383:18;24232:73:0;1264:203:1;15113:99:0;;;;;;;;;;-1:-1:-1;15195:12:0;;15113:99;;;1618:25:1;;;1606:2;1591:18;15113:99:0;1472:177:1;23216:47:0;;;;;;;;;;-1:-1:-1;23216:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25026:36;;;;;;;;;;-1:-1:-1;25026:36:0;;;;;;;;;;;;;;;;;;;;;;2165:25:1;;;2221:2;2206:18;;2199:34;;;;2249:18;;;2242:34;;;;2307:2;2292:18;;2285:34;2350:3;2335:19;;2328:35;2152:3;2137:19;25026:36:0;1906:463:1;37562:489:0;;;;;;;;;;-1:-1:-1;37562:489:0;;;;;:::i;:::-;;:::i;15811:313::-;;;;;;;;;;-1:-1:-1;15811:313:0;;;;;:::i;:::-;;:::i;32258:302::-;;;;;;;;;;-1:-1:-1;32258:302:0;;;;;:::i;:::-;;:::i;34989:375::-;;;;;;;;;;-1:-1:-1;34989:375:0;;;;;:::i;:::-;;:::i;23319:44::-;;;;;;;;;;-1:-1:-1;23319:44:0;;;;-1:-1:-1;;;;;23319:44:0;;;38623:132;;;;;;;;;;;;;:::i;29201:91::-;;;;;;;;;;-1:-1:-1;29201:91:0;;23579:2;4377:36:1;;4365:2;4350:18;29201:91:0;4235:184:1;31419:174:0;;;;;;;;;;-1:-1:-1;31419:174:0;;;;;:::i;:::-;;:::i;29600:128::-;;;;;;;;;;;;;:::i;23412:38::-;;;;;;;;;;;;;;;16129:203;;;;;;;;;;-1:-1:-1;16129:203:0;;;;;:::i;:::-;;:::i;38383:222::-;;;;;;;;;;;;;:::i;34291:427::-;;;;;;;;;;-1:-1:-1;34291:427:0;;;;;:::i;:::-;;:::i;24078:33::-;;;;;;;;;;-1:-1:-1;24078:33:0;;;;;;;;;;;24743:150;;;;;;;;;;-1:-1:-1;24743:150:0;;;;;;;;;;;;;;;;;;38284:94;;;;;;;;;;;;;:::i;45949:77::-;;;;;;;;;;;;;:::i;34723:261::-;;;;;;;;;;-1:-1:-1;34723:261:0;;;;;:::i;:::-;;:::i;24415:88::-;;;;;;;;;;-1:-1:-1;24415:88:0;;;;-1:-1:-1;;;;;24415:88:0;;;36037:144;;;;;;;;;;-1:-1:-1;36037:144:0;;;;;:::i;:::-;;:::i;23805:33::-;;;;;;;;;;;;;;;;39274:132;;;;;;;;;;;;;:::i;38909:::-;;;;;;;;;;-1:-1:-1;38909:132:0;;;;;:::i;:::-;;:::i;38063:216::-;;;;;;;;;;-1:-1:-1;38063:216:0;;;;;:::i;:::-;;:::i;33157:220::-;;;;;;;;;;-1:-1:-1;33157:220:0;;;;;:::i;:::-;;:::i;15217:118::-;;;;;;;;;;-1:-1:-1;15217:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;15312:18:0;15291:7;15312:18;;;:9;:18;;;;;;;15217:118;14062:133;;;;;;;;;;;;;:::i;24510:94::-;;;;;;;;;;-1:-1:-1;24510:94:0;;;;-1:-1:-1;;;;;24510:94:0;;;33382:904;;;;;;;;;;-1:-1:-1;33382:904:0;;;;;:::i;:::-;;:::i;24318:93::-;;;;;;;;;;-1:-1:-1;24318:93:0;;;;-1:-1:-1;;;;;24318:93:0;;;31935:318;;;;;;;;;;-1:-1:-1;31935:318:0;;;;;:::i;:::-;;:::i;23367:41::-;;;;;;;;;;-1:-1:-1;23367:41:0;;;;-1:-1:-1;;;;;23367:41:0;;;29733:843;;;;;;;;;;-1:-1:-1;29733:843:0;;;;;:::i;:::-;;:::i;23949:52::-;;;;;;;;;;;;;;;;13878:70;;;;;;;;;;-1:-1:-1;13916:7:0;13937:6;-1:-1:-1;;;;;13937:6:0;13878:70;;31775:155;;;;;;;;;;;;;:::i;14924:95::-;;;;;;;;;;;;;:::i;24186:40::-;;;;;;;;;;;;;;;;36587:474;;;;;;;;;;-1:-1:-1;36587:474:0;;;;;:::i;:::-;;:::i;16337:254::-;;;;;;;;;;-1:-1:-1;16337:254:0;;;;;:::i;:::-;;:::i;24899:120::-;;;;;;;;;;-1:-1:-1;24899:120:0;;;;;;;;;;;;;;;;;;38760:144;;;;;;;;;;-1:-1:-1;38760:144:0;;;;;:::i;:::-;;:::i;15340:160::-;;;;;;;;;;-1:-1:-1;15340:160:0;;;;;:::i;:::-;;:::i;23848:57::-;;;;;;;;;;;;;;;;23765:36;;;;;;;;;;;;;;;;39046:223;;;;;;;;;;-1:-1:-1;39046:223:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;6043:32:1;;;6025:51;;6107:2;6092:18;;6085:34;;;;6135:18;;;6128:34;;;;6193:2;6178:18;;6171:34;;;;6236:3;6221:19;;6214:35;6063:3;6265:19;;6258:35;6324:3;6309:19;;6302:35;6368:3;6353:19;;6346:35;6012:3;5997:19;39046:223:0;5686:701:1;35728:304:0;;;;;;;;;;-1:-1:-1;35728:304:0;;;;;:::i;:::-;;:::i;23267:46::-;;;;;;;;;;-1:-1:-1;23267:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36186:393;;;;;;;;;;-1:-1:-1;36186:393:0;;;;;:::i;:::-;;:::i;31133:281::-;;;;;;;;;;-1:-1:-1;31133:281:0;;;;;:::i;:::-;;:::i;31598:172::-;;;;;;;;;;-1:-1:-1;31598:172:0;;;;;:::i;:::-;;:::i;24115:66::-;;;;;;;;;;;;;;;;30926:202;;;;;;;;;;-1:-1:-1;30926:202:0;;;;;:::i;:::-;;:::i;32568:584::-;;;;;;;;;;-1:-1:-1;32568:584:0;;;;;:::i;:::-;;:::i;15505:142::-;;;;;;;;;;-1:-1:-1;15505:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;15615:18:0;;;15594:7;15615:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15505:142;35369:351;;;;;;;;;;-1:-1:-1;35369:351:0;;;;;:::i;:::-;;:::i;37069:485::-;;;;;;;;;;-1:-1:-1;37069:485:0;;;;;:::i;:::-;;:::i;14200:223::-;;;;;;;;;;-1:-1:-1;14200:223:0;;;;;:::i;:::-;;:::i;29297:214::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;;;;;;;;;29363:15:::1;29339:21;:39:::0;29404:12:::1;29383:18;:33:::0;29421:16:::1;:23:::0;;-1:-1:-1;;;;29421:23:0::1;-1:-1:-1::0;;;29421:23:0::1;::::0;;29449:11:::1;:18:::0;;-1:-1:-1;;29449:18:0::1;29440:4;29449:18;::::0;;29421:16:::1;29478:28:::0;;-1:-1:-1;;29478:28:0::1;29421:23;29478:28;::::0;;29297:214::o;14828:91::-;14882:13;14909:5;14902:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14828:91;:::o;15652:154::-;15735:4;15746:39;383:10;15769:7;15778:6;15746:8;:39::i;:::-;-1:-1:-1;15797:4:0;15652:154;;;;;:::o;29516:79::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;29567:16:::1;:23:::0;;-1:-1:-1;;;;29567:23:0::1;-1:-1:-1::0;;;29567:23:0::1;::::0;;29516:79::o;37562:489::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;37710:16:::1;37774:11:::0;37763:8;37755:5;37729:23:::1;37742:10:::0;37729;:23:::1;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:56;;;;:::i;:::-;37710:75;;37816:2;37804:8;:14;;37796:71;;;;-1:-1:-1::0;;;37796:71:0::1;;;;;;;:::i;:::-;37893:59;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;37878:12:::1;:74:::0;;;;;;;;;;;;;;;;;;;37968:75;-1:-1:-1;;;8411:23:1;;8459:1;8450:11;37968:75:0::1;;::::0;;;;;::::1;::::0;;2165:25:1;;;2221:2;2206:18;;2199:34;;;2249:18;;;2242:34;;;2307:2;2292:18;;2285:34;;;2350:3;2335:19;;2328:35;;;37968:75:0;::::1;::::0;2152:3:1;2137:19;37968:75:0::1;;;;;;;37699:352;37562:489:::0;;;;;:::o;15811:313::-;15930:4;15941:36;15951:6;15959:9;15970:6;15941:9;:36::i;:::-;15982:121;15991:6;383:10;16013:89;16051:6;16013:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16013:19:0;;;;;;:11;:19;;;;;;;;383:10;16013:33;;;;;;;;;;:37;:89::i;:::-;15982:8;:121::i;:::-;-1:-1:-1;16115:4:0;15811:313;;;;;:::o;32258:302::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32353:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;::::1;;:46;;::::0;::::1;;;;32345:109;;;;-1:-1:-1::0;;;32345:109:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32459:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:45;;-1:-1:-1;;32459:45:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32514:41;;154::1;;;32514::0::1;::::0;127:18:1;32514:41:0::1;;;;;;;;32258:302:::0;;:::o;34989:375::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;35079:15:::1;;35067:8;:27;;35059:91;;;::::0;-1:-1:-1;;;35059:91:0;;9093:2:1;35059:91:0::1;::::0;::::1;9075:21:1::0;9132:2;9112:18;;;9105:30;9171:34;9151:18;;;9144:62;-1:-1:-1;;;9222:18:1;;;9215:49;9281:19;;35059:91:0::1;8891:415:1::0;35059:91:0::1;35196:4;23640:13;23579:2;23640;:13;:::i;:::-;23625:29;::::0;:11:::1;:29;:::i;:::-;35181:19;;;;:::i;:::-;35169:8;:31;;35161:109;;;::::0;-1:-1:-1;;;35161:109:0;;11291:2:1;35161:109:0::1;::::0;::::1;11273:21:1::0;11330:2;11310:18;;;11303:30;11369:34;11349:18;;;11342:62;11440:34;11420:18;;;11413:62;-1:-1:-1;;;11491:19:1;;;11484:32;11533:19;;35161:109:0::1;11089:469:1::0;35161:109:0::1;35312:15;::::0;35280:48:::1;::::0;35302:8;;35280:48:::1;::::0;;;::::1;35333:15;:26:::0;34989:375::o;38623:132::-;38707:15;;:43;;;-1:-1:-1;;;38707:43:0;;;;38686:7;;-1:-1:-1;;;;;38707:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38700:50;;38623:132;:::o;31419:174::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;31490:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;31490:45:0;;-1:-1:-1;;;;;1428:32:1;;;31490:45:0::1;::::0;::::1;1410:51:1::0;31490:15:0;;::::1;::::0;:36:::1;::::0;1383:18:1;;31490:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31545:41:0::1;::::0;31581:4:::1;154:41:1::0;;-1:-1:-1;;;;;31545:41:0;::::1;::::0;-1:-1:-1;31545:41:0::1;::::0;-1:-1:-1;142:2:1;127:18;31545:41:0::1;;;;;;;;31419:174:::0;:::o;29600:128::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;29653:16:::1;:24:::0;;-1:-1:-1;;;;29653:24:0::1;::::0;;29708:15:::1;29682:23;:41:::0;29600:128::o;16129:203::-;383:10;16217:4;16260:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16260:34:0;;;;;;;;;;16217:4;;16228:83;;16251:7;;16260:50;;16299:10;16260:38;:50::i;38383:222::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;38458:21:::1;38441:14;38510:7;13916::::0;13937:6;-1:-1:-1;;;;;13937:6:0;;13878:70;38510:7:::1;-1:-1:-1::0;;;;;38502:21:0::1;38532:6;38502:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38484:59;;;38552:7;38548:53;;;38571:24;::::0;1618:25:1;;;38571:24:0::1;::::0;1606:2:1;1591:18;38571:24:0::1;;;;;;;;38548:53;38430:175;;38383:222::o:0;34291:427::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;34391:15:::1;::::0;-1:-1:-1;;;;;34369:38:0;;::::1;34391:15:::0;::::1;34369:38;;34361:94;;;::::0;-1:-1:-1;;;34361:94:0;;12164:2:1;34361:94:0::1;::::0;::::1;12146:21:1::0;12203:2;12183:18;;;12176:30;12242:34;12222:18;;;12215:62;-1:-1:-1;;;12293:18:1;;;12286:41;12344:19;;34361:94:0::1;11962:407:1::0;34361:94:0::1;34507:15;::::0;34465:59:::1;::::0;-1:-1:-1;;;;;34507:15:0;;::::1;::::0;34465:59;::::1;::::0;::::1;::::0;34507:15:::1;::::0;34465:59:::1;34529:15;:48:::0;;-1:-1:-1;;;;;;34529:48:0::1;-1:-1:-1::0;;;;;34529:48:0;;::::1;::::0;;::::1;::::0;;;34582:15:::1;::::0;:44:::1;::::0;-1:-1:-1;;;34582:44:0;;::::1;::::0;::::1;1410:51:1::0;;;;34582:15:0;;::::1;::::0;:32:::1;::::0;1383:18:1;;34582:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34669:15:0::1;::::0;34637:68:::1;::::0;-1:-1:-1;34654:4:0::1;::::0;-1:-1:-1;;;;;;34669:15:0::1;-1:-1:-1::0;;34637:8:0::1;:68::i;:::-;34291:427:::0;:::o;38284:94::-;38315:15;;:58;;-1:-1:-1;;;38315:58:0;;38354:10;38315:58;;;12558:51:1;38315:15:0;12625:18:1;;;12618:50;-1:-1:-1;;;;;38315:15:0;;;;:30;;12531:18:1;;38315:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45949:77::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;46001:17:::1;:15;:17::i;:::-;45949:77::o:0;34723:261::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;34814:16:::1;;34802:8;:28;;34794:93;;;::::0;-1:-1:-1;;;34794:93:0;;13131:2:1;34794:93:0::1;::::0;::::1;13113:21:1::0;13170:2;13150:18;;;13143:30;13209:34;13189:18;;;13182:62;-1:-1:-1;;;13260:18:1;;;13253:50;13320:19;;34794:93:0::1;12929:416:1::0;34794:93:0::1;34930:16;::::0;34897:50:::1;::::0;34920:8;;34897:50:::1;::::0;;;::::1;34952:16;:27:::0;34723:261::o;36037:144::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;36123:15:::1;::::0;:53:::1;::::0;-1:-1:-1;;;36123:53:0;;::::1;::::0;::::1;1618:25:1::0;;;-1:-1:-1;;;;;36123:15:0;;::::1;::::0;:43:::1;::::0;1591:18:1;;36123:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36037:144:::0;:::o;39274:132::-;39360:15;;:41;;;-1:-1:-1;;;39360:41:0;;;;39339:7;;-1:-1:-1;;;;;39360:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;38909:132;39002:15;;:34;;-1:-1:-1;;;39002:34:0;;-1:-1:-1;;;;;1428:32:1;;;39002:34:0;;;1410:51:1;38981:7:0;;39002:15;;:25;;1383:18:1;;39002:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38063:216::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;38144:21:::1;::::0;::::1;;::::0;;::::1;;:31;;::::0;::::1;;;;38136:94;;;::::0;-1:-1:-1;;;38136:94:0;;13552:2:1;38136:94:0::1;::::0;::::1;13534:21:1::0;13591:2;13571:18;;;13564:30;13630:34;13610:18;;;13603:62;-1:-1:-1;;;13681:18:1;;;13674:48;13739:19;;38136:94:0::1;13350:414:1::0;38136:94:0::1;38241:21;:30:::0;;;::::1;;;;-1:-1:-1::0;;38241:30:0;;::::1;::::0;;;::::1;::::0;;38063:216::o;33157:220::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33234:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;::::1;;33226:66;;;::::0;-1:-1:-1;;;33226:66:0;;13971:2:1;33226:66:0::1;::::0;::::1;13953:21:1::0;14010:2;13990:18;;;13983:30;14049:32;14029:18;;;14022:60;14099:18;;33226:66:0::1;13769:354:1::0;33226:66:0::1;-1:-1:-1::0;;;;;33297:23:0;::::1;33323:5;33297:23:::0;;;:14:::1;:23;::::0;;;;;:31;;-1:-1:-1;;33297:31:0::1;::::0;;33338:34;33323:5;;33297:23;33338:34:::1;::::0;33323:5;;33338:34:::1;33157:220:::0;:::o;14062:133::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;14163:1:::1;14147:6:::0;;14126:40:::1;::::0;-1:-1:-1;;;;;14147:6:0;;::::1;::::0;14126:40:::1;::::0;14163:1;;14126:40:::1;14188:1;14171:19:::0;;-1:-1:-1;;;;;;14171:19:0::1;::::0;;14062:133::o;33382:904::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;33534:15:::1;::::0;-1:-1:-1;;;;;33534:37:0;;::::1;:15:::0;::::1;:37;33531:259;;-1:-1:-1::0;;;;;33587:32:0;::::1;33579:84;;;::::0;-1:-1:-1;;;33579:84:0;;14330:2:1;33579:84:0::1;::::0;::::1;14312:21:1::0;14369:2;14349:18;;;14342:30;14408:34;14388:18;;;14381:62;-1:-1:-1;;;14459:18:1;;;14452:37;14506:19;;33579:84:0::1;14128:403:1::0;33579:84:0::1;33726:15;::::0;33674:68:::1;::::0;-1:-1:-1;;;14738:30:1;;-1:-1:-1;;;;;33726:15:0;;::::1;::::0;33674:68;::::1;::::0;14793:2:1;14784:12;33674:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;33748:15;:36:::0;;-1:-1:-1;;;;;;33748:36:0::1;-1:-1:-1::0;;;;;33748:36:0;::::1;;::::0;;33531:259:::1;33797:10;::::0;-1:-1:-1;;;;;33797:27:0;;::::1;:10:::0;::::1;:27;33794:214;;-1:-1:-1::0;;;;;33840:27:0;::::1;33832:74;;;::::0;-1:-1:-1;;;33832:74:0;;15009:2:1;33832:74:0::1;::::0;::::1;14991:21:1::0;15048:2;15028:18;;;15021:30;15087:34;15067:18;;;15060:62;-1:-1:-1;;;15138:18:1;;;15131:32;15180:19;;33832:74:0::1;14807:398:1::0;33832:74:0::1;33959:10;::::0;33917:53:::1;::::0;-1:-1:-1;;;15412:25:1;;-1:-1:-1;;;;;33959:10:0;;::::1;::::0;33917:53;::::1;::::0;15462:2:1;15453:12;33917:53:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;33976:10;:26:::0;;-1:-1:-1;;;;;;33976:26:0::1;-1:-1:-1::0;;;;;33976:26:0;::::1;;::::0;;33794:214:::1;34015:16;::::0;-1:-1:-1;;;;;34015:39:0;;::::1;:16:::0;::::1;:39;34012:262;;-1:-1:-1::0;;;;;34070:27:0;::::1;34062:80;;;::::0;-1:-1:-1;;;34062:80:0;;15678:2:1;34062:80:0::1;::::0;::::1;15660:21:1::0;15717:2;15697:18;;;15690:30;15756:34;15736:18;;;15729:62;-1:-1:-1;;;15807:18:1;;;15800:38;15855:19;;34062:80:0::1;15476:404:1::0;34062:80:0::1;34207:16;::::0;34153:71:::1;::::0;-1:-1:-1;;;16087:31:1;;-1:-1:-1;;;;;34207:16:0;;::::1;::::0;34153:71;::::1;::::0;16143:2:1;16134:12;34153:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;34230:16;:38:::0;;-1:-1:-1;;;;;;34230:38:0::1;-1:-1:-1::0;;;;;34230:38:0;::::1;;::::0;;34012:262:::1;33382:904:::0;;;:::o;31935:318::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32034:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;::::1;;:50;;::::0;::::1;;;;32026:113;;;;-1:-1:-1::0;;;32026:113:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32144:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;32144:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32203:45;;154:41:1;;;32203:45:0::1;::::0;127:18:1;32203:45:0::1;14:187:1::0;29733:843:0;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;29838:15:::1;::::0;-1:-1:-1;;;;;29816:38:0;;::::1;29838:15:::0;::::1;29816:38;;29808:104;;;::::0;-1:-1:-1;;;29808:104:0;;16359:2:1;29808:104:0::1;::::0;::::1;16341:21:1::0;16398:2;16378:18;;;16371:30;16437:34;16417:18;;;16410:62;-1:-1:-1;;;16488:18:1;;;16481:51;16549:19;;29808:104:0::1;16157:417:1::0;29808:104:0::1;29917:40;29990:10;29917:85;;30053:4;-1:-1:-1::0;;;;;30015:43:0::1;:18;-1:-1:-1::0;;;;;30015:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30015:43:0::1;;30007:131;;;::::0;-1:-1:-1;;;30007:131:0;;17037:2:1;30007:131:0::1;::::0;::::1;17019:21:1::0;17076:2;17056:18;;;17049:30;17115:34;17095:18;;;17088:62;17186:34;17166:18;;;17159:62;-1:-1:-1;;;17237:19:1;;;17230:42;17289:19;;30007:131:0::1;16835:479:1::0;30007:131:0::1;30143:68;::::0;-1:-1:-1;;;30143:68:0;;-1:-1:-1;;;;;30143:39:0;::::1;:68;::::0;::::1;1410:51:1::0;;;30143:39:0;::::1;::::0;1383:18:1;;30143:68:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30216:54:0::1;::::0;-1:-1:-1;;;30216:54:0;;30264:4:::1;30216:54;::::0;::::1;1410:51:1::0;-1:-1:-1;;;;;30216:39:0;::::1;::::0;-1:-1:-1;30216:39:0::1;::::0;-1:-1:-1;1383:18:1;;30216:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30275:18;-1:-1:-1::0;;;;;30275:39:0::1;;30315:7;13916::::0;13937:6;-1:-1:-1;;;;;13937:6:0;;13878:70;30315:7:::1;30275:48;::::0;-1:-1:-1;;;;;;30275:48:0::1;::::0;;;;;;-1:-1:-1;;;;;1428:32:1;;;30275:48:0::1;::::0;::::1;1410:51:1::0;1383:18;;30275:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30376:15:0::1;::::0;30328:65:::1;::::0;-1:-1:-1;;;30328:65:0;;-1:-1:-1;;;;;30376:15:0;;::::1;30328:65;::::0;::::1;1410:51:1::0;30328:39:0;;::::1;::::0;-1:-1:-1;30328:39:0::1;::::0;-1:-1:-1;1383:18:1;;30328:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30398:63:0::1;::::0;-1:-1:-1;;;30398:63:0;;-1:-1:-1;;;;;30446:13:0::1;1428:32:1::0;;30398:63:0::1;::::0;::::1;1410:51:1::0;30398:39:0;::::1;::::0;-1:-1:-1;30398:39:0::1;::::0;-1:-1:-1;1383:18:1;;30398:63:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30513:15:0::1;::::0;30471:59:::1;::::0;-1:-1:-1;;;;;30513:15:0;;::::1;::::0;-1:-1:-1;30471:59:0;;::::1;::::0;-1:-1:-1;30471:59:0::1;::::0;30513:15:::1;::::0;30471:59:::1;30535:15;:36:::0;;-1:-1:-1;;;;;;30535:36:0::1;-1:-1:-1::0;;;;;30535:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;29733:843:0:o;31775:155::-;31821:15;;:46;;-1:-1:-1;;;31821:46:0;;31856:10;31821:46;;;1410:51:1;-1:-1:-1;;;;;31821:15:0;;;;:34;;1383:18:1;;31821:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31877:45:0;;31916:5;154:41:1;;31904:10:0;;-1:-1:-1;31877:45:0;;-1:-1:-1;142:2:1;127:18;31877:45:0;;;;;;;31775:155::o;14924:95::-;14980:13;15007:7;15000:14;;;;;:::i;36587:474::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;36730:16:::1;36794:11:::0;36783:8;36775:5;36749:23:::1;36762:10:::0;36749;:23:::1;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:56;;;;:::i;:::-;36730:75;;36836:2;36824:8;:14;;36816:71;;;;-1:-1:-1::0;;;36816:71:0::1;;;;;;;:::i;:::-;36908:59;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;36898:7:::1;:69:::0;;;;;;;;;;;;;;;;;;;36983:70;-1:-1:-1;;;17521:18:1;;17564:1;17555:11;36983:70:0::1;17319:253:1::0;16337:254:0;16430:4;16441:129;383:10;16464:7;16473:96;16512:15;16473:96;;;;;;;;;;;;;;;;;383:10;16473:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16473:34:0;;;;;;;;;;;;:38;:96::i;38760:144::-;38852:15;;:47;;-1:-1:-1;;;38852:47:0;;-1:-1:-1;;;;;1428:32:1;;;38852:47:0;;;1410:51:1;38831:7:0;;38852:15;;:38;;1383:18:1;;38852:47:0;1264:203:1;15340:160:0;15426:4;15437:42;383:10;15461:9;15472:6;15437:9;:42::i;39046:223::-;39229:15;;:35;;-1:-1:-1;;;39229:35:0;;-1:-1:-1;;;;;1428:32:1;;;39229:35:0;;;1410:51:1;39126:7:0;;;;;;;;;;;;;;;;39229:15;;;:26;;1383:18:1;;39229:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39222:42;;;;;;;;;;;;;;;;39046:223;;;;;;;;;:::o;35728:304::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;35826:23:::1;;35814:8;:35;;35806:107;;;::::0;-1:-1:-1;;;35806:107:0;;18465:2:1;35806:107:0::1;::::0;::::1;18447:21:1::0;18504:2;18484:18;;;18477:30;18543:34;18523:18;;;18516:62;18614:29;18594:18;;;18587:57;18661:19;;35806:107:0::1;18263:423:1::0;35806:107:0::1;35964:23;::::0;35923:65:::1;::::0;35954:8;;35923:65:::1;::::0;;;::::1;35993:23;:34:::0;35728:304::o;36186:393::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36261:34:0;;::::1;;::::0;;;:18:::1;:34;::::0;;;;;;:41;;-1:-1:-1;;36261:41:0::1;36298:4;36261:41;::::0;;36307:15:::1;::::0;:52;;-1:-1:-1;;;36307:52:0;;::::1;::::0;::::1;1410:51:1::0;;;;36307:15:0;;::::1;::::0;:36:::1;::::0;1383:18:1;;36307:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;;36364:45:0;::::1;;::::0;;;:29:::1;:45;::::0;;;;;;;:52;;36412:4:::1;-1:-1:-1::0;;36364:52:0;;::::1;::::0;::::1;::::0;;;36421:29:::1;:45:::0;;;;;:52;;;::::1;::::0;::::1;::::0;;36478:25:::1;:41:::0;;;;;;:48;;;;::::1;;::::0;;;36536:38;::::1;::::0;36364:45;36536:38:::1;36186:393:::0;:::o;31133:281::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31222:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;:39;;::::0;::::1;;;;31214:102;;;;-1:-1:-1::0;;;31214:102:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31321:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;31321:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31369:40;;154:41:1;;;31369:40:0::1;::::0;127:18:1;31369:40:0::1;14:187:1::0;31598:172:0;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;31667:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;31667:43:0;;-1:-1:-1;;;;;1428:32:1;;;31667:43:0::1;::::0;::::1;1410:51:1::0;31667:15:0;;::::1;::::0;:34:::1;::::0;1383:18:1;;31667:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31720:42:0::1;::::0;31756:5:::1;154:41:1::0;;-1:-1:-1;;;;;31720:42:0;::::1;::::0;-1:-1:-1;31720:42:0::1;::::0;-1:-1:-1;142:2:1;127:18;31720:42:0::1;14:187:1::0;30926:202:0;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31015:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;31015:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31073:50;;154:41:1;;;31073:50:0::1;::::0;127:18:1;31073:50:0::1;14:187:1::0;32568:584:0;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32691:23:0;::::1;32635:24;32691:23:::0;;;:14:::1;:23;::::0;;;;;32662:15:::1;::::0;32691:23:::1;;32690:24;32682:71;;;::::0;-1:-1:-1;;;32682:71:0;;18893:2:1;32682:71:0::1;::::0;::::1;18875:21:1::0;18932:2;18912:18;;;18905:30;18971:34;18951:18;;;18944:62;-1:-1:-1;;;19022:18:1;;;19015:32;19064:19;;32682:71:0::1;18691:398:1::0;32682:71:0::1;-1:-1:-1::0;;;;;32767:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;;::::1;;32766:23;32758:65;;;::::0;-1:-1:-1;;;32758:65:0;;19296:2:1;32758:65:0::1;::::0;::::1;19278:21:1::0;19335:2;19315:18;;;19308:30;19374:31;19354:18;;;19347:59;19423:18;;32758:65:0::1;19094:353:1::0;32758:65:0::1;32855:15;::::0;-1:-1:-1;;;;;32836:35:0;;::::1;32855:15:::0;::::1;32836:35;;32828:87;;;::::0;-1:-1:-1;;;32828:87:0;;19654:2:1;32828:87:0::1;::::0;::::1;19636:21:1::0;19693:2;19673:18;;;19666:30;19732:34;19712:18;;;19705:62;-1:-1:-1;;;19783:18:1;;;19776:37;19830:19;;32828:87:0::1;19452:403:1::0;32828:87:0::1;32926:11;::::0;::::1;;32922:148;;;25115:5;32973:21;;32954:16;:40;;;;:::i;:::-;32953:64;32945:119;;;::::0;-1:-1:-1;;;32945:119:0;;20192:2:1;32945:119:0::1;::::0;::::1;20174:21:1::0;20231:2;20211:18;;;20204:30;20270:34;20250:18;;;20243:62;-1:-1:-1;;;20321:18:1;;;20314:40;20371:19;;32945:119:0::1;19990:406:1::0;32945:119:0::1;-1:-1:-1::0;;;;;33074:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:30;;-1:-1:-1;;33074:30:0::1;33100:4;33074:30:::0;;::::1;::::0;;;33114:33;;33100:4;;33074:23;33114:33:::1;::::0;::::1;32630:522;32568:584:::0;:::o;35369:351::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;35455:11:::1;;35443:8;:23;;35435:83;;;::::0;-1:-1:-1;;;35435:83:0;;20603:2:1;35435:83:0::1;::::0;::::1;20585:21:1::0;20642:2;20622:18;;;20615:30;20681:34;20661:18;;;20654:62;-1:-1:-1;;;20732:18:1;;;20725:45;20787:19;;35435:83:0::1;20401:411:1::0;35435:83:0::1;35564:4;23640:13;23579:2;23640;:13;:::i;:::-;23625:29;::::0;:11:::1;:29;:::i;:::-;35549:19;;;;:::i;:::-;35537:8;:31;;35529:105;;;::::0;-1:-1:-1;;;35529:105:0;;21019:2:1;35529:105:0::1;::::0;::::1;21001:21:1::0;21058:2;21038:18;;;21031:30;21097:34;21077:18;;;21070:62;21168:31;21148:18;;;21141:59;21217:19;;35529:105:0::1;20817:425:1::0;35529:105:0::1;35672:15;::::0;35644:44:::1;::::0;35662:8;;35644:44:::1;::::0;;;::::1;35693:11;:22:::0;35369:351::o;37069:485::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;37213:16:::1;37277:11:::0;37266:8;37258:5;37232:23:::1;37245:10:::0;37232;:23:::1;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:56;;;;:::i;:::-;37213:75;;37319:2;37307:8;:14;;37299:71;;;;-1:-1:-1::0;;;37299:71:0::1;;;;;;;:::i;:::-;37400:59;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;37389:70;;;;;;;;;;;;;;;;;;;37475:71;-1:-1:-1;;;21449:19:1;;21493:1;21484:11;37475:71:0::1;21247:254:1::0;14200:223:0;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14283:22:0;::::1;14275:73;;;::::0;-1:-1:-1;;;14275:73:0;;21708:2:1;14275:73:0::1;::::0;::::1;21690:21:1::0;21747:2;21727:18;;;21720:30;21786:34;21766:18;;;21759:62;-1:-1:-1;;;21837:18:1;;;21830:36;21883:19;;14275:73:0::1;21506:402:1::0;14275:73:0::1;14379:6;::::0;;14358:38:::1;::::0;-1:-1:-1;;;;;14358:38:0;;::::1;::::0;14379:6;::::1;::::0;14358:38:::1;::::0;::::1;14401:6;:17:::0;;-1:-1:-1;;;;;;14401:17:0::1;-1:-1:-1::0;;;;;14401:17:0;;;::::1;::::0;;;::::1;::::0;;14200:223::o;9337:160::-;9395:7;;9421:5;9425:1;9421;:5;:::i;:::-;9409:17;;9444:1;9439;:6;;9431:46;;;;-1:-1:-1;;;9431:46:0;;22115:2:1;9431:46:0;;;22097:21:1;22154:2;22134:18;;;22127:30;22193:29;22173:18;;;22166:57;22240:18;;9431:46:0;21913:351:1;9431:46:0;9491:1;9337:160;-1:-1:-1;;;9337:160:0:o;17842:330::-;-1:-1:-1;;;;;17951:19:0;;17943:68;;;;-1:-1:-1;;;17943:68:0;;22471:2:1;17943:68:0;;;22453:21:1;22510:2;22490:18;;;22483:30;22549:34;22529:18;;;22522:62;-1:-1:-1;;;22600:18:1;;;22593:34;22644:19;;17943:68:0;22269:400:1;17943:68:0;-1:-1:-1;;;;;18024:21:0;;18016:68;;;;-1:-1:-1;;;18016:68:0;;22876:2:1;18016:68:0;;;22858:21:1;22915:2;22895:18;;;22888:30;22954:34;22934:18;;;22927:62;-1:-1:-1;;;23005:18:1;;;22998:32;23047:19;;18016:68:0;22674:398:1;18016:68:0;-1:-1:-1;;;;;18089:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18135:32;;1618:25:1;;;18135:32:0;;1591:18:1;18135:32:0;;;;;;;;17842:330;;;:::o;39421:2359::-;-1:-1:-1;;;;;39527:18:0;;39519:68;;;;-1:-1:-1;;;39519:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39600:16:0;;39592:64;;;;-1:-1:-1;;;39592:64:0;;;;;;;:::i;:::-;39666:11;39663:68;;39685:28;39701:4;39707:2;39711:1;39685:15;:28::i;39663:68::-;-1:-1:-1;;;;;39756:19:0;;;39737:16;39756:19;;;:13;:19;;;;;;;;;39798:17;;;;;;;;;39826:35;;;:29;:35;;;;;;39756:19;;;;;39798:17;;;;39826:35;39825:36;:74;;;;-1:-1:-1;;;;;;39866:33:0;;;;;;:29;:33;;;;;;;;39865:34;39825:74;39822:743;;;39915:16;;-1:-1:-1;;;39915:16:0;;;;39907:67;;;;-1:-1:-1;;;39907:67:0;;24089:2:1;39907:67:0;;;24071:21:1;24128:2;24108:18;;;24101:30;24167:34;24147:18;;;24140:62;-1:-1:-1;;;24218:18:1;;;24211:36;24264:19;;39907:67:0;23887:402:1;39907:67:0;-1:-1:-1;;;;;39989:18:0;;;;;;:14;:18;;;;;;;;39988:19;39980:58;;;;-1:-1:-1;;;39980:58:0;;24496:2:1;39980:58:0;;;24478:21:1;24535:2;24515:18;;;24508:30;24574:28;24554:18;;;24547:56;24620:18;;39980:58:0;24294:350:1;39980:58:0;-1:-1:-1;;;;;40053:20:0;;;;;;:14;:20;;;;;;;;40052:21;40044:60;;;;-1:-1:-1;;;40044:60:0;;24496:2:1;40044:60:0;;;24478:21:1;24535:2;24515:18;;;24508:30;24574:28;24554:18;;;24547:56;24620:18;;40044:60:0;24294:350:1;40044:60:0;-1:-1:-1;;;;;40117:33:0;;;;;;:29;:33;;;;;;;;40112:169;;40195:15;;40184:6;40168:13;40178:2;-1:-1:-1;;;;;15312:18:0;15291:7;15312:18;;;:9;:18;;;;;;;15217:118;40168:13;:22;;;;:::i;:::-;40167:43;;40159:115;;;;-1:-1:-1;;;40159:115:0;;24851:2:1;40159:115:0;;;24833:21:1;24890:2;24870:18;;;24863:30;24929:34;24909:18;;;24902:62;25000:29;24980:18;;;24973:57;25047:19;;40159:115:0;24649:423:1;40159:115:0;-1:-1:-1;;;;;40301:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;40324:17:0;;;;;;:13;:17;;;;;;;;40301:40;40297:263;;;-1:-1:-1;;;;;40367:31:0;;;;;;:25;:31;;;;;;;;40366:32;;:66;;-1:-1:-1;;;;;;40403:29:0;;;;;;:25;:29;;;;;;;;40402:30;40366:66;40362:183;;;40475:11;;40465:6;:21;;40457:68;;;;-1:-1:-1;;;40457:68:0;;25279:2:1;40457:68:0;;;25261:21:1;25318:2;25298:18;;;25291:30;25357:34;25337:18;;;25330:62;-1:-1:-1;;;25408:18:1;;;25401:32;25450:19;;40457:68:0;25077:398:1;40457:68:0;40571:37;40584:11;40597:10;40571:12;:37::i;:::-;40656:23;;40646:4;40613:12;15312:18;;;:9;:18;;;;;;40695:16;;-1:-1:-1;;40628:51:0;;-1:-1:-1;;;40695:16:0;;;;:31;;;;;40719:7;40695:31;:49;;;;-1:-1:-1;40735:9:0;;;;40734:10;40695:49;:70;;;;;40764:1;40752:9;;:13;40695:70;:95;;;;-1:-1:-1;;;;;;40773:17:0;;;;;;:13;:17;;;;;;;;40695:95;:126;;;;-1:-1:-1;40806:15:0;;-1:-1:-1;;;;;40798:23:0;;;40806:15;;40798:23;;40695:126;:151;;;;-1:-1:-1;40831:15:0;;-1:-1:-1;;;;;40825:21:0;;;40831:15;;40825:21;;40695:151;:177;;;;-1:-1:-1;40862:10:0;;-1:-1:-1;;;;;40854:18:0;;;40862:10;;40854:18;;40695:177;:197;;;;-1:-1:-1;40882:10:0;;-1:-1:-1;;;;;40876:16:0;;;40882:10;;40876:16;;40695:197;:235;;;;-1:-1:-1;40909:21:0;;;;;;;40695:235;40686:324;;;40942:9;:16;;-1:-1:-1;;40942:16:0;40954:4;40942:16;;;40964:17;:15;:17::i;:::-;40987:9;:17;;-1:-1:-1;;40987:17:0;;;40686:324;41032:9;;41016:12;;41032:9;;41031:10;:30;;;;-1:-1:-1;41045:16:0;;-1:-1:-1;;;41045:16:0;;;;41031:30;-1:-1:-1;;;;;41071:24:0;;;;;;:18;:24;;;;;;41016:45;;-1:-1:-1;41071:24:0;;;:50;;-1:-1:-1;;;;;;41099:22:0;;;;;;:18;:22;;;;;;;;41071:50;41068:81;;;-1:-1:-1;41138:5:0;41068:81;41157:7;41153:137;;;41172:11;41207:3;41195:9;;41186:6;:18;;;;:::i;:::-;:24;;;;:::i;:::-;41172:38;-1:-1:-1;41225:12:0;41172:38;41225:6;:12;:::i;:::-;41216:21;;41243:41;41259:4;41273;41280:3;41243:15;:41::i;:::-;41166:124;41153:137;41296:33;41312:4;41318:2;41322:6;41296:15;:33::i;:::-;41340:15;;-1:-1:-1;;;;;41340:15:0;:26;41375:4;41382:15;41375:4;-1:-1:-1;;;;;15312:18:0;15291:7;15312:18;;;:9;:18;;;;;;;15217:118;41382:15;41340:58;;-1:-1:-1;;;;;;41340:58:0;;;;;;;-1:-1:-1;;;;;25688:32:1;;;41340:58:0;;;25670:51:1;25737:18;;;25730:34;25643:18;;41340:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41336:74;41418:15;;-1:-1:-1;;;;;41418:15:0;:26;41453:2;41458:13;41453:2;-1:-1:-1;;;;;15312:18:0;15291:7;15312:18;;;:9;:18;;;;;;;15217:118;41458:13;41418:54;;-1:-1:-1;;;;;;41418:54:0;;;;;;;-1:-1:-1;;;;;25688:32:1;;;41418:54:0;;;25670:51:1;25737:18;;;25730:34;25643:18;;41418:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41414:70;41494:9;;;;41490:286;;41525:16;;41551:15;;:28;;-1:-1:-1;;;;;;41551:28:0;;;;;1618:25:1;;;-1:-1:-1;;;;;41551:15:0;;;;:23;;1591:18:1;;41551:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;41551:28:0;;;;;;;;-1:-1:-1;;41551:28:0;;;;;;;;;;;;:::i;:::-;;;41547:224;;;;;41665:86;;;26317:25:1;;;26373:2;26358:18;;26351:34;;;26401:18;;;26394:34;;;26459:2;26444:18;;26437:34;;;41741:9:0;;41730:4;;41665:86;;26304:3:1;26289:19;41665:86:0;;;;;;;41580:178;;;41547:224;41505:271;41490:286;39514:2266;;;;39421:2359;;;:::o;9634:171::-;9720:7;9750:12;9742:6;;;;9734:29;;;;-1:-1:-1;;;9734:29:0;;;;;;;;:::i;:::-;-1:-1:-1;9768:9:0;9780:5;9784:1;9780;:5;:::i;:::-;9768:17;9634:171;-1:-1:-1;;;;;9634:171:0:o;42838:1927::-;42920:15;;42905:4;15594:7;15615:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;42920:15:0;;;15615:27;;;;;;;-1:-1:-1;;42887:71:0;42884:171;;43007:15;;42975:68;;42992:4;;-1:-1:-1;;;;;43007:15:0;-1:-1:-1;;42975:8:0;:68::i;:::-;43111:4;43067:23;15312:18;;;:9;:18;;;;;;43200:9;;43260:13;;15312:18;;43150:21;;43288:1;;43200:9;;43242:31;;15312:18;43242:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;43216:73;-1:-1:-1;43294:20:0;43317:33;43216:73;43317:15;:33;:::i;:::-;43294:56;;43357:31;43375:12;43357:17;:31::i;:::-;43395:27;43425:41;43449:17;43425:21;:41;:::i;:::-;43395:71;;43471:19;43522:1;43506:13;;:17;;;;:::i;:::-;43493:9;;:31;;;;:::i;:::-;43471:53;;43529:26;43610:1;43596:11;43580:13;;43558:19;:35;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;43529:82;;43616:26;43683:11;43667:13;;43645:19;:35;;;;:::i;:::-;:49;;;;:::i;:::-;43616:78;;43699:21;43756:11;43745:8;;43723:19;:30;;;;:::i;:::-;:44;;;;:::i;:::-;43699:68;;43778:27;43847:11;43830:14;;43808:19;:36;;;;:::i;:::-;:50;;;;:::i;:::-;43778:80;-1:-1:-1;43863:24:0;43778:80;43955:13;43913:39;43934:18;43913;:39;:::i;:::-;:55;;;;:::i;:::-;:77;;;;:::i;:::-;43890:101;;:19;:101;:::i;:::-;43863:128;-1:-1:-1;44007:22:0;;44004:78;;44038:15;;:44;;-1:-1:-1;;;;;44038:15:0;;;;:44;;;;;44063:18;;44038:15;:44;:15;:44;44063:18;44038:15;:44;;;;;;;;;;;;;;;;;;;;;44004:78;44096:17;;44093:63;;44122:10;;:34;;-1:-1:-1;;;;;44122:10:0;;;;:34;;;;;44142:13;;44122:10;:34;:10;:34;44142:13;44122:10;:34;;;;;;;;;;;;;;;;;;;;;44093:63;44166:19;;44163:162;;44193:50;44207:15;44224:18;44193:13;:50::i;:::-;44254:65;;;26684:25:1;;;26740:2;26725:18;;26718:34;;;26768:18;;;26761:34;;;44254:65:0;;26672:2:1;26657:18;44254:65:0;;;;;;;44163:162;44340:23;;44337:141;;44380:37;44397:19;44380:16;:37::i;:::-;44437:29;;1618:25:1;;;44437:29:0;;1606:2:1;1591:18;44437:29:0;;;;;;;44337:141;44493:20;;44490:241;;44564:15;;44556:58;;44531:20;;-1:-1:-1;;;;;44564:15:0;;44593:16;;44531:20;44556:58;44531:20;44556:58;44593:16;44564:15;44556:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44530:84;;;44632:15;44629:91;;;44673:31;;1618:25:1;;;44673:31:0;;1606:2:1;1591:18;44673:31:0;;;;;;;44629:91;44515:216;44490:241;-1:-1:-1;;;44735:9:0;:25;;;;-1:-1:-1;;;;;;;;42838:1927:0:o;16596:509::-;-1:-1:-1;;;;;16709:20:0;;16701:70;;;;-1:-1:-1;;;16701:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16784:23:0;;16776:71;;;;-1:-1:-1;;;16776:71:0;;;;;;;:::i;:::-;16924;16946:6;16924:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16924:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;16904:17:0;;;;;;;:9;:17;;;;;;:91;;;;17023:20;;;;;;;:32;;17048:6;17023:24;:32::i;:::-;-1:-1:-1;;;;;17000:20:0;;;;;;;:9;:20;;;;;;;:55;;;;17065:35;;;;;;;;;;17093:6;1618:25:1;;1606:2;1591:18;;1472:177;41783:1050:0;41869:1;41853:13;:17;;;41875:13;:17;;;41897:8;:12;;;41914:11;:15;;;41940:14;:18;41965:675;;;;42004:7;:17;41988:13;:33;42043:17;;42027:13;:33;42077:12;;42066:8;:23;42109:15;;42095:11;:29;42156:18;;42139:14;:35;41965:675;;;42193:10;42189:451;;;42227:8;:18;42211:13;:34;42267:18;;42251:13;:34;42302:13;;42291:8;:24;42335:16;;42321:11;:30;42383:19;;42366:14;:36;42189:451;;;42439:12;:22;42423:13;:38;42483:22;;42467:13;:38;42522:17;;42511:8;:28;42559:20;;42545:11;:34;42611:23;;42594:14;:40;42189:451;42713:14;;42699:11;;42688:8;;42672:13;;42656;;:29;;;;:::i;:::-;:40;;;;:::i;:::-;:54;;;;:::i;:::-;:71;;;;:::i;:::-;42644:9;:83;;;42749:13;;42764;;42779:8;;42789:11;;42802:14;;42737:91;;;27093:25:1;;;27149:2;27134:18;;27127:34;;;;27177:18;;;27170:34;;;;27235:2;27220:18;;27213:34;27278:3;27263:19;;27256:35;27322:3;27307:19;;27300:35;;;;42737:91:0;;27080:3:1;27065:19;42737:91:0;26806:535:1;44770:416:0;44855:16;;;44869:1;44855:16;;;;;;;;44831:21;;44855:16;;;;;;;;;;-1:-1:-1;44855:16:0;44831:40;;44894:4;44876;44881:1;44876:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44876:23:0;;;:7;;;;;;;;;;:23;;;;44914:15;;:22;;;-1:-1:-1;;;44914:22:0;;;;:15;;;;;:20;;:22;;;;;44876:7;;44914:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44904:4;44909:1;44904:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44904:32:0;;;:7;;;;;;;;;:32;44973:15;;44941:62;;44958:4;;44973:15;44991:11;44941:8;:62::i;:::-;45008:15;;:173;;-1:-1:-1;;;45008:173:0;;-1:-1:-1;;;;;45008:15:0;;;;:66;;:173;;45080:11;;45008:15;;45132:4;;45150;;45161:15;;45008:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44826:360;44770:416;:::o;45598:343::-;45706:15;;45674:62;;45691:4;;-1:-1:-1;;;;;45706:15:0;45724:11;45674:8;:62::i;:::-;45741:15;;45900:10;;45741:195;;-1:-1:-1;;;45741:195:0;;45804:4;45741:195;;;29012:34:1;29062:18;;;29055:34;;;45741:15:0;29105:18:1;;;29098:34;;;29148:18;;;29141:34;-1:-1:-1;;;;;45900:10:0;;;29191:19:1;;;29184:44;45916:15:0;29244:19:1;;;29237:35;45741:15:0;;;:31;;45780:9;;28946:19:1;;45741:195:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45194:399::-;45276:16;;;45290:1;45276:16;;;;;;;;45252:21;;45276:16;;;;;;;;-1:-1:-1;;45307:15:0;;:22;;;-1:-1:-1;;;45307:22:0;;;;45252:40;;-1:-1:-1;;;;;;45307:15:0;;;;:20;;-1:-1:-1;45307:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45297:4;45302:1;45297:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45297:32:0;;;:7;;;;;;;;;:32;45344:13;;45334:7;;45344:13;;;45334:4;;45344:13;;45334:7;;;;;;:::i;:::-;-1:-1:-1;;;;;45334:23:0;;;:7;;;;;;;;;:23;45370:15;;45524:16;;45370:208;;-1:-1:-1;;;45370:208:0;;:15;;;;:66;;45445:9;;45370:208;;:15;;45509:4;;45524:16;;;;45551:15;;45370:208;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;206:597:1;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1654:247::-;1713:6;1766:2;1754:9;1745:7;1741:23;1737:32;1734:52;;;1782:1;1779;1772:12;1734:52;1821:9;1808:23;1840:31;1865:5;1840:31;:::i;2374:454::-;2469:6;2477;2485;2493;2501;2554:3;2542:9;2533:7;2529:23;2525:33;2522:53;;;2571:1;2568;2561:12;2522:53;-1:-1:-1;;2594:23:1;;;2664:2;2649:18;;2636:32;;-1:-1:-1;2715:2:1;2700:18;;2687:32;;2766:2;2751:18;;2738:32;;-1:-1:-1;2817:3:1;2802:19;2789:33;;-1:-1:-1;2374:454:1;-1:-1:-1;2374:454:1:o;2833:456::-;2910:6;2918;2926;2979:2;2967:9;2958:7;2954:23;2950:32;2947:52;;;2995:1;2992;2985:12;2947:52;3034:9;3021:23;3053:31;3078:5;3053:31;:::i;:::-;3103:5;-1:-1:-1;3160:2:1;3145:18;;3132:32;3173:33;3132:32;3173:33;:::i;:::-;2833:456;;3225:7;;-1:-1:-1;;;3279:2:1;3264:18;;;;3251:32;;2833:456::o;3294:118::-;3380:5;3373:13;3366:21;3359:5;3356:32;3346:60;;3402:1;3399;3392:12;3417:382;3482:6;3490;3543:2;3531:9;3522:7;3518:23;3514:32;3511:52;;;3559:1;3556;3549:12;3511:52;3598:9;3585:23;3617:31;3642:5;3617:31;:::i;:::-;3667:5;-1:-1:-1;3724:2:1;3709:18;;3696:32;3737:30;3696:32;3737:30;:::i;:::-;3786:7;3776:17;;;3417:382;;;;;:::o;3804:180::-;3863:6;3916:2;3904:9;3895:7;3891:23;3887:32;3884:52;;;3932:1;3929;3922:12;3884:52;-1:-1:-1;3955:23:1;;3804:180;-1:-1:-1;3804:180:1:o;4648:241::-;4704:6;4757:2;4745:9;4736:7;4732:23;4728:32;4725:52;;;4773:1;4770;4763:12;4725:52;4812:9;4799:23;4831:28;4853:5;4831:28;:::i;4894:553::-;4995:6;5003;5011;5064:2;5052:9;5043:7;5039:23;5035:32;5032:52;;;5080:1;5077;5070:12;5032:52;5119:9;5106:23;5138:31;5163:5;5138:31;:::i;:::-;5188:5;-1:-1:-1;5245:2:1;5230:18;;5217:32;5258:33;5217:32;5258:33;:::i;:::-;5310:7;-1:-1:-1;5369:2:1;5354:18;;5341:32;5382:33;5341:32;5382:33;:::i;:::-;5434:7;5424:17;;;4894:553;;;;;:::o;6392:388::-;6460:6;6468;6521:2;6509:9;6500:7;6496:23;6492:32;6489:52;;;6537:1;6534;6527:12;6489:52;6576:9;6563:23;6595:31;6620:5;6595:31;:::i;:::-;6645:5;-1:-1:-1;6702:2:1;6687:18;;6674:32;6715:33;6674:32;6715:33;:::i;6785:356::-;6987:2;6969:21;;;7006:18;;;6999:30;7065:34;7060:2;7045:18;;7038:62;7132:2;7117:18;;6785:356::o;7146:380::-;7225:1;7221:12;;;;7268;;;7289:61;;7343:4;7335:6;7331:17;7321:27;;7289:61;7396:2;7388:6;7385:14;7365:18;7362:38;7359:161;;;7442:10;7437:3;7433:20;7430:1;7423:31;7477:4;7474:1;7467:15;7505:4;7502:1;7495:15;7359:161;;7146:380;;;:::o;7531:127::-;7592:10;7587:3;7583:20;7580:1;7573:31;7623:4;7620:1;7613:15;7647:4;7644:1;7637:15;7663:128;7703:3;7734:1;7730:6;7727:1;7724:13;7721:39;;;7740:18;;:::i;:::-;-1:-1:-1;7776:9:1;;7663:128::o;7796:408::-;7998:2;7980:21;;;8037:2;8017:18;;;8010:30;8076:34;8071:2;8056:18;;8049:62;-1:-1:-1;;;8142:2:1;8127:18;;8120:42;8194:3;8179:19;;7796:408::o;8472:414::-;8674:2;8656:21;;;8713:2;8693:18;;;8686:30;8752:34;8747:2;8732:18;;8725:62;-1:-1:-1;;;8818:2:1;8803:18;;8796:48;8876:3;8861:19;;8472:414::o;9311:422::-;9400:1;9443:5;9400:1;9457:270;9478:7;9468:8;9465:21;9457:270;;;9537:4;9533:1;9529:6;9525:17;9519:4;9516:27;9513:53;;;9546:18;;:::i;:::-;9596:7;9586:8;9582:22;9579:55;;;9616:16;;;;9579:55;9695:22;;;;9655:15;;;;9457:270;;;9461:3;9311:422;;;;;:::o;9738:806::-;9787:5;9817:8;9807:80;;-1:-1:-1;9858:1:1;9872:5;;9807:80;9906:4;9896:76;;-1:-1:-1;9943:1:1;9957:5;;9896:76;9988:4;10006:1;10001:59;;;;10074:1;10069:130;;;;9981:218;;10001:59;10031:1;10022:10;;10045:5;;;10069:130;10106:3;10096:8;10093:17;10090:43;;;10113:18;;:::i;:::-;-1:-1:-1;;10169:1:1;10155:16;;10184:5;;9981:218;;10283:2;10273:8;10270:16;10264:3;10258:4;10255:13;10251:36;10245:2;10235:8;10232:16;10227:2;10221:4;10218:12;10214:35;10211:77;10208:159;;;-1:-1:-1;10320:19:1;;;10352:5;;10208:159;10399:34;10424:8;10418:4;10399:34;:::i;:::-;10469:6;10465:1;10461:6;10457:19;10448:7;10445:32;10442:58;;;10480:18;;:::i;:::-;10518:20;;9738:806;-1:-1:-1;;;9738:806:1:o;10549:140::-;10607:5;10636:47;10677:4;10667:8;10663:19;10657:4;10636:47;:::i;10694:168::-;10734:7;10800:1;10796;10792:6;10788:14;10785:1;10782:21;10777:1;10770:9;10763:17;10759:45;10756:71;;;10807:18;;:::i;:::-;-1:-1:-1;10847:9:1;;10694:168::o;10867:217::-;10907:1;10933;10923:132;;10977:10;10972:3;10968:20;10965:1;10958:31;11012:4;11009:1;11002:15;11040:4;11037:1;11030:15;10923:132;-1:-1:-1;11069:9:1;;10867:217::o;11563:184::-;11633:6;11686:2;11674:9;11665:7;11661:23;11657:32;11654:52;;;11702:1;11699;11692:12;11654:52;-1:-1:-1;11725:16:1;;11563:184;-1:-1:-1;11563:184:1:o;12679:245::-;12746:6;12799:2;12787:9;12778:7;12774:23;12770:32;12767:52;;;12815:1;12812;12805:12;12767:52;12847:9;12841:16;12866:28;12888:5;12866:28;:::i;16579:251::-;16649:6;16702:2;16690:9;16681:7;16677:23;16673:32;16670:52;;;16718:1;16715;16708:12;16670:52;16750:9;16744:16;16769:31;16794:5;16769:31;:::i;17577:681::-;17708:6;17716;17724;17732;17740;17748;17756;17764;17817:3;17805:9;17796:7;17792:23;17788:33;17785:53;;;17834:1;17831;17824:12;17785:53;17866:9;17860:16;17885:31;17910:5;17885:31;:::i;:::-;17935:5;17925:15;;;17980:2;17969:9;17965:18;17959:25;17949:35;;18024:2;18013:9;18009:18;18003:25;17993:35;;18068:2;18057:9;18053:18;18047:25;18037:35;;18112:3;18101:9;18097:19;18091:26;18081:36;;18157:3;18146:9;18142:19;18136:26;18126:36;;18202:3;18191:9;18187:19;18181:26;18171:36;;18247:3;18236:9;18232:19;18226:26;18216:36;;17577:681;;;;;;;;;;;:::o;19860:125::-;19900:4;19928:1;19925;19922:8;19919:34;;;19933:18;;:::i;:::-;-1:-1:-1;19970:9:1;;19860:125::o;23077:401::-;23279:2;23261:21;;;23318:2;23298:18;;;23291:30;23357:34;23352:2;23337:18;;23330:62;-1:-1:-1;;;23423:2:1;23408:18;;23401:35;23468:3;23453:19;;23077:401::o;23483:399::-;23685:2;23667:21;;;23724:2;23704:18;;;23697:30;23763:34;23758:2;23743:18;;23736:62;-1:-1:-1;;;23829:2:1;23814:18;;23807:33;23872:3;23857:19;;23483:399::o;25775:306::-;25863:6;25871;25879;25932:2;25920:9;25911:7;25907:23;25903:32;25900:52;;;25948:1;25945;25938:12;25900:52;25977:9;25971:16;25961:26;;26027:2;26016:9;26012:18;26006:25;25996:35;;26071:2;26060:9;26056:18;26050:25;26040:35;;25775:306;;;;;:::o;27478:127::-;27539:10;27534:3;27530:20;27527:1;27520:31;27570:4;27567:1;27560:15;27594:4;27591:1;27584:15;27610:461;27663:3;27701:5;27695:12;27728:6;27723:3;27716:19;27754:4;27783:2;27778:3;27774:12;27767:19;;27820:2;27813:5;27809:14;27841:1;27851:195;27865:6;27862:1;27859:13;27851:195;;;27930:13;;-1:-1:-1;;;;;27926:39:1;27914:52;;27986:12;;;;28021:15;;;;27962:1;27880:9;27851:195;;;-1:-1:-1;28062:3:1;;27610:461;-1:-1:-1;;;;;27610:461:1:o;28076:582::-;28375:6;28364:9;28357:25;28418:6;28413:2;28402:9;28398:18;28391:34;28461:3;28456:2;28445:9;28441:18;28434:31;28338:4;28482:57;28534:3;28523:9;28519:19;28511:6;28482:57;:::i;:::-;-1:-1:-1;;;;;28575:32:1;;;;28570:2;28555:18;;28548:60;-1:-1:-1;28639:3:1;28624:19;28617:35;28474:65;28076:582;-1:-1:-1;;;28076:582:1:o;29283:518::-;29562:6;29551:9;29544:25;29605:3;29600:2;29589:9;29585:18;29578:31;29525:4;29626:57;29678:3;29667:9;29663:19;29655:6;29626:57;:::i;:::-;-1:-1:-1;;;;;29719:32:1;;;;29714:2;29699:18;;29692:60;-1:-1:-1;29783:2:1;29768:18;29761:34;29618:65;29283:518;-1:-1:-1;;29283:518:1:o

Swarm Source

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