Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- TinFoilSociety
- Optimization enabled
- false
- Compiler version
- v0.8.19+commit.7dd6d404
- EVM Version
- paris
- Verified at
- 2025-01-14T12:40:32.949482Z
Contract source code
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
/*
/*
████████╗██╗███╗ ██╗ ███████╗ ██████╗ ██╗██
╚══██╔══╝██║████╗ ██║ ██╔════╝██╔═══██╗██║██
██║ ██║██╔██╗ ██║ █████╗ ██║ ██║██║██║
██║ ██║██║╚██╗██║ ██╔══╝ ██║ ██║██║██║
██║ ██║██║ ╚████║ ██║ ╚██████╔╝██ ██████
╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝
█████ █████ █████ ██ ██████ ███████ ██ ██
██ ██ ██ ██ ██ ██ ██ ██ ██
█████ ██ ██ ██ ██ █████ ██ ██
██ ██ ██ ██ ██ ██ ██ ██
█████ █████ █████ ████ ██████ ██ ██
CONSPIRACY THEORY
*/
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) { return 0; }
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
}
/**
* Minimal ERC20 interface
*/
interface IERC20 {
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function getOwner() external view returns (address);
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
);
}
/*
==========================================================
===================== Auth Contract ==================
==========================================================
*/
abstract contract Auth {
address internal owner;
mapping (address => bool) internal authorizations;
constructor(address _owner) {
owner = _owner;
authorizations[_owner] = true;
}
modifier onlyOwner() {
require(isOwner(msg.sender), "!OWNER");
_;
}
modifier authorized() {
require(isAuthorized(msg.sender), "!AUTHORIZED");
_;
}
function authorize(address adr) public onlyOwner {
authorizations[adr] = true;
}
function unauthorize(address adr) public onlyOwner {
authorizations[adr] = false;
}
function isOwner(address account) public view returns (bool) {
return account == owner;
}
function isAuthorized(address adr) public view returns (bool) {
return authorizations[adr];
}
function transferOwnership(address payable adr) public onlyOwner {
owner = adr;
authorizations[adr] = true;
emit OwnershipTransferred(adr);
}
event OwnershipTransferred(address owner);
}
/*
==========================================================
======= DEX Factory / Router Interfaces (PulseChain) =====
==========================================================
*/
interface IDEXFactory {
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
interface IDEXRouter {
function factory() external pure returns (address);
function WPLS() 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 amountPLSMin,
address to,
uint deadline
) external payable
returns (uint amountToken, uint amountPLS, uint liquidity);
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;
}
/*
==========================================================
============= Dividend Distributor (SKOL Reflection) =====
==========================================================
SKOL REFLECTIONS
*/
interface IDividendDistributor {
function setDistributionCriteria(
uint256 _minPeriod,
uint256 _minDistribution
) external;
function setShare(address shareholder, uint256 amount) external;
function deposit() external payable;
function process(uint256 gas) external;
}
contract DividendDistributor is IDividendDistributor {
using SafeMath for uint256;
address _token;
// SKOL token address
IERC20 SKOL = IERC20(0x791367770E068208104fc1B5C1E15F3F5f4d143d);
address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
IDEXRouter router;
struct Share {
uint256 amount;
uint256 totalExcluded;
uint256 totalRealised;
}
mapping (address => Share) public shares;
address[] shareholders;
mapping (address => uint256) shareholderIndexes;
mapping (address => uint256) shareholderClaims;
uint256 public totalShares;
uint256 public totalDividends;
uint256 public totalDistributed;
uint256 public dividendsPerShare;
uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
uint256 public minPeriod = 1 * 60; // 1 minute
uint256 public minDistribution = 1 * 10**5; // 0.00001 SKOL ?
uint256 currentIndex;
bool initialized;
modifier initialization() {
require(!initialized, "Already initialized");
_;
initialized = true;
}
modifier onlyToken() {
require(msg.sender == _token, "Unauthorized");
_;
}
constructor (address _router) {
// default to your main router,
// or fallback if address(0) is given
router = _router != address(0)
? IDEXRouter(_router)
: IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
_token = msg.sender;
}
function setDistributionCriteria(
uint256 _minPeriod,
uint256 _minDistribution
) external override onlyToken {
minPeriod = _minPeriod;
minDistribution = _minDistribution;
}
function setShare(address shareholder, uint256 amount)
external
override
onlyToken
{
if(shares[shareholder].amount > 0){
distributeDividend(shareholder);
}
if(amount > 0 && shares[shareholder].amount == 0){
addShareholder(shareholder);
} else if(amount == 0 && shares[shareholder].amount > 0){
removeShareholder(shareholder);
}
totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
shares[shareholder].amount = amount;
shares[shareholder].totalExcluded =
getCumulativeDividends(shares[shareholder].amount);
}
// The contract calls deposit{value: amountPLSReflection}()
// and we swap PLS -> SKOL here
function deposit() external payable override onlyToken {
uint256 balanceBefore = SKOL.balanceOf(address(this));
address[] memory path = new address[](2);
path[0] = WPLS;
path[1] = address(SKOL);
router.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: msg.value
}(
0,
path,
address(this),
block.timestamp
);
uint256 amount = SKOL.balanceOf(address(this)).sub(balanceBefore);
totalDividends = totalDividends.add(amount);
dividendsPerShare = dividendsPerShare.add(
dividendsPerShareAccuracyFactor
.mul(amount)
.div(totalShares)
);
}
// Distribute dividends to some holders
function process(uint256 gas) external override onlyToken {
uint256 shareholderCount = shareholders.length;
if(shareholderCount == 0) { return; }
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
while(gasUsed < gas && iterations < shareholderCount) {
if(currentIndex >= shareholderCount){
currentIndex = 0;
}
if(shouldDistribute(shareholders[currentIndex])){
distributeDividend(shareholders[currentIndex]);
}
gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
gasLeft = gasleft();
currentIndex++;
iterations++;
}
}
// If enough time passed & enough pending
function shouldDistribute(address shareholder)
internal view
returns (bool)
{
return
shareholderClaims[shareholder] + minPeriod < block.timestamp
&& getUnpaidEarnings(shareholder) > minDistribution;
}
// Transfer SKOL
function distributeDividend(address shareholder) internal {
if(shares[shareholder].amount == 0){
return;
}
uint256 amount = getUnpaidEarnings(shareholder);
if(amount > 0){
totalDistributed = totalDistributed.add(amount);
SKOL.transfer(shareholder, amount);
shareholderClaims[shareholder] = block.timestamp;
shares[shareholder].totalRealised =
shares[shareholder].totalRealised.add(amount);
shares[shareholder].totalExcluded =
getCumulativeDividends(shares[shareholder].amount);
}
}
function getUnpaidEarnings(address shareholder)
public
view
returns (uint256)
{
if(shares[shareholder].amount == 0){
return 0;
}
uint256 shareholderTotalDividends = getCumulativeDividends(
shares[shareholder].amount
);
uint256 shareholderExcluded = shares[shareholder].totalExcluded;
if(shareholderTotalDividends <= shareholderExcluded){
return 0;
}
return shareholderTotalDividends.sub(shareholderExcluded);
}
function getCumulativeDividends(uint256 share)
internal
view
returns (uint256)
{
return share
.mul(dividendsPerShare)
.div(dividendsPerShareAccuracyFactor);
}
function addShareholder(address shareholder) internal {
shareholderIndexes[shareholder] = shareholders.length;
shareholders.push(shareholder);
}
function removeShareholder(address shareholder) internal {
shareholders[shareholderIndexes[shareholder]]
= shareholders[shareholders.length - 1];
shareholderIndexes[
shareholders[shareholders.length - 1]
] = shareholderIndexes[shareholder];
shareholders.pop();
}
}
/*
████████╗██╗███╗ ██╗ ███████╗ ██████╗ ██╗██
╚══██╔══╝██║████╗ ██║ ██╔════╝██╔═══██╗██║██
██║ ██║██╔██╗ ██║ █████╗ ██║ ██║██║██║
██║ ██║██║╚██╗██║ ██╔══╝ ██║ ██║██║██║
██║ ██║██║ ╚████║ ██║ ╚██████╔╝██ ██████
╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝
█████ █████ █████ ██ ██████ ███████ ██ ██
██ ██ ██ ██ ██ ██ ██ ██ ██
█████ ██ ██ ██ ██ █████ ██ ██
██ ██ ██ ██ ██ ██ ██ ██
█████ █████ █████ ████ ██████ ██ ██
the conspiracy
*/
contract TinFoilSociety is IERC20, Auth {
using SafeMath for uint256;
// Basic info
string constant _name = "TinFoilSociety";
string constant _symbol = "TIN";
uint8 constant _decimals = 18;
uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);
// Mapped balances/allowances
mapping (address => uint256) _balances;
mapping (address => mapping (address => uint256)) _allowances;
// Dex addresses for PulseChain
address public WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
address public DEAD = 0x000000000000000000000000000000000000dEaD;
address public ZERO = 0x0000000000000000000000000000000000000000;
// Exemptions
mapping (address => bool) isFeeExempt;
mapping (address => bool) isTxLimitExempt;
mapping (address => bool) isTimelockExempt;
mapping (address => bool) isDividendExempt;
// Fees => 1% Liquidity, 2% Reflection, 2% Dev => total 5%
uint256 public liquidityFee = 100; // 1% (out of denominator=10000)
uint256 public reflectionFee = 200; // 2%
uint256 public devFee = 200; // 2%
// We'll keep a large denominator for possible fine-tuning
uint256 public feeDenominator= 10000;
// We'll compute totalFee on the fly
function totalFee() public view returns(uint256) {
return liquidityFee.add(reflectionFee).add(devFee);
}
// Dev wallet
address public devWallet = 0x883cA68EfFB407AcF9c2BBcFA80AF1a82100e70f;
// Liquidity receiver
address public autoLiquidityReceiver;
// For liquidity
IDEXRouter public router;
address public pair;
// Another router/pair if needed
IDEXRouter public router2;
address public pair2;
// Dividend system
DividendDistributor public distributor;
uint256 distributorGas = 500000;
// Transaction limit
uint256 public _maxTxAmount = _totalSupply; // can be lowered if desired
// Swap settings
bool public swapEnabled = true;
uint256 public swapThreshold = 100_000_000; // 0.1 token (con decimals=9)
// Additional liquidity settings
uint256 public targetLiquidity = 25;
uint256 public targetLiquidityDenominator = 100;
// **Added variable to track trading status**
bool public tradingOpen = false;
bool inSwap;
modifier swapping() { inSwap = true; _; inSwap = false; }
constructor() Auth(msg.sender) {
router = IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
pair = IDEXFactory(router.factory()).createPair(WPLS, address(this));
_allowances[address(this)][address(router)] = type(uint256).max;
// optional second router if needed
router2 = IDEXRouter(0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02);
pair2 = IDEXFactory(router2.factory()).createPair(WPLS, address(this));
_allowances[address(this)][address(router2)] = type(uint256).max;
distributor = new DividendDistributor(address(router));
// Exempt the owner
isFeeExempt[msg.sender] = true;
isTxLimitExempt[msg.sender] = true;
// Timelock exempt
isTimelockExempt[msg.sender] = true;
isTimelockExempt[DEAD] = true;
isTimelockExempt[address(this)] = true;
// Dividend exempt for contract/pair/DEAD
isDividendExempt[pair] = true;
isDividendExempt[address(this)] = true;
isDividendExempt[DEAD] = true;
// By default, autoLiquidityReceiver is owner
autoLiquidityReceiver = msg.sender;
// Mint entire supply to owner
_balances[msg.sender] = _totalSupply;
emit Transfer(address(0), msg.sender, _totalSupply);
}
// **Function to open trading**
function openTrading() external onlyOwner {
tradingOpen = true;
}
// ------------------------------------------------------
// STANDARD ERC20-LIKE METHODS (pure to avoid warnings)
// ------------------------------------------------------
function name() public pure override returns (string memory) {
return _name;
}
function symbol() public pure override returns (string memory) {
return _symbol;
}
function decimals() public pure override returns (uint8) {
return _decimals;
}
// (Non standard, defined in the interface)
function getOwner() external view override returns (address) {
return owner;
}
// Basic ERC20 mechanics
function totalSupply() external view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function allowance(address holder, address spender)
external
view
override
returns (uint256)
{
return _allowances[holder][spender];
}
// Approve
function approve(address spender, uint256 amount)
public
override
returns (bool)
{
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function approveMax(address spender) external returns (bool) {
return approve(spender, type(uint256).max);
}
// Transfer
function transfer(address recipient, uint256 amount)
external
override
returns (bool)
{
return _transferFrom(msg.sender, recipient, amount);
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) external override returns (bool)
{
if(_allowances[sender][msg.sender] != type(uint256).max){
_allowances[sender][msg.sender] =
_allowances[sender][msg.sender].sub(
amount,
"Insufficient Allowance"
);
}
return _transferFrom(sender, recipient, amount);
}
// **Helper function to check if an address is a pair**
function isInPair(address addr) internal view returns (bool) {
return addr == pair || addr == pair2;
}
// Core transfer logic
function _transferFrom(
address sender,
address recipient,
uint256 amount
) internal returns (bool) {
// **Trading check**
if (!tradingOpen) {
require(
sender == owner || recipient == address(router) || sender == address(router),
"Trading is not enabled yet"
);
}
if(inSwap) {
return _basicTransfer(sender, recipient, amount);
}
// Check TX limit
checkTxLimit(sender, amount);
bool isPairTx = isInPair(sender) || isInPair(recipient) ||
sender == address(router) ||
recipient == address(router) ||
sender == address(router2) ||
recipient == address(router2);
uint256 amountReceived;
if(isPairTx) {
// If pair or router, handle fees & possible swap
if(shouldSwapBack()) {
swapBack();
}
_balances[sender] = _balances[sender].sub(
amount,
"Insufficient Balance"
);
amountReceived = shouldTakeFee(sender)
? takeFee(sender, amount)
: amount;
_balances[recipient] = _balances[recipient].add(amountReceived);
}
else {
// Normal wallet <-> wallet transfer
_balances[sender] = _balances[sender].sub(
amount,
"Insufficient Balance"
);
amountReceived = amount;
_balances[recipient] = _balances[recipient].add(amountReceived);
}
// Update shares for reflection
if(!isDividendExempt[sender]) {
try distributor.setShare(sender, _balances[sender]) {} catch {}
}
if(!isDividendExempt[recipient]) {
try distributor.setShare(recipient, _balances[recipient]) {} catch {}
}
// Reflection processing
try distributor.process(distributorGas) {} catch {}
emit Transfer(sender, recipient, amountReceived);
return true;
}
// Basic transfer without fees
function _basicTransfer(
address sender,
address recipient,
uint256 amount
) internal returns (bool) {
_balances[sender] = _balances[sender].sub(
amount,
"Insufficient Balance"
);
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
return true;
}
// TX limit
function checkTxLimit(address sender, uint256 amount) internal view {
require(
amount <= _maxTxAmount || isTxLimitExempt[sender],
"TX Limit Exceeded"
);
}
// Fee checks
function shouldTakeFee(address sender) internal view returns (bool) {
return !isFeeExempt[sender];
}
// Take fee => 1% liquidity + 2% reflection + 2% dev
function takeFee(address sender, uint256 amount) internal returns (uint256) {
uint256 feeAmount = amount.mul(totalFee()).div(feeDenominator);
// Dev portion from that fee
uint256 devPortion = feeAmount.mul(devFee).div(totalFee());
_balances[devWallet] = _balances[devWallet].add(devPortion);
emit Transfer(sender, devWallet, devPortion);
// The rest of fees => contract (for liquidity + reflection)
uint256 remainFees = feeAmount.sub(devPortion);
_balances[address(this)] = _balances[address(this)].add(remainFees);
emit Transfer(sender, address(this), remainFees);
return amount.sub(feeAmount);
}
// Swap logic
function shouldSwapBack() internal view returns (bool) {
return (
msg.sender != pair &&
!inSwap &&
swapEnabled &&
_balances[address(this)] >= swapThreshold
);
}
function swapBack() internal swapping {
uint256 liqFee = liquidityFee;
// If over liquified, set liqFee=0
if(isOverLiquified(targetLiquidity, targetLiquidityDenominator)){
liqFee = 0;
}
uint256 dynamicLiqFee = liqFee;
uint256 contractAmount = swapThreshold;
uint256 amountToLiquify = contractAmount
.mul(dynamicLiqFee)
.div(totalFee())
.div(2);
uint256 amountToSwap = contractAmount.sub(amountToLiquify);
// path: contract tokens -> WPLS
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WPLS;
uint256 balanceBefore = address(this).balance;
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
amountToSwap,
0,
path,
address(this),
block.timestamp
);
uint256 amtPLS = address(this).balance.sub(balanceBefore);
uint256 totFee = totalFee().sub(dynamicLiqFee.div(2));
uint256 amtPLS_Liq = amtPLS.mul(dynamicLiqFee).div(totFee).div(2);
uint256 amtPLS_Refl= amtPLS.mul(reflectionFee).div(totFee);
// Dev portion is already taken in `takeFee()`
// deposit reflection portion => calls deposit() in distributor
if(amtPLS_Refl > 0){
try distributor.deposit{value: amtPLS_Refl}() {} catch {}
}
// Add liquidity if needed
if(amountToLiquify > 0){
router.addLiquidityETH{value: amtPLS_Liq}(
address(this),
amountToLiquify,
0,
0,
autoLiquidityReceiver,
block.timestamp
);
emit AutoLiquify(amtPLS_Liq, amountToLiquify);
}
}
/*
============= Owner / Authorized Functions =============
*/
function setIsDividendExempt(address holder, bool exempt)
external
authorized
{
require(holder != address(this) && holder != pair, "Invalid holder");
isDividendExempt[holder] = exempt;
if(exempt){
distributor.setShare(holder, 0);
} else {
distributor.setShare(holder, _balances[holder]);
}
}
function setIsFeeExempt(address holder, bool exempt)
external
authorized
{
isFeeExempt[holder] = exempt;
}
function setIsTxLimitExempt(address holder, bool exempt)
external
authorized
{
isTxLimitExempt[holder] = exempt;
}
function setIsTimelockExempt(address holder, bool exempt)
external
authorized
{
isTimelockExempt[holder] = exempt;
}
// Adjust fees
function setFees(
uint256 _liquidityFee,
uint256 _reflectionFee,
uint256 _devFee
) external authorized {
liquidityFee = _liquidityFee;
reflectionFee = _reflectionFee;
devFee = _devFee;
// Hardcap: total fees <= 10%
require(
liquidityFee.add(reflectionFee).add(devFee) <= 1000,
"Total fees cannot exceed 10%"
);
}
// Set dev wallet
function setDevWallet(address _dev) external authorized {
devWallet = _dev;
}
// Set fee receivers (for liquidity, etc.)
function setFeeReceivers(address _autoLiquidityReceiver)
external
authorized
{
autoLiquidityReceiver = _autoLiquidityReceiver;
}
// Swap back settings
function setSwapBackSettings(bool _enabled, uint256 _amount)
external
authorized
{
swapEnabled = _enabled;
swapThreshold = _amount;
}
// Adjust target liquidity
function setTargetLiquidity(uint256 _target, uint256 _denominator)
external
authorized
{
targetLiquidity = _target;
targetLiquidityDenominator = _denominator;
}
// Distribution criteria
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution)
external
authorized
{
distributor.setDistributionCriteria(_minPeriod, _minDistribution);
}
// Distributor gas
function setDistributorSettings(uint256 gas) external authorized {
require(gas < 750000, "Gas too high");
distributorGas = gas;
}
// Tx limit
function setTxLimit(uint256 amount) external authorized {
_maxTxAmount = amount;
}
// Clear stuck PLS from contract
function clearStuckBalance(uint256 amountPercentage) external authorized {
uint256 amtPLS = address(this).balance;
payable(devWallet).transfer(
amtPLS.mul(amountPercentage).div(100)
);
}
// Circulating supply
function getCirculatingSupply() public view returns (uint256) {
return _totalSupply
.sub(balanceOf(DEAD))
.sub(balanceOf(ZERO));
}
// Liquidity checks
function getLiquidityBacking(uint256 accuracy)
public
view
returns (uint256)
{
return accuracy.mul(
balanceOf(pair).mul(2)
).div(getCirculatingSupply());
}
function isOverLiquified(uint256 target, uint256 accuracy)
public
view
returns (bool)
{
return getLiquidityBacking(accuracy) > target;
}
// Fallback to receive PLS
receive() external payable {}
event AutoLiquify(uint256 amountPLS, uint256 amountToken);
}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AutoLiquify","inputs":[{"type":"uint256","name":"amountPLS","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountToken","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"DEAD","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"WPLS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ZERO","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveMax","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"authorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"autoLiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance","inputs":[{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"devFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract DividendDistributor"}],"name":"distributor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"feeDenominator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLiquidityBacking","inputs":[{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAuthorized","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOverLiquified","inputs":[{"type":"uint256","name":"target","internalType":"uint256"},{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"liquidityFee","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"openTrading","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair2","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"reflectionFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router2","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDevWallet","inputs":[{"type":"address","name":"_dev","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionCriteria","inputs":[{"type":"uint256","name":"_minPeriod","internalType":"uint256"},{"type":"uint256","name":"_minDistribution","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributorSettings","inputs":[{"type":"uint256","name":"gas","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceivers","inputs":[{"type":"address","name":"_autoLiquidityReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_reflectionFee","internalType":"uint256"},{"type":"uint256","name":"_devFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsDividendExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsFeeExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTimelockExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTxLimitExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTargetLiquidity","inputs":[{"type":"uint256","name":"_target","internalType":"uint256"},{"type":"uint256","name":"_denominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTxLimit","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"targetLiquidity","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"targetLiquidityDenominator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingOpen","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"adr","internalType":"address payable"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unauthorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x60806040526012600a62000014919062000de8565b633b9aca0062000025919062000e39565b60025573a1077a294dde1b09bb078844df40758a5d0f9a27600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064600c5560c8600d5560c8600e55612710600f5573883ca68effb407acf9c2bbcfa80af1a82100e70f601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506207a1206017556002546018556001601960006101000a81548160ff0219169083151502179055506305f5e100601a556019601b556064601c556000601d60006101000a81548160ff021916908315150217905550348015620001ce57600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505073165c3410fc91ef562c50559f7d2289febed552d9601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000351919062000eee565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401620003af92919062000f31565b6020604051808303816000875af1158015620003cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f5919062000eee565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005e1919062000eee565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200063f92919062000f31565b6020604051808303816000875af11580156200065f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000685919062000eee565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620007b99062000c40565b620007c5919062000f5e565b604051809103906000f080158015620007e2573d6000803e3d6000fd5b50601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600254600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60025460405162000c32919062000f8c565b60405180910390a362000fa9565b6120e5806200577883390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cdc5780860481111562000cb45762000cb362000c4e565b5b600185161562000cc45780820291505b808102905062000cd48562000c7d565b945062000c94565b94509492505050565b60008262000cf7576001905062000dca565b8162000d07576000905062000dca565b816001811462000d20576002811462000d2b5762000d61565b600191505062000dca565b60ff84111562000d405762000d3f62000c4e565b5b8360020a91508482111562000d5a5762000d5962000c4e565b5b5062000dca565b5060208310610133831016604e8410600b841016171562000d9b5782820a90508381111562000d955762000d9462000c4e565b5b62000dca565b62000daa848484600162000c8a565b9250905081840481111562000dc45762000dc362000c4e565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000df58262000dd1565b915062000e028362000ddb565b925062000e317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ce5565b905092915050565b600062000e468262000dd1565b915062000e538362000dd1565b925082820262000e638162000dd1565b9150828204841483151762000e7d5762000e7c62000c4e565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000eb68262000e89565b9050919050565b62000ec88162000ea9565b811462000ed457600080fd5b50565b60008151905062000ee88162000ebd565b92915050565b60006020828403121562000f075762000f0662000e84565b5b600062000f178482850162000ed7565b91505092915050565b62000f2b8162000ea9565b82525050565b600060408201905062000f48600083018562000f20565b62000f57602083018462000f20565b9392505050565b600060208201905062000f75600083018462000f20565b92915050565b62000f868162000dd1565b82525050565b600060208201905062000fa3600083018462000f7b565b92915050565b6147bf8062000fb96000396000f3fe6080604052600436106103395760003560e01c806383ad7994116101ab578063ca33e64c116100f7578063f0b37c0411610095578063f84ba65d1161006f578063f84ba65d14610c1b578063f887ea4014610c44578063fe9fbb8014610c6f578063ffb54a9914610cac57610340565b8063f0b37c0414610ba0578063f2fde38b14610bc9578063f708a64f14610bf257610340565b8063dd62ed3e116100d1578063dd62ed3e14610ae6578063df20fd4914610b23578063e01bb68814610b4c578063ef8ef56f14610b7557610340565b8063ca33e64c14610a55578063cec10c1114610a80578063d51ed1c814610aa957610340565b806398118cb411610164578063a9059cbb1161013e578063a9059cbb146109ad578063b6a5d7de146109ea578063bfe1092814610a13578063c9567bf914610a3e57610340565b806398118cb41461092e5780639d1944f514610959578063a8aa1b311461098257610340565b806383ad79941461082c578063893d20e8146108575780638ab6ffc7146108825780638ea5220f146108ad57806392258ec8146108d857806395d89b411461090357610340565b80632d48e89611610285578063658d4b7f1161022357806370a08231116101fd57806370a082311461076e578063762816d6146107ab578063763014c7146107d65780637d1db4a51461080157610340565b8063658d4b7f146106ef5780636827e764146107185780636ddd17131461074357610340565b806350db71fb1161025f57806350db71fb14610635578063571ac8b01461065e57806358fa63ca1461069b5780635c85974f146106c657610340565b80632d48e896146105a45780632f54bf6e146105cd578063313ce5671461060a57610340565b806318160ddd116102f25780631f53ac02116102cc5780631f53ac02146104ea578063201e79911461051357806323b872dd1461053c5780632b112e491461057957610340565b806318160ddd1461046b5780631da1db5e146104965780631df4ccfc146104bf57610340565b806303fd2a45146103455780630445b6671461037057806306fdde031461039b578063095ea7b3146103c65780631161ae3914610403578063180b0d7e1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cd7565b60405161036791906139d5565b60405180910390f35b34801561037c57600080fd5b50610385610cfd565b6040516103929190613a09565b60405180910390f35b3480156103a757600080fd5b506103b0610d03565b6040516103bd9190613ab4565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e89190613b33565b610d40565b6040516103fa9190613b8e565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190613ba9565b610e32565b6040516104379190613b8e565b60405180910390f35b34801561044c57600080fd5b50610455610e47565b6040516104629190613a09565b60405180910390f35b34801561047757600080fd5b50610480610e4d565b60405161048d9190613a09565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613be9565b610e57565b005b3480156104cb57600080fd5b506104d4610f36565b6040516104e19190613a09565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613c16565b610f68565b005b34801561051f57600080fd5b5061053a60048036038101906105359190613ba9565b610ff4565b005b34801561054857600080fd5b50610563600480360381019061055e9190613c43565b61104e565b6040516105709190613b8e565b60405180910390f35b34801561058557600080fd5b5061058e61124e565b60405161059b9190613a09565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613ba9565b6112d0565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190613c16565b6113ab565b6040516106019190613b8e565b60405180910390f35b34801561061657600080fd5b5061061f611404565b60405161062c9190613cb2565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190613cf9565b61140d565b005b34801561066a57600080fd5b5061068560048036038101906106809190613c16565b6114b0565b6040516106929190613b8e565b60405180910390f35b3480156106a757600080fd5b506106b06114e3565b6040516106bd91906139d5565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190613be9565b611509565b005b3480156106fb57600080fd5b5061071660048036038101906107119190613cf9565b61155b565b005b34801561072457600080fd5b5061072d6115fe565b60405161073a9190613a09565b60405180910390f35b34801561074f57600080fd5b50610758611604565b6040516107659190613b8e565b60405180910390f35b34801561077a57600080fd5b5061079560048036038101906107909190613c16565b611617565b6040516107a29190613a09565b60405180910390f35b3480156107b757600080fd5b506107c0611660565b6040516107cd9190613d98565b60405180910390f35b3480156107e257600080fd5b506107eb611686565b6040516107f891906139d5565b60405180910390f35b34801561080d57600080fd5b506108166116ac565b6040516108239190613a09565b60405180910390f35b34801561083857600080fd5b506108416116b2565b60405161084e9190613a09565b60405180910390f35b34801561086357600080fd5b5061086c6116b8565b60405161087991906139d5565b60405180910390f35b34801561088e57600080fd5b506108976116e1565b6040516108a49190613a09565b60405180910390f35b3480156108b957600080fd5b506108c26116e7565b6040516108cf91906139d5565b60405180910390f35b3480156108e457600080fd5b506108ed61170d565b6040516108fa9190613a09565b60405180910390f35b34801561090f57600080fd5b50610918611713565b6040516109259190613ab4565b60405180910390f35b34801561093a57600080fd5b50610943611750565b6040516109509190613a09565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b9190613be9565b611756565b005b34801561098e57600080fd5b506109976117ed565b6040516109a491906139d5565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190613b33565b611813565b6040516109e19190613b8e565b60405180910390f35b3480156109f657600080fd5b50610a116004803603810190610a0c9190613c16565b611828565b005b348015610a1f57600080fd5b50610a286118ca565b604051610a359190613dd4565b60405180910390f35b348015610a4a57600080fd5b50610a536118f0565b005b348015610a6157600080fd5b50610a6a611955565b604051610a7791906139d5565b60405180910390f35b348015610a8c57600080fd5b50610aa76004803603810190610aa29190613def565b61197b565b005b348015610ab557600080fd5b50610ad06004803603810190610acb9190613be9565b611a4c565b604051610add9190613a09565b60405180910390f35b348015610af257600080fd5b50610b0d6004803603810190610b089190613e42565b611abe565b604051610b1a9190613a09565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b459190613e82565b611b45565b005b348015610b5857600080fd5b50610b736004803603810190610b6e9190613c16565b611bb2565b005b348015610b8157600080fd5b50610b8a611c3e565b604051610b9791906139d5565b60405180910390f35b348015610bac57600080fd5b50610bc76004803603810190610bc29190613c16565b611c64565b005b348015610bd557600080fd5b50610bf06004803603810190610beb9190613f00565b611d07565b005b348015610bfe57600080fd5b50610c196004803603810190610c149190613cf9565b611e20565b005b348015610c2757600080fd5b50610c426004803603810190610c3d9190613cf9565b6120f6565b005b348015610c5057600080fd5b50610c59612199565b604051610c669190613d98565b60405180910390f35b348015610c7b57600080fd5b50610c966004803603810190610c919190613c16565b6121bf565b604051610ca39190613b8e565b60405180910390f35b348015610cb857600080fd5b50610cc1612215565b604051610cce9190613b8e565b60405180910390f35b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b60606040518060400160405280600e81526020017f54696e466f696c536f6369657479000000000000000000000000000000000000815250905090565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e209190613a09565b60405180910390a36001905092915050565b600082610e3e83611a4c565b11905092915050565b600f5481565b6000600254905090565b610e60336121bf565b610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9690613f79565b60405180910390fd5b6000479050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc610f066064610ef8868661222890919063ffffffff16565b6122a290919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610f31573d6000803e3d6000fd5b505050565b6000610f63600e54610f55600d54600c546122ec90919063ffffffff16565b6122ec90919063ffffffff16565b905090565b610f71336121bf565b610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790613f79565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ffd336121bf565b61103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390613f79565b60405180910390fd5b81601b8190555080601c819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461123a576111b9826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234a9092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6112458484846123ae565b90509392505050565b60006112cb61127e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611617565b6112bd6112ac600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611617565b600254612cea90919063ffffffff16565b612cea90919063ffffffff16565b905090565b6112d9336121bf565b611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90613f79565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611375929190613f99565b600060405180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b611416336121bf565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90613f79565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006114dc827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610d40565b9050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611512336121bf565b611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154890613f79565b60405180910390fd5b8060188190555050565b611564336121bf565b6115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613f79565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b601960009054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601c5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b60606040518060400160405280600381526020017f54494e0000000000000000000000000000000000000000000000000000000000815250905090565b600c5481565b61175f336121bf565b61179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590613f79565b60405180910390fd5b620b71b081106117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da9061400e565b60405180910390fd5b8060178190555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118203384846123ae565b905092915050565b611831336113ab565b611870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118679061407a565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118f9336113ab565b611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f9061407a565b60405180910390fd5b6001601d60006101000a81548160ff021916908315150217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611984336121bf565b6119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba90613f79565b60405180910390fd5b82600c8190555081600d8190555080600e819055506103e8611a06600e546119f8600d54600c546122ec90919063ffffffff16565b6122ec90919063ffffffff16565b1115611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e906140e6565b60405180910390fd5b505050565b6000611ab7611a5961124e565b611aa9611a9a6002611a8c601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611617565b61222890919063ffffffff16565b8561222890919063ffffffff16565b6122a290919063ffffffff16565b9050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b4e336121bf565b611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490613f79565b60405180910390fd5b81601960006101000a81548160ff02191690831515021790555080601a819055505050565b611bbb336121bf565b611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190613f79565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c6d336113ab565b611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca39061407a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d10336113ab565b611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d469061407a565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611e159190614127565b60405180910390a150565b611e29336121bf565b611e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90613f79565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611ef25750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f289061418e565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561202357601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611fec9291906141e9565b600060405180830381600087803b15801561200657600080fd5b505af115801561201a573d6000803e3d6000fd5b505050506120f2565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016120bf929190614212565b600060405180830381600087803b1580156120d957600080fd5b505af11580156120ed573d6000803e3d6000fd5b505050505b5050565b6120ff336121bf565b61213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613f79565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60009054906101000a900460ff1681565b600080830361223a576000905061229c565b60008284612248919061426a565b905082848261225791906142db565b14612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e9061437e565b60405180910390fd5b809150505b92915050565b60006122e483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d34565b905092915050565b60008082846122fb919061439e565b905083811015612340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123379061441e565b60405180910390fd5b8091505092915050565b6000838311158290612392576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123899190613ab4565b60405180910390fd5b50600083856123a1919061443e565b9050809150509392505050565b6000601d60009054906101000a900460ff166125035760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061246b5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806124c35750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f9906144be565b60405180910390fd5b5b601d60019054906101000a900460ff161561252a57612523848484612d97565b9050612ce3565b6125348483612f6a565b600061253f85613007565b8061254f575061254e84613007565b5b806125a75750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806125ff5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806126575750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806126af5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b905060008115612855576126c16130b9565b156126cf576126ce613190565b5b612758846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234a9092919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127a486613649565b6127ae57836127b9565b6127b886856136a0565b5b905061280d81600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ec90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129ba565b6128de846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234a9092919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083905061297681600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ec90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ad457601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612aa7929190614212565b600060405180830381600087803b158015612ac157600080fd5b505af1925050508015612ad2575060015b505b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bee57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612bc1929190614212565b600060405180830381600087803b158015612bdb57600080fd5b505af1925050508015612bec575060015b505b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796017546040518263ffffffff1660e01b8152600401612c4b9190613a09565b600060405180830381600087803b158015612c6557600080fd5b505af1925050508015612c76575060015b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cd49190613a09565b60405180910390a36001925050505b9392505050565b6000612d2c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061234a565b905092915050565b60008083118290612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d729190613ab4565b60405180910390fd5b5060008385612d8a91906142db565b9050809150509392505050565b6000612e22826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234a9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eb782600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ec90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f579190613a09565b60405180910390a3600190509392505050565b60185481111580612fc45750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffa9061452a565b60405180910390fd5b5050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806130b25750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156131265750601d60019054906101000a900460ff16155b801561313e5750601960009054906101000a900460ff165b801561318b5750601a54600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601d60016101000a81548160ff0219169083151502179055506000600c5490506131c0601b54601c54610e32565b156131ca57600090505b60008190506000601a549050600061321760026132096131e8610f36565b6131fb878761222890919063ffffffff16565b6122a290919063ffffffff16565b6122a290919063ffffffff16565b9050600061322e8284612cea90919063ffffffff16565b90506000600267ffffffffffffffff81111561324d5761324c61454a565b5b60405190808252806020026020018201604052801561327b5781602001602082028036833780820191505090505b509050308160008151811061329357613292614579565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061330457613303614579565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016133a7959493929190614666565b600060405180830381600087803b1580156133c157600080fd5b505af11580156133d5573d6000803e3d6000fd5b5050505060006133ee8247612cea90919063ffffffff16565b9050600061341f61340960028a6122a290919063ffffffff16565b613411610f36565b612cea90919063ffffffff16565b9050600061345b600261344d8461343f8d8861222890919063ffffffff16565b6122a290919063ffffffff16565b6122a290919063ffffffff16565b9050600061348683613478600d548761222890919063ffffffff16565b6122a290919063ffffffff16565b9050600081111561350f57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156134fb57600080fd5b505af19350505050801561350d575060015b505b600088111561362157601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016135a1969594939291906146c0565b60606040518083038185885af11580156135bf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135e49190614736565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068289604051613618929190613f99565b60405180910390a15b50505050505050505050506000601d60016101000a81548160ff021916908315150217905550565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000806136d1600f546136c36136b4610f36565b8661222890919063ffffffff16565b6122a290919063ffffffff16565b905060006137036136e0610f36565b6136f5600e548561222890919063ffffffff16565b6122a290919063ffffffff16565b90506137798160036000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ec90919063ffffffff16565b60036000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161385d9190613a09565b60405180910390a3600061387a8284612cea90919063ffffffff16565b90506138ce81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ec90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161396e9190613a09565b60405180910390a36139898386612cea90919063ffffffff16565b935050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139bf82613994565b9050919050565b6139cf816139b4565b82525050565b60006020820190506139ea60008301846139c6565b92915050565b6000819050919050565b613a03816139f0565b82525050565b6000602082019050613a1e60008301846139fa565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a5e578082015181840152602081019050613a43565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a8682613a24565b613a908185613a2f565b9350613aa0818560208601613a40565b613aa981613a6a565b840191505092915050565b60006020820190508181036000830152613ace8184613a7b565b905092915050565b600080fd5b613ae4816139b4565b8114613aef57600080fd5b50565b600081359050613b0181613adb565b92915050565b613b10816139f0565b8114613b1b57600080fd5b50565b600081359050613b2d81613b07565b92915050565b60008060408385031215613b4a57613b49613ad6565b5b6000613b5885828601613af2565b9250506020613b6985828601613b1e565b9150509250929050565b60008115159050919050565b613b8881613b73565b82525050565b6000602082019050613ba36000830184613b7f565b92915050565b60008060408385031215613bc057613bbf613ad6565b5b6000613bce85828601613b1e565b9250506020613bdf85828601613b1e565b9150509250929050565b600060208284031215613bff57613bfe613ad6565b5b6000613c0d84828501613b1e565b91505092915050565b600060208284031215613c2c57613c2b613ad6565b5b6000613c3a84828501613af2565b91505092915050565b600080600060608486031215613c5c57613c5b613ad6565b5b6000613c6a86828701613af2565b9350506020613c7b86828701613af2565b9250506040613c8c86828701613b1e565b9150509250925092565b600060ff82169050919050565b613cac81613c96565b82525050565b6000602082019050613cc76000830184613ca3565b92915050565b613cd681613b73565b8114613ce157600080fd5b50565b600081359050613cf381613ccd565b92915050565b60008060408385031215613d1057613d0f613ad6565b5b6000613d1e85828601613af2565b9250506020613d2f85828601613ce4565b9150509250929050565b6000819050919050565b6000613d5e613d59613d5484613994565b613d39565b613994565b9050919050565b6000613d7082613d43565b9050919050565b6000613d8282613d65565b9050919050565b613d9281613d77565b82525050565b6000602082019050613dad6000830184613d89565b92915050565b6000613dbe82613d65565b9050919050565b613dce81613db3565b82525050565b6000602082019050613de96000830184613dc5565b92915050565b600080600060608486031215613e0857613e07613ad6565b5b6000613e1686828701613b1e565b9350506020613e2786828701613b1e565b9250506040613e3886828701613b1e565b9150509250925092565b60008060408385031215613e5957613e58613ad6565b5b6000613e6785828601613af2565b9250506020613e7885828601613af2565b9150509250929050565b60008060408385031215613e9957613e98613ad6565b5b6000613ea785828601613ce4565b9250506020613eb885828601613b1e565b9150509250929050565b6000613ecd82613994565b9050919050565b613edd81613ec2565b8114613ee857600080fd5b50565b600081359050613efa81613ed4565b92915050565b600060208284031215613f1657613f15613ad6565b5b6000613f2484828501613eeb565b91505092915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613f63600b83613a2f565b9150613f6e82613f2d565b602082019050919050565b60006020820190508181036000830152613f9281613f56565b9050919050565b6000604082019050613fae60008301856139fa565b613fbb60208301846139fa565b9392505050565b7f47617320746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613ff8600c83613a2f565b915061400382613fc2565b602082019050919050565b6000602082019050818103600083015261402781613feb565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614064600683613a2f565b915061406f8261402e565b602082019050919050565b6000602082019050818103600083015261409381614057565b9050919050565b7f546f74616c20666565732063616e6e6f74206578636565642031302500000000600082015250565b60006140d0601c83613a2f565b91506140db8261409a565b602082019050919050565b600060208201905081810360008301526140ff816140c3565b9050919050565b600061411182613d65565b9050919050565b61412181614106565b82525050565b600060208201905061413c6000830184614118565b92915050565b7f496e76616c696420686f6c646572000000000000000000000000000000000000600082015250565b6000614178600e83613a2f565b915061418382614142565b602082019050919050565b600060208201905081810360008301526141a78161416b565b9050919050565b6000819050919050565b60006141d36141ce6141c9846141ae565b613d39565b6139f0565b9050919050565b6141e3816141b8565b82525050565b60006040820190506141fe60008301856139c6565b61420b60208301846141da565b9392505050565b600060408201905061422760008301856139c6565b61423460208301846139fa565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614275826139f0565b9150614280836139f0565b925082820261428e816139f0565b915082820484148315176142a5576142a461423b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142e6826139f0565b91506142f1836139f0565b925082614301576143006142ac565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614368602183613a2f565b91506143738261430c565b604082019050919050565b600060208201905081810360008301526143978161435b565b9050919050565b60006143a9826139f0565b91506143b4836139f0565b92508282019050808211156143cc576143cb61423b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614408601b83613a2f565b9150614413826143d2565b602082019050919050565b60006020820190508181036000830152614437816143fb565b9050919050565b6000614449826139f0565b9150614454836139f0565b925082820390508181111561446c5761446b61423b565b5b92915050565b7f54726164696e67206973206e6f7420656e61626c656420796574000000000000600082015250565b60006144a8601a83613a2f565b91506144b382614472565b602082019050919050565b600060208201905081810360008301526144d78161449b565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614514601183613a2f565b915061451f826144de565b602082019050919050565b6000602082019050818103600083015261454381614507565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145dd816139b4565b82525050565b60006145ef83836145d4565b60208301905092915050565b6000602082019050919050565b6000614613826145a8565b61461d81856145b3565b9350614628836145c4565b8060005b8381101561465957815161464088826145e3565b975061464b836145fb565b92505060018101905061462c565b5085935050505092915050565b600060a08201905061467b60008301886139fa565b61468860208301876141da565b818103604083015261469a8186614608565b90506146a960608301856139c6565b6146b660808301846139fa565b9695505050505050565b600060c0820190506146d560008301896139c6565b6146e260208301886139fa565b6146ef60408301876141da565b6146fc60608301866141da565b61470960808301856139c6565b61471660a08301846139fa565b979650505050505050565b60008151905061473081613b07565b92915050565b60008060006060848603121561474f5761474e613ad6565b5b600061475d86828701614721565b935050602061476e86828701614721565b925050604061477f86828701614721565b915050925092509256fea26469706673582212200722644fc233c9b1fb936e09a736c9cbd6dd653ea3274615679aa93669c558e364736f6c63430008130033608060405273791367770e068208104fc1b5c1e15f3f5f4d143d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a1077a294dde1b09bb078844df40758a5d0f9a27600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55603c600d55620186a0600e55348015620000da57600080fd5b50604051620020e5380380620020e5833981810160405281019062000100919062000243565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001505773165c3410fc91ef562c50559f7d2289febed552d962000152565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000275565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020b82620001de565b9050919050565b6200021d81620001fe565b81146200022957600080fd5b50565b6000815190506200023d8162000212565b92915050565b6000602082840312156200025c576200025b620001d9565b5b60006200026c848285016200022c565b91505092915050565b611e6080620002856000396000f3fe6080604052600436106100c25760003560e01c8063997664d71161007f578063e2d2e21911610059578063e2d2e2191461024b578063efca2eed14610276578063ffb2c479146102a1578063ffd49c84146102ca576100c2565b8063997664d7146101d7578063ce7c2ac214610202578063d0e30db014610241576100c2565b806311ce023d146100c757806314b6ca96146100f257806328fd31981461011b5780632d48e896146101585780633a98ef39146101815780634fab0ae8146101ac575b600080fd5b3480156100d357600080fd5b506100dc6102f5565b6040516100e991906115fc565b60405180910390f35b3480156100fe57600080fd5b50610119600480360381019061011491906116a6565b6102fb565b005b34801561012757600080fd5b50610142600480360381019061013d91906116e6565b6105f0565b60405161014f91906115fc565b60405180910390f35b34801561016457600080fd5b5061017f600480360381019061017a9190611713565b610709565b005b34801561018d57600080fd5b506101966107a9565b6040516101a391906115fc565b60405180910390f35b3480156101b857600080fd5b506101c16107af565b6040516101ce91906115fc565b60405180910390f35b3480156101e357600080fd5b506101ec6107b5565b6040516101f991906115fc565b60405180910390f35b34801561020e57600080fd5b50610229600480360381019061022491906116e6565b6107bb565b60405161023893929190611753565b60405180910390f35b6102496107e5565b005b34801561025757600080fd5b50610260610bed565b60405161026d91906115fc565b60405180910390f35b34801561028257600080fd5b5061028b610bf3565b60405161029891906115fc565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c3919061178a565b610bf9565b005b3480156102d657600080fd5b506102df610dc2565b6040516102ec91906115fc565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038090611814565b60405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103de576103dd82610dc8565b5b60008111801561043057506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104435761043e8261105b565b6104a5565b60008114801561049557506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a4576104a38261110a565b5b5b61050e81610500600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461131190919063ffffffff16565b61135b90919063ffffffff16565b60088190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a6600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113b9565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036106445760009050610704565b6000610691600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113b9565b90506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106ec57600092505050610704565b6106ff818361131190919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078e90611814565b60405180910390fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60046020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90611814565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108d09190611843565b602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109119190611873565b90506000600267ffffffffffffffff8111156109305761092f6118a0565b5b60405190808252806020026020018201604052801561095e5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610998576109976118cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610a0957610a086118cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610aa69493929190611a01565b6000604051808303818588803b158015610abf57600080fd5b505af1158015610ad3573d6000803e3d6000fd5b50505050506000610b8883600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b399190611843565b602060405180830381865afa158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a9190611873565b61131190919063ffffffff16565b9050610b9f8160095461135b90919063ffffffff16565b600981905550610be2610bd1600854610bc384600c546113eb90919063ffffffff16565b61146590919063ffffffff16565b600b5461135b90919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90611814565b60405180910390fd5b6000600580549050905060008103610c9f5750610dbf565b6000805a905060005b8483108015610cb657508381105b15610dba5783600f5410610ccd576000600f819055505b610d166005600f5481548110610ce657610ce56118cf565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114af565b15610d6557610d646005600f5481548110610d3457610d336118cf565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610dc8565b5b610d8a610d7b5a8461131190919063ffffffff16565b8461135b90919063ffffffff16565b92505a9150600f6000815480929190610da290611a7c565b91905055508080610db290611a7c565b915050610ca8565b505050505b50565b600d5481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315611058576000610e1e826105f0565b9050600081111561105657610e3e81600a5461135b90919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610ea1929190611ac4565b6020604051808303816000875af1158015610ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee49190611b25565b5042600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f7e81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461135b90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061100f600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113b9565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600580549050600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6005600160058054905061111e9190611b52565b8154811061112f5761112e6118cf565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106111ad576111ac6118cf565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660006005600160058054905061124d9190611b52565b8154811061125e5761125d6118cf565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060058054806112d9576112d8611b86565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061135383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061151c565b905092915050565b600080828461136a9190611bb5565b9050838110156113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690611c35565b60405180910390fd5b8091505092915050565b60006113e4600c546113d6600b54856113eb90919063ffffffff16565b61146590919063ffffffff16565b9050919050565b60008083036113fd576000905061145f565b6000828461140b9190611c55565b905082848261141a9190611cc6565b1461145a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145190611d69565b60405180910390fd5b809150505b92915050565b60006114a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611580565b905092915050565b600042600d54600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114ff9190611bb5565b1080156115155750600e54611513836105f0565b115b9050919050565b6000838311158290611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b9190611e08565b60405180910390fd5b50600083856115739190611b52565b9050809150509392505050565b600080831182906115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be9190611e08565b60405180910390fd5b50600083856115d69190611cc6565b9050809150509392505050565b6000819050919050565b6115f6816115e3565b82525050565b600060208201905061161160008301846115ed565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116478261161c565b9050919050565b6116578161163c565b811461166257600080fd5b50565b6000813590506116748161164e565b92915050565b611683816115e3565b811461168e57600080fd5b50565b6000813590506116a08161167a565b92915050565b600080604083850312156116bd576116bc611617565b5b60006116cb85828601611665565b92505060206116dc85828601611691565b9150509250929050565b6000602082840312156116fc576116fb611617565b5b600061170a84828501611665565b91505092915050565b6000806040838503121561172a57611729611617565b5b600061173885828601611691565b925050602061174985828601611691565b9150509250929050565b600060608201905061176860008301866115ed565b61177560208301856115ed565b61178260408301846115ed565b949350505050565b6000602082840312156117a05761179f611617565b5b60006117ae84828501611691565b91505092915050565b600082825260208201905092915050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b60006117fe600c836117b7565b9150611809826117c8565b602082019050919050565b6000602082019050818103600083015261182d816117f1565b9050919050565b61183d8161163c565b82525050565b60006020820190506118586000830184611834565b92915050565b60008151905061186d8161167a565b92915050565b60006020828403121561188957611888611617565b5b60006118978482850161185e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061192d611928611923846118fe565b611908565b6115e3565b9050919050565b61193d81611912565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6119788161163c565b82525050565b600061198a838361196f565b60208301905092915050565b6000602082019050919050565b60006119ae82611943565b6119b8818561194e565b93506119c38361195f565b8060005b838110156119f45781516119db888261197e565b97506119e683611996565b9250506001810190506119c7565b5085935050505092915050565b6000608082019050611a166000830187611934565b8181036020830152611a2881866119a3565b9050611a376040830185611834565b611a4460608301846115ed565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a87826115e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab957611ab8611a4d565b5b600182019050919050565b6000604082019050611ad96000830185611834565b611ae660208301846115ed565b9392505050565b60008115159050919050565b611b0281611aed565b8114611b0d57600080fd5b50565b600081519050611b1f81611af9565b92915050565b600060208284031215611b3b57611b3a611617565b5b6000611b4984828501611b10565b91505092915050565b6000611b5d826115e3565b9150611b68836115e3565b9250828203905081811115611b8057611b7f611a4d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611bc0826115e3565b9150611bcb836115e3565b9250828201905080821115611be357611be2611a4d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611c1f601b836117b7565b9150611c2a82611be9565b602082019050919050565b60006020820190508181036000830152611c4e81611c12565b9050919050565b6000611c60826115e3565b9150611c6b836115e3565b9250828202611c79816115e3565b91508282048414831517611c9057611c8f611a4d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611cd1826115e3565b9150611cdc836115e3565b925082611cec57611ceb611c97565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611d536021836117b7565b9150611d5e82611cf7565b604082019050919050565b60006020820190508181036000830152611d8281611d46565b9050919050565b600081519050919050565b60005b83811015611db2578082015181840152602081019050611d97565b60008484015250505050565b6000601f19601f8301169050919050565b6000611dda82611d89565b611de481856117b7565b9350611df4818560208601611d94565b611dfd81611dbe565b840191505092915050565b60006020820190508181036000830152611e228184611dcf565b90509291505056fea2646970667358221220d8ac91ac9c81eb97cf8d25760dcb50557a8b0922269190be5f4b36b328bc1a9b64736f6c63430008130033
Deployed ByteCode
0x6080604052600436106103395760003560e01c806383ad7994116101ab578063ca33e64c116100f7578063f0b37c0411610095578063f84ba65d1161006f578063f84ba65d14610c1b578063f887ea4014610c44578063fe9fbb8014610c6f578063ffb54a9914610cac57610340565b8063f0b37c0414610ba0578063f2fde38b14610bc9578063f708a64f14610bf257610340565b8063dd62ed3e116100d1578063dd62ed3e14610ae6578063df20fd4914610b23578063e01bb68814610b4c578063ef8ef56f14610b7557610340565b8063ca33e64c14610a55578063cec10c1114610a80578063d51ed1c814610aa957610340565b806398118cb411610164578063a9059cbb1161013e578063a9059cbb146109ad578063b6a5d7de146109ea578063bfe1092814610a13578063c9567bf914610a3e57610340565b806398118cb41461092e5780639d1944f514610959578063a8aa1b311461098257610340565b806383ad79941461082c578063893d20e8146108575780638ab6ffc7146108825780638ea5220f146108ad57806392258ec8146108d857806395d89b411461090357610340565b80632d48e89611610285578063658d4b7f1161022357806370a08231116101fd57806370a082311461076e578063762816d6146107ab578063763014c7146107d65780637d1db4a51461080157610340565b8063658d4b7f146106ef5780636827e764146107185780636ddd17131461074357610340565b806350db71fb1161025f57806350db71fb14610635578063571ac8b01461065e57806358fa63ca1461069b5780635c85974f146106c657610340565b80632d48e896146105a45780632f54bf6e146105cd578063313ce5671461060a57610340565b806318160ddd116102f25780631f53ac02116102cc5780631f53ac02146104ea578063201e79911461051357806323b872dd1461053c5780632b112e491461057957610340565b806318160ddd1461046b5780631da1db5e146104965780631df4ccfc146104bf57610340565b806303fd2a45146103455780630445b6671461037057806306fdde031461039b578063095ea7b3146103c65780631161ae3914610403578063180b0d7e1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cd7565b60405161036791906139d5565b60405180910390f35b34801561037c57600080fd5b50610385610cfd565b6040516103929190613a09565b60405180910390f35b3480156103a757600080fd5b506103b0610d03565b6040516103bd9190613ab4565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e89190613b33565b610d40565b6040516103fa9190613b8e565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190613ba9565b610e32565b6040516104379190613b8e565b60405180910390f35b34801561044c57600080fd5b50610455610e47565b6040516104629190613a09565b60405180910390f35b34801561047757600080fd5b50610480610e4d565b60405161048d9190613a09565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613be9565b610e57565b005b3480156104cb57600080fd5b506104d4610f36565b6040516104e19190613a09565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613c16565b610f68565b005b34801561051f57600080fd5b5061053a60048036038101906105359190613ba9565b610ff4565b005b34801561054857600080fd5b50610563600480360381019061055e9190613c43565b61104e565b6040516105709190613b8e565b60405180910390f35b34801561058557600080fd5b5061058e61124e565b60405161059b9190613a09565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613ba9565b6112d0565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190613c16565b6113ab565b6040516106019190613b8e565b60405180910390f35b34801561061657600080fd5b5061061f611404565b60405161062c9190613cb2565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190613cf9565b61140d565b005b34801561066a57600080fd5b5061068560048036038101906106809190613c16565b6114b0565b6040516106929190613b8e565b60405180910390f35b3480156106a757600080fd5b506106b06114e3565b6040516106bd91906139d5565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190613be9565b611509565b005b3480156106fb57600080fd5b5061071660048036038101906107119190613cf9565b61155b565b005b34801561072457600080fd5b5061072d6115fe565b60405161073a9190613a09565b60405180910390f35b34801561074f57600080fd5b50610758611604565b6040516107659190613b8e565b60405180910390f35b34801561077a57600080fd5b5061079560048036038101906107909190613c16565b611617565b6040516107a29190613a09565b60405180910390f35b3480156107b757600080fd5b506107c0611660565b6040516107cd9190613d98565b60405180910390f35b3480156107e257600080fd5b506107eb611686565b6040516107f891906139d5565b60405180910390f35b34801561080d57600080fd5b506108166116ac565b6040516108239190613a09565b60405180910390f35b34801561083857600080fd5b506108416116b2565b60405161084e9190613a09565b60405180910390f35b34801561086357600080fd5b5061086c6116b8565b60405161087991906139d5565b60405180910390f35b34801561088e57600080fd5b506108976116e1565b6040516108a49190613a09565b60405180910390f35b3480156108b957600080fd5b506108c26116e7565b6040516108cf91906139d5565b60405180910390f35b3480156108e457600080fd5b506108ed61170d565b6040516108fa9190613a09565b60405180910390f35b34801561090f57600080fd5b50610918611713565b6040516109259190613ab4565b60405180910390f35b34801561093a57600080fd5b50610943611750565b6040516109509190613a09565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b9190613be9565b611756565b005b34801561098e57600080fd5b506109976117ed565b6040516109a491906139d5565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190613b33565b611813565b6040516109e19190613b8e565b60405180910390f35b3480156109f657600080fd5b50610a116004803603810190610a0c9190613c16565b611828565b005b348015610a1f57600080fd5b50610a286118ca565b604051610a359190613dd4565b60405180910390f35b348015610a4a57600080fd5b50610a536118f0565b005b348015610a6157600080fd5b50610a6a611955565b604051610a7791906139d5565b60405180910390f35b348015610a8c57600080fd5b50610aa76004803603810190610aa29190613def565b61197b565b005b348015610ab557600080fd5b50610ad06004803603810190610acb9190613be9565b611a4c565b604051610add9190613a09565b60405180910390f35b348015610af257600080fd5b50610b0d6004803603810190610b089190613e42565b611abe565b604051610b1a9190613a09565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b459190613e82565b611b45565b005b348015610b5857600080fd5b50610b736004803603810190610b6e9190613c16565b611bb2565b005b348015610b8157600080fd5b50610b8a611c3e565b604051610b9791906139d5565b60405180910390f35b348015610bac57600080fd5b50610bc76004803603810190610bc29190613c16565b611c64565b005b348015610bd557600080fd5b50610bf06004803603810190610beb9190613f00565b611d07565b005b348015610bfe57600080fd5b50610c196004803603810190610c149190613cf9565b611e20565b005b348015610c2757600080fd5b50610c426004803603810190610c3d9190613cf9565b6120f6565b005b348015610c5057600080fd5b50610c59612199565b604051610c669190613d98565b60405180910390f35b348015610c7b57600080fd5b50610c966004803603810190610c919190613c16565b6121bf565b604051610ca39190613b8e565b60405180910390f35b348015610cb857600080fd5b50610cc1612215565b604051610cce9190613b8e565b60405180910390f35b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b60606040518060400160405280600e81526020017f54696e466f696c536f6369657479000000000000000000000000000000000000815250905090565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e209190613a09565b60405180910390a36001905092915050565b600082610e3e83611a4c565b11905092915050565b600f5481565b6000600254905090565b610e60336121bf565b610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9690613f79565b60405180910390fd5b6000479050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc610f066064610ef8868661222890919063ffffffff16565b6122a290919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610f31573d6000803e3d6000fd5b505050565b6000610f63600e54610f55600d54600c546122ec90919063ffffffff16565b6122ec90919063ffffffff16565b905090565b610f71336121bf565b610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790613f79565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ffd336121bf565b61103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390613f79565b60405180910390fd5b81601b8190555080601c819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461123a576111b9826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234a9092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6112458484846123ae565b90509392505050565b60006112cb61127e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611617565b6112bd6112ac600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611617565b600254612cea90919063ffffffff16565b612cea90919063ffffffff16565b905090565b6112d9336121bf565b611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90613f79565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611375929190613f99565b600060405180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b611416336121bf565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90613f79565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006114dc827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610d40565b9050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611512336121bf565b611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154890613f79565b60405180910390fd5b8060188190555050565b611564336121bf565b6115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613f79565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b601960009054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601c5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b60606040518060400160405280600381526020017f54494e0000000000000000000000000000000000000000000000000000000000815250905090565b600c5481565b61175f336121bf565b61179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590613f79565b60405180910390fd5b620b71b081106117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da9061400e565b60405180910390fd5b8060178190555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118203384846123ae565b905092915050565b611831336113ab565b611870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118679061407a565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118f9336113ab565b611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f9061407a565b60405180910390fd5b6001601d60006101000a81548160ff021916908315150217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611984336121bf565b6119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba90613f79565b60405180910390fd5b82600c8190555081600d8190555080600e819055506103e8611a06600e546119f8600d54600c546122ec90919063ffffffff16565b6122ec90919063ffffffff16565b1115611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e906140e6565b60405180910390fd5b505050565b6000611ab7611a5961124e565b611aa9611a9a6002611a8c601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611617565b61222890919063ffffffff16565b8561222890919063ffffffff16565b6122a290919063ffffffff16565b9050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b4e336121bf565b611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490613f79565b60405180910390fd5b81601960006101000a81548160ff02191690831515021790555080601a819055505050565b611bbb336121bf565b611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190613f79565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c6d336113ab565b611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca39061407a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d10336113ab565b611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d469061407a565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611e159190614127565b60405180910390a150565b611e29336121bf565b611e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90613f79565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611ef25750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f289061418e565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561202357601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611fec9291906141e9565b600060405180830381600087803b15801561200657600080fd5b505af115801561201a573d6000803e3d6000fd5b505050506120f2565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016120bf929190614212565b600060405180830381600087803b1580156120d957600080fd5b505af11580156120ed573d6000803e3d6000fd5b505050505b5050565b6120ff336121bf565b61213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613f79565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60009054906101000a900460ff1681565b600080830361223a576000905061229c565b60008284612248919061426a565b905082848261225791906142db565b14612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e9061437e565b60405180910390fd5b809150505b92915050565b60006122e483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d34565b905092915050565b60008082846122fb919061439e565b905083811015612340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123379061441e565b60405180910390fd5b8091505092915050565b6000838311158290612392576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123899190613ab4565b60405180910390fd5b50600083856123a1919061443e565b9050809150509392505050565b6000601d60009054906101000a900460ff166125035760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061246b5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806124c35750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f9906144be565b60405180910390fd5b5b601d60019054906101000a900460ff161561252a57612523848484612d97565b9050612ce3565b6125348483612f6a565b600061253f85613007565b8061254f575061254e84613007565b5b806125a75750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806125ff5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806126575750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806126af5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b905060008115612855576126c16130b9565b156126cf576126ce613190565b5b612758846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234a9092919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127a486613649565b6127ae57836127b9565b6127b886856136a0565b5b905061280d81600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ec90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129ba565b6128de846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234a9092919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083905061297681600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ec90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ad457601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612aa7929190614212565b600060405180830381600087803b158015612ac157600080fd5b505af1925050508015612ad2575060015b505b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bee57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612bc1929190614212565b600060405180830381600087803b158015612bdb57600080fd5b505af1925050508015612bec575060015b505b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796017546040518263ffffffff1660e01b8152600401612c4b9190613a09565b600060405180830381600087803b158015612c6557600080fd5b505af1925050508015612c76575060015b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cd49190613a09565b60405180910390a36001925050505b9392505050565b6000612d2c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061234a565b905092915050565b60008083118290612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d729190613ab4565b60405180910390fd5b5060008385612d8a91906142db565b9050809150509392505050565b6000612e22826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234a9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eb782600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ec90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f579190613a09565b60405180910390a3600190509392505050565b60185481111580612fc45750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffa9061452a565b60405180910390fd5b5050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806130b25750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156131265750601d60019054906101000a900460ff16155b801561313e5750601960009054906101000a900460ff165b801561318b5750601a54600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601d60016101000a81548160ff0219169083151502179055506000600c5490506131c0601b54601c54610e32565b156131ca57600090505b60008190506000601a549050600061321760026132096131e8610f36565b6131fb878761222890919063ffffffff16565b6122a290919063ffffffff16565b6122a290919063ffffffff16565b9050600061322e8284612cea90919063ffffffff16565b90506000600267ffffffffffffffff81111561324d5761324c61454a565b5b60405190808252806020026020018201604052801561327b5781602001602082028036833780820191505090505b509050308160008151811061329357613292614579565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061330457613303614579565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016133a7959493929190614666565b600060405180830381600087803b1580156133c157600080fd5b505af11580156133d5573d6000803e3d6000fd5b5050505060006133ee8247612cea90919063ffffffff16565b9050600061341f61340960028a6122a290919063ffffffff16565b613411610f36565b612cea90919063ffffffff16565b9050600061345b600261344d8461343f8d8861222890919063ffffffff16565b6122a290919063ffffffff16565b6122a290919063ffffffff16565b9050600061348683613478600d548761222890919063ffffffff16565b6122a290919063ffffffff16565b9050600081111561350f57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156134fb57600080fd5b505af19350505050801561350d575060015b505b600088111561362157601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016135a1969594939291906146c0565b60606040518083038185885af11580156135bf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135e49190614736565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068289604051613618929190613f99565b60405180910390a15b50505050505050505050506000601d60016101000a81548160ff021916908315150217905550565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000806136d1600f546136c36136b4610f36565b8661222890919063ffffffff16565b6122a290919063ffffffff16565b905060006137036136e0610f36565b6136f5600e548561222890919063ffffffff16565b6122a290919063ffffffff16565b90506137798160036000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ec90919063ffffffff16565b60036000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161385d9190613a09565b60405180910390a3600061387a8284612cea90919063ffffffff16565b90506138ce81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ec90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161396e9190613a09565b60405180910390a36139898386612cea90919063ffffffff16565b935050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139bf82613994565b9050919050565b6139cf816139b4565b82525050565b60006020820190506139ea60008301846139c6565b92915050565b6000819050919050565b613a03816139f0565b82525050565b6000602082019050613a1e60008301846139fa565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a5e578082015181840152602081019050613a43565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a8682613a24565b613a908185613a2f565b9350613aa0818560208601613a40565b613aa981613a6a565b840191505092915050565b60006020820190508181036000830152613ace8184613a7b565b905092915050565b600080fd5b613ae4816139b4565b8114613aef57600080fd5b50565b600081359050613b0181613adb565b92915050565b613b10816139f0565b8114613b1b57600080fd5b50565b600081359050613b2d81613b07565b92915050565b60008060408385031215613b4a57613b49613ad6565b5b6000613b5885828601613af2565b9250506020613b6985828601613b1e565b9150509250929050565b60008115159050919050565b613b8881613b73565b82525050565b6000602082019050613ba36000830184613b7f565b92915050565b60008060408385031215613bc057613bbf613ad6565b5b6000613bce85828601613b1e565b9250506020613bdf85828601613b1e565b9150509250929050565b600060208284031215613bff57613bfe613ad6565b5b6000613c0d84828501613b1e565b91505092915050565b600060208284031215613c2c57613c2b613ad6565b5b6000613c3a84828501613af2565b91505092915050565b600080600060608486031215613c5c57613c5b613ad6565b5b6000613c6a86828701613af2565b9350506020613c7b86828701613af2565b9250506040613c8c86828701613b1e565b9150509250925092565b600060ff82169050919050565b613cac81613c96565b82525050565b6000602082019050613cc76000830184613ca3565b92915050565b613cd681613b73565b8114613ce157600080fd5b50565b600081359050613cf381613ccd565b92915050565b60008060408385031215613d1057613d0f613ad6565b5b6000613d1e85828601613af2565b9250506020613d2f85828601613ce4565b9150509250929050565b6000819050919050565b6000613d5e613d59613d5484613994565b613d39565b613994565b9050919050565b6000613d7082613d43565b9050919050565b6000613d8282613d65565b9050919050565b613d9281613d77565b82525050565b6000602082019050613dad6000830184613d89565b92915050565b6000613dbe82613d65565b9050919050565b613dce81613db3565b82525050565b6000602082019050613de96000830184613dc5565b92915050565b600080600060608486031215613e0857613e07613ad6565b5b6000613e1686828701613b1e565b9350506020613e2786828701613b1e565b9250506040613e3886828701613b1e565b9150509250925092565b60008060408385031215613e5957613e58613ad6565b5b6000613e6785828601613af2565b9250506020613e7885828601613af2565b9150509250929050565b60008060408385031215613e9957613e98613ad6565b5b6000613ea785828601613ce4565b9250506020613eb885828601613b1e565b9150509250929050565b6000613ecd82613994565b9050919050565b613edd81613ec2565b8114613ee857600080fd5b50565b600081359050613efa81613ed4565b92915050565b600060208284031215613f1657613f15613ad6565b5b6000613f2484828501613eeb565b91505092915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613f63600b83613a2f565b9150613f6e82613f2d565b602082019050919050565b60006020820190508181036000830152613f9281613f56565b9050919050565b6000604082019050613fae60008301856139fa565b613fbb60208301846139fa565b9392505050565b7f47617320746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613ff8600c83613a2f565b915061400382613fc2565b602082019050919050565b6000602082019050818103600083015261402781613feb565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614064600683613a2f565b915061406f8261402e565b602082019050919050565b6000602082019050818103600083015261409381614057565b9050919050565b7f546f74616c20666565732063616e6e6f74206578636565642031302500000000600082015250565b60006140d0601c83613a2f565b91506140db8261409a565b602082019050919050565b600060208201905081810360008301526140ff816140c3565b9050919050565b600061411182613d65565b9050919050565b61412181614106565b82525050565b600060208201905061413c6000830184614118565b92915050565b7f496e76616c696420686f6c646572000000000000000000000000000000000000600082015250565b6000614178600e83613a2f565b915061418382614142565b602082019050919050565b600060208201905081810360008301526141a78161416b565b9050919050565b6000819050919050565b60006141d36141ce6141c9846141ae565b613d39565b6139f0565b9050919050565b6141e3816141b8565b82525050565b60006040820190506141fe60008301856139c6565b61420b60208301846141da565b9392505050565b600060408201905061422760008301856139c6565b61423460208301846139fa565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614275826139f0565b9150614280836139f0565b925082820261428e816139f0565b915082820484148315176142a5576142a461423b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142e6826139f0565b91506142f1836139f0565b925082614301576143006142ac565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614368602183613a2f565b91506143738261430c565b604082019050919050565b600060208201905081810360008301526143978161435b565b9050919050565b60006143a9826139f0565b91506143b4836139f0565b92508282019050808211156143cc576143cb61423b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614408601b83613a2f565b9150614413826143d2565b602082019050919050565b60006020820190508181036000830152614437816143fb565b9050919050565b6000614449826139f0565b9150614454836139f0565b925082820390508181111561446c5761446b61423b565b5b92915050565b7f54726164696e67206973206e6f7420656e61626c656420796574000000000000600082015250565b60006144a8601a83613a2f565b91506144b382614472565b602082019050919050565b600060208201905081810360008301526144d78161449b565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614514601183613a2f565b915061451f826144de565b602082019050919050565b6000602082019050818103600083015261454381614507565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145dd816139b4565b82525050565b60006145ef83836145d4565b60208301905092915050565b6000602082019050919050565b6000614613826145a8565b61461d81856145b3565b9350614628836145c4565b8060005b8381101561465957815161464088826145e3565b975061464b836145fb565b92505060018101905061462c565b5085935050505092915050565b600060a08201905061467b60008301886139fa565b61468860208301876141da565b818103604083015261469a8186614608565b90506146a960608301856139c6565b6146b660808301846139fa565b9695505050505050565b600060c0820190506146d560008301896139c6565b6146e260208301886139fa565b6146ef60408301876141da565b6146fc60608301866141da565b61470960808301856139c6565b61471660a08301846139fa565b979650505050505050565b60008151905061473081613b07565b92915050565b60008060006060848603121561474f5761474e613ad6565b5b600061475d86828701614721565b935050602061476e86828701614721565b925050604061477f86828701614721565b915050925092509256fea26469706673582212200722644fc233c9b1fb936e09a736c9cbd6dd653ea3274615679aa93669c558e364736f6c63430008130033