Source Code
Overview
GLMR Balance
GLMR Value
$0.00Latest 5 from a total of 5 transactions
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Name:
YlideMailerV8
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at moonbeam.moonscan.io on 2023-03-30
*/
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.17;
contract Owned {
address public owner;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
if (msg.sender != owner) {
revert();
}
_;
}
function transferOwnership(address newOwner) public onlyOwner {
if (newOwner != address(0)) {
owner = newOwner;
}
}
function terminate() public onlyOwner {
selfdestruct(payable(owner));
}
}
contract Terminatable is Owned {
uint256 public terminationBlock;
uint256 public creationBlock;
constructor() {
terminationBlock = 0;
creationBlock = block.number;
}
modifier notTerminated() {
if (terminationBlock != 0 && block.number >= terminationBlock) {
revert();
}
_;
}
// intendedly left non-blocked to allow reassignment of termination block
function gracefullyTerminateAt(uint256 blockNumber) public onlyOwner {
terminationBlock = blockNumber;
}
}
contract FiduciaryDuty is Owned {
uint256 public contentPartFee = 0;
uint256 public recipientFee = 0;
uint256 public broadcastFee = 0;
uint256 public broadcastFeedCreationPrice = 0;
uint256 public mailingFeedCreationPrice = 0;
// uint256 public threadCreationPrice = 0;
address payable public beneficiary;
constructor() {
beneficiary = payable(msg.sender);
}
function setFees(uint256 _contentPartFee, uint256 _recipientFee, uint256 _broadcastFee) public onlyOwner {
contentPartFee = _contentPartFee;
recipientFee = _recipientFee;
broadcastFee = _broadcastFee;
}
function setPrices(uint256 _broadcastFeedCreationPrice, uint256 _mailingFeedCreationPrice) public onlyOwner {
broadcastFeedCreationPrice = _broadcastFeedCreationPrice;
mailingFeedCreationPrice = _mailingFeedCreationPrice;
// threadCreationPrice = _threadCreationPrice;
}
function setBeneficiary(address payable _beneficiary) public onlyOwner {
beneficiary = _beneficiary;
}
function payForBroadcastFeedCreation() internal virtual {
if (broadcastFeedCreationPrice > 0) {
beneficiary.transfer(broadcastFeedCreationPrice);
}
}
function payForMailingFeedCreation() internal virtual {
if (mailingFeedCreationPrice > 0) {
beneficiary.transfer(mailingFeedCreationPrice);
}
}
function payOut(uint256 contentParts, uint256 recipients, uint256 broadcasts) internal virtual {
uint256 totalValue = contentPartFee * contentParts + recipientFee * recipients + broadcastFee * broadcasts;
if (totalValue > 0) {
beneficiary.transfer(totalValue);
}
}
}
contract BlockNumberRingBufferIndex {
uint256 constant empty0 = 0x00ff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff;
uint256 constant empty1 = 0x00ffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff;
uint256 constant empty2 = 0x00ffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff;
uint256 constant empty3 = 0x00ffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff;
uint256 constant empty4 = 0x00ffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff;
uint256 constant empty5 = 0x00ffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff;
uint256 constant empty6 = 0x00ffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff;
uint256 constant empty7 = 0x00ffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff;
uint256 constant empty8 = 0x00ffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff;
uint256 constant empty9 = 0x00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000;
uint256 constant indexF = 0xff00000000000000000000000000000000000000000000000000000000000000;
uint256 constant index1 = 0x0100000000000000000000000000000000000000000000000000000000000000;
uint256 constant index2 = 0x0200000000000000000000000000000000000000000000000000000000000000;
uint256 constant index3 = 0x0300000000000000000000000000000000000000000000000000000000000000;
uint256 constant index4 = 0x0400000000000000000000000000000000000000000000000000000000000000;
uint256 constant index5 = 0x0500000000000000000000000000000000000000000000000000000000000000;
uint256 constant index6 = 0x0600000000000000000000000000000000000000000000000000000000000000;
uint256 constant index7 = 0x0700000000000000000000000000000000000000000000000000000000000000;
uint256 constant index8 = 0x0800000000000000000000000000000000000000000000000000000000000000;
uint256 constant index9 = 0x0900000000000000000000000000000000000000000000000000000000000000;
uint256 constant shift024 = 0x0000000000000000000000000000000000000000000000000000000001000000;
uint256 constant shift048 = 0x0000000000000000000000000000000000000000000000000001000000000000;
uint256 constant shift072 = 0x0000000000000000000000000000000000000000000001000000000000000000;
uint256 constant shift096 = 0x0000000000000000000000000000000000000001000000000000000000000000;
uint256 constant shift120 = 0x0000000000000000000000000000000001000000000000000000000000000000;
uint256 constant shift144 = 0x0000000000000000000000000001000000000000000000000000000000000000;
uint256 constant shift168 = 0x0000000000000000000001000000000000000000000000000000000000000000;
uint256 constant shift192 = 0x0000000000000001000000000000000000000000000000000000000000000000;
uint256 constant shift216 = 0x0000000001000000000000000000000000000000000000000000000000000000;
function storeBlockNumber(uint256 indexValue, uint256 blockNumber) public pure returns (uint256) {
blockNumber = blockNumber & 0xffffff; // 3 bytes
uint256 currIdx = indexValue & indexF;
if (currIdx == 0) {
return (indexValue & empty1) | index1 | (blockNumber * shift192);
} else
if (currIdx == index1) {
return (indexValue & empty2) | index2 | (blockNumber * shift168);
} else
if (currIdx == index2) {
return (indexValue & empty3) | index3 | (blockNumber * shift144);
} else
if (currIdx == index3) {
return (indexValue & empty4) | index4 | (blockNumber * shift120);
} else
if (currIdx == index4) {
return (indexValue & empty5) | index5 | (blockNumber * shift096);
} else
if (currIdx == index5) {
return (indexValue & empty6) | index6 | (blockNumber * shift072);
} else
if (currIdx == index6) {
return (indexValue & empty7) | index7 | (blockNumber * shift048);
} else
if (currIdx == index7) {
return (indexValue & empty8) | index8 | (blockNumber * shift024);
} else
if (currIdx == index8) {
return (indexValue & empty9) | index9 | blockNumber;
} else {
return (indexValue & empty0) | (blockNumber * shift216);
}
}
}
struct BroadcastFeedV8 {
address owner;
address payable beneficiary;
uint256 broadcastFee;
bool isPublic;
mapping (address => bool) writers;
uint256 messagesIndex;
uint256 messagesCount;
}
// struct MailingThreadV8 {
// uint256 messagesIndex;
// uint256 messageCount;
// mapping (uint256 => bool) recipientParticipationStatus;
// }
struct MailingFeedV8 {
address owner;
address payable beneficiary;
uint256 recipientFee;
mapping (uint256 => uint256) recipientToMailIndex;
mapping (uint256 => uint256) recipientMessagesCount;
// mapping (uint256 => uint256) recipientToThreadJoinEventsIndex;
// mapping (uint256 => MailingThreadV8) threads;
}
contract YlideMailerV8 is Owned, Terminatable, FiduciaryDuty, BlockNumberRingBufferIndex {
uint256 constant public version = 8;
mapping (uint256 => MailingFeedV8) public mailingFeeds;
mapping (uint256 => BroadcastFeedV8) public broadcastFeeds;
mapping (uint256 => uint256) public recipientToMailingFeedJoinEventsIndex;
event MailPush(
uint256 indexed recipient,
uint256 indexed feedId,
address sender,
uint256 contentId,
uint256 previousFeedEventsIndex,
bytes key
);
event ContentRecipients(
uint256 indexed contentId,
address indexed sender,
uint256[] recipients
);
event BroadcastPush(
address indexed sender,
uint256 indexed feedId,
uint256 contentId,
uint256 previousFeedEventsIndex
);
event MessageContent(
uint256 indexed contentId,
address indexed sender,
uint16 parts,
uint16 partIdx,
bytes content
);
event MailingFeedCreated(uint256 indexed feedId, address indexed creator);
event BroadcastFeedCreated(uint256 indexed feedId, address indexed creator);
event MailingFeedOwnershipTransferred(uint256 indexed feedId, address newOwner);
event BroadcastFeedOwnershipTransferred(uint256 indexed feedId, address newOwner);
event MailingFeedBeneficiaryChanged(uint256 indexed feedId, address newBeneficiary);
event BroadcastFeedBeneficiaryChanged(uint256 indexed feedId, address newBeneficiary);
event BroadcastFeedPublicityChanged(uint256 indexed feedId, bool isPublic);
event BroadcastFeedWriterChange(uint256 indexed feedId, address indexed writer, bool status);
// event ThreadCreated(uint256 indexed feedId, uint256 indexed threadId, address indexed creator);
// event ThreadJoined(uint256 indexed feedId, uint256 indexed threadId, uint256 indexed newParticipant, uint256 previousThreadJoinEventsIndex);
event MailingFeedJoined(uint256 indexed feedId, uint256 indexed newParticipant, uint256 previousFeedJoinEventsIndex);
constructor() {
mailingFeeds[0].owner = msg.sender; // regular mail
mailingFeeds[0].beneficiary = payable(msg.sender);
mailingFeeds[1].owner = msg.sender; // otc mail
mailingFeeds[1].beneficiary = payable(msg.sender);
mailingFeeds[2].owner = msg.sender; // system messages
mailingFeeds[2].beneficiary = payable(msg.sender);
mailingFeeds[3].owner = msg.sender; // system messages
mailingFeeds[3].beneficiary = payable(msg.sender);
mailingFeeds[4].owner = msg.sender; // system messages
mailingFeeds[4].beneficiary = payable(msg.sender);
mailingFeeds[5].owner = msg.sender; // system messages
mailingFeeds[5].beneficiary = payable(msg.sender);
mailingFeeds[6].owner = msg.sender; // system messages
mailingFeeds[6].beneficiary = payable(msg.sender);
mailingFeeds[7].owner = msg.sender; // system messages
mailingFeeds[7].beneficiary = payable(msg.sender);
mailingFeeds[8].owner = msg.sender; // system messages
mailingFeeds[8].beneficiary = payable(msg.sender);
mailingFeeds[9].owner = msg.sender; // system messages
mailingFeeds[9].beneficiary = payable(msg.sender);
mailingFeeds[10].owner = msg.sender; // system messages
mailingFeeds[10].beneficiary = payable(msg.sender);
broadcastFeeds[0].owner = msg.sender;
broadcastFeeds[0].beneficiary = payable(msg.sender);
broadcastFeeds[0].isPublic = false;
broadcastFeeds[0].writers[msg.sender] = true;
broadcastFeeds[1].owner = msg.sender;
broadcastFeeds[1].beneficiary = payable(msg.sender);
broadcastFeeds[1].isPublic = false;
broadcastFeeds[1].writers[msg.sender] = true;
broadcastFeeds[2].owner = msg.sender;
broadcastFeeds[2].beneficiary = payable(msg.sender);
broadcastFeeds[2].isPublic = true;
}
modifier blockLock(uint256 firstBlockNumber, uint256 blockCountLock) {
if (block.number < firstBlockNumber) {
revert('Number less than firstBlockNumber');
}
if (block.number - firstBlockNumber >= blockCountLock) {
revert('Number more than firstBlockNumber + blockCountLock');
}
_;
}
function setMailingFeedFees(uint256 feedId, uint256 _recipientFee) public {
if (msg.sender != mailingFeeds[feedId].owner) {
revert();
}
mailingFeeds[feedId].recipientFee = _recipientFee;
}
function setBroadcastFeedFees(uint256 feedId, uint256 _broadcastFee) public {
if (msg.sender != broadcastFeeds[feedId].owner) {
revert();
}
broadcastFeeds[feedId].broadcastFee = _broadcastFee;
}
function isBroadcastFeedWriter(uint256 feedId, address addr) public view returns (bool) {
return broadcastFeeds[feedId].writers[addr];
}
function getMailingFeedRecipientIndex(uint256 feedId, uint256 recipient) public view returns (uint256) {
return mailingFeeds[feedId].recipientToMailIndex[recipient];
}
function getMailingFeedRecipientMessagesCount(uint256 feedId, uint256 recipient) public view returns (uint256) {
return mailingFeeds[feedId].recipientMessagesCount[recipient];
}
function payOutMailingFeed(uint256 feedId, uint256 recipients) internal virtual {
uint256 totalValue = mailingFeeds[feedId].recipientFee * recipients;
if (totalValue > 0) {
mailingFeeds[feedId].beneficiary.transfer(totalValue);
}
}
function payOutBroadcastFeed(uint256 feedId, uint256 broadcasts) internal virtual {
uint256 totalValue = broadcastFeeds[feedId].broadcastFee * broadcasts;
if (totalValue > 0) {
broadcastFeeds[feedId].beneficiary.transfer(totalValue);
}
}
receive() external payable {
// do nothing
}
function buildContentId(address senderAddress, uint256 uniqueId, uint256 firstBlockNumber, uint256 partsCount, uint256 blockCountLock) public pure returns (uint256) {
uint256 _hash = uint256(sha256(bytes.concat(bytes32(uint256(uint160(senderAddress))), bytes32(uniqueId), bytes32(firstBlockNumber))));
uint256 versionMask = (version & 0xFF) * 0x100000000000000000000000000000000000000000000000000000000000000;
uint256 blockNumberMask = (firstBlockNumber & 0xFFFFFFFF) * 0x1000000000000000000000000000000000000000000000000000000;
uint256 partsCountMask = (partsCount & 0xFFFF) * 0x100000000000000000000000000000000000000000000000000;
uint256 blockCountLockMask = (blockCountLock & 0xFFFF) * 0x10000000000000000000000000000000000000000000000;
uint256 hashMask = _hash & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
return versionMask | blockNumberMask | partsCountMask | blockCountLockMask | hashMask;
}
/* ----------- MAIL PUSHES ----------- */
/**
* sendSmallMail - for sending tiny content to 1 recipient
* sendBulkMail - for sending tiny content to multiple recipients
* addMailRecipients - for adding recipients to any message (multipart or not)
*/
function emitMailPush(uint256 feedId, uint256 rec, address sender, uint256 contentId, bytes memory key) internal {
if (mailingFeeds[feedId].owner == address(0)) {
revert("Feed does not exist");
}
uint256 shrinkedBlock = block.number / 128;
if (mailingFeeds[feedId].recipientMessagesCount[rec] == 0) {
uint256 currentMailingFeedJoinEventsIndex = recipientToMailingFeedJoinEventsIndex[rec];
recipientToMailingFeedJoinEventsIndex[rec] = storeBlockNumber(currentMailingFeedJoinEventsIndex, shrinkedBlock);
emit MailingFeedJoined(feedId, rec, currentMailingFeedJoinEventsIndex);
}
// if (threadId != 0) {
// if (mailingFeeds[feedId].threads[threadId].recipientParticipationStatus[rec] == false) {
// mailingFeeds[feedId].threads[threadId].recipientParticipationStatus[rec] = true;
// uint256 currentThreadJoinEventsIndex = mailingFeeds[feedId].recipientToThreadJoinEventsIndex[rec];
// mailingFeeds[feedId].recipientToThreadJoinEventsIndex[rec] = storeBlockNumber(currentThreadJoinEventsIndex, shrinkedBlock);
// emit ThreadJoined(feedId, threadId, rec, currentThreadJoinEventsIndex);
// }
// }
uint256 currentFeed = mailingFeeds[feedId].recipientToMailIndex[rec];
mailingFeeds[feedId].recipientToMailIndex[rec] = storeBlockNumber(currentFeed, shrinkedBlock);
// write anything to map - 20k gas. think about it
mailingFeeds[feedId].recipientMessagesCount[rec] += 1;
// uint256 currentThread = 0;
// if (threadId != 0) {
// currentThread = mailingFeeds[feedId].threads[threadId].messagesIndex;
// mailingFeeds[feedId].threads[threadId].messagesIndex = storeBlockNumber(currentThread, shrinkedBlock);
// }
emit MailPush(rec, feedId, sender, contentId, currentFeed, key);
}
function sendBulkMail(uint256 feedId, uint256 uniqueId, uint256[] calldata recipients, bytes[] calldata keys, bytes calldata content) public payable notTerminated returns (uint256) {
uint256 contentId = buildContentId(msg.sender, uniqueId, block.number, 1, 0);
emit MessageContent(contentId, msg.sender, 1, 0, content);
for (uint i = 0; i < recipients.length; i++) {
emitMailPush(feedId, recipients[i], msg.sender, contentId, keys[i]);
}
emit ContentRecipients(contentId, msg.sender, recipients);
payOut(1, recipients.length, 0);
payOutMailingFeed(feedId, recipients.length);
return contentId;
}
function addMailRecipients(
uint256 feedId,
uint256 uniqueId,
uint256 firstBlockNumber,
uint16 partsCount,
uint16 blockCountLock,
uint256[] calldata recipients,
bytes[] calldata keys
) public payable notTerminated blockLock(firstBlockNumber, blockCountLock) returns (uint256) {
uint256 contentId = buildContentId(msg.sender, uniqueId, firstBlockNumber, partsCount, blockCountLock);
for (uint i = 0; i < recipients.length; i++) {
emitMailPush(feedId, recipients[i], msg.sender, contentId, keys[i]);
}
emit ContentRecipients(contentId, msg.sender, recipients);
payOut(0, recipients.length, 0);
payOutMailingFeed(feedId, recipients.length);
return contentId;
}
/* ---------------------------------------------- */
/* ------------- MAIL BROADCASTS ---------------- */
/**
* sendBroadcast - for sending broadcast content in one transaction
* sendBroadcastHeader - for emitting broadcast header after uploading all parts of the content
*/
function emitBroadcastPush(address sender, uint256 feedId, uint256 contentId) internal {
uint256 current = broadcastFeeds[feedId].messagesIndex;
broadcastFeeds[feedId].messagesIndex = storeBlockNumber(current, block.number / 128);
broadcastFeeds[feedId].messagesCount += 1;
emit BroadcastPush(sender, feedId, contentId, current);
}
function sendBroadcast(bool isPersonal, uint256 feedId, uint256 uniqueId, bytes calldata content) public payable notTerminated returns (uint256) {
if (!isPersonal && !broadcastFeeds[feedId].isPublic && broadcastFeeds[feedId].writers[msg.sender] != true) {
revert('You are not allowed to write to this feed');
}
uint256 composedFeedId = isPersonal ? uint256(sha256(abi.encodePacked(msg.sender, uint256(1), feedId))) : feedId;
uint256 contentId = buildContentId(msg.sender, uniqueId, block.number, 1, 0);
emit MessageContent(contentId, msg.sender, 1, 0, content);
emitBroadcastPush(msg.sender, composedFeedId, contentId);
payOut(1, 0, 1);
if (!isPersonal) {
payOutBroadcastFeed(feedId, 1);
}
return contentId;
}
function sendBroadcastHeader(bool isPersonal, uint256 feedId, uint256 uniqueId, uint256 firstBlockNumber, uint16 partsCount, uint16 blockCountLock) public payable notTerminated returns (uint256) {
if (!isPersonal && !broadcastFeeds[feedId].isPublic && broadcastFeeds[feedId].writers[msg.sender] != true) {
revert('You are not allowed to write to this feed');
}
uint256 composedFeedId = isPersonal ? uint256(sha256(abi.encodePacked(msg.sender, feedId))) : feedId;
uint256 contentId = buildContentId(msg.sender, uniqueId, firstBlockNumber, partsCount, blockCountLock);
emitBroadcastPush(msg.sender, composedFeedId, contentId);
payOut(0, 0, 1);
if (!isPersonal) {
payOutBroadcastFeed(feedId, 1);
}
return contentId;
}
/* ---------------------------------------------- */
// For sending content part - for broadcast or not
function sendMessageContentPart(
uint256 uniqueId,
uint256 firstBlockNumber,
uint256 blockCountLock,
uint16 parts,
uint16 partIdx,
bytes calldata content
) public payable notTerminated blockLock(firstBlockNumber, blockCountLock) returns (uint256) {
uint256 contentId = buildContentId(msg.sender, uniqueId, firstBlockNumber, parts, blockCountLock);
emit MessageContent(contentId, msg.sender, parts, partIdx, content);
payOut(1, 0, 0);
return contentId;
}
/* ---------------------------------------------- */
// Feed management:
function createMailingFeed(uint256 uniqueId) public payable returns (uint256) {
uint256 feedId = uint256(keccak256(abi.encodePacked(msg.sender, uint256(0), uniqueId)));
if (mailingFeeds[feedId].owner != address(0)) {
revert('Feed already exists');
}
mailingFeeds[feedId].owner = msg.sender;
mailingFeeds[feedId].beneficiary = payable(msg.sender);
payForMailingFeedCreation();
emit MailingFeedCreated(feedId, msg.sender);
return feedId;
}
function transferMailingFeedOwnership(uint256 feedId, address newOwner) public {
if (mailingFeeds[feedId].owner != msg.sender) {
revert('You are not allowed to transfer ownership of this feed');
}
mailingFeeds[feedId].owner = newOwner;
emit MailingFeedOwnershipTransferred(feedId, newOwner);
}
function setMailingFeedBeneficiary(uint256 feedId, address payable newBeneficiary) public {
if (mailingFeeds[feedId].owner != msg.sender) {
revert('You are not allowed to set beneficiary of this feed');
}
mailingFeeds[feedId].beneficiary = newBeneficiary;
emit MailingFeedBeneficiaryChanged(feedId, newBeneficiary);
}
function createBroadcastFeed(uint256 uniqueId, bool isPublic) public payable returns (uint256) {
uint256 feedId = uint256(keccak256(abi.encodePacked(msg.sender, uint256(0), uniqueId)));
if (broadcastFeeds[feedId].owner != address(0)) {
revert('Feed already exists');
}
broadcastFeeds[feedId].owner = msg.sender;
broadcastFeeds[feedId].beneficiary = payable(msg.sender);
broadcastFeeds[feedId].isPublic = isPublic;
broadcastFeeds[feedId].writers[msg.sender] = true;
broadcastFeeds[feedId].messagesIndex = 0;
broadcastFeeds[feedId].messagesCount = 0;
payForBroadcastFeedCreation();
emit BroadcastFeedCreated(feedId, msg.sender);
return feedId;
}
function transferBroadcastFeedOwnership(uint256 feedId, address newOwner) public {
if (broadcastFeeds[feedId].owner != msg.sender) {
revert('You are not allowed to transfer ownership of this feed');
}
broadcastFeeds[feedId].owner = newOwner;
emit BroadcastFeedOwnershipTransferred(feedId, newOwner);
}
function setBroadcastFeedBeneficiary(uint256 feedId, address payable newBeneficiary) public {
if (broadcastFeeds[feedId].owner != msg.sender) {
revert('You are not allowed to set beneficiary of this feed');
}
broadcastFeeds[feedId].beneficiary = newBeneficiary;
emit BroadcastFeedBeneficiaryChanged(feedId, newBeneficiary);
}
function changeBroadcastFeedPublicity(uint256 feedId, bool isPublic) public {
if (broadcastFeeds[feedId].owner != msg.sender) {
revert('You are not allowed to change publicity of this feed');
}
broadcastFeeds[feedId].isPublic = isPublic;
emit BroadcastFeedPublicityChanged(feedId, isPublic);
}
function addBroadcastFeedWriter(uint256 feedId, address writer) public {
if (broadcastFeeds[feedId].owner != msg.sender) {
revert('You are not allowed to add writers to this feed');
}
broadcastFeeds[feedId].writers[writer] = true;
emit BroadcastFeedWriterChange(feedId, writer, true);
}
function removeBroadcastFeedWriter(uint256 feedId, address writer) public {
if (broadcastFeeds[feedId].owner != msg.sender) {
revert('You are not allowed to remove writers from this feed');
}
delete broadcastFeeds[feedId].writers[writer];
emit BroadcastFeedWriterChange(feedId, writer, false);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":false,"internalType":"address","name":"newBeneficiary","type":"address"}],"name":"BroadcastFeedBeneficiaryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":true,"internalType":"address","name":"creator","type":"address"}],"name":"BroadcastFeedCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"BroadcastFeedOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isPublic","type":"bool"}],"name":"BroadcastFeedPublicityChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":true,"internalType":"address","name":"writer","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"BroadcastFeedWriterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousFeedEventsIndex","type":"uint256"}],"name":"BroadcastPush","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"recipients","type":"uint256[]"}],"name":"ContentRecipients","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"recipient","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousFeedEventsIndex","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"key","type":"bytes"}],"name":"MailPush","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":false,"internalType":"address","name":"newBeneficiary","type":"address"}],"name":"MailingFeedBeneficiaryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":true,"internalType":"address","name":"creator","type":"address"}],"name":"MailingFeedCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newParticipant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousFeedJoinEventsIndex","type":"uint256"}],"name":"MailingFeedJoined","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"feedId","type":"uint256"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"MailingFeedOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint16","name":"parts","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"partIdx","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"content","type":"bytes"}],"name":"MessageContent","type":"event"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"address","name":"writer","type":"address"}],"name":"addBroadcastFeedWriter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"uint256","name":"uniqueId","type":"uint256"},{"internalType":"uint256","name":"firstBlockNumber","type":"uint256"},{"internalType":"uint16","name":"partsCount","type":"uint16"},{"internalType":"uint16","name":"blockCountLock","type":"uint16"},{"internalType":"uint256[]","name":"recipients","type":"uint256[]"},{"internalType":"bytes[]","name":"keys","type":"bytes[]"}],"name":"addMailRecipients","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"beneficiary","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"broadcastFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"broadcastFeedCreationPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"broadcastFeeds","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address payable","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"broadcastFee","type":"uint256"},{"internalType":"bool","name":"isPublic","type":"bool"},{"internalType":"uint256","name":"messagesIndex","type":"uint256"},{"internalType":"uint256","name":"messagesCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"uint256","name":"uniqueId","type":"uint256"},{"internalType":"uint256","name":"firstBlockNumber","type":"uint256"},{"internalType":"uint256","name":"partsCount","type":"uint256"},{"internalType":"uint256","name":"blockCountLock","type":"uint256"}],"name":"buildContentId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"bool","name":"isPublic","type":"bool"}],"name":"changeBroadcastFeedPublicity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contentPartFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"uniqueId","type":"uint256"},{"internalType":"bool","name":"isPublic","type":"bool"}],"name":"createBroadcastFeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"uniqueId","type":"uint256"}],"name":"createMailingFeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"creationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"uint256","name":"recipient","type":"uint256"}],"name":"getMailingFeedRecipientIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"uint256","name":"recipient","type":"uint256"}],"name":"getMailingFeedRecipientMessagesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"gracefullyTerminateAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"isBroadcastFeedWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mailingFeedCreationPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mailingFeeds","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address payable","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"recipientFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recipientFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"recipientToMailingFeedJoinEventsIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"address","name":"writer","type":"address"}],"name":"removeBroadcastFeedWriter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPersonal","type":"bool"},{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"uint256","name":"uniqueId","type":"uint256"},{"internalType":"bytes","name":"content","type":"bytes"}],"name":"sendBroadcast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPersonal","type":"bool"},{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"uint256","name":"uniqueId","type":"uint256"},{"internalType":"uint256","name":"firstBlockNumber","type":"uint256"},{"internalType":"uint16","name":"partsCount","type":"uint16"},{"internalType":"uint16","name":"blockCountLock","type":"uint16"}],"name":"sendBroadcastHeader","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"uint256","name":"uniqueId","type":"uint256"},{"internalType":"uint256[]","name":"recipients","type":"uint256[]"},{"internalType":"bytes[]","name":"keys","type":"bytes[]"},{"internalType":"bytes","name":"content","type":"bytes"}],"name":"sendBulkMail","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"uniqueId","type":"uint256"},{"internalType":"uint256","name":"firstBlockNumber","type":"uint256"},{"internalType":"uint256","name":"blockCountLock","type":"uint256"},{"internalType":"uint16","name":"parts","type":"uint16"},{"internalType":"uint16","name":"partIdx","type":"uint16"},{"internalType":"bytes","name":"content","type":"bytes"}],"name":"sendMessageContentPart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_beneficiary","type":"address"}],"name":"setBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"address payable","name":"newBeneficiary","type":"address"}],"name":"setBroadcastFeedBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"uint256","name":"_broadcastFee","type":"uint256"}],"name":"setBroadcastFeedFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_contentPartFee","type":"uint256"},{"internalType":"uint256","name":"_recipientFee","type":"uint256"},{"internalType":"uint256","name":"_broadcastFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"address payable","name":"newBeneficiary","type":"address"}],"name":"setMailingFeedBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"uint256","name":"_recipientFee","type":"uint256"}],"name":"setMailingFeedFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_broadcastFeedCreationPrice","type":"uint256"},{"internalType":"uint256","name":"_mailingFeedCreationPrice","type":"uint256"}],"name":"setPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"indexValue","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"storeBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"terminate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"terminationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferBroadcastFeedOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feedId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferMailingFeedOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526000600355600060045560006005556000600655600060075534801561002957600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006001819055504360028190555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336009600080815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336009600080815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006001815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006001815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006002815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006002815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006003815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006003815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006004815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006004815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006005815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006005815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006006815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006006815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006007815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006007815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006008815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006008815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006009815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006009815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360096000600a815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360096000600a815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600a600080815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600a600080815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a600080815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506001600a600080815260200190815260200160002060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033600a60006001815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600a60006001815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a60006001815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506001600a60006001815260200190815260200160002060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033600a60006002815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600a60006002815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60006002815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506149d780610b956000396000f3fe60806040526004361061023f5760003560e01c80636d1655eb1161012e578063d13c43cd116100ab578063dcd0ed1c1161006f578063dcd0ed1c146108aa578063e294d915146108e7578063e522872d14610912578063ebaa83c81461093b578063f2fde38b1461096457610246565b8063d13c43cd146107ac578063d4f28d37146107dc578063d646a8db14610819578063d6e8acf414610844578063d9acd5bd1461086d57610246565b80638da5cb5b116100f25780638da5cb5b146106c95780639f8b5ec5146106f4578063c1cb13b914610731578063c433cbe71461075a578063cec10c111461078357610246565b80636d1655eb146105cb5780636e4d820a146105f45780637908f1da1461061d5780638a8089f5146106485780638cae695a1461068a57610246565b806325f52865116101bc57806338af3eed1161018057806338af3eed146104f657806340bda4021461052157806344b3b8201461054c578063495a8fe61461057557806354fd4d50146105a057610246565b806325f52865146104065780632ba30276146104365780632ff5c7771461046657806335954dbb1461049657806337b85743146104c657610246565b80630c08bf88116102035780630c08bf881461034057806317634514146103575780631c31f710146103825780631eecf500146103ab57806322143c94146103d657610246565b80630123fc801461024b578063023b13a81461028857806305fefda7146102c557806307e6a613146102ee5780630b729bb81461031757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d919061338b565b61098d565b60405161027f91906133da565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190613453565b610edd565b6040516102bc91906133da565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e7919061338b565b61106f565b005b3480156102fa57600080fd5b506103156004803603810190610310919061338b565b6110d9565b005b34801561032357600080fd5b5061033e600480360381019061033991906134ce565b611166565b005b34801561034c57600080fd5b5061035561129b565b005b34801561036357600080fd5b5061036c61132c565b60405161037991906133da565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a4919061354c565b611332565b005b3480156103b757600080fd5b506103c06113ce565b6040516103cd91906133da565b60405180910390f35b6103f060048036038101906103eb919061366e565b6113d4565b6040516103fd91906133da565b60405180910390f35b610420600480360381019061041b91906137de565b6115d3565b60405161042d91906133da565b60405180910390f35b610450600480360381019061044b9190613866565b6117fc565b60405161045d91906133da565b60405180910390f35b610480600480360381019061047b91906138f3565b6119d1565b60405161048d91906133da565b60405180910390f35b6104b060048036038101906104ab91906139a2565b611b0b565b6040516104bd91906133da565b60405180910390f35b6104e060048036038101906104db91906139e2565b611db6565b6040516104ed91906133da565b60405180910390f35b34801561050257600080fd5b5061050b611f8e565b6040516105189190613a1e565b60405180910390f35b34801561052d57600080fd5b50610536611fb4565b60405161054391906133da565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e91906139a2565b611fba565b005b34801561058157600080fd5b5061058a6120c8565b60405161059791906133da565b60405180910390f35b3480156105ac57600080fd5b506105b56120ce565b6040516105c291906133da565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906134ce565b6120d3565b005b34801561060057600080fd5b5061061b600480360381019061061691906134ce565b61222e565b005b34801561062957600080fd5b50610632612363565b60405161063f91906133da565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a91906139e2565b612369565b60405161068196959493929190613a57565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac91906139e2565b6123f2565b6040516106c093929190613ab8565b60405180910390f35b3480156106d557600080fd5b506106de61245c565b6040516106eb9190613aef565b60405180910390f35b34801561070057600080fd5b5061071b600480360381019061071691906139e2565b612480565b60405161072891906133da565b60405180910390f35b34801561073d57600080fd5b50610758600480360381019061075391906139e2565b612498565b005b34801561076657600080fd5b50610781600480360381019061077c91906134ce565b6124fa565b005b34801561078f57600080fd5b506107aa60048036038101906107a59190613b0a565b61265e565b005b6107c660048036038101906107c19190613b5d565b6126d0565b6040516107d391906133da565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe919061338b565b612887565b60405161081091906133da565b60405180910390f35b34801561082557600080fd5b5061082e6128b9565b60405161083b91906133da565b60405180910390f35b34801561085057600080fd5b5061086b6004803603810190610866919061338b565b6128bf565b005b34801561087957600080fd5b50610894600480360381019061088f919061338b565b61294c565b6040516108a191906133da565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc91906134ce565b61297e565b6040516108de9190613c39565b60405180910390f35b3480156108f357600080fd5b506108fc6129e9565b60405161090991906133da565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613c54565b6129ef565b005b34801561094757600080fd5b50610962600480360381019061095d9190613c54565b612b24565b005b34801561097057600080fd5b5061098b60048036038101906109869190613c94565b612c59565b005b600062ffffff8216915060007fff000000000000000000000000000000000000000000000000000000000000008416905060008103610a38577801000000000000000000000000000000000000000000000000836109eb9190613cf0565b7f01000000000000000000000000000000000000000000000000000000000000007effffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff86161717915050610ed7565b7f01000000000000000000000000000000000000000000000000000000000000008103610ace57750100000000000000000000000000000000000000000083610a819190613cf0565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff86161717915050610ed7565b7f02000000000000000000000000000000000000000000000000000000000000008103610b6157720100000000000000000000000000000000000083610b149190613cf0565b7f03000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff86161717915050610ed7565b7f03000000000000000000000000000000000000000000000000000000000000008103610bf1576f0100000000000000000000000000000083610ba49190613cf0565b7f04000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff86161717915050610ed7565b7f04000000000000000000000000000000000000000000000000000000000000008103610c7e576c0100000000000000000000000083610c319190613cf0565b7f05000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff86161717915050610ed7565b7f05000000000000000000000000000000000000000000000000000000000000008103610d0857690100000000000000000083610cbb9190613cf0565b7f06000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff86161717915050610ed7565b7f06000000000000000000000000000000000000000000000000000000000000008103610d8f57660100000000000083610d429190613cf0565b7f07000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff86161717915050610ed7565b7f07000000000000000000000000000000000000000000000000000000000000008103610e1357630100000083610dc69190613cf0565b7f08000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff86161717915050610ed7565b7f08000000000000000000000000000000000000000000000000000000000000008103610e8857827f09000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffff00000086161717915050610ed7565b7b0100000000000000000000000000000000000000000000000000000083610eb09190613cf0565b7eff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff8516179150505b92915050565b60008060028773ffffffffffffffffffffffffffffffffffffffff1660001b8760001b8760001b604051602001610f1693929190613d5d565b604051602081830303815290604052604051610f329190613e0b565b602060405180830381855afa158015610f4f573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610f729190613e4e565b60001c905060007f010000000000000000000000000000000000000000000000000000000000000060ff600816610fa99190613cf0565b905060007b0100000000000000000000000000000000000000000000000000000063ffffffff8816610fdb9190613cf0565b9050600079010000000000000000000000000000000000000000000000000061ffff88166110099190613cf0565b905060007701000000000000000000000000000000000000000000000061ffff88166110359190613cf0565b9050600076ffffffffffffffffffffffffffffffffffffffffffffff86169050808284868817171717965050505050505095945050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110c757600080fd5b81600681905550806007819055505050565b600a600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461114757600080fd5b80600a6000848152602001908152602001600020600201819055505050565b3373ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613efe565b60405180910390fd5b806009600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817fda15bafcbe676b9891613a2c80c3da5af73cdc754ded88f81b8805d168d026f98260405161128f9190613aef565b60405180910390a25050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112f357600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60025481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138a57600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035481565b600080600154141580156113ea57506001544310155b156113f457600080fd5b878661ffff168143101561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490613f90565b60405180910390fd5b80824361144a9190613fb0565b1061148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190614056565b60405180910390fd5b60006114a1338d8d8d61ffff168d61ffff16610edd565b905060005b888890508110156115515761153e8e8a8a848181106114c8576114c7614076565b5b9050602002013533858b8b878181106114e4576114e3614076565b5b90506020028101906114f691906140b4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612d29565b808061154990614117565b9150506114a6565b503373ffffffffffffffffffffffffffffffffffffffff16817fcc39f7c5da809af4e5ce0f768011b0b189605665e9a475fd5b037b89d27e3dc18a8a60405161159b9291906141da565b60405180910390a36115b36000898990506000612f6a565b6115c08d89899050613025565b8093505050509998505050505050505050565b600080600154141580156115e957506001544310155b156115f357600080fd5b851580156116225750600a600086815260200190815260200160002060030160009054906101000a900460ff16155b8015611693575060011515600a600087815260200190815260200160002060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b156116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90614270565b60405180910390fd5b6000866116e05785611758565b6002336001886040516020016116f8939291906142f9565b6040516020818303038152906040526040516117149190613e0b565b602060405180830381855afa158015611731573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117549190613e4e565b60001c5b9050600061176b33874360016000610edd565b90503373ffffffffffffffffffffffffffffffffffffffff16817fa9883f48ac9f863ef8a8fe91a8601f65dc78038702e6fcaa3cf3974491f8f2986001600089896040516117bc9493929190614414565b60405180910390a36117cf3383836130d7565b6117dd600160006001612f6a565b876117ee576117ed8760016131a7565b5b809250505095945050505050565b6000806001541415801561181257506001544310155b1561181c57600080fd5b8615801561184b5750600a600087815260200190815260200160002060030160009054906101000a900460ff16155b80156118bc575060011515600a600088815260200190815260200160002060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b156118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390614270565b60405180910390fd5b600087611909578661197e565b6002338860405160200161191e929190614454565b60405160208183030381529060405260405161193a9190613e0b565b602060405180830381855afa158015611957573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061197a9190613e4e565b60001c5b905060006119973388888861ffff168861ffff16610edd565b90506119a43383836130d7565b6119b16000806001612f6a565b886119c2576119c18860016131a7565b5b80925050509695505050505050565b600080600154141580156119e757506001544310155b156119f157600080fd5b868681431015611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90613f90565b60405180910390fd5b808243611a439190613fb0565b10611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a90614056565b60405180910390fd5b6000611a96338c8c8b61ffff168d610edd565b90503373ffffffffffffffffffffffffffffffffffffffff16817fa9883f48ac9f863ef8a8fe91a8601f65dc78038702e6fcaa3cf3974491f8f2988a8a8a8a604051611ae5949392919061448f565b60405180910390a3611afa6001600080612f6a565b809350505050979650505050505050565b60008033600085604051602001611b24939291906142f9565b6040516020818303038152906040528051906020012060001c9050600073ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb9061451b565b60405180910390fd5b33600a600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600a600083815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a600083815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506001600a600083815260200190815260200160002060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600a6000838152602001908152602001600020600501819055506000600a600083815260200190815260200160002060060181905550611d68613259565b3373ffffffffffffffffffffffffffffffffffffffff16817faa55ad3fded29b31eab447a3e3cecb043e9ddae9965800194939050335e27f1960405160405180910390a38091505092915050565b60008033600084604051602001611dcf939291906142f9565b6040516020818303038152906040528051906020012060001c9050600073ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e869061451b565b60405180910390fd5b336009600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336009600083815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f416132d2565b3373ffffffffffffffffffffffffffffffffffffffff16817fa3a1b11490ea5f0c711803d02b09c5ccf6521fed33475a71d3b98f3346a6284560405160405180910390a380915050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612055906145ad565b60405180910390fd5b80600a600084815260200190815260200160002060030160006101000a81548160ff021916908315150217905550817fedb5c815238135871499392e7be66bbd1cd3d121c568ebec34bfba6a8c2cd3ca826040516120bc9190613c39565b60405180910390a25050565b60075481565b600881565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e9061463f565b60405180910390fd5b600a600083815260200190815260200160002060040160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690558073ffffffffffffffffffffffffffffffffffffffff16827f74b1631dcf536a672902f49b612fa764e3f6ab09d4fd9b07078cf7579ea61fe060006040516122229190613c39565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c990613efe565b60405180910390fd5b80600a600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817fd908a772f1d8d894c2afb554f6dfe559a4dc0353c52b5b5fc215ead31e84b041826040516123579190613aef565b60405180910390a25050565b60065481565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16908060050154908060060154905086565b60096020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124f057600080fd5b8060018190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461259e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612595906146d1565b60405180910390fd5b6001600a600084815260200190815260200160002060040160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff16827f74b1631dcf536a672902f49b612fa764e3f6ab09d4fd9b07078cf7579ea61fe060016040516126529190613c39565b60405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126b657600080fd5b826003819055508160048190555080600581905550505050565b600080600154141580156126e657506001544310155b156126f057600080fd5b6000612701338a4360016000610edd565b90503373ffffffffffffffffffffffffffffffffffffffff16817fa9883f48ac9f863ef8a8fe91a8601f65dc78038702e6fcaa3cf3974491f8f2986001600088886040516127529493929190614414565b60405180910390a360005b88889050811015612808576127f58b8a8a8481811061277f5761277e614076565b5b9050602002013533858b8b8781811061279b5761279a614076565b5b90506020028101906127ad91906140b4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612d29565b808061280090614117565b91505061275d565b503373ffffffffffffffffffffffffffffffffffffffff16817fcc39f7c5da809af4e5ce0f768011b0b189605665e9a475fd5b037b89d27e3dc18a8a6040516128529291906141da565b60405180910390a361286a6001898990506000612f6a565b6128778a89899050613025565b8091505098975050505050505050565b600060096000848152602001908152602001600020600301600083815260200190815260200160002054905092915050565b60015481565b6009600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461292d57600080fd5b8060096000848152602001908152602001600020600201819055505050565b600060096000848152602001908152602001600020600401600083815260200190815260200160002054905092915050565b6000600a600084815260200190815260200160002060040160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60055481565b3373ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8a90614763565b60405180910390fd5b806009600084815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817fcd6776a701d1f46cedbde11c2aacb639f05fc728f293fd41600684fe5c43cbf982604051612b1891906147d8565b60405180910390a25050565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90614763565b60405180910390fd5b80600a600084815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817f317a3ec8b8e71d4ee37815347e867862f6f07d66fbf1ad4792900f03b469acd182604051612c4d91906147d8565b60405180910390a25050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cb157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d2657806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600073ffffffffffffffffffffffffffffffffffffffff166009600087815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc59061483f565b60405180910390fd5b6000608043612ddd919061488e565b905060006009600088815260200190815260200160002060040160008781526020019081526020016000205403612e82576000600b6000878152602001908152602001600020549050612e30818361098d565b600b60008881526020019081526020016000208190555085877f2fc8540c7fa7456234e69bb608fb5aa0aad4b1b0740ef22aebfc8d3de85919b683604051612e7891906133da565b60405180910390a3505b6000600960008881526020019081526020016000206003016000878152602001908152602001600020549050612eb8818361098d565b6009600089815260200190815260200160002060030160008881526020019081526020016000208190555060016009600089815260200190815260200160002060040160008881526020019081526020016000206000828254612f1b91906148bf565b9250508190555086867fe2ac8f8ba87d85124444f834142485235b43e5aaa6d16ba156bfe51d63c890df87878588604051612f59949392919061492c565b60405180910390a350505050505050565b600081600554612f7a9190613cf0565b83600454612f889190613cf0565b85600354612f969190613cf0565b612fa091906148bf565b612faa91906148bf565b9050600081111561301f57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561301d573d6000803e3d6000fd5b505b50505050565b60008160096000858152602001908152602001600020600201546130499190613cf0565b905060008111156130d2576009600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156130d0573d6000803e3d6000fd5b505b505050565b6000600a600084815260200190815260200160002060050154905061310881608043613103919061488e565b61098d565b600a6000858152602001908152602001600020600501819055506001600a6000858152602001908152602001600020600601600082825461314991906148bf565b92505081905550828473ffffffffffffffffffffffffffffffffffffffff167fa5801dae3862809332fdd1d7df90a336e075fb2d2b25badf3d0da5779cb510508484604051613199929190614978565b60405180910390a350505050565b600081600a6000858152602001908152602001600020600201546131cb9190613cf0565b9050600081111561325457600a600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613252573d6000803e3d6000fd5b505b505050565b600060065411156132d057600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6006549081150290604051600060405180830381858888f193505050501580156132ce573d6000803e3d6000fd5b505b565b6000600754111561334957600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6007549081150290604051600060405180830381858888f19350505050158015613347573d6000803e3d6000fd5b505b565b600080fd5b600080fd5b6000819050919050565b61336881613355565b811461337357600080fd5b50565b6000813590506133858161335f565b92915050565b600080604083850312156133a2576133a161334b565b5b60006133b085828601613376565b92505060206133c185828601613376565b9150509250929050565b6133d481613355565b82525050565b60006020820190506133ef60008301846133cb565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613420826133f5565b9050919050565b61343081613415565b811461343b57600080fd5b50565b60008135905061344d81613427565b92915050565b600080600080600060a0868803121561346f5761346e61334b565b5b600061347d8882890161343e565b955050602061348e88828901613376565b945050604061349f88828901613376565b93505060606134b088828901613376565b92505060806134c188828901613376565b9150509295509295909350565b600080604083850312156134e5576134e461334b565b5b60006134f385828601613376565b92505060206135048582860161343e565b9150509250929050565b6000613519826133f5565b9050919050565b6135298161350e565b811461353457600080fd5b50565b60008135905061354681613520565b92915050565b6000602082840312156135625761356161334b565b5b600061357084828501613537565b91505092915050565b600061ffff82169050919050565b61359081613579565b811461359b57600080fd5b50565b6000813590506135ad81613587565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126135d8576135d76135b3565b5b8235905067ffffffffffffffff8111156135f5576135f46135b8565b5b602083019150836020820283011115613611576136106135bd565b5b9250929050565b60008083601f84011261362e5761362d6135b3565b5b8235905067ffffffffffffffff81111561364b5761364a6135b8565b5b602083019150836020820283011115613667576136666135bd565b5b9250929050565b600080600080600080600080600060e08a8c0312156136905761368f61334b565b5b600061369e8c828d01613376565b99505060206136af8c828d01613376565b98505060406136c08c828d01613376565b97505060606136d18c828d0161359e565b96505060806136e28c828d0161359e565b95505060a08a013567ffffffffffffffff81111561370357613702613350565b5b61370f8c828d016135c2565b945094505060c08a013567ffffffffffffffff81111561373257613731613350565b5b61373e8c828d01613618565b92509250509295985092959850929598565b60008115159050919050565b61376581613750565b811461377057600080fd5b50565b6000813590506137828161375c565b92915050565b60008083601f84011261379e5761379d6135b3565b5b8235905067ffffffffffffffff8111156137bb576137ba6135b8565b5b6020830191508360018202830111156137d7576137d66135bd565b5b9250929050565b6000806000806000608086880312156137fa576137f961334b565b5b600061380888828901613773565b955050602061381988828901613376565b945050604061382a88828901613376565b935050606086013567ffffffffffffffff81111561384b5761384a613350565b5b61385788828901613788565b92509250509295509295909350565b60008060008060008060c087890312156138835761388261334b565b5b600061389189828a01613773565b96505060206138a289828a01613376565b95505060406138b389828a01613376565b94505060606138c489828a01613376565b93505060806138d589828a0161359e565b92505060a06138e689828a0161359e565b9150509295509295509295565b600080600080600080600060c0888a0312156139125761391161334b565b5b60006139208a828b01613376565b97505060206139318a828b01613376565b96505060406139428a828b01613376565b95505060606139538a828b0161359e565b94505060806139648a828b0161359e565b93505060a088013567ffffffffffffffff81111561398557613984613350565b5b6139918a828b01613788565b925092505092959891949750929550565b600080604083850312156139b9576139b861334b565b5b60006139c785828601613376565b92505060206139d885828601613773565b9150509250929050565b6000602082840312156139f8576139f761334b565b5b6000613a0684828501613376565b91505092915050565b613a188161350e565b82525050565b6000602082019050613a336000830184613a0f565b92915050565b613a4281613415565b82525050565b613a5181613750565b82525050565b600060c082019050613a6c6000830189613a39565b613a796020830188613a0f565b613a8660408301876133cb565b613a936060830186613a48565b613aa060808301856133cb565b613aad60a08301846133cb565b979650505050505050565b6000606082019050613acd6000830186613a39565b613ada6020830185613a0f565b613ae760408301846133cb565b949350505050565b6000602082019050613b046000830184613a39565b92915050565b600080600060608486031215613b2357613b2261334b565b5b6000613b3186828701613376565b9350506020613b4286828701613376565b9250506040613b5386828701613376565b9150509250925092565b60008060008060008060008060a0898b031215613b7d57613b7c61334b565b5b6000613b8b8b828c01613376565b9850506020613b9c8b828c01613376565b975050604089013567ffffffffffffffff811115613bbd57613bbc613350565b5b613bc98b828c016135c2565b9650965050606089013567ffffffffffffffff811115613bec57613beb613350565b5b613bf88b828c01613618565b9450945050608089013567ffffffffffffffff811115613c1b57613c1a613350565b5b613c278b828c01613788565b92509250509295985092959890939650565b6000602082019050613c4e6000830184613a48565b92915050565b60008060408385031215613c6b57613c6a61334b565b5b6000613c7985828601613376565b9250506020613c8a85828601613537565b9150509250929050565b600060208284031215613caa57613ca961334b565b5b6000613cb88482850161343e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cfb82613355565b9150613d0683613355565b9250828202613d1481613355565b91508282048414831517613d2b57613d2a613cc1565b5b5092915050565b6000819050919050565b6000819050919050565b613d57613d5282613d32565b613d3c565b82525050565b6000613d698286613d46565b602082019150613d798285613d46565b602082019150613d898284613d46565b602082019150819050949350505050565b600081519050919050565b600081905092915050565b60005b83811015613dce578082015181840152602081019050613db3565b60008484015250505050565b6000613de582613d9a565b613def8185613da5565b9350613dff818560208601613db0565b80840191505092915050565b6000613e178284613dda565b915081905092915050565b613e2b81613d32565b8114613e3657600080fd5b50565b600081519050613e4881613e22565b92915050565b600060208284031215613e6457613e6361334b565b5b6000613e7284828501613e39565b91505092915050565b600082825260208201905092915050565b7f596f7520617265206e6f7420616c6c6f77656420746f207472616e736665722060008201527f6f776e657273686970206f662074686973206665656400000000000000000000602082015250565b6000613ee8603683613e7b565b9150613ef382613e8c565b604082019050919050565b60006020820190508181036000830152613f1781613edb565b9050919050565b7f4e756d626572206c657373207468616e206669727374426c6f636b4e756d626560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f7a602183613e7b565b9150613f8582613f1e565b604082019050919050565b60006020820190508181036000830152613fa981613f6d565b9050919050565b6000613fbb82613355565b9150613fc683613355565b9250828203905081811115613fde57613fdd613cc1565b5b92915050565b7f4e756d626572206d6f7265207468616e206669727374426c6f636b4e756d626560008201527f72202b20626c6f636b436f756e744c6f636b0000000000000000000000000000602082015250565b6000614040603283613e7b565b915061404b82613fe4565b604082019050919050565b6000602082019050818103600083015261406f81614033565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126140d1576140d06140a5565b5b80840192508235915067ffffffffffffffff8211156140f3576140f26140aa565b5b60208301925060018202360383131561410f5761410e6140af565b5b509250929050565b600061412282613355565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361415457614153613cc1565b5b600182019050919050565b600082825260208201905092915050565b600080fd5b82818337505050565b600061418a838561415f565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156141bd576141bc614170565b5b6020830292506141ce838584614175565b82840190509392505050565b600060208201905081810360008301526141f581848661417e565b90509392505050565b7f596f7520617265206e6f7420616c6c6f77656420746f20777269746520746f2060008201527f7468697320666565640000000000000000000000000000000000000000000000602082015250565b600061425a602983613e7b565b9150614265826141fe565b604082019050919050565b600060208201905081810360008301526142898161424d565b9050919050565b60008160601b9050919050565b60006142a882614290565b9050919050565b60006142ba8261429d565b9050919050565b6142d26142cd82613415565b6142af565b82525050565b6000819050919050565b6142f36142ee82613355565b6142d8565b82525050565b600061430582866142c1565b60148201915061431582856142e2565b60208201915061432582846142e2565b602082019150819050949350505050565b6000819050919050565b6000819050919050565b600061436561436061435b84614336565b614340565b613579565b9050919050565b6143758161434a565b82525050565b6000819050919050565b60006143a061439b6143968461437b565b614340565b613579565b9050919050565b6143b081614385565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006143f383856143b6565b93506144008385846143c7565b614409836143d6565b840190509392505050565b6000606082019050614429600083018761436c565b61443660208301866143a7565b81810360408301526144498184866143e7565b905095945050505050565b600061446082856142c1565b60148201915061447082846142e2565b6020820191508190509392505050565b61448981613579565b82525050565b60006060820190506144a46000830187614480565b6144b16020830186614480565b81810360408301526144c48184866143e7565b905095945050505050565b7f4665656420616c72656164792065786973747300000000000000000000000000600082015250565b6000614505601383613e7b565b9150614510826144cf565b602082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f206368616e676520707560008201527f626c6963697479206f6620746869732066656564000000000000000000000000602082015250565b6000614597603483613e7b565b91506145a28261453b565b604082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f2072656d6f766520777260008201527f69746572732066726f6d20746869732066656564000000000000000000000000602082015250565b6000614629603483613e7b565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f2061646420777269746560008201527f727320746f207468697320666565640000000000000000000000000000000000602082015250565b60006146bb602f83613e7b565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f207365742062656e656660008201527f696369617279206f662074686973206665656400000000000000000000000000602082015250565b600061474d603383613e7b565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b600061479e614799614794846133f5565b614340565b6133f5565b9050919050565b60006147b082614783565b9050919050565b60006147c2826147a5565b9050919050565b6147d2816147b7565b82525050565b60006020820190506147ed60008301846147c9565b92915050565b7f4665656420646f6573206e6f7420657869737400000000000000000000000000600082015250565b6000614829601383613e7b565b9150614834826147f3565b602082019050919050565b600060208201905081810360008301526148588161481c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061489982613355565b91506148a483613355565b9250826148b4576148b361485f565b5b828204905092915050565b60006148ca82613355565b91506148d583613355565b92508282019050808211156148ed576148ec613cc1565b5b92915050565b60006148fe82613d9a565b61490881856143b6565b9350614918818560208601613db0565b614921816143d6565b840191505092915050565b60006080820190506149416000830187613a39565b61494e60208301866133cb565b61495b60408301856133cb565b818103606083015261496d81846148f3565b905095945050505050565b600060408201905061498d60008301856133cb565b61499a60208301846133cb565b939250505056fea26469706673582212203b22fd1ee123e99396805020a68311cbf82b0701dcb56a2159bdf7035c8f9ab664736f6c63430008110033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c80636d1655eb1161012e578063d13c43cd116100ab578063dcd0ed1c1161006f578063dcd0ed1c146108aa578063e294d915146108e7578063e522872d14610912578063ebaa83c81461093b578063f2fde38b1461096457610246565b8063d13c43cd146107ac578063d4f28d37146107dc578063d646a8db14610819578063d6e8acf414610844578063d9acd5bd1461086d57610246565b80638da5cb5b116100f25780638da5cb5b146106c95780639f8b5ec5146106f4578063c1cb13b914610731578063c433cbe71461075a578063cec10c111461078357610246565b80636d1655eb146105cb5780636e4d820a146105f45780637908f1da1461061d5780638a8089f5146106485780638cae695a1461068a57610246565b806325f52865116101bc57806338af3eed1161018057806338af3eed146104f657806340bda4021461052157806344b3b8201461054c578063495a8fe61461057557806354fd4d50146105a057610246565b806325f52865146104065780632ba30276146104365780632ff5c7771461046657806335954dbb1461049657806337b85743146104c657610246565b80630c08bf88116102035780630c08bf881461034057806317634514146103575780631c31f710146103825780631eecf500146103ab57806322143c94146103d657610246565b80630123fc801461024b578063023b13a81461028857806305fefda7146102c557806307e6a613146102ee5780630b729bb81461031757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d919061338b565b61098d565b60405161027f91906133da565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190613453565b610edd565b6040516102bc91906133da565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e7919061338b565b61106f565b005b3480156102fa57600080fd5b506103156004803603810190610310919061338b565b6110d9565b005b34801561032357600080fd5b5061033e600480360381019061033991906134ce565b611166565b005b34801561034c57600080fd5b5061035561129b565b005b34801561036357600080fd5b5061036c61132c565b60405161037991906133da565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a4919061354c565b611332565b005b3480156103b757600080fd5b506103c06113ce565b6040516103cd91906133da565b60405180910390f35b6103f060048036038101906103eb919061366e565b6113d4565b6040516103fd91906133da565b60405180910390f35b610420600480360381019061041b91906137de565b6115d3565b60405161042d91906133da565b60405180910390f35b610450600480360381019061044b9190613866565b6117fc565b60405161045d91906133da565b60405180910390f35b610480600480360381019061047b91906138f3565b6119d1565b60405161048d91906133da565b60405180910390f35b6104b060048036038101906104ab91906139a2565b611b0b565b6040516104bd91906133da565b60405180910390f35b6104e060048036038101906104db91906139e2565b611db6565b6040516104ed91906133da565b60405180910390f35b34801561050257600080fd5b5061050b611f8e565b6040516105189190613a1e565b60405180910390f35b34801561052d57600080fd5b50610536611fb4565b60405161054391906133da565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e91906139a2565b611fba565b005b34801561058157600080fd5b5061058a6120c8565b60405161059791906133da565b60405180910390f35b3480156105ac57600080fd5b506105b56120ce565b6040516105c291906133da565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906134ce565b6120d3565b005b34801561060057600080fd5b5061061b600480360381019061061691906134ce565b61222e565b005b34801561062957600080fd5b50610632612363565b60405161063f91906133da565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a91906139e2565b612369565b60405161068196959493929190613a57565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac91906139e2565b6123f2565b6040516106c093929190613ab8565b60405180910390f35b3480156106d557600080fd5b506106de61245c565b6040516106eb9190613aef565b60405180910390f35b34801561070057600080fd5b5061071b600480360381019061071691906139e2565b612480565b60405161072891906133da565b60405180910390f35b34801561073d57600080fd5b50610758600480360381019061075391906139e2565b612498565b005b34801561076657600080fd5b50610781600480360381019061077c91906134ce565b6124fa565b005b34801561078f57600080fd5b506107aa60048036038101906107a59190613b0a565b61265e565b005b6107c660048036038101906107c19190613b5d565b6126d0565b6040516107d391906133da565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe919061338b565b612887565b60405161081091906133da565b60405180910390f35b34801561082557600080fd5b5061082e6128b9565b60405161083b91906133da565b60405180910390f35b34801561085057600080fd5b5061086b6004803603810190610866919061338b565b6128bf565b005b34801561087957600080fd5b50610894600480360381019061088f919061338b565b61294c565b6040516108a191906133da565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc91906134ce565b61297e565b6040516108de9190613c39565b60405180910390f35b3480156108f357600080fd5b506108fc6129e9565b60405161090991906133da565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613c54565b6129ef565b005b34801561094757600080fd5b50610962600480360381019061095d9190613c54565b612b24565b005b34801561097057600080fd5b5061098b60048036038101906109869190613c94565b612c59565b005b600062ffffff8216915060007fff000000000000000000000000000000000000000000000000000000000000008416905060008103610a38577801000000000000000000000000000000000000000000000000836109eb9190613cf0565b7f01000000000000000000000000000000000000000000000000000000000000007effffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff86161717915050610ed7565b7f01000000000000000000000000000000000000000000000000000000000000008103610ace57750100000000000000000000000000000000000000000083610a819190613cf0565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff86161717915050610ed7565b7f02000000000000000000000000000000000000000000000000000000000000008103610b6157720100000000000000000000000000000000000083610b149190613cf0565b7f03000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff86161717915050610ed7565b7f03000000000000000000000000000000000000000000000000000000000000008103610bf1576f0100000000000000000000000000000083610ba49190613cf0565b7f04000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff86161717915050610ed7565b7f04000000000000000000000000000000000000000000000000000000000000008103610c7e576c0100000000000000000000000083610c319190613cf0565b7f05000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff86161717915050610ed7565b7f05000000000000000000000000000000000000000000000000000000000000008103610d0857690100000000000000000083610cbb9190613cf0565b7f06000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff86161717915050610ed7565b7f06000000000000000000000000000000000000000000000000000000000000008103610d8f57660100000000000083610d429190613cf0565b7f07000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff86161717915050610ed7565b7f07000000000000000000000000000000000000000000000000000000000000008103610e1357630100000083610dc69190613cf0565b7f08000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff86161717915050610ed7565b7f08000000000000000000000000000000000000000000000000000000000000008103610e8857827f09000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffff00000086161717915050610ed7565b7b0100000000000000000000000000000000000000000000000000000083610eb09190613cf0565b7eff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff8516179150505b92915050565b60008060028773ffffffffffffffffffffffffffffffffffffffff1660001b8760001b8760001b604051602001610f1693929190613d5d565b604051602081830303815290604052604051610f329190613e0b565b602060405180830381855afa158015610f4f573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610f729190613e4e565b60001c905060007f010000000000000000000000000000000000000000000000000000000000000060ff600816610fa99190613cf0565b905060007b0100000000000000000000000000000000000000000000000000000063ffffffff8816610fdb9190613cf0565b9050600079010000000000000000000000000000000000000000000000000061ffff88166110099190613cf0565b905060007701000000000000000000000000000000000000000000000061ffff88166110359190613cf0565b9050600076ffffffffffffffffffffffffffffffffffffffffffffff86169050808284868817171717965050505050505095945050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110c757600080fd5b81600681905550806007819055505050565b600a600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461114757600080fd5b80600a6000848152602001908152602001600020600201819055505050565b3373ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613efe565b60405180910390fd5b806009600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817fda15bafcbe676b9891613a2c80c3da5af73cdc754ded88f81b8805d168d026f98260405161128f9190613aef565b60405180910390a25050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112f357600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60025481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138a57600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035481565b600080600154141580156113ea57506001544310155b156113f457600080fd5b878661ffff168143101561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490613f90565b60405180910390fd5b80824361144a9190613fb0565b1061148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190614056565b60405180910390fd5b60006114a1338d8d8d61ffff168d61ffff16610edd565b905060005b888890508110156115515761153e8e8a8a848181106114c8576114c7614076565b5b9050602002013533858b8b878181106114e4576114e3614076565b5b90506020028101906114f691906140b4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612d29565b808061154990614117565b9150506114a6565b503373ffffffffffffffffffffffffffffffffffffffff16817fcc39f7c5da809af4e5ce0f768011b0b189605665e9a475fd5b037b89d27e3dc18a8a60405161159b9291906141da565b60405180910390a36115b36000898990506000612f6a565b6115c08d89899050613025565b8093505050509998505050505050505050565b600080600154141580156115e957506001544310155b156115f357600080fd5b851580156116225750600a600086815260200190815260200160002060030160009054906101000a900460ff16155b8015611693575060011515600a600087815260200190815260200160002060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b156116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90614270565b60405180910390fd5b6000866116e05785611758565b6002336001886040516020016116f8939291906142f9565b6040516020818303038152906040526040516117149190613e0b565b602060405180830381855afa158015611731573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117549190613e4e565b60001c5b9050600061176b33874360016000610edd565b90503373ffffffffffffffffffffffffffffffffffffffff16817fa9883f48ac9f863ef8a8fe91a8601f65dc78038702e6fcaa3cf3974491f8f2986001600089896040516117bc9493929190614414565b60405180910390a36117cf3383836130d7565b6117dd600160006001612f6a565b876117ee576117ed8760016131a7565b5b809250505095945050505050565b6000806001541415801561181257506001544310155b1561181c57600080fd5b8615801561184b5750600a600087815260200190815260200160002060030160009054906101000a900460ff16155b80156118bc575060011515600a600088815260200190815260200160002060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b156118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390614270565b60405180910390fd5b600087611909578661197e565b6002338860405160200161191e929190614454565b60405160208183030381529060405260405161193a9190613e0b565b602060405180830381855afa158015611957573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061197a9190613e4e565b60001c5b905060006119973388888861ffff168861ffff16610edd565b90506119a43383836130d7565b6119b16000806001612f6a565b886119c2576119c18860016131a7565b5b80925050509695505050505050565b600080600154141580156119e757506001544310155b156119f157600080fd5b868681431015611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90613f90565b60405180910390fd5b808243611a439190613fb0565b10611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a90614056565b60405180910390fd5b6000611a96338c8c8b61ffff168d610edd565b90503373ffffffffffffffffffffffffffffffffffffffff16817fa9883f48ac9f863ef8a8fe91a8601f65dc78038702e6fcaa3cf3974491f8f2988a8a8a8a604051611ae5949392919061448f565b60405180910390a3611afa6001600080612f6a565b809350505050979650505050505050565b60008033600085604051602001611b24939291906142f9565b6040516020818303038152906040528051906020012060001c9050600073ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb9061451b565b60405180910390fd5b33600a600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600a600083815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a600083815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506001600a600083815260200190815260200160002060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600a6000838152602001908152602001600020600501819055506000600a600083815260200190815260200160002060060181905550611d68613259565b3373ffffffffffffffffffffffffffffffffffffffff16817faa55ad3fded29b31eab447a3e3cecb043e9ddae9965800194939050335e27f1960405160405180910390a38091505092915050565b60008033600084604051602001611dcf939291906142f9565b6040516020818303038152906040528051906020012060001c9050600073ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e869061451b565b60405180910390fd5b336009600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336009600083815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f416132d2565b3373ffffffffffffffffffffffffffffffffffffffff16817fa3a1b11490ea5f0c711803d02b09c5ccf6521fed33475a71d3b98f3346a6284560405160405180910390a380915050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612055906145ad565b60405180910390fd5b80600a600084815260200190815260200160002060030160006101000a81548160ff021916908315150217905550817fedb5c815238135871499392e7be66bbd1cd3d121c568ebec34bfba6a8c2cd3ca826040516120bc9190613c39565b60405180910390a25050565b60075481565b600881565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e9061463f565b60405180910390fd5b600a600083815260200190815260200160002060040160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690558073ffffffffffffffffffffffffffffffffffffffff16827f74b1631dcf536a672902f49b612fa764e3f6ab09d4fd9b07078cf7579ea61fe060006040516122229190613c39565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c990613efe565b60405180910390fd5b80600a600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817fd908a772f1d8d894c2afb554f6dfe559a4dc0353c52b5b5fc215ead31e84b041826040516123579190613aef565b60405180910390a25050565b60065481565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16908060050154908060060154905086565b60096020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124f057600080fd5b8060018190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461259e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612595906146d1565b60405180910390fd5b6001600a600084815260200190815260200160002060040160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff16827f74b1631dcf536a672902f49b612fa764e3f6ab09d4fd9b07078cf7579ea61fe060016040516126529190613c39565b60405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126b657600080fd5b826003819055508160048190555080600581905550505050565b600080600154141580156126e657506001544310155b156126f057600080fd5b6000612701338a4360016000610edd565b90503373ffffffffffffffffffffffffffffffffffffffff16817fa9883f48ac9f863ef8a8fe91a8601f65dc78038702e6fcaa3cf3974491f8f2986001600088886040516127529493929190614414565b60405180910390a360005b88889050811015612808576127f58b8a8a8481811061277f5761277e614076565b5b9050602002013533858b8b8781811061279b5761279a614076565b5b90506020028101906127ad91906140b4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612d29565b808061280090614117565b91505061275d565b503373ffffffffffffffffffffffffffffffffffffffff16817fcc39f7c5da809af4e5ce0f768011b0b189605665e9a475fd5b037b89d27e3dc18a8a6040516128529291906141da565b60405180910390a361286a6001898990506000612f6a565b6128778a89899050613025565b8091505098975050505050505050565b600060096000848152602001908152602001600020600301600083815260200190815260200160002054905092915050565b60015481565b6009600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461292d57600080fd5b8060096000848152602001908152602001600020600201819055505050565b600060096000848152602001908152602001600020600401600083815260200190815260200160002054905092915050565b6000600a600084815260200190815260200160002060040160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60055481565b3373ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8a90614763565b60405180910390fd5b806009600084815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817fcd6776a701d1f46cedbde11c2aacb639f05fc728f293fd41600684fe5c43cbf982604051612b1891906147d8565b60405180910390a25050565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90614763565b60405180910390fd5b80600a600084815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817f317a3ec8b8e71d4ee37815347e867862f6f07d66fbf1ad4792900f03b469acd182604051612c4d91906147d8565b60405180910390a25050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cb157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d2657806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600073ffffffffffffffffffffffffffffffffffffffff166009600087815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc59061483f565b60405180910390fd5b6000608043612ddd919061488e565b905060006009600088815260200190815260200160002060040160008781526020019081526020016000205403612e82576000600b6000878152602001908152602001600020549050612e30818361098d565b600b60008881526020019081526020016000208190555085877f2fc8540c7fa7456234e69bb608fb5aa0aad4b1b0740ef22aebfc8d3de85919b683604051612e7891906133da565b60405180910390a3505b6000600960008881526020019081526020016000206003016000878152602001908152602001600020549050612eb8818361098d565b6009600089815260200190815260200160002060030160008881526020019081526020016000208190555060016009600089815260200190815260200160002060040160008881526020019081526020016000206000828254612f1b91906148bf565b9250508190555086867fe2ac8f8ba87d85124444f834142485235b43e5aaa6d16ba156bfe51d63c890df87878588604051612f59949392919061492c565b60405180910390a350505050505050565b600081600554612f7a9190613cf0565b83600454612f889190613cf0565b85600354612f969190613cf0565b612fa091906148bf565b612faa91906148bf565b9050600081111561301f57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561301d573d6000803e3d6000fd5b505b50505050565b60008160096000858152602001908152602001600020600201546130499190613cf0565b905060008111156130d2576009600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156130d0573d6000803e3d6000fd5b505b505050565b6000600a600084815260200190815260200160002060050154905061310881608043613103919061488e565b61098d565b600a6000858152602001908152602001600020600501819055506001600a6000858152602001908152602001600020600601600082825461314991906148bf565b92505081905550828473ffffffffffffffffffffffffffffffffffffffff167fa5801dae3862809332fdd1d7df90a336e075fb2d2b25badf3d0da5779cb510508484604051613199929190614978565b60405180910390a350505050565b600081600a6000858152602001908152602001600020600201546131cb9190613cf0565b9050600081111561325457600a600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613252573d6000803e3d6000fd5b505b505050565b600060065411156132d057600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6006549081150290604051600060405180830381858888f193505050501580156132ce573d6000803e3d6000fd5b505b565b6000600754111561334957600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6007549081150290604051600060405180830381858888f19350505050158015613347573d6000803e3d6000fd5b505b565b600080fd5b600080fd5b6000819050919050565b61336881613355565b811461337357600080fd5b50565b6000813590506133858161335f565b92915050565b600080604083850312156133a2576133a161334b565b5b60006133b085828601613376565b92505060206133c185828601613376565b9150509250929050565b6133d481613355565b82525050565b60006020820190506133ef60008301846133cb565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613420826133f5565b9050919050565b61343081613415565b811461343b57600080fd5b50565b60008135905061344d81613427565b92915050565b600080600080600060a0868803121561346f5761346e61334b565b5b600061347d8882890161343e565b955050602061348e88828901613376565b945050604061349f88828901613376565b93505060606134b088828901613376565b92505060806134c188828901613376565b9150509295509295909350565b600080604083850312156134e5576134e461334b565b5b60006134f385828601613376565b92505060206135048582860161343e565b9150509250929050565b6000613519826133f5565b9050919050565b6135298161350e565b811461353457600080fd5b50565b60008135905061354681613520565b92915050565b6000602082840312156135625761356161334b565b5b600061357084828501613537565b91505092915050565b600061ffff82169050919050565b61359081613579565b811461359b57600080fd5b50565b6000813590506135ad81613587565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126135d8576135d76135b3565b5b8235905067ffffffffffffffff8111156135f5576135f46135b8565b5b602083019150836020820283011115613611576136106135bd565b5b9250929050565b60008083601f84011261362e5761362d6135b3565b5b8235905067ffffffffffffffff81111561364b5761364a6135b8565b5b602083019150836020820283011115613667576136666135bd565b5b9250929050565b600080600080600080600080600060e08a8c0312156136905761368f61334b565b5b600061369e8c828d01613376565b99505060206136af8c828d01613376565b98505060406136c08c828d01613376565b97505060606136d18c828d0161359e565b96505060806136e28c828d0161359e565b95505060a08a013567ffffffffffffffff81111561370357613702613350565b5b61370f8c828d016135c2565b945094505060c08a013567ffffffffffffffff81111561373257613731613350565b5b61373e8c828d01613618565b92509250509295985092959850929598565b60008115159050919050565b61376581613750565b811461377057600080fd5b50565b6000813590506137828161375c565b92915050565b60008083601f84011261379e5761379d6135b3565b5b8235905067ffffffffffffffff8111156137bb576137ba6135b8565b5b6020830191508360018202830111156137d7576137d66135bd565b5b9250929050565b6000806000806000608086880312156137fa576137f961334b565b5b600061380888828901613773565b955050602061381988828901613376565b945050604061382a88828901613376565b935050606086013567ffffffffffffffff81111561384b5761384a613350565b5b61385788828901613788565b92509250509295509295909350565b60008060008060008060c087890312156138835761388261334b565b5b600061389189828a01613773565b96505060206138a289828a01613376565b95505060406138b389828a01613376565b94505060606138c489828a01613376565b93505060806138d589828a0161359e565b92505060a06138e689828a0161359e565b9150509295509295509295565b600080600080600080600060c0888a0312156139125761391161334b565b5b60006139208a828b01613376565b97505060206139318a828b01613376565b96505060406139428a828b01613376565b95505060606139538a828b0161359e565b94505060806139648a828b0161359e565b93505060a088013567ffffffffffffffff81111561398557613984613350565b5b6139918a828b01613788565b925092505092959891949750929550565b600080604083850312156139b9576139b861334b565b5b60006139c785828601613376565b92505060206139d885828601613773565b9150509250929050565b6000602082840312156139f8576139f761334b565b5b6000613a0684828501613376565b91505092915050565b613a188161350e565b82525050565b6000602082019050613a336000830184613a0f565b92915050565b613a4281613415565b82525050565b613a5181613750565b82525050565b600060c082019050613a6c6000830189613a39565b613a796020830188613a0f565b613a8660408301876133cb565b613a936060830186613a48565b613aa060808301856133cb565b613aad60a08301846133cb565b979650505050505050565b6000606082019050613acd6000830186613a39565b613ada6020830185613a0f565b613ae760408301846133cb565b949350505050565b6000602082019050613b046000830184613a39565b92915050565b600080600060608486031215613b2357613b2261334b565b5b6000613b3186828701613376565b9350506020613b4286828701613376565b9250506040613b5386828701613376565b9150509250925092565b60008060008060008060008060a0898b031215613b7d57613b7c61334b565b5b6000613b8b8b828c01613376565b9850506020613b9c8b828c01613376565b975050604089013567ffffffffffffffff811115613bbd57613bbc613350565b5b613bc98b828c016135c2565b9650965050606089013567ffffffffffffffff811115613bec57613beb613350565b5b613bf88b828c01613618565b9450945050608089013567ffffffffffffffff811115613c1b57613c1a613350565b5b613c278b828c01613788565b92509250509295985092959890939650565b6000602082019050613c4e6000830184613a48565b92915050565b60008060408385031215613c6b57613c6a61334b565b5b6000613c7985828601613376565b9250506020613c8a85828601613537565b9150509250929050565b600060208284031215613caa57613ca961334b565b5b6000613cb88482850161343e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cfb82613355565b9150613d0683613355565b9250828202613d1481613355565b91508282048414831517613d2b57613d2a613cc1565b5b5092915050565b6000819050919050565b6000819050919050565b613d57613d5282613d32565b613d3c565b82525050565b6000613d698286613d46565b602082019150613d798285613d46565b602082019150613d898284613d46565b602082019150819050949350505050565b600081519050919050565b600081905092915050565b60005b83811015613dce578082015181840152602081019050613db3565b60008484015250505050565b6000613de582613d9a565b613def8185613da5565b9350613dff818560208601613db0565b80840191505092915050565b6000613e178284613dda565b915081905092915050565b613e2b81613d32565b8114613e3657600080fd5b50565b600081519050613e4881613e22565b92915050565b600060208284031215613e6457613e6361334b565b5b6000613e7284828501613e39565b91505092915050565b600082825260208201905092915050565b7f596f7520617265206e6f7420616c6c6f77656420746f207472616e736665722060008201527f6f776e657273686970206f662074686973206665656400000000000000000000602082015250565b6000613ee8603683613e7b565b9150613ef382613e8c565b604082019050919050565b60006020820190508181036000830152613f1781613edb565b9050919050565b7f4e756d626572206c657373207468616e206669727374426c6f636b4e756d626560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f7a602183613e7b565b9150613f8582613f1e565b604082019050919050565b60006020820190508181036000830152613fa981613f6d565b9050919050565b6000613fbb82613355565b9150613fc683613355565b9250828203905081811115613fde57613fdd613cc1565b5b92915050565b7f4e756d626572206d6f7265207468616e206669727374426c6f636b4e756d626560008201527f72202b20626c6f636b436f756e744c6f636b0000000000000000000000000000602082015250565b6000614040603283613e7b565b915061404b82613fe4565b604082019050919050565b6000602082019050818103600083015261406f81614033565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126140d1576140d06140a5565b5b80840192508235915067ffffffffffffffff8211156140f3576140f26140aa565b5b60208301925060018202360383131561410f5761410e6140af565b5b509250929050565b600061412282613355565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361415457614153613cc1565b5b600182019050919050565b600082825260208201905092915050565b600080fd5b82818337505050565b600061418a838561415f565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156141bd576141bc614170565b5b6020830292506141ce838584614175565b82840190509392505050565b600060208201905081810360008301526141f581848661417e565b90509392505050565b7f596f7520617265206e6f7420616c6c6f77656420746f20777269746520746f2060008201527f7468697320666565640000000000000000000000000000000000000000000000602082015250565b600061425a602983613e7b565b9150614265826141fe565b604082019050919050565b600060208201905081810360008301526142898161424d565b9050919050565b60008160601b9050919050565b60006142a882614290565b9050919050565b60006142ba8261429d565b9050919050565b6142d26142cd82613415565b6142af565b82525050565b6000819050919050565b6142f36142ee82613355565b6142d8565b82525050565b600061430582866142c1565b60148201915061431582856142e2565b60208201915061432582846142e2565b602082019150819050949350505050565b6000819050919050565b6000819050919050565b600061436561436061435b84614336565b614340565b613579565b9050919050565b6143758161434a565b82525050565b6000819050919050565b60006143a061439b6143968461437b565b614340565b613579565b9050919050565b6143b081614385565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006143f383856143b6565b93506144008385846143c7565b614409836143d6565b840190509392505050565b6000606082019050614429600083018761436c565b61443660208301866143a7565b81810360408301526144498184866143e7565b905095945050505050565b600061446082856142c1565b60148201915061447082846142e2565b6020820191508190509392505050565b61448981613579565b82525050565b60006060820190506144a46000830187614480565b6144b16020830186614480565b81810360408301526144c48184866143e7565b905095945050505050565b7f4665656420616c72656164792065786973747300000000000000000000000000600082015250565b6000614505601383613e7b565b9150614510826144cf565b602082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f206368616e676520707560008201527f626c6963697479206f6620746869732066656564000000000000000000000000602082015250565b6000614597603483613e7b565b91506145a28261453b565b604082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f2072656d6f766520777260008201527f69746572732066726f6d20746869732066656564000000000000000000000000602082015250565b6000614629603483613e7b565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f2061646420777269746560008201527f727320746f207468697320666565640000000000000000000000000000000000602082015250565b60006146bb602f83613e7b565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f207365742062656e656660008201527f696369617279206f662074686973206665656400000000000000000000000000602082015250565b600061474d603383613e7b565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b600061479e614799614794846133f5565b614340565b6133f5565b9050919050565b60006147b082614783565b9050919050565b60006147c2826147a5565b9050919050565b6147d2816147b7565b82525050565b60006020820190506147ed60008301846147c9565b92915050565b7f4665656420646f6573206e6f7420657869737400000000000000000000000000600082015250565b6000614829601383613e7b565b9150614834826147f3565b602082019050919050565b600060208201905081810360008301526148588161481c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061489982613355565b91506148a483613355565b9250826148b4576148b361485f565b5b828204905092915050565b60006148ca82613355565b91506148d583613355565b92508282019050808211156148ed576148ec613cc1565b5b92915050565b60006148fe82613d9a565b61490881856143b6565b9350614918818560208601613db0565b614921816143d6565b840191505092915050565b60006080820190506149416000830187613a39565b61494e60208301866133cb565b61495b60408301856133cb565b818103606083015261496d81846148f3565b905095945050505050565b600060408201905061498d60008301856133cb565b61499a60208301846133cb565b939250505056fea26469706673582212203b22fd1ee123e99396805020a68311cbf82b0701dcb56a2159bdf7035c8f9ab664736f6c63430008110033
Deployed Bytecode Sourcemap
8068:17954:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5873:1437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14195:980;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1795:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12813:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22674:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;455:85;;;;;;;;;;;;;:::i;:::-;;623:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2105:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1166:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18155:810;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19663:840;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20511:836;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21471:557;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23412:787;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22121:545;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1436:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1206:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24961:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1336:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8166:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25668:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24207:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1284:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8271:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;8210:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;89:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8338:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1000:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25318:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1553:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17454:693;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13218:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;585:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12572:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13407:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13060:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1244:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23031:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24572:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;296:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5873:1437;5961:7;6009:8;5995:11;:22;5981:36;;6039:15;3994:66;6057:10;:19;6039:37;;6102:1;6091:7;:12;6087:1216;;5697:66;6161:11;:22;;;;:::i;:::-;4095:66;3101;6128:10;:19;6127:30;:57;6120:64;;;;;6087:1216;4095:66;6215:7;:17;6211:1092;;5596:66;6290:11;:22;;;;:::i;:::-;4194:66;3200;6257:10;:19;6256:30;:57;6249:64;;;;;6211:1092;4194:66;6344:7;:17;6340:963;;5495:66;6419:11;:22;;;;:::i;:::-;4293:66;3299;6386:10;:19;6385:30;:57;6378:64;;;;;6340:963;4293:66;6473:7;:17;6469:834;;5394:66;6548:11;:22;;;;:::i;:::-;4392:66;3398;6515:10;:19;6514:30;:57;6507:64;;;;;6469:834;4392:66;6602:7;:17;6598:705;;5293:66;6677:11;:22;;;;:::i;:::-;4491:66;3497;6644:10;:19;6643:30;:57;6636:64;;;;;6598:705;4491:66;6731:7;:17;6727:576;;5192:66;6806:11;:22;;;;:::i;:::-;4590:66;3596;6773:10;:19;6772:30;:57;6765:64;;;;;6727:576;4590:66;6860:7;:17;6856:447;;5091:66;6935:11;:22;;;;:::i;:::-;4689:66;3695;6902:10;:19;6901:30;:57;6894:64;;;;;6856:447;4689:66;6989:7;:17;6985:318;;4990:66;7064:11;:22;;;;:::i;:::-;4788:66;3794;7031:10;:19;7030:30;:57;7023:64;;;;;6985:318;4788:66;7118:7;:17;7114:189;;7192:11;4887:66;3893;7160:10;:19;7159:30;:44;7152:51;;;;;7114:189;5798:66;7268:11;:22;;;;:::i;:::-;3002:66;7244:10;:19;7243:48;7236:55;;;5873:1437;;;;;:::o;14195:980::-;14351:7;14371:13;14395:108;14439:13;14423:31;;14415:40;;14465:8;14457:17;;14484:16;14476:25;;14402:100;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14395:108;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14387:117;;14371:133;;14517:19;14558:65;14550:4;8200:1;14540:14;14539:84;;;;:::i;:::-;14517:106;;14634:23;14694:57;14680:10;14661:16;:29;14660:91;;;;:::i;:::-;14634:117;;14762:22;14811:53;14801:6;14788:10;:19;14787:77;;;;:::i;:::-;14762:102;;14875:26;14932:49;14922:6;14905:14;:23;14904:77;;;;:::i;:::-;14875:106;;14994:16;15021:48;15013:5;:56;14994:75;;15159:8;15138:18;15121:14;15103:15;15089:11;:29;:46;:67;:78;15082:85;;;;;;;;14195:980;;;;;;;:::o;1795:302::-;227:5;;;;;;;;;;213:19;;:10;:19;;;209:60;;249:8;;;209:60;1943:27:::1;1914:26;:56;;;;2008:25;1981:24;:52;;;;1795:302:::0;;:::o;12813:239::-;12918:14;:22;12933:6;12918:22;;;;;;;;;;;:28;;;;;;;;;;;;12904:42;;:10;:42;;;12900:83;;12963:8;;;12900:83;13031:13;12993:14;:22;13008:6;12993:22;;;;;;;;;;;:35;;:51;;;;12813:239;;:::o;22674:349::-;22798:10;22768:40;;:12;:20;22781:6;22768:20;;;;;;;;;;;:26;;;;;;;;;;;;:40;;;22764:137;;22825:64;;;;;;;;;;:::i;:::-;;;;;;;;22764:137;22942:8;22913:12;:20;22926:6;22913:20;;;;;;;;;;;:26;;;:37;;;;;;;;;;;;;;;;;;22998:6;22966:49;23006:8;22966:49;;;;;;:::i;:::-;;;;;;;;22674:349;;:::o;455:85::-;227:5;;;;;;;;;;213:19;;:10;:19;;;209:60;;249:8;;;209:60;525:5:::1;::::0;::::1;;;;;;;;504:28;;;623::::0;;;;:::o;2105:116::-;227:5;;;;;;;;;;213:19;;:10;:19;;;209:60;;249:8;;;209:60;2201:12:::1;2187:11;;:26;;;;;;;;;;;;;;;;;;2105:116:::0;:::o;1166:33::-;;;;:::o;18155:810::-;18490:7;820:1;800:16;;:21;;:57;;;;;841:16;;825:12;:32;;800:57;796:98;;;874:8;;;796:98;18447:16:::1;18465:14;12206:358;;12305:16;12290:12;:31;12286:107;;;12338:43;;;;;;;;;;:::i;:::-;;;;;;;;12286:107;12442:14;12422:16;12407:12;:31;;;;:::i;:::-;:49;12403:142;;12473:60;;;;;;;;;;:::i;:::-;;;;;;;;12403:142;18510:17:::2;18530:82;18545:10;18557:8;18567:16;18585:10;18530:82;;18597:14;18530:82;;:14;:82::i;:::-;18510:102;;18628:6;18623:139;18644:10;;:17;;18640:1;:21;18623:139;;;18683:67;18696:6;18704:10;;18715:1;18704:13;;;;;;;:::i;:::-;;;;;;;;18719:10;18731:9;18742:4;;18747:1;18742:7;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;18683:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:67::i;:::-;18663:3;;;;;:::i;:::-;;;;18623:139;;;;18806:10;18777:52;;18795:9;18777:52;18818:10;;18777:52;;;;;;;:::i;:::-;;;;;;;;18842:31;18849:1;18852:10;;:17;;18871:1;18842:6;:31::i;:::-;18884:44;18902:6;18910:10;;:17;;18884;:44::i;:::-;18948:9;18941:16;;;904:1:::1;;18155:810:::0;;;;;;;;;;;:::o;19663:840::-;19799:7;820:1;800:16;;:21;;:57;;;;;841:16;;825:12;:32;;800:57;796:98;;;874:8;;;796:98;19824:10:::1;19823:11;:47;;;;;19839:14;:22;19854:6;19839:22;;;;;;;;;;;:31;;;;;;;;;;;;19838:32;19823:47;:101;;;;;19920:4;19874:50;;:14;:22;19889:6;19874:22;;;;;;;;;;;:30;;:42;19905:10;19874:42;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;19823:101;19819:185;;;19941:51;;;;;;;;;;:::i;:::-;;;;;;;;19819:185;20016:22;20041:10;:87;;20122:6;20041:87;;;20062:56;20086:10;20106:1;20110:6;20069:48;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20062:56;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20054:65;;20041:87;20016:112;;20141:17;20161:56;20176:10;20188:8;20198:12;20212:1;20215;20161:14;:56::i;:::-;20141:76;;20261:10;20235:52;;20250:9;20235:52;20273:1;20276;20279:7;;20235:52;;;;;;;;;:::i;:::-;;;;;;;;20298:56;20316:10;20328:14;20344:9;20298:17;:56::i;:::-;20367:15;20374:1;20377;20380;20367:6;:15::i;:::-;20398:10;20393:74;;20425:30;20445:6;20453:1;20425:19;:30::i;:::-;20393:74;20486:9;20479:16;;;;19663:840:::0;;;;;;;:::o;20511:836::-;20697:7;820:1;800:16;;:21;;:57;;;;;841:16;;825:12;:32;;800:57;796:98;;;874:8;;;796:98;20722:10:::1;20721:11;:47;;;;;20737:14;:22;20752:6;20737:22;;;;;;;;;;;:31;;;;;;;;;;;;20736:32;20721:47;:101;;;;;20818:4;20772:50;;:14;:22;20787:6;20772:22;;;;;;;;;;;:30;;:42;20803:10;20772:42;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;20721:101;20717:185;;;20839:51;;;;;;;;;;:::i;:::-;;;;;;;;20717:185;20914:22;20939:10;:75;;21008:6;20939:75;;;20960:44;20984:10;20996:6;20967:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20960:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20952:53;;20939:75;20914:100;;21027:17;21047:82;21062:10;21074:8;21084:16;21102:10;21047:82;;21114:14;21047:82;;:14;:82::i;:::-;21027:102;;21142:56;21160:10;21172:14;21188:9;21142:17;:56::i;:::-;21211:15;21218:1;21221::::0;21224::::1;21211:6;:15::i;:::-;21242:10;21237:74;;21269:30;21289:6;21297:1;21269:19;:30::i;:::-;21237:74;21330:9;21323:16;;;;20511:836:::0;;;;;;;;:::o;21471:557::-;21768:7;820:1;800:16;;:21;;:57;;;;;841:16;;825:12;:32;;800:57;796:98;;;874:8;;;796:98;21725:16:::1;21743:14;12305:16;12290:12;:31;12286:107;;;12338:43;;;;;;;;;;:::i;:::-;;;;;;;;12286:107;12442:14;12422:16;12407:12;:31;;;;:::i;:::-;:49;12403:142;;12473:60;;;;;;;;;;:::i;:::-;;;;;;;;12403:142;21788:17:::2;21808:77;21823:10;21835:8;21845:16;21863:5;21808:77;;21870:14;21808;:77::i;:::-;21788:97;;21927:10;21901:62;;21916:9;21901:62;21939:5;21946:7;21955;;21901:62;;;;;;;;;:::i;:::-;;;;;;;;21976:15;21983:1;21986;21989::::0;21976:6:::2;:15::i;:::-;22011:9;22004:16;;;904:1:::1;;21471:557:::0;;;;;;;;;:::o;23412:787::-;23498:7;23518:14;23570:10;23590:1;23594:8;23553:50;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23543:61;;;;;;23535:70;;23518:87;;23662:1;23622:42;;:14;:22;23637:6;23622:22;;;;;;;;;;;:28;;;;;;;;;;;;:42;;;23618:104;;23681:29;;;;;;;;;;:::i;:::-;;;;;;;;23618:104;23773:10;23742:14;:22;23757:6;23742:22;;;;;;;;;;;:28;;;:41;;;;;;;;;;;;;;;;;;23839:10;23794:14;:22;23809:6;23794:22;;;;;;;;;;;:34;;;:56;;;;;;;;;;;;;;;;;;23895:8;23861:14;:22;23876:6;23861:22;;;;;;;;;;;:31;;;:42;;;;;;;;;;;;;;;;;;23959:4;23914:14;:22;23929:6;23914:22;;;;;;;;;;;:30;;:42;23945:10;23914:42;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;24013:1;23974:14;:22;23989:6;23974:22;;;;;;;;;;;:36;;:40;;;;24064:1;24025:14;:22;24040:6;24025:22;;;;;;;;;;;:36;;:40;;;;24078:29;:27;:29::i;:::-;24154:10;24125:40;;24146:6;24125:40;;;;;;;;;;24185:6;24178:13;;;23412:787;;;;:::o;22121:545::-;22190:7;22210:14;22262:10;22282:1;22286:8;22245:50;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22235:61;;;;;;22227:70;;22210:87;;22352:1;22314:40;;:12;:20;22327:6;22314:20;;;;;;;;;;;:26;;;;;;;;;;;;:40;;;22310:102;;22371:29;;;;;;;;;;:::i;:::-;;;;;;;;22310:102;22461:10;22432:12;:20;22445:6;22432:20;;;;;;;;;;;:26;;;:39;;;;;;;;;;;;;;;;;;22525:10;22482:12;:20;22495:6;22482:20;;;;;;;;;;;:32;;;:54;;;;;;;;;;;;;;;;;;22549:27;:25;:27::i;:::-;22621:10;22594:38;;22613:6;22594:38;;;;;;;;;;22652:6;22645:13;;;22121:545;;;:::o;1436:34::-;;;;;;;;;;;;;:::o;1206:31::-;;;;:::o;24961:349::-;25084:10;25052:42;;:14;:22;25067:6;25052:22;;;;;;;;;;;:28;;;;;;;;;;;;:42;;;25048:137;;25111:62;;;;;;;;;;:::i;:::-;;;;;;;;25048:137;25231:8;25197:14;:22;25212:6;25197:22;;;;;;;;;;;:31;;;:42;;;;;;;;;;;;;;;;;;25285:6;25255:47;25293:8;25255:47;;;;;;:::i;:::-;;;;;;;;24961:349;;:::o;1336:43::-;;;;:::o;8166:35::-;8200:1;8166:35;:::o;25668:351::-;25789:10;25757:42;;:14;:22;25772:6;25757:22;;;;;;;;;;;:28;;;;;;;;;;;;:42;;;25753:137;;25816:62;;;;;;;;;;:::i;:::-;;;;;;;;25753:137;25909:14;:22;25924:6;25909:22;;;;;;;;;;;:30;;:38;25940:6;25909:38;;;;;;;;;;;;;;;;25902:45;;;;;;;;;;;25997:6;25963:48;;25989:6;25963:48;26005:5;25963:48;;;;;;:::i;:::-;;;;;;;;25668:351;;:::o;24207:357::-;24335:10;24303:42;;:14;:22;24318:6;24303:22;;;;;;;;;;;:28;;;;;;;;;;;;:42;;;24299:139;;24362:64;;;;;;;;;;:::i;:::-;;;;;;;;24299:139;24481:8;24450:14;:22;24465:6;24450:22;;;;;;;;;;;:28;;;:39;;;;;;;;;;;;;;;;;;24539:6;24505:51;24547:8;24505:51;;;;;;:::i;:::-;;;;;;;;24207:357;;:::o;1284:45::-;;;;:::o;8271:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8210:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;89:20::-;;;;;;;;;;;;:::o;8338:73::-;;;;;;;;;;;;;;;;;:::o;1000:118::-;227:5;;;;;;;;;;213:19;;:10;:19;;;209:60;;249:8;;;209:60;1099:11:::1;1080:16;:30;;;;1000:118:::0;:::o;25318:342::-;25436:10;25404:42;;:14;:22;25419:6;25404:22;;;;;;;;;;;:28;;;;;;;;;;;;:42;;;25400:132;;25463:57;;;;;;;;;;:::i;:::-;;;;;;;;25400:132;25585:4;25544:14;:22;25559:6;25544:22;;;;;;;;;;;:30;;:38;25575:6;25544:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;25639:6;25605:47;;25631:6;25605:47;25647:4;25605:47;;;;;;:::i;:::-;;;;;;;;25318:342;;:::o;1553:234::-;227:5;;;;;;;;;;213:19;;:10;:19;;;209:60;;249:8;;;209:60;1686:15:::1;1669:14;:32;;;;1727:13;1712:12;:28;;;;1766:13;1751:12;:28;;;;1553:234:::0;;;:::o;17454:693::-;17626:7;820:1;800:16;;:21;;:57;;;;;841:16;;825:12;:32;;800:57;796:98;;;874:8;;;796:98;17646:17:::1;17666:56;17681:10;17693:8;17703:12;17717:1;17720;17666:14;:56::i;:::-;17646:76;;17766:10;17740:52;;17755:9;17740:52;17778:1;17781;17784:7;;17740:52;;;;;;;;;:::i;:::-;;;;;;;;17810:6;17805:139;17826:10;;:17;;17822:1;:21;17805:139;;;17865:67;17878:6;17886:10;;17897:1;17886:13;;;;;;;:::i;:::-;;;;;;;;17901:10;17913:9;17924:4;;17929:1;17924:7;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;17865:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:67::i;:::-;17845:3;;;;;:::i;:::-;;;;17805:139;;;;17988:10;17959:52;;17977:9;17959:52;18000:10;;17959:52;;;;;;;:::i;:::-;;;;;;;;18024:31;18031:1;18034:10;;:17;;18053:1;18024:6;:31::i;:::-;18066:44;18084:6;18092:10;;:17;;18066;:44::i;:::-;18130:9;18123:16;;;17454:693:::0;;;;;;;;;;:::o;13218:181::-;13312:7;13339:12;:20;13352:6;13339:20;;;;;;;;;;;:41;;:52;13381:9;13339:52;;;;;;;;;;;;13332:59;;13218:181;;;;:::o;585:31::-;;;;:::o;12572:233::-;12675:12;:20;12688:6;12675:20;;;;;;;;;;;:26;;;;;;;;;;;;12661:40;;:10;:40;;;12657:81;;12718:8;;;12657:81;12784:13;12748:12;:20;12761:6;12748:20;;;;;;;;;;;:33;;:49;;;;12572:233;;:::o;13407:191::-;13509:7;13536:12;:20;13549:6;13536:20;;;;;;;;;;;:43;;:54;13580:9;13536:54;;;;;;;;;;;;13529:61;;13407:191;;;;:::o;13060:150::-;13142:4;13166:14;:22;13181:6;13166:22;;;;;;;;;;;:30;;:36;13197:4;13166:36;;;;;;;;;;;;;;;;;;;;;;;;;13159:43;;13060:150;;;;:::o;1244:31::-;;;;:::o;23031:373::-;23166:10;23136:40;;:12;:20;23149:6;23136:20;;;;;;;;;;;:26;;;;;;;;;;;;:40;;;23132:134;;23193:61;;;;;;;;;;:::i;:::-;;;;;;;;23132:134;23313:14;23278:12;:20;23291:6;23278:20;;;;;;;;;;;:32;;;:49;;;;;;;;;;;;;;;;;;23373:6;23343:53;23381:14;23343:53;;;;;;:::i;:::-;;;;;;;;23031:373;;:::o;24572:381::-;24711:10;24679:42;;:14;:22;24694:6;24679:22;;;;;;;;;;;:28;;;;;;;;;;;;:42;;;24675:136;;24738:61;;;;;;;;;;:::i;:::-;;;;;;;;24675:136;24860:14;24823;:22;24838:6;24823:22;;;;;;;;;;;:34;;;:51;;;;;;;;;;;;;;;;;;24922:6;24890:55;24930:14;24890:55;;;;;;:::i;:::-;;;;;;;;24572:381;;:::o;296:151::-;227:5;;;;;;;;;;213:19;;:10;:19;;;209:60;;249:8;;;209:60;393:1:::1;373:22;;:8;:22;;;369:71;;420:8;412:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;369:71;296:151:::0;:::o;15469:1977::-;15635:1;15597:40;;:12;:20;15610:6;15597:20;;;;;;;;;;;:26;;;;;;;;;;;;:40;;;15593:102;;15654:29;;;;;;;;;;:::i;:::-;;;;;;;;15593:102;15705:21;15744:3;15729:12;:18;;;;:::i;:::-;15705:42;;15814:1;15762:12;:20;15775:6;15762:20;;;;;;;;;;;:43;;:48;15806:3;15762:48;;;;;;;;;;;;:53;15758:383;;15832:41;15876:37;:42;15914:3;15876:42;;;;;;;;;;;;15832:86;;15978:66;15995:33;16030:13;15978:16;:66::i;:::-;15933:37;:42;15971:3;15933:42;;;;;;;;;;;:111;;;;16090:3;16082:6;16064:65;16095:33;16064:65;;;;;;:::i;:::-;;;;;;;;15817:324;15758:383;16777:19;16799:12;:20;16812:6;16799:20;;;;;;;;;;;:41;;:46;16841:3;16799:46;;;;;;;;;;;;16777:68;;16905:44;16922:11;16935:13;16905:16;:44::i;:::-;16856:12;:20;16869:6;16856:20;;;;;;;;;;;:41;;:46;16898:3;16856:46;;;;;;;;;;;:93;;;;17072:1;17020:12;:20;17033:6;17020:20;;;;;;;;;;;:43;;:48;17064:3;17020:48;;;;;;;;;;;;:53;;;;;;;:::i;:::-;;;;;;;;17394:6;17389:3;17380:58;17402:6;17410:9;17421:11;17434:3;17380:58;;;;;;;;;:::i;:::-;;;;;;;;15582:1864;;15469:1977;;;;;:::o;2609:309::-;2715:18;2811:10;2796:12;;:25;;;;:::i;:::-;2783:10;2768:12;;:25;;;;:::i;:::-;2753:12;2736:14;;:29;;;;:::i;:::-;:57;;;;:::i;:::-;:85;;;;:::i;:::-;2715:106;;2849:1;2836:10;:14;2832:79;;;2867:11;;;;;;;;;;;:20;;:32;2888:10;2867:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2832:79;2704:214;2609:309;;;:::o;13606:246::-;13691:18;13748:10;13712:12;:20;13725:6;13712:20;;;;;;;;;;;:33;;;:46;;;;:::i;:::-;13691:67;;13780:1;13767:10;:14;13763:85;;;13789:12;:20;13802:6;13789:20;;;;;;;;;;;:32;;;;;;;;;;;;:41;;:53;13831:10;13789:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13763:85;13686:166;13606:246;;:::o;19283:372::-;19381:15;19399:14;:22;19414:6;19399:22;;;;;;;;;;;:36;;;19381:54;;19485:45;19502:7;19526:3;19511:12;:18;;;;:::i;:::-;19485:16;:45::i;:::-;19446:14;:22;19461:6;19446:22;;;;;;;;;;;:36;;:84;;;;19581:1;19541:14;:22;19556:6;19541:22;;;;;;;;;;;:36;;;:41;;;;;;;:::i;:::-;;;;;;;;19620:6;19612;19598:49;;;19628:9;19639:7;19598:49;;;;;;;:::i;:::-;;;;;;;;19370:285;19283:372;;;:::o;13860:261::-;13953:18;14012:10;13974:14;:22;13989:6;13974:22;;;;;;;;;;;:35;;;:48;;;;:::i;:::-;13953:69;;14044:1;14031:10;:14;14027:87;;;14053:14;:22;14068:6;14053:22;;;;;;;;;;;:34;;;;;;;;;;;;:43;;:55;14097:10;14053:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14027:87;13942:179;13860:261;;:::o;2229:185::-;2329:1;2300:26;;:30;2296:111;;;2347:11;;;;;;;;;;;:20;;:48;2368:26;;2347:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2296:111;2229:185::o;2422:179::-;2518:1;2491:24;;:28;2487:107;;;2536:11;;;;;;;;;;;:20;;:46;2557:24;;2536:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2487:107;2422:179::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:118::-;1257:24;1275:5;1257:24;:::i;:::-;1252:3;1245:37;1170:118;;:::o;1294:222::-;1387:4;1425:2;1414:9;1410:18;1402:26;;1438:71;1506:1;1495:9;1491:17;1482:6;1438:71;:::i;:::-;1294:222;;;;:::o;1522:126::-;1559:7;1599:42;1592:5;1588:54;1577:65;;1522:126;;;:::o;1654:96::-;1691:7;1720:24;1738:5;1720:24;:::i;:::-;1709:35;;1654:96;;;:::o;1756:122::-;1829:24;1847:5;1829:24;:::i;:::-;1822:5;1819:35;1809:63;;1868:1;1865;1858:12;1809:63;1756:122;:::o;1884:139::-;1930:5;1968:6;1955:20;1946:29;;1984:33;2011:5;1984:33;:::i;:::-;1884:139;;;;:::o;2029:911::-;2124:6;2132;2140;2148;2156;2205:3;2193:9;2184:7;2180:23;2176:33;2173:120;;;2212:79;;:::i;:::-;2173:120;2332:1;2357:53;2402:7;2393:6;2382:9;2378:22;2357:53;:::i;:::-;2347:63;;2303:117;2459:2;2485:53;2530:7;2521:6;2510:9;2506:22;2485:53;:::i;:::-;2475:63;;2430:118;2587:2;2613:53;2658:7;2649:6;2638:9;2634:22;2613:53;:::i;:::-;2603:63;;2558:118;2715:2;2741:53;2786:7;2777:6;2766:9;2762:22;2741:53;:::i;:::-;2731:63;;2686:118;2843:3;2870:53;2915:7;2906:6;2895:9;2891:22;2870:53;:::i;:::-;2860:63;;2814:119;2029:911;;;;;;;;:::o;2946:474::-;3014:6;3022;3071:2;3059:9;3050:7;3046:23;3042:32;3039:119;;;3077:79;;:::i;:::-;3039:119;3197:1;3222:53;3267:7;3258:6;3247:9;3243:22;3222:53;:::i;:::-;3212:63;;3168:117;3324:2;3350:53;3395:7;3386:6;3375:9;3371:22;3350:53;:::i;:::-;3340:63;;3295:118;2946:474;;;;;:::o;3426:104::-;3471:7;3500:24;3518:5;3500:24;:::i;:::-;3489:35;;3426:104;;;:::o;3536:138::-;3617:32;3643:5;3617:32;:::i;:::-;3610:5;3607:43;3597:71;;3664:1;3661;3654:12;3597:71;3536:138;:::o;3680:155::-;3734:5;3772:6;3759:20;3750:29;;3788:41;3823:5;3788:41;:::i;:::-;3680:155;;;;:::o;3841:345::-;3908:6;3957:2;3945:9;3936:7;3932:23;3928:32;3925:119;;;3963:79;;:::i;:::-;3925:119;4083:1;4108:61;4161:7;4152:6;4141:9;4137:22;4108:61;:::i;:::-;4098:71;;4054:125;3841:345;;;;:::o;4192:89::-;4228:7;4268:6;4261:5;4257:18;4246:29;;4192:89;;;:::o;4287:120::-;4359:23;4376:5;4359:23;:::i;:::-;4352:5;4349:34;4339:62;;4397:1;4394;4387:12;4339:62;4287:120;:::o;4413:137::-;4458:5;4496:6;4483:20;4474:29;;4512:32;4538:5;4512:32;:::i;:::-;4413:137;;;;:::o;4556:117::-;4665:1;4662;4655:12;4679:117;4788:1;4785;4778:12;4802:117;4911:1;4908;4901:12;4942:568;5015:8;5025:6;5075:3;5068:4;5060:6;5056:17;5052:27;5042:122;;5083:79;;:::i;:::-;5042:122;5196:6;5183:20;5173:30;;5226:18;5218:6;5215:30;5212:117;;;5248:79;;:::i;:::-;5212:117;5362:4;5354:6;5350:17;5338:29;;5416:3;5408:4;5400:6;5396:17;5386:8;5382:32;5379:41;5376:128;;;5423:79;;:::i;:::-;5376:128;4942:568;;;;;:::o;5531:579::-;5615:8;5625:6;5675:3;5668:4;5660:6;5656:17;5652:27;5642:122;;5683:79;;:::i;:::-;5642:122;5796:6;5783:20;5773:30;;5826:18;5818:6;5815:30;5812:117;;;5848:79;;:::i;:::-;5812:117;5962:4;5954:6;5950:17;5938:29;;6016:3;6008:4;6000:6;5996:17;5986:8;5982:32;5979:41;5976:128;;;6023:79;;:::i;:::-;5976:128;5531:579;;;;;:::o;6116:1681::-;6292:6;6300;6308;6316;6324;6332;6340;6348;6356;6405:3;6393:9;6384:7;6380:23;6376:33;6373:120;;;6412:79;;:::i;:::-;6373:120;6532:1;6557:53;6602:7;6593:6;6582:9;6578:22;6557:53;:::i;:::-;6547:63;;6503:117;6659:2;6685:53;6730:7;6721:6;6710:9;6706:22;6685:53;:::i;:::-;6675:63;;6630:118;6787:2;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6758:118;6915:2;6941:52;6985:7;6976:6;6965:9;6961:22;6941:52;:::i;:::-;6931:62;;6886:117;7042:3;7069:52;7113:7;7104:6;7093:9;7089:22;7069:52;:::i;:::-;7059:62;;7013:118;7198:3;7187:9;7183:19;7170:33;7230:18;7222:6;7219:30;7216:117;;;7252:79;;:::i;:::-;7216:117;7365:80;7437:7;7428:6;7417:9;7413:22;7365:80;:::i;:::-;7347:98;;;;7141:314;7522:3;7511:9;7507:19;7494:33;7554:18;7546:6;7543:30;7540:117;;;7576:79;;:::i;:::-;7540:117;7689:91;7772:7;7763:6;7752:9;7748:22;7689:91;:::i;:::-;7671:109;;;;7465:325;6116:1681;;;;;;;;;;;:::o;7803:90::-;7837:7;7880:5;7873:13;7866:21;7855:32;;7803:90;;;:::o;7899:116::-;7969:21;7984:5;7969:21;:::i;:::-;7962:5;7959:32;7949:60;;8005:1;8002;7995:12;7949:60;7899:116;:::o;8021:133::-;8064:5;8102:6;8089:20;8080:29;;8118:30;8142:5;8118:30;:::i;:::-;8021:133;;;;:::o;8173:552::-;8230:8;8240:6;8290:3;8283:4;8275:6;8271:17;8267:27;8257:122;;8298:79;;:::i;:::-;8257:122;8411:6;8398:20;8388:30;;8441:18;8433:6;8430:30;8427:117;;;8463:79;;:::i;:::-;8427:117;8577:4;8569:6;8565:17;8553:29;;8631:3;8623:4;8615:6;8611:17;8601:8;8597:32;8594:41;8591:128;;;8638:79;;:::i;:::-;8591:128;8173:552;;;;;:::o;8731:957::-;8825:6;8833;8841;8849;8857;8906:3;8894:9;8885:7;8881:23;8877:33;8874:120;;;8913:79;;:::i;:::-;8874:120;9033:1;9058:50;9100:7;9091:6;9080:9;9076:22;9058:50;:::i;:::-;9048:60;;9004:114;9157:2;9183:53;9228:7;9219:6;9208:9;9204:22;9183:53;:::i;:::-;9173:63;;9128:118;9285:2;9311:53;9356:7;9347:6;9336:9;9332:22;9311:53;:::i;:::-;9301:63;;9256:118;9441:2;9430:9;9426:18;9413:32;9472:18;9464:6;9461:30;9458:117;;;9494:79;;:::i;:::-;9458:117;9607:64;9663:7;9654:6;9643:9;9639:22;9607:64;:::i;:::-;9589:82;;;;9384:297;8731:957;;;;;;;;:::o;9694:1047::-;9793:6;9801;9809;9817;9825;9833;9882:3;9870:9;9861:7;9857:23;9853:33;9850:120;;;9889:79;;:::i;:::-;9850:120;10009:1;10034:50;10076:7;10067:6;10056:9;10052:22;10034:50;:::i;:::-;10024:60;;9980:114;10133:2;10159:53;10204:7;10195:6;10184:9;10180:22;10159:53;:::i;:::-;10149:63;;10104:118;10261:2;10287:53;10332:7;10323:6;10312:9;10308:22;10287:53;:::i;:::-;10277:63;;10232:118;10389:2;10415:53;10460:7;10451:6;10440:9;10436:22;10415:53;:::i;:::-;10405:63;;10360:118;10517:3;10544:52;10588:7;10579:6;10568:9;10564:22;10544:52;:::i;:::-;10534:62;;10488:118;10645:3;10672:52;10716:7;10707:6;10696:9;10692:22;10672:52;:::i;:::-;10662:62;;10616:118;9694:1047;;;;;;;;:::o;10747:1251::-;10860:6;10868;10876;10884;10892;10900;10908;10957:3;10945:9;10936:7;10932:23;10928:33;10925:120;;;10964:79;;:::i;:::-;10925:120;11084:1;11109:53;11154:7;11145:6;11134:9;11130:22;11109:53;:::i;:::-;11099:63;;11055:117;11211:2;11237:53;11282:7;11273:6;11262:9;11258:22;11237:53;:::i;:::-;11227:63;;11182:118;11339:2;11365:53;11410:7;11401:6;11390:9;11386:22;11365:53;:::i;:::-;11355:63;;11310:118;11467:2;11493:52;11537:7;11528:6;11517:9;11513:22;11493:52;:::i;:::-;11483:62;;11438:117;11594:3;11621:52;11665:7;11656:6;11645:9;11641:22;11621:52;:::i;:::-;11611:62;;11565:118;11750:3;11739:9;11735:19;11722:33;11782:18;11774:6;11771:30;11768:117;;;11804:79;;:::i;:::-;11768:117;11917:64;11973:7;11964:6;11953:9;11949:22;11917:64;:::i;:::-;11899:82;;;;11693:298;10747:1251;;;;;;;;;;:::o;12004:468::-;12069:6;12077;12126:2;12114:9;12105:7;12101:23;12097:32;12094:119;;;12132:79;;:::i;:::-;12094:119;12252:1;12277:53;12322:7;12313:6;12302:9;12298:22;12277:53;:::i;:::-;12267:63;;12223:117;12379:2;12405:50;12447:7;12438:6;12427:9;12423:22;12405:50;:::i;:::-;12395:60;;12350:115;12004:468;;;;;:::o;12478:329::-;12537:6;12586:2;12574:9;12565:7;12561:23;12557:32;12554:119;;;12592:79;;:::i;:::-;12554:119;12712:1;12737:53;12782:7;12773:6;12762:9;12758:22;12737:53;:::i;:::-;12727:63;;12683:117;12478:329;;;;:::o;12813:142::-;12916:32;12942:5;12916:32;:::i;:::-;12911:3;12904:45;12813:142;;:::o;12961:254::-;13070:4;13108:2;13097:9;13093:18;13085:26;;13121:87;13205:1;13194:9;13190:17;13181:6;13121:87;:::i;:::-;12961:254;;;;:::o;13221:118::-;13308:24;13326:5;13308:24;:::i;:::-;13303:3;13296:37;13221:118;;:::o;13345:109::-;13426:21;13441:5;13426:21;:::i;:::-;13421:3;13414:34;13345:109;;:::o;13460:795::-;13703:4;13741:3;13730:9;13726:19;13718:27;;13755:71;13823:1;13812:9;13808:17;13799:6;13755:71;:::i;:::-;13836:88;13920:2;13909:9;13905:18;13896:6;13836:88;:::i;:::-;13934:72;14002:2;13991:9;13987:18;13978:6;13934:72;:::i;:::-;14016:66;14078:2;14067:9;14063:18;14054:6;14016:66;:::i;:::-;14092:73;14160:3;14149:9;14145:19;14136:6;14092:73;:::i;:::-;14175;14243:3;14232:9;14228:19;14219:6;14175:73;:::i;:::-;13460:795;;;;;;;;;:::o;14261:474::-;14426:4;14464:2;14453:9;14449:18;14441:26;;14477:71;14545:1;14534:9;14530:17;14521:6;14477:71;:::i;:::-;14558:88;14642:2;14631:9;14627:18;14618:6;14558:88;:::i;:::-;14656:72;14724:2;14713:9;14709:18;14700:6;14656:72;:::i;:::-;14261:474;;;;;;:::o;14741:222::-;14834:4;14872:2;14861:9;14857:18;14849:26;;14885:71;14953:1;14942:9;14938:17;14929:6;14885:71;:::i;:::-;14741:222;;;;:::o;14969:619::-;15046:6;15054;15062;15111:2;15099:9;15090:7;15086:23;15082:32;15079:119;;;15117:79;;:::i;:::-;15079:119;15237:1;15262:53;15307:7;15298:6;15287:9;15283:22;15262:53;:::i;:::-;15252:63;;15208:117;15364:2;15390:53;15435:7;15426:6;15415:9;15411:22;15390:53;:::i;:::-;15380:63;;15335:118;15492:2;15518:53;15563:7;15554:6;15543:9;15539:22;15518:53;:::i;:::-;15508:63;;15463:118;14969:619;;;;;:::o;15594:1591::-;15765:6;15773;15781;15789;15797;15805;15813;15821;15870:3;15858:9;15849:7;15845:23;15841:33;15838:120;;;15877:79;;:::i;:::-;15838:120;15997:1;16022:53;16067:7;16058:6;16047:9;16043:22;16022:53;:::i;:::-;16012:63;;15968:117;16124:2;16150:53;16195:7;16186:6;16175:9;16171:22;16150:53;:::i;:::-;16140:63;;16095:118;16280:2;16269:9;16265:18;16252:32;16311:18;16303:6;16300:30;16297:117;;;16333:79;;:::i;:::-;16297:117;16446:80;16518:7;16509:6;16498:9;16494:22;16446:80;:::i;:::-;16428:98;;;;16223:313;16603:2;16592:9;16588:18;16575:32;16634:18;16626:6;16623:30;16620:117;;;16656:79;;:::i;:::-;16620:117;16769:91;16852:7;16843:6;16832:9;16828:22;16769:91;:::i;:::-;16751:109;;;;16546:324;16937:3;16926:9;16922:19;16909:33;16969:18;16961:6;16958:30;16955:117;;;16991:79;;:::i;:::-;16955:117;17104:64;17160:7;17151:6;17140:9;17136:22;17104:64;:::i;:::-;17086:82;;;;16880:298;15594:1591;;;;;;;;;;;:::o;17191:210::-;17278:4;17316:2;17305:9;17301:18;17293:26;;17329:65;17391:1;17380:9;17376:17;17367:6;17329:65;:::i;:::-;17191:210;;;;:::o;17407:490::-;17483:6;17491;17540:2;17528:9;17519:7;17515:23;17511:32;17508:119;;;17546:79;;:::i;:::-;17508:119;17666:1;17691:53;17736:7;17727:6;17716:9;17712:22;17691:53;:::i;:::-;17681:63;;17637:117;17793:2;17819:61;17872:7;17863:6;17852:9;17848:22;17819:61;:::i;:::-;17809:71;;17764:126;17407:490;;;;;:::o;17903:329::-;17962:6;18011:2;17999:9;17990:7;17986:23;17982:32;17979:119;;;18017:79;;:::i;:::-;17979:119;18137:1;18162:53;18207:7;18198:6;18187:9;18183:22;18162:53;:::i;:::-;18152:63;;18108:117;17903:329;;;;:::o;18238:180::-;18286:77;18283:1;18276:88;18383:4;18380:1;18373:15;18407:4;18404:1;18397:15;18424:410;18464:7;18487:20;18505:1;18487:20;:::i;:::-;18482:25;;18521:20;18539:1;18521:20;:::i;:::-;18516:25;;18576:1;18573;18569:9;18598:30;18616:11;18598:30;:::i;:::-;18587:41;;18777:1;18768:7;18764:15;18761:1;18758:22;18738:1;18731:9;18711:83;18688:139;;18807:18;;:::i;:::-;18688:139;18472:362;18424:410;;;;:::o;18840:77::-;18877:7;18906:5;18895:16;;18840:77;;;:::o;18923:79::-;18962:7;18991:5;18980:16;;18923:79;;;:::o;19008:157::-;19113:45;19133:24;19151:5;19133:24;:::i;:::-;19113:45;:::i;:::-;19108:3;19101:58;19008:157;;:::o;19171:538::-;19339:3;19354:75;19425:3;19416:6;19354:75;:::i;:::-;19454:2;19449:3;19445:12;19438:19;;19467:75;19538:3;19529:6;19467:75;:::i;:::-;19567:2;19562:3;19558:12;19551:19;;19580:75;19651:3;19642:6;19580:75;:::i;:::-;19680:2;19675:3;19671:12;19664:19;;19700:3;19693:10;;19171:538;;;;;;:::o;19715:98::-;19766:6;19800:5;19794:12;19784:22;;19715:98;;;:::o;19819:147::-;19920:11;19957:3;19942:18;;19819:147;;;;:::o;19972:246::-;20053:1;20063:113;20077:6;20074:1;20071:13;20063:113;;;20162:1;20157:3;20153:11;20147:18;20143:1;20138:3;20134:11;20127:39;20099:2;20096:1;20092:10;20087:15;;20063:113;;;20210:1;20201:6;20196:3;20192:16;20185:27;20034:184;19972:246;;;:::o;20224:386::-;20328:3;20356:38;20388:5;20356:38;:::i;:::-;20410:88;20491:6;20486:3;20410:88;:::i;:::-;20403:95;;20507:65;20565:6;20560:3;20553:4;20546:5;20542:16;20507:65;:::i;:::-;20597:6;20592:3;20588:16;20581:23;;20332:278;20224:386;;;;:::o;20616:271::-;20746:3;20768:93;20857:3;20848:6;20768:93;:::i;:::-;20761:100;;20878:3;20871:10;;20616:271;;;;:::o;20893:122::-;20966:24;20984:5;20966:24;:::i;:::-;20959:5;20956:35;20946:63;;21005:1;21002;20995:12;20946:63;20893:122;:::o;21021:143::-;21078:5;21109:6;21103:13;21094:22;;21125:33;21152:5;21125:33;:::i;:::-;21021:143;;;;:::o;21170:351::-;21240:6;21289:2;21277:9;21268:7;21264:23;21260:32;21257:119;;;21295:79;;:::i;:::-;21257:119;21415:1;21440:64;21496:7;21487:6;21476:9;21472:22;21440:64;:::i;:::-;21430:74;;21386:128;21170:351;;;;:::o;21527:169::-;21611:11;21645:6;21640:3;21633:19;21685:4;21680:3;21676:14;21661:29;;21527:169;;;;:::o;21702:241::-;21842:34;21838:1;21830:6;21826:14;21819:58;21911:24;21906:2;21898:6;21894:15;21887:49;21702:241;:::o;21949:366::-;22091:3;22112:67;22176:2;22171:3;22112:67;:::i;:::-;22105:74;;22188:93;22277:3;22188:93;:::i;:::-;22306:2;22301:3;22297:12;22290:19;;21949:366;;;:::o;22321:419::-;22487:4;22525:2;22514:9;22510:18;22502:26;;22574:9;22568:4;22564:20;22560:1;22549:9;22545:17;22538:47;22602:131;22728:4;22602:131;:::i;:::-;22594:139;;22321:419;;;:::o;22746:220::-;22886:34;22882:1;22874:6;22870:14;22863:58;22955:3;22950:2;22942:6;22938:15;22931:28;22746:220;:::o;22972:366::-;23114:3;23135:67;23199:2;23194:3;23135:67;:::i;:::-;23128:74;;23211:93;23300:3;23211:93;:::i;:::-;23329:2;23324:3;23320:12;23313:19;;22972:366;;;:::o;23344:419::-;23510:4;23548:2;23537:9;23533:18;23525:26;;23597:9;23591:4;23587:20;23583:1;23572:9;23568:17;23561:47;23625:131;23751:4;23625:131;:::i;:::-;23617:139;;23344:419;;;:::o;23769:194::-;23809:4;23829:20;23847:1;23829:20;:::i;:::-;23824:25;;23863:20;23881:1;23863:20;:::i;:::-;23858:25;;23907:1;23904;23900:9;23892:17;;23931:1;23925:4;23922:11;23919:37;;;23936:18;;:::i;:::-;23919:37;23769:194;;;;:::o;23969:237::-;24109:34;24105:1;24097:6;24093:14;24086:58;24178:20;24173:2;24165:6;24161:15;24154:45;23969:237;:::o;24212:366::-;24354:3;24375:67;24439:2;24434:3;24375:67;:::i;:::-;24368:74;;24451:93;24540:3;24451:93;:::i;:::-;24569:2;24564:3;24560:12;24553:19;;24212:366;;;:::o;24584:419::-;24750:4;24788:2;24777:9;24773:18;24765:26;;24837:9;24831:4;24827:20;24823:1;24812:9;24808:17;24801:47;24865:131;24991:4;24865:131;:::i;:::-;24857:139;;24584:419;;;:::o;25009:180::-;25057:77;25054:1;25047:88;25154:4;25151:1;25144:15;25178:4;25175:1;25168:15;25195:117;25304:1;25301;25294:12;25318:117;25427:1;25424;25417:12;25441:117;25550:1;25547;25540:12;25564:724;25641:4;25647:6;25703:11;25690:25;25803:1;25797:4;25793:12;25782:8;25766:14;25762:29;25758:48;25738:18;25734:73;25724:168;;25811:79;;:::i;:::-;25724:168;25923:18;25913:8;25909:33;25901:41;;25975:4;25962:18;25952:28;;26003:18;25995:6;25992:30;25989:117;;;26025:79;;:::i;:::-;25989:117;26133:2;26127:4;26123:13;26115:21;;26190:4;26182:6;26178:17;26162:14;26158:38;26152:4;26148:49;26145:136;;;26200:79;;:::i;:::-;26145:136;25654:634;25564:724;;;;;:::o;26294:233::-;26333:3;26356:24;26374:5;26356:24;:::i;:::-;26347:33;;26402:66;26395:5;26392:77;26389:103;;26472:18;;:::i;:::-;26389:103;26519:1;26512:5;26508:13;26501:20;;26294:233;;;:::o;26533:184::-;26632:11;26666:6;26661:3;26654:19;26706:4;26701:3;26697:14;26682:29;;26533:184;;;;:::o;26723:117::-;26832:1;26829;26822:12;26846:98;26930:6;26925:3;26920;26907:30;26846:98;;;:::o;26980:537::-;27108:3;27129:86;27208:6;27203:3;27129:86;:::i;:::-;27122:93;;27239:66;27231:6;27228:78;27225:165;;;27309:79;;:::i;:::-;27225:165;27421:4;27413:6;27409:17;27399:27;;27436:43;27472:6;27467:3;27460:5;27436:43;:::i;:::-;27504:6;27499:3;27495:16;27488:23;;26980:537;;;;;:::o;27523:393::-;27676:4;27714:2;27703:9;27699:18;27691:26;;27763:9;27757:4;27753:20;27749:1;27738:9;27734:17;27727:47;27791:118;27904:4;27895:6;27887;27791:118;:::i;:::-;27783:126;;27523:393;;;;;:::o;27922:228::-;28062:34;28058:1;28050:6;28046:14;28039:58;28131:11;28126:2;28118:6;28114:15;28107:36;27922:228;:::o;28156:366::-;28298:3;28319:67;28383:2;28378:3;28319:67;:::i;:::-;28312:74;;28395:93;28484:3;28395:93;:::i;:::-;28513:2;28508:3;28504:12;28497:19;;28156:366;;;:::o;28528:419::-;28694:4;28732:2;28721:9;28717:18;28709:26;;28781:9;28775:4;28771:20;28767:1;28756:9;28752:17;28745:47;28809:131;28935:4;28809:131;:::i;:::-;28801:139;;28528:419;;;:::o;28953:94::-;28986:8;29034:5;29030:2;29026:14;29005:35;;28953:94;;;:::o;29053:::-;29092:7;29121:20;29135:5;29121:20;:::i;:::-;29110:31;;29053:94;;;:::o;29153:100::-;29192:7;29221:26;29241:5;29221:26;:::i;:::-;29210:37;;29153:100;;;:::o;29259:157::-;29364:45;29384:24;29402:5;29384:24;:::i;:::-;29364:45;:::i;:::-;29359:3;29352:58;29259:157;;:::o;29422:79::-;29461:7;29490:5;29479:16;;29422:79;;;:::o;29507:157::-;29612:45;29632:24;29650:5;29632:24;:::i;:::-;29612:45;:::i;:::-;29607:3;29600:58;29507:157;;:::o;29670:538::-;29838:3;29853:75;29924:3;29915:6;29853:75;:::i;:::-;29953:2;29948:3;29944:12;29937:19;;29966:75;30037:3;30028:6;29966:75;:::i;:::-;30066:2;30061:3;30057:12;30050:19;;30079:75;30150:3;30141:6;30079:75;:::i;:::-;30179:2;30174:3;30170:12;30163:19;;30199:3;30192:10;;29670:538;;;;;;:::o;30214:85::-;30259:7;30288:5;30277:16;;30214:85;;;:::o;30305:60::-;30333:3;30354:5;30347:12;;30305:60;;;:::o;30371:156::-;30428:9;30461:60;30478:42;30487:32;30513:5;30487:32;:::i;:::-;30478:42;:::i;:::-;30461:60;:::i;:::-;30448:73;;30371:156;;;:::o;30533:145::-;30627:44;30665:5;30627:44;:::i;:::-;30622:3;30615:57;30533:145;;:::o;30684:85::-;30729:7;30758:5;30747:16;;30684:85;;;:::o;30775:156::-;30832:9;30865:60;30882:42;30891:32;30917:5;30891:32;:::i;:::-;30882:42;:::i;:::-;30865:60;:::i;:::-;30852:73;;30775:156;;;:::o;30937:145::-;31031:44;31069:5;31031:44;:::i;:::-;31026:3;31019:57;30937:145;;:::o;31088:168::-;31171:11;31205:6;31200:3;31193:19;31245:4;31240:3;31236:14;31221:29;;31088:168;;;;:::o;31262:146::-;31359:6;31354:3;31349;31336:30;31400:1;31391:6;31386:3;31382:16;31375:27;31262:146;;;:::o;31414:102::-;31455:6;31506:2;31502:7;31497:2;31490:5;31486:14;31482:28;31472:38;;31414:102;;;:::o;31544:314::-;31640:3;31661:70;31724:6;31719:3;31661:70;:::i;:::-;31654:77;;31741:56;31790:6;31785:3;31778:5;31741:56;:::i;:::-;31822:29;31844:6;31822:29;:::i;:::-;31817:3;31813:39;31806:46;;31544:314;;;;;:::o;31864:577::-;32055:4;32093:2;32082:9;32078:18;32070:26;;32106:78;32181:1;32170:9;32166:17;32157:6;32106:78;:::i;:::-;32194:79;32269:2;32258:9;32254:18;32245:6;32194:79;:::i;:::-;32320:9;32314:4;32310:20;32305:2;32294:9;32290:18;32283:48;32348:86;32429:4;32420:6;32412;32348:86;:::i;:::-;32340:94;;31864:577;;;;;;;:::o;32447:397::-;32587:3;32602:75;32673:3;32664:6;32602:75;:::i;:::-;32702:2;32697:3;32693:12;32686:19;;32715:75;32786:3;32777:6;32715:75;:::i;:::-;32815:2;32810:3;32806:12;32799:19;;32835:3;32828:10;;32447:397;;;;;:::o;32850:115::-;32935:23;32952:5;32935:23;:::i;:::-;32930:3;32923:36;32850:115;;:::o;32971:541::-;33144:4;33182:2;33171:9;33167:18;33159:26;;33195:69;33261:1;33250:9;33246:17;33237:6;33195:69;:::i;:::-;33274:70;33340:2;33329:9;33325:18;33316:6;33274:70;:::i;:::-;33391:9;33385:4;33381:20;33376:2;33365:9;33361:18;33354:48;33419:86;33500:4;33491:6;33483;33419:86;:::i;:::-;33411:94;;32971:541;;;;;;;:::o;33518:169::-;33658:21;33654:1;33646:6;33642:14;33635:45;33518:169;:::o;33693:366::-;33835:3;33856:67;33920:2;33915:3;33856:67;:::i;:::-;33849:74;;33932:93;34021:3;33932:93;:::i;:::-;34050:2;34045:3;34041:12;34034:19;;33693:366;;;:::o;34065:419::-;34231:4;34269:2;34258:9;34254:18;34246:26;;34318:9;34312:4;34308:20;34304:1;34293:9;34289:17;34282:47;34346:131;34472:4;34346:131;:::i;:::-;34338:139;;34065:419;;;:::o;34490:239::-;34630:34;34626:1;34618:6;34614:14;34607:58;34699:22;34694:2;34686:6;34682:15;34675:47;34490:239;:::o;34735:366::-;34877:3;34898:67;34962:2;34957:3;34898:67;:::i;:::-;34891:74;;34974:93;35063:3;34974:93;:::i;:::-;35092:2;35087:3;35083:12;35076:19;;34735:366;;;:::o;35107:419::-;35273:4;35311:2;35300:9;35296:18;35288:26;;35360:9;35354:4;35350:20;35346:1;35335:9;35331:17;35324:47;35388:131;35514:4;35388:131;:::i;:::-;35380:139;;35107:419;;;:::o;35532:239::-;35672:34;35668:1;35660:6;35656:14;35649:58;35741:22;35736:2;35728:6;35724:15;35717:47;35532:239;:::o;35777:366::-;35919:3;35940:67;36004:2;35999:3;35940:67;:::i;:::-;35933:74;;36016:93;36105:3;36016:93;:::i;:::-;36134:2;36129:3;36125:12;36118:19;;35777:366;;;:::o;36149:419::-;36315:4;36353:2;36342:9;36338:18;36330:26;;36402:9;36396:4;36392:20;36388:1;36377:9;36373:17;36366:47;36430:131;36556:4;36430:131;:::i;:::-;36422:139;;36149:419;;;:::o;36574:234::-;36714:34;36710:1;36702:6;36698:14;36691:58;36783:17;36778:2;36770:6;36766:15;36759:42;36574:234;:::o;36814:366::-;36956:3;36977:67;37041:2;37036:3;36977:67;:::i;:::-;36970:74;;37053:93;37142:3;37053:93;:::i;:::-;37171:2;37166:3;37162:12;37155:19;;36814:366;;;:::o;37186:419::-;37352:4;37390:2;37379:9;37375:18;37367:26;;37439:9;37433:4;37429:20;37425:1;37414:9;37410:17;37403:47;37467:131;37593:4;37467:131;:::i;:::-;37459:139;;37186:419;;;:::o;37611:238::-;37751:34;37747:1;37739:6;37735:14;37728:58;37820:21;37815:2;37807:6;37803:15;37796:46;37611:238;:::o;37855:366::-;37997:3;38018:67;38082:2;38077:3;38018:67;:::i;:::-;38011:74;;38094:93;38183:3;38094:93;:::i;:::-;38212:2;38207:3;38203:12;38196:19;;37855:366;;;:::o;38227:419::-;38393:4;38431:2;38420:9;38416:18;38408:26;;38480:9;38474:4;38470:20;38466:1;38455:9;38451:17;38444:47;38508:131;38634:4;38508:131;:::i;:::-;38500:139;;38227:419;;;:::o;38652:142::-;38702:9;38735:53;38753:34;38762:24;38780:5;38762:24;:::i;:::-;38753:34;:::i;:::-;38735:53;:::i;:::-;38722:66;;38652:142;;;:::o;38800:126::-;38850:9;38883:37;38914:5;38883:37;:::i;:::-;38870:50;;38800:126;;;:::o;38932:134::-;38990:9;39023:37;39054:5;39023:37;:::i;:::-;39010:50;;38932:134;;;:::o;39072:147::-;39167:45;39206:5;39167:45;:::i;:::-;39162:3;39155:58;39072:147;;:::o;39225:238::-;39326:4;39364:2;39353:9;39349:18;39341:26;;39377:79;39453:1;39442:9;39438:17;39429:6;39377:79;:::i;:::-;39225:238;;;;:::o;39469:169::-;39609:21;39605:1;39597:6;39593:14;39586:45;39469:169;:::o;39644:366::-;39786:3;39807:67;39871:2;39866:3;39807:67;:::i;:::-;39800:74;;39883:93;39972:3;39883:93;:::i;:::-;40001:2;39996:3;39992:12;39985:19;;39644:366;;;:::o;40016:419::-;40182:4;40220:2;40209:9;40205:18;40197:26;;40269:9;40263:4;40259:20;40255:1;40244:9;40240:17;40233:47;40297:131;40423:4;40297:131;:::i;:::-;40289:139;;40016:419;;;:::o;40441:180::-;40489:77;40486:1;40479:88;40586:4;40583:1;40576:15;40610:4;40607:1;40600:15;40627:185;40667:1;40684:20;40702:1;40684:20;:::i;:::-;40679:25;;40718:20;40736:1;40718:20;:::i;:::-;40713:25;;40757:1;40747:35;;40762:18;;:::i;:::-;40747:35;40804:1;40801;40797:9;40792:14;;40627:185;;;;:::o;40818:191::-;40858:3;40877:20;40895:1;40877:20;:::i;:::-;40872:25;;40911:20;40929:1;40911:20;:::i;:::-;40906:25;;40954:1;40951;40947:9;40940:16;;40975:3;40972:1;40969:10;40966:36;;;40982:18;;:::i;:::-;40966:36;40818:191;;;;:::o;41015:373::-;41101:3;41129:38;41161:5;41129:38;:::i;:::-;41183:70;41246:6;41241:3;41183:70;:::i;:::-;41176:77;;41262:65;41320:6;41315:3;41308:4;41301:5;41297:16;41262:65;:::i;:::-;41352:29;41374:6;41352:29;:::i;:::-;41347:3;41343:39;41336:46;;41105:283;41015:373;;;;:::o;41394:640::-;41589:4;41627:3;41616:9;41612:19;41604:27;;41641:71;41709:1;41698:9;41694:17;41685:6;41641:71;:::i;:::-;41722:72;41790:2;41779:9;41775:18;41766:6;41722:72;:::i;:::-;41804;41872:2;41861:9;41857:18;41848:6;41804:72;:::i;:::-;41923:9;41917:4;41913:20;41908:2;41897:9;41893:18;41886:48;41951:76;42022:4;42013:6;41951:76;:::i;:::-;41943:84;;41394:640;;;;;;;:::o;42040:332::-;42161:4;42199:2;42188:9;42184:18;42176:26;;42212:71;42280:1;42269:9;42265:17;42256:6;42212:71;:::i;:::-;42293:72;42361:2;42350:9;42346:18;42337:6;42293:72;:::i;:::-;42040:332;;;;;:::o
Swarm Source
ipfs://3b22fd1ee123e99396805020a68311cbf82b0701dcb56a2159bdf7035c8f9ab6
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in GLMR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.