Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 17895070 | 421 days ago | IN | 0 ETH | 0.04023348 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MTMCharacters
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-12 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; // This is a special "passive" migration contract of MTM. // Every single method is modified and has custom "passive" migration proxy logic. abstract contract Ownable { event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); address public owner; // NOTE: proxyable - no constructor! // constructor() { // owner = msg.sender; // } modifier onlyOwner { require(owner == msg.sender, "onlyOwner not owner!"); _; } function transferOwnership(address new_) external onlyOwner { address _old = owner; owner = new_; emit OwnershipTransferred(_old, new_); } } interface iCM { // Views function name() external view returns (string memory); function symbol() external view returns (string memory); function totalSupply() external view returns (uint256); function ownerOf(uint256 tokenId_) external view returns (address); function balanceOf(address address_) external view returns (uint256); function getApproved(uint256 tokenId_) external view returns (address); function isApprovedForAll(address owner_, address operator_) external view returns (bool); } // ERC721I Functions, but we modified it for passive migration method // ERC721IMigrator uses local state storage for gas savings. // It is like ERC721IStorage and ERC721IOperator combined into one. contract ERC721IMigrator is Ownable { // Interface the MTM Characters Main V2 iCM public CM; function setCM(address address_) external onlyOwner { CM = iCM(address_); } // Name and Symbol Stuff string public name; string public symbol; // NOTE: proxy initialize instead // constructor(string memory name_, string memory symbol_) { // name = name_; symbol = symbol_; // } // We turned these to _ prefix so we can use a override function // To display custom proxy and passive migration logic uint256 public totalSupply; mapping(uint256 => address) public _ownerOf; mapping(address => uint256) public _balanceOf; // Here we have to keep track of a initialized balanceOf to prevent any view issues mapping(address => bool) public _balanceOfInitialized; // We disregard the previous contract's approvals mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; // // TotalSupply Setter // Here, we set the totalSupply to equal the previous function setTotalSupply(uint256 totalSupply_) external onlyOwner { totalSupply = totalSupply_; } // // Initializer // This is a custom Transfer emitter for the initialize of this contract only function initialize(uint256[] calldata tokenIds_, address[] calldata owners_) external onlyOwner { require(tokenIds_.length == owners_.length, "initialize(): array length mismatch!"); for (uint256 i = 0; i < tokenIds_.length; i++) { emit Transfer(address(0x0), owners_[i], tokenIds_[i]); } } // OwnerOf (Proxy View) function ownerOf(uint256 tokenId_) public view returns (address) { // Find out of the _ownerOf slot has been initialized. // We hardcode the tokenId_ to save gas. if (tokenId_ < 3620 && _ownerOf[tokenId_] == address(0x0)) { // _ownerOf[tokenId_] is not initialized yet, so return the CM V2 value. return CM.ownerOf(tokenId_); } else { // If it is already initialized, or is higher than migration Id // return local state storage instead. return _ownerOf[tokenId_]; } } // BalanceOf (Proxy View) function balanceOf(address address_) public view returns (uint256) { // Proxy the balance function // We have a tracker of initialization of _balanceOf to track the differences // If initialized, we use the state storage. Otherwise, we use CM V1 storage. if (_balanceOfInitialized[address_]) { return _balanceOf[address_]; } else { return CM.balanceOf(address_); } } // Events! L[o_o]⅃ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Mint(address indexed to, uint256 tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); // Functions function _mint(address to_, uint256 tokenId_) internal virtual { require(to_ != address(0x0), "ERC721IMigrator: _mint() Mint to Zero Address!"); require(ownerOf(tokenId_) == address(0x0), "ERC721IMigrator: _mint() Token already Exists!"); // // ERC721I Logic // We set _ownerOf in a normal way _ownerOf[tokenId_] = to_; // We rebalance the _balanceOf on initialization, otherwise follow normal ERC721I logic if (_balanceOfInitialized[to_]) { // If we are already initialized _balanceOf[to_]++; } else { _balanceOf[to_] = (CM.balanceOf(to_) + 1); _balanceOfInitialized[to_] = true; } // Increment TotalSupply as normal totalSupply++; // // ERC721I Logic End // Emit Events emit Transfer(address(0x0), to_, tokenId_); emit Mint(to_, tokenId_); } function _transfer(address from_, address to_, uint256 tokenId_) internal virtual { require(from_ == ownerOf(tokenId_), "ERC721IMigrator: _transfer() Transfer from_ != ownerOf(tokenId_)"); require(to_ != address(0x0), "ERC721IMigrator: _transfer() Transfer to Zero Address!"); // // ERC721I Transfer Logic // If token has an approval if (getApproved[tokenId_] != address(0x0)) { // Remove the outstanding approval getApproved[tokenId_] = address(0x0); } // Set the _ownerOf to the receiver _ownerOf[tokenId_] = to_; // // Initialize and Rebalance _balanceOf if (_balanceOfInitialized[from_]) { // If from_ is initialized, do normal balance change _balanceOf[from_]--; } else { // If from_ is NOT initialized, follow rebalance flow _balanceOf[from_] = (CM.balanceOf(from_) - 1); // Set from_ as initialized _balanceOfInitialized[from_] = true; } if (_balanceOfInitialized[to_]) { // If to_ is initialized, do normal balance change _balanceOf[to_]++; } else { // If to_ is NOT initialized, follow rebalance flow _balanceOf[to_] = (CM.balanceOf(to_) + 1); // Set to_ as initialized; _balanceOfInitialized[to_] = true; } // // ERC721I Transfer Logic End emit Transfer(from_, to_, tokenId_); } // Approvals function _approve(address to_, uint256 tokenId_) internal virtual { if (getApproved[tokenId_] != to_) { getApproved[tokenId_] = to_; emit Approval(ownerOf(tokenId_), to_, tokenId_); } } function _setApprovalForAll(address owner_, address operator_, bool approved_) internal virtual { require(owner_ != operator_, "ERC721IMigrator: _setApprovalForAll() Owner must not be the Operator!"); isApprovedForAll[owner_][operator_] = approved_; emit ApprovalForAll(owner_, operator_, approved_); } // // Functional Internal Views function _isApprovedOrOwner(address spender_, uint256 tokenId_) internal view returns (bool) { address _owner = ownerOf(tokenId_); require(_owner != address(0x0), "ERC721IMigrator: _isApprovedOrOwner() Owner is Zero Address!"); return (spender_ == _owner // is the owner OR || spender_ == getApproved[tokenId_] // is approved for token OR || isApprovedForAll[_owner][spender_] // isApprovedForAll spender ); } // Exists function _exists(uint256 tokenId_) internal view virtual returns (bool) { // We hardcode tokenId_ for gas savings if (tokenId_ < 3620) { return true; } return _ownerOf[tokenId_] != address(0x0); } // Public Write Functions function approve(address to_, uint256 tokenId_) public virtual { address _owner = ownerOf(tokenId_); require(to_ != _owner, "ERC721IMigrator: approve() cannot approve owner!"); require(msg.sender == _owner // sender is the owner of the token || isApprovedForAll[_owner][msg.sender], // or isApprovedForAll for the owner "ERC721IMigrator: approve() Caller is not owner of isApprovedForAll!"); _approve(to_, tokenId_); } // SetApprovalForAll - the msg.sender is always the subject of approval function setApprovalForAll(address operator_, bool approved_) public virtual { _setApprovalForAll(msg.sender, operator_, approved_); } // Transfers function transferFrom(address from_, address to_, uint256 tokenId_) public virtual { require(_isApprovedOrOwner(msg.sender, tokenId_), "ERC721IMigrator: transferFrom() _isApprovedOrOwner = false!"); _transfer(from_, to_, tokenId_); } function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory data_) public virtual { transferFrom(from_, to_, tokenId_); if (to_.code.length != 0) { (, bytes memory _returned) = to_.staticcall(abi.encodeWithSelector(0x150b7a02, msg.sender, from_, tokenId_, data_)); bytes4 _selector = abi.decode(_returned, (bytes4)); require(_selector == 0x150b7a02, "ERC721IMigrator: safeTransferFrom() to_ not ERC721Receivable!"); } } function safeTransferFrom(address from_, address to_, uint256 tokenId_) public virtual { safeTransferFrom(from_, to_, tokenId_, ""); } // OZ Standard Stuff function supportsInterface(bytes4 interfaceId_) public pure returns (bool) { return (interfaceId_ == 0x80ac58cd || interfaceId_ == 0x5b5e139f); } // High Gas Loop View Functions function walletOfOwner(address address_) public virtual view returns (uint256[] memory) { uint256 _balance = balanceOf(address_); uint256[] memory _tokens = new uint256[](_balance); uint256 _index; uint256 _loopThrough = totalSupply; for (uint256 i = 0; i < _loopThrough; i++) { // Add another loop through for each 0x0 until array is filled if (ownerOf(i) == address(0x0) && _tokens[_balance - 1] == 0) { _loopThrough++; } // Fill the array on each token found if (ownerOf(i) == address_) { // Record the ID in the index _tokens[_index] = i; // Increment the index _index++; } } return _tokens; } // TokenURIs Functions Omitted // } interface IERC721 { function ownerOf(uint256 tokenId_) external view returns (address); function transferFrom(address from_, address to_, uint256 tokenId_) external; } interface iCS { struct Character { uint8 race_; uint8 renderType_; uint16 transponderId_; uint16 spaceCapsuleId_; uint8 augments_; uint16 basePoints_; uint16 totalEquipmentBonus_; } struct Stats { uint8 strength_; uint8 agility_; uint8 constitution_; uint8 intelligence_; uint8 spirit_; } struct Equipment { uint8 weaponUpgrades_; uint8 chestUpgrades_; uint8 headUpgrades_; uint8 legsUpgrades_; uint8 vehicleUpgrades_; uint8 armsUpgrades_; uint8 artifactUpgrades_; uint8 ringUpgrades_; } // Create Character function createCharacter(uint tokenId_, Character memory Character_) external; // Characters function setName(uint256 tokenId_, string memory name_) external; function setRace(uint256 tokenId_, string memory race_) external; function setRenderType(uint256 tokenId_, uint8 renderType_) external; function setTransponderId(uint256 tokenId_, uint16 transponderId_) external; function setSpaceCapsuleId(uint256 tokenId_, uint16 spaceCapsuleId_) external; function setAugments(uint256 tokenId_, uint8 augments_) external; function setBasePoints(uint256 tokenId_, uint16 basePoints_) external; function setBaseEquipmentBonus(uint256 tokenId_, uint16 baseEquipmentBonus_) external; function setTotalEquipmentBonus(uint256 tokenId_, uint16 totalEquipmentBonus) external; // Stats function setStrength(uint256 tokenId_, uint8 strength_) external; function setAgility(uint256 tokenId_, uint8 agility_) external; function setConstitution(uint256 tokenId_, uint8 constitution_) external; function setIntelligence(uint256 tokenId_, uint8 intelligence_) external; function setSpirit(uint256 tokenId_, uint8 spirit_) external; // Equipment function setWeaponUpgrades(uint256 tokenId_, uint8 upgrade_) external; function setChestUpgrades(uint256 tokenId_, uint8 upgrade_) external; function setHeadUpgrades(uint256 tokenId_, uint8 upgrade_) external; function setLegsUpgrades(uint256 tokenId_, uint8 upgrade_) external; function setVehicleUpgrades(uint256 tokenId_, uint8 upgrade_) external; function setArmsUpgrades(uint256 tokenId_, uint8 upgrade_) external; function setArtifactUpgrades(uint256 tokenId_, uint8 upgrade_) external; function setRingUpgrades(uint256 tokenId_, uint8 upgrade_) external; // Structs and Mappings function names(uint256 tokenId_) external view returns (string memory); function characters(uint256 tokenId_) external view returns (Character memory); function stats(uint256 tokenId_) external view returns (Stats memory); function equipments(uint256 tokenId_) external view returns (Equipment memory); function contractToRace(address contractAddress_) external view returns (uint8); } interface iCC { function queryCharacterYieldRate(uint8 augments_, uint16 basePoints_, uint16 totalEquipmentBonus_) external view returns (uint256); function getEquipmentBaseBonus(uint16 spaceCapsuleId_) external view returns (uint16); } interface iMES { // View Functions function balanceOf(address address_) external view returns (uint256); function pendingRewards(address address_) external view returns (uint256); // Administration function setYieldRate(address address_, uint256 yieldRate_) external; function addYieldRate(address address_, uint256 yieldRateAdd_) external; function subYieldRate(address address_, uint256 yieldRateSub_) external; // Credits System function deductCredits(address address_, uint256 amount_) external; function addCredits(address address_, uint256 amount_) external; // Claiming function updateReward(address address_) external; function burn(address from, uint256 amount_) external; } interface iMetadata { function renderMetadata(uint256 tokenId_) external view returns (string memory); } contract MTMCharacters is ERC721IMigrator { // Interfaces iCS public CS; iCC public CC; iMES public MES; iMetadata public Metadata; IERC721 public TP; IERC721 public SC; function setContracts(address metadata_, address cc_, address cs_, address mes_, address tp_, address sc_) external onlyOwner { CS = iCS(cs_); CC = iCC(cc_); MES = iMES(mes_); Metadata = iMetadata(metadata_); TP = IERC721(tp_); SC = IERC721(sc_); } ///// Proxy Initializer ///// bool public proxyInitialized; function proxyInitialize(address newOwner_) public { // One-way switch require(!proxyInitialized, "Proxy Initialized!"); proxyInitialized = true; // ERC721 name = "Martians Characters"; symbol = "MARTIANS"; // Ownable owner = newOwner_; } ///// Constructor ///// constructor() { proxyInitialize(msg.sender); } // Mappings mapping(address => mapping(uint256 => bool)) public contractAddressToTokenUploaded; // Internal Write Functions function __yieldMintHook(address to_, uint256 tokenId_) internal { // First, we update the reward. MES.updateReward(to_); // Then, we query the token yield rate. iCS.Character memory _Character = CS.characters(tokenId_); uint256 _tokenYieldRate = CC.queryCharacterYieldRate(_Character.augments_, _Character.basePoints_, _Character.totalEquipmentBonus_); // Lastly, we adjust the yield rate of the address. MES.addYieldRate(to_, _tokenYieldRate); } function __yieldTransferHook(address from_, address to_, uint256 tokenId_) internal { // First, we update the reward. MES.updateReward(from_); MES.updateReward(to_); // Then, we query the token yield rate. iCS.Character memory _Character = CS.characters(tokenId_); uint256 _tokenYieldRate = CC.queryCharacterYieldRate(_Character.augments_, _Character.basePoints_, _Character.totalEquipmentBonus_); // Lastly, we adjust the yield rate of the addresses. MES.subYieldRate(from_, _tokenYieldRate); MES.addYieldRate(to_, _tokenYieldRate); } // Public Write Functions mapping(uint8 => bool) public renderTypeAllowed; function setRenderTypeAllowed(uint8 renderType_, bool bool_) external onlyOwner { renderTypeAllowed[renderType_] = bool_; } function beamCharacter(uint256 transponderId_, uint256 spaceCapsuleId_, uint8 renderType_) public { require(msg.sender == TP.ownerOf(transponderId_) && msg.sender == SC.ownerOf(spaceCapsuleId_), "Unowned pair!"); require(renderTypeAllowed[renderType_], "This render type is not allowed!"); // Burn the Transponder and Space Capsule. TP.transferFrom(msg.sender, address(this), transponderId_); SC.transferFrom(msg.sender, address(this), spaceCapsuleId_); uint8 _race = uint8( (uint256(keccak256(abi.encodePacked(msg.sender, block.timestamp, block.prevrandao, transponderId_, spaceCapsuleId_))) % 10) + 1 ); // RNG (1-10) uint16 _equipmentBonus = CC.getEquipmentBaseBonus((uint16(spaceCapsuleId_))); iCS.Character memory _Character = iCS.Character( _race, renderType_, uint16(transponderId_), uint16(spaceCapsuleId_), 0, 0, _equipmentBonus ); CS.createCharacter(totalSupply, _Character); __yieldMintHook(msg.sender, totalSupply); _mint(msg.sender, totalSupply); } function uploadCharacter(uint256 transponderId_, uint256 spaceCapsuleId_, uint8 renderType_, address contractAddress_, uint256 uploadId_) public { require(msg.sender == TP.ownerOf(transponderId_) && msg.sender == SC.ownerOf(spaceCapsuleId_), "Unowned pair!"); require(msg.sender == IERC721(contractAddress_).ownerOf(uploadId_), "You don't own this character!"); require(!contractAddressToTokenUploaded[contractAddress_][uploadId_], "This character has already been uploaded!"); require(renderTypeAllowed[renderType_], "This render type is not allowed!"); // Burn the Transponder and Space Capsule. Then, set the character as uploaded. TP.transferFrom(msg.sender, address(this), transponderId_); SC.transferFrom(msg.sender, address(this), spaceCapsuleId_); contractAddressToTokenUploaded[contractAddress_][uploadId_] = true; uint8 _race = CS.contractToRace(contractAddress_); uint16 _equipmentBonus = CC.getEquipmentBaseBonus((uint16(spaceCapsuleId_))); iCS.Character memory _Character = iCS.Character( _race, renderType_, uint16(transponderId_), uint16(spaceCapsuleId_), 0, 0, _equipmentBonus ); CS.createCharacter(totalSupply, _Character); __yieldMintHook(msg.sender, totalSupply); _mint(msg.sender, totalSupply); } // Public Write Multi-Functions function multiBeamCharacter(uint256[] memory transponderIds_, uint256[] memory spaceCapsuleIds_, uint8[] memory renderTypes_) public { require(transponderIds_.length == spaceCapsuleIds_.length, "Missing pairs!"); require(transponderIds_.length == renderTypes_.length, "Missing render type!"); for (uint256 i = 0; i < transponderIds_.length; i++) { beamCharacter(transponderIds_[i], spaceCapsuleIds_[i], renderTypes_[i]); } } function multiUploadCharacter(uint256[] memory transponderIds_, uint256[] memory spaceCapsuleIds_, uint8[] memory renderTypes_, address contractAddress_, uint256[] memory uploadIds_) public { require(transponderIds_.length == spaceCapsuleIds_.length, "Missing pairs!"); require(transponderIds_.length == renderTypes_.length, "Missing render type!"); require(transponderIds_.length == uploadIds_.length, "Upload IDs mismatched length!"); for (uint256 i = 0; i < transponderIds_.length; i++) { uploadCharacter(transponderIds_[i], spaceCapsuleIds_[i], renderTypes_[i], contractAddress_, uploadIds_[i]); } } // Transfer Hooks function transferFrom(address from_, address to_, uint256 tokenId_) public override { __yieldTransferHook(from_, to_, tokenId_); ERC721IMigrator.transferFrom(from_, to_, tokenId_); } /** @dev bugfix: the function call of safeTransferFrom already uses transferFrom * in ERC721I, it calls to transferFrom which then calls the overridden * transferFrom, resulting in a call of __yieldTransferHook already */ // function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory bytes_) public override { // __yieldTransferHook(from_, to_, tokenId_); // ERC721IMigrator.safeTransferFrom(from_, to_, tokenId_, bytes_); // } // Public View Functions function tokenURI(uint256 tokenId_) public view returns (string memory) { require(_exists(tokenId_), "Character does not exist!"); return Metadata.renderMetadata(tokenId_); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CC","outputs":[{"internalType":"contract iCC","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CM","outputs":[{"internalType":"contract iCM","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CS","outputs":[{"internalType":"contract iCS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MES","outputs":[{"internalType":"contract iMES","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Metadata","outputs":[{"internalType":"contract iMetadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SC","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TP","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceOfInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transponderId_","type":"uint256"},{"internalType":"uint256","name":"spaceCapsuleId_","type":"uint256"},{"internalType":"uint8","name":"renderType_","type":"uint8"}],"name":"beamCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"contractAddressToTokenUploaded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"address[]","name":"owners_","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"transponderIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"spaceCapsuleIds_","type":"uint256[]"},{"internalType":"uint8[]","name":"renderTypes_","type":"uint8[]"}],"name":"multiBeamCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"transponderIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"spaceCapsuleIds_","type":"uint256[]"},{"internalType":"uint8[]","name":"renderTypes_","type":"uint8[]"},{"internalType":"address","name":"contractAddress_","type":"address"},{"internalType":"uint256[]","name":"uploadIds_","type":"uint256[]"}],"name":"multiUploadCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"proxyInitialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxyInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"renderTypeAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"approved_","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setCM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"metadata_","type":"address"},{"internalType":"address","name":"cc_","type":"address"},{"internalType":"address","name":"cs_","type":"address"},{"internalType":"address","name":"mes_","type":"address"},{"internalType":"address","name":"tp_","type":"address"},{"internalType":"address","name":"sc_","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"renderType_","type":"uint8"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setRenderTypeAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId_","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"new_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transponderId_","type":"uint256"},{"internalType":"uint256","name":"spaceCapsuleId_","type":"uint256"},{"internalType":"uint8","name":"renderType_","type":"uint8"},{"internalType":"address","name":"contractAddress_","type":"address"},{"internalType":"uint256","name":"uploadId_","type":"uint256"}],"name":"uploadCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506200001d3362000023565b62000290565b600f54600160a01b900460ff1615620000775760405162461bcd60e51b815260206004820152601260248201527150726f787920496e697469616c697a65642160701b604482015260640160405180910390fd5b600f805460ff60a01b1916600160a01b17905560408051808201909152601381527f4d61727469616e732043686172616374657273000000000000000000000000006020820152600290620000cd9082620001c4565b506040805180820190915260088152674d41525449414e5360c01b6020820152600390620000fc9082620001c4565b50600080546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200014a57607f821691505b6020821081036200016b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001bf57600081815260208120601f850160051c810160208610156200019a5750805b601f850160051c820191505b81811015620001bb57828155600101620001a6565b5050505b505050565b81516001600160401b03811115620001e057620001e06200011f565b620001f881620001f1845462000135565b8462000171565b602080601f831160018114620002305760008415620002175750858301515b600019600386901b1c1916600185901b178555620001bb565b600085815260208120601f198616915b82811015620002615788860151825594840194600190910190840162000240565b5085821015620002805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61377e80620002a06000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063b88d4fde116100b8578063cca3e8321161007c578063cca3e83214610585578063e2d97934146105a5578063e985e9c5146105b8578063f2fde38b146105e6578063f7ea7a3d146105f957600080fd5b8063b88d4fde14610526578063b979b1a314610539578063bd5404a81461054c578063c16ac06f1461055f578063c87b56dd1461057257600080fd5b806395d89b41116100ff57806395d89b41146104b7578063978fbc3c146104bf578063a22cb465146104ed578063a5eb6ff214610500578063b4f035a41461051357600080fd5b806370a0823114610458578063751149791461046b5780637ca510a41461047e5780637cb81fe5146104915780638da5cb5b146104a457600080fd5b806342842e0e116101c957806357b3aa761161018d57806357b3aa76146103e95780635a1389111461040c5780636352211e1461041f578063639807d0146104325780636509e7761461044557600080fd5b806342842e0e1461036c578063438b63001461037f5780634724e5461461039f5780634be99cd6146103c25780635589655a146103d557600080fd5b806323b872dd1161021057806323b872dd146102f75780632463a55a1461030a578063383505411461031d5780633ae23cc4146103465780633b5006071461035957600080fd5b806301ffc9a71461024d57806306fdde0314610275578063081812fc1461028a578063095ea7b3146102cb57806318160ddd146102e0575b600080fd5b61026061025b366004612b1c565b61060c565b60405190151581526020015b60405180910390f35b61027d610643565b60405161026c9190612b90565b6102b3610298366004612ba3565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6102de6102d9366004612bd1565b6106d1565b005b6102e960045481565b60405190815260200161026c565b6102de610305366004612bfd565b610824565b6102de610318366004612c3e565b61083a565b6102b361032b366004612ba3565b6005602052600090815260409020546001600160a01b031681565b600a546102b3906001600160a01b031681565b6102de610367366004612e09565b6108d4565b6102de61037a366004612bfd565b6109d8565b61039261038d366004612e91565b6109f3565b60405161026c9190612eae565b6102606103ad366004612e91565b60076020526000908152604090205460ff1681565b6102de6103d0366004612e91565b610b1b565b600f5461026090600160a01b900460ff1681565b6102606103f7366004612ef2565b60116020526000908152604090205460ff1681565b600f546102b3906001600160a01b031681565b6102b361042d366004612ba3565b610b67565b600e546102b3906001600160a01b031681565b600b546102b3906001600160a01b031681565b6102e9610466366004612e91565b610c22565b6102de610479366004612f0f565b610ccd565b6102de61048c36600461301d565b610e3f565b6102de61049f366004613089565b610f68565b6000546102b3906001600160a01b031681565b61027d61137c565b6102606104cd366004612bd1565b601060209081526000928352604080842090915290825290205460ff1681565b6102de6104fb3660046130d2565b611389565b600d546102b3906001600160a01b031681565b6102de610521366004613107565b611398565b6102de61053436600461314d565b6113e7565b6102de6105473660046131f7565b611545565b6102de61055a366004612e91565b611adb565b6001546102b3906001600160a01b031681565b61027d610580366004612ba3565b611bc4565b6102e9610593366004612e91565b60066020526000908152604090205481565b600c546102b3906001600160a01b031681565b6102606105c6366004613249565b600960209081526000928352604080842090915290825290205460ff1681565b6102de6105f4366004612e91565b611c8c565b6102de610607366004612ba3565b611d06565b60006380ac58cd60e01b6001600160e01b03198316148061063d5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6002805461065090613282565b80601f016020809104026020016040519081016040528092919081815260200182805461067c90613282565b80156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505081565b60006106dc82610b67565b9050806001600160a01b0316836001600160a01b03160361075d5760405162461bcd60e51b815260206004820152603060248201527f455243373231494d69677261746f723a20617070726f766528292063616e6e6f60448201526f7420617070726f7665206f776e65722160801b60648201526084015b60405180910390fd5b336001600160a01b038216148061079757506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b6108155760405162461bcd60e51b815260206004820152604360248201527f455243373231494d69677261746f723a20617070726f766528292043616c6c6560448201527f72206973206e6f74206f776e6572206f66206973417070726f766564466f72416064820152626c6c2160e81b608482015260a401610754565b61081f8383611d35565b505050565b61082f838383611dc4565b61081f83838361205d565b6000546001600160a01b031633146108645760405162461bcd60e51b8152600401610754906132bc565b600a80546001600160a01b03199081166001600160a01b0396871617909155600b8054821696861696909617909555600c8054861693851693909317909255600d8054851695841695909517909455600e8054841694831694909417909355600f80549092169216919091179055565b81518351146109165760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b805183511461095e5760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b60005b83518110156109d2576109c084828151811061097f5761097f6132ea565b6020026020010151848381518110610999576109996132ea565b60200260200101518484815181106109b3576109b36132ea565b6020026020010151610f68565b806109ca81613316565b915050610961565b50505050565b61081f838383604051806020016040528060008152506113e7565b60606000610a0083610c22565b905060008167ffffffffffffffff811115610a1d57610a1d612cc0565b604051908082528060200260200182016040528015610a46578160200160208202803683370190505b50600454909150600090815b81811015610b10576000610a6582610b67565b6001600160a01b0316148015610a9e575083610a8260018761332f565b81518110610a9257610a926132ea565b60200260200101516000145b15610ab15781610aad81613316565b9250505b866001600160a01b0316610ac482610b67565b6001600160a01b031603610afe5780848481518110610ae557610ae56132ea565b602090810291909101015282610afa81613316565b9350505b80610b0881613316565b915050610a52565b509195945050505050565b6000546001600160a01b03163314610b455760405162461bcd60e51b8152600401610754906132bc565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2482108015610b8f57506000828152600560205260409020546001600160a01b0316155b15610c01576001546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d9190613342565b506000908152600560205260409020546001600160a01b031690565b919050565b6001600160a01b03811660009081526007602052604081205460ff1615610c5f57506001600160a01b031660009081526006602052604090205490565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d919061335f565b8351855114610d0f5760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b8251855114610d575760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b8051855114610da85760405162461bcd60e51b815260206004820152601d60248201527f55706c6f616420494473206d69736d617463686564206c656e677468210000006044820152606401610754565b60005b8551811015610e3757610e25868281518110610dc957610dc96132ea565b6020026020010151868381518110610de357610de36132ea565b6020026020010151868481518110610dfd57610dfd6132ea565b602002602001015186868681518110610e1857610e186132ea565b6020026020010151611545565b80610e2f81613316565b915050610dab565b505050505050565b6000546001600160a01b03163314610e695760405162461bcd60e51b8152600401610754906132bc565b828114610ec45760405162461bcd60e51b8152602060048201526024808201527f696e697469616c697a6528293a206172726179206c656e677468206d69736d616044820152637463682160e01b6064820152608401610754565b60005b83811015610f6157848482818110610ee157610ee16132ea565b90506020020135838383818110610efa57610efa6132ea565b9050602002016020810190610f0f9190612e91565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480610f5981613316565b915050610ec7565b5050505050565b600e546040516331a9108f60e11b8152600481018590526001600160a01b0390911690636352211e90602401602060405180830381865afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd59190613342565b6001600160a01b0316336001600160a01b03161480156110725750600f546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015611039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105d9190613342565b6001600160a01b0316336001600160a01b0316145b6110ae5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b60ff8082166000908152601160205260409020541661110f5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061114390339030908890600401613378565b600060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506111a990339030908790600401613378565b600060405180830381600087803b1580156111c357600080fd5b505af11580156111d7573d6000803e3d6000fd5b50506040516bffffffffffffffffffffffff193360601b166020820152426034820152446054820152607481018690526094810185905260009250600a915060b4016040516020818303038152906040528051906020012060001c61123c919061339c565b6112479060016133be565b600b5460405163813fd7fd60e01b815261ffff861660048201529192506000916001600160a01b039091169063813fd7fd90602401602060405180830381865afa158015611299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bd91906133e3565b6040805160e08101825260ff80861682528616602082015261ffff80891682840152878116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611332928691016133fe565b600060405180830381600087803b15801561134c57600080fd5b505af1158015611360573d6000803e3d6000fd5b50505050611370336004546120e4565b610e37336004546122ad565b6003805461065090613282565b61139433838361253c565b5050565b6000546001600160a01b031633146113c25760405162461bcd60e51b8152600401610754906132bc565b60ff919091166000908152601160205260409020805460ff1916911515919091179055565b6113f2848484610824565b6001600160a01b0383163b156109d2576000836001600160a01b031663150b7a023387868660405160240161142a949392919061346b565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161146391906134a8565b600060405180830381855afa9150503d806000811461149e576040519150601f19603f3d011682016040523d82523d6000602084013e6114a3565b606091505b509150506000818060200190518101906114bd91906134c4565b9050630a85bd0160e11b6001600160e01b0319821614610e375760405162461bcd60e51b815260206004820152603d60248201527f455243373231494d69677261746f723a20736166655472616e7366657246726f60448201527f6d282920746f5f206e6f742045524337323152656365697661626c65210000006064820152608401610754565b600e546040516331a9108f60e11b8152600481018790526001600160a01b0390911690636352211e90602401602060405180830381865afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190613342565b6001600160a01b0316336001600160a01b031614801561164f5750600f546040516331a9108f60e11b8152600481018690526001600160a01b0390911690636352211e90602401602060405180830381865afa158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190613342565b6001600160a01b0316336001600160a01b0316145b61168b5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b6040516331a9108f60e11b8152600481018290526001600160a01b03831690636352211e90602401602060405180830381865afa1580156116d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f49190613342565b6001600160a01b0316336001600160a01b0316146117545760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206f776e207468697320636861726163746572210000006044820152606401610754565b6001600160a01b038216600090815260106020908152604080832084845290915290205460ff16156117da5760405162461bcd60e51b815260206004820152602960248201527f54686973206368617261637465722068617320616c7265616479206265656e2060448201526875706c6f616465642160b81b6064820152608401610754565b60ff8084166000908152601160205260409020541661183b5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061186f90339030908a90600401613378565b600060405180830381600087803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506118d590339030908990600401613378565b600060405180830381600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b505050506001600160a01b038281166000818152601060209081526040808320868452909152808220805460ff19166001179055600a549051630da46c0f60e01b8152600481019390935290921690630da46c0f90602401602060405180830381865afa158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c91906134e1565b600b5460405163813fd7fd60e01b815261ffff881660048201529192506000916001600160a01b039091169063813fd7fd90602401602060405180830381865afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1291906133e3565b6040805160e08101825260ff80861682528816602082015261ffff808b1682840152898116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611a87928691016133fe565b600060405180830381600087803b158015611aa157600080fd5b505af1158015611ab5573d6000803e3d6000fd5b50505050611ac5336004546120e4565b611ad1336004546122ad565b5050505050505050565b600f54600160a01b900460ff1615611b2a5760405162461bcd60e51b815260206004820152601260248201527150726f787920496e697469616c697a65642160701b6044820152606401610754565b600f805460ff60a01b1916600160a01b1790556040805180820190915260138152724d61727469616e73204368617261637465727360681b6020820152600290611b749082613544565b506040805180820190915260088152674d41525449414e5360c01b6020820152600390611ba19082613544565b50600080546001600160a01b0319166001600160a01b0392909216919091179055565b6060611bcf8261263e565b611c1b5760405162461bcd60e51b815260206004820152601960248201527f43686172616374657220646f6573206e6f7420657869737421000000000000006044820152606401610754565b600d54604051630eaa6a0560e31b8152600481018490526001600160a01b0390911690637553502890602401600060405180830381865afa158015611c64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261063d9190810190613604565b6000546001600160a01b03163314611cb65760405162461bcd60e51b8152600401610754906132bc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611d305760405162461bcd60e51b8152600401610754906132bc565b600455565b6000818152600860205260409020546001600160a01b0383811691161461139457600081815260086020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d8b82610b67565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600c5460405163632447c960e01b81526001600160a01b0385811660048301529091169063632447c990602401600060405180830381600087803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b5050600c5460405163632447c960e01b81526001600160a01b038681166004830152909116925063632447c99150602401600060405180830381600087803b158015611e6a57600080fd5b505af1158015611e7e573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e060405180830381865afa158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef2919061367b565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b0390911690633616171190606401602060405180830381865afa158015611f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f88919061335f565b600c54604051631fa86bd160e31b81526001600160a01b0388811660048301526024820184905292935091169063fd435e8890604401600060405180830381600087803b158015611fd857600080fd5b505af1158015611fec573d6000803e3d6000fd5b5050600c5460405163b5862c2560e01b81526001600160a01b03888116600483015260248201869052909116925063b5862c259150604401600060405180830381600087803b15801561203e57600080fd5b505af1158015612052573d6000803e3d6000fd5b505050505050505050565b6120673382612670565b6120d95760405162461bcd60e51b815260206004820152603b60248201527f455243373231494d69677261746f723a207472616e7366657246726f6d28292060448201527f5f6973417070726f7665644f724f776e6572203d2066616c73652100000000006064820152608401610754565b61081f83838361276b565b600c5460405163632447c960e01b81526001600160a01b0384811660048301529091169063632447c990602401600060405180830381600087803b15801561212b57600080fd5b505af115801561213f573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e060405180830381865afa15801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b3919061367b565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b0390911690633616171190606401602060405180830381865afa158015612225573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612249919061335f565b600c5460405163b5862c2560e01b81526001600160a01b0387811660048301526024820184905292935091169063b5862c2590604401600060405180830381600087803b15801561229957600080fd5b505af1158015611ad1573d6000803e3d6000fd5b6001600160a01b03821661231a5760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e742829204d696e7420746f60448201526d205a65726f20416464726573732160901b6064820152608401610754565b600061232582610b67565b6001600160a01b0316146123925760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e74282920546f6b656e206160448201526d6c7265616479204578697374732160901b6064820152608401610754565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600790915290205460ff16156123ff576001600160a01b03821660009081526006602052604081208054916123f583613316565b91905055506124a8565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015612449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246d919061335f565b6124789060016133be565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b600480549060006124b883613316565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161253091815260200190565b60405180910390a25050565b816001600160a01b0316836001600160a01b0316036125d15760405162461bcd60e51b815260206004820152604560248201527f455243373231494d69677261746f723a205f736574417070726f76616c466f7260448201527f416c6c2829204f776e6572206d757374206e6f7420626520746865204f70657260648201526461746f722160d81b608482015260a401610754565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000610e2482101561265257506001919050565b506000908152600560205260409020546001600160a01b0316151590565b60008061267c83610b67565b90506001600160a01b0381166126fa5760405162461bcd60e51b815260206004820152603c60248201527f455243373231494d69677261746f723a205f6973417070726f7665644f724f7760448201527f6e65722829204f776e6572206973205a65726f204164647265737321000000006064820152608401610754565b806001600160a01b0316846001600160a01b0316148061273357506000838152600860205260409020546001600160a01b038581169116145b8061276357506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b61277481610b67565b6001600160a01b0316836001600160a01b0316146127fc576040805162461bcd60e51b81526020600482015260248101919091527f455243373231494d69677261746f723a205f7472616e7366657228292054726160448201527f6e736665722066726f6d5f20213d206f776e65724f6628746f6b656e49645f296064820152608401610754565b6001600160a01b0382166128715760405162461bcd60e51b815260206004820152603660248201527f455243373231494d69677261746f723a205f7472616e736665722829205472616044820152756e7366657220746f205a65726f20416464726573732160501b6064820152608401610754565b6000818152600860205260409020546001600160a01b0316156128ab57600081815260086020526040902080546001600160a01b03191690555b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038781169190911790915586168352600790915290205460ff161561291c576001600160a01b038316600090815260066020526040812080549161291283613731565b91905055506129c5565b600180546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298b919061335f565b612995919061332f565b6001600160a01b0384166000908152600660209081526040808320939093556007905220805460ff191660011790555b6001600160a01b03821660009081526007602052604090205460ff1615612a14576001600160a01b0382166000908152600660205260408120805491612a0a83613316565b9190505550612abd565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015612a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a82919061335f565b612a8d9060016133be565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160e01b031981168114612b1957600080fd5b50565b600060208284031215612b2e57600080fd5b8135612b3981612b03565b9392505050565b60005b83811015612b5b578181015183820152602001612b43565b50506000910152565b60008151808452612b7c816020860160208601612b40565b601f01601f19169290920160200192915050565b602081526000612b396020830184612b64565b600060208284031215612bb557600080fd5b5035919050565b6001600160a01b0381168114612b1957600080fd5b60008060408385031215612be457600080fd5b8235612bef81612bbc565b946020939093013593505050565b600080600060608486031215612c1257600080fd5b8335612c1d81612bbc565b92506020840135612c2d81612bbc565b929592945050506040919091013590565b60008060008060008060c08789031215612c5757600080fd5b8635612c6281612bbc565b95506020870135612c7281612bbc565b94506040870135612c8281612bbc565b93506060870135612c9281612bbc565b92506080870135612ca281612bbc565b915060a0870135612cb281612bbc565b809150509295509295509295565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612cff57612cff612cc0565b604052919050565b600067ffffffffffffffff821115612d2157612d21612cc0565b5060051b60200190565b600082601f830112612d3c57600080fd5b81356020612d51612d4c83612d07565b612cd6565b82815260059290921b84018101918181019086841115612d7057600080fd5b8286015b84811015612d8b5780358352918301918301612d74565b509695505050505050565b60ff81168114612b1957600080fd5b600082601f830112612db657600080fd5b81356020612dc6612d4c83612d07565b82815260059290921b84018101918181019086841115612de557600080fd5b8286015b84811015612d8b578035612dfc81612d96565b8352918301918301612de9565b600080600060608486031215612e1e57600080fd5b833567ffffffffffffffff80821115612e3657600080fd5b612e4287838801612d2b565b94506020860135915080821115612e5857600080fd5b612e6487838801612d2b565b93506040860135915080821115612e7a57600080fd5b50612e8786828701612da5565b9150509250925092565b600060208284031215612ea357600080fd5b8135612b3981612bbc565b6020808252825182820181905260009190848201906040850190845b81811015612ee657835183529284019291840191600101612eca565b50909695505050505050565b600060208284031215612f0457600080fd5b8135612b3981612d96565b600080600080600060a08688031215612f2757600080fd5b853567ffffffffffffffff80821115612f3f57600080fd5b612f4b89838a01612d2b565b96506020880135915080821115612f6157600080fd5b612f6d89838a01612d2b565b95506040880135915080821115612f8357600080fd5b612f8f89838a01612da5565b945060608801359150612fa182612bbc565b90925060808701359080821115612fb757600080fd5b50612fc488828901612d2b565b9150509295509295909350565b60008083601f840112612fe357600080fd5b50813567ffffffffffffffff811115612ffb57600080fd5b6020830191508360208260051b850101111561301657600080fd5b9250929050565b6000806000806040858703121561303357600080fd5b843567ffffffffffffffff8082111561304b57600080fd5b61305788838901612fd1565b9096509450602087013591508082111561307057600080fd5b5061307d87828801612fd1565b95989497509550505050565b60008060006060848603121561309e57600080fd5b833592506020840135915060408401356130b781612d96565b809150509250925092565b80358015158114610c1d57600080fd5b600080604083850312156130e557600080fd5b82356130f081612bbc565b91506130fe602084016130c2565b90509250929050565b6000806040838503121561311a57600080fd5b82356130f081612d96565b600067ffffffffffffffff82111561313f5761313f612cc0565b50601f01601f191660200190565b6000806000806080858703121561316357600080fd5b843561316e81612bbc565b9350602085013561317e81612bbc565b925060408501359150606085013567ffffffffffffffff8111156131a157600080fd5b8501601f810187136131b257600080fd5b80356131c0612d4c82613125565b8181528860208385010111156131d557600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080600080600060a0868803121561320f57600080fd5b8535945060208601359350604086013561322881612d96565b9250606086013561323881612bbc565b949793965091946080013592915050565b6000806040838503121561325c57600080fd5b823561326781612bbc565b9150602083013561327781612bbc565b809150509250929050565b600181811c9082168061329657607f821691505b6020821081036132b657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601490820152736f6e6c794f776e6572206e6f74206f776e65722160601b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161332857613328613300565b5060010190565b8181038181111561063d5761063d613300565b60006020828403121561335457600080fd5b8151612b3981612bbc565b60006020828403121561337157600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000826133b957634e487b7160e01b600052601260045260246000fd5b500690565b8082018082111561063d5761063d613300565b805161ffff81168114610c1d57600080fd5b6000602082840312156133f557600080fd5b612b39826133d1565b60006101008201905083825260ff835116602083015260ff6020840151166040830152604083015161ffff808216606085015280606086015116608085015260ff60808601511660a08501528060a08601511660c08501528060c08601511660e085015250509392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061349e90830184612b64565b9695505050505050565b600082516134ba818460208701612b40565b9190910192915050565b6000602082840312156134d657600080fd5b8151612b3981612b03565b6000602082840312156134f357600080fd5b8151612b3981612d96565b601f82111561081f57600081815260208120601f850160051c810160208610156135255750805b601f850160051c820191505b81811015610e3757828155600101613531565b815167ffffffffffffffff81111561355e5761355e612cc0565b6135728161356c8454613282565b846134fe565b602080601f8311600181146135a7576000841561358f5750858301515b600019600386901b1c1916600185901b178555610e37565b600085815260208120601f198616915b828110156135d6578886015182559484019460019091019084016135b7565b50858210156135f45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561361657600080fd5b815167ffffffffffffffff81111561362d57600080fd5b8201601f8101841361363e57600080fd5b805161364c612d4c82613125565b81815285602083850101111561366157600080fd5b613672826020830160208601612b40565b95945050505050565b600060e0828403121561368d57600080fd5b60405160e0810181811067ffffffffffffffff821117156136b0576136b0612cc0565b60405282516136be81612d96565b815260208301516136ce81612d96565b60208201526136df604084016133d1565b60408201526136f0606084016133d1565b6060820152608083015161370381612d96565b608082015261371460a084016133d1565b60a082015261372560c084016133d1565b60c08201529392505050565b60008161374057613740613300565b50600019019056fea264697066735822122004a861ce3d850a738964e0a61c38b49408badbe3856d9c367ab35083b272010764736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063b88d4fde116100b8578063cca3e8321161007c578063cca3e83214610585578063e2d97934146105a5578063e985e9c5146105b8578063f2fde38b146105e6578063f7ea7a3d146105f957600080fd5b8063b88d4fde14610526578063b979b1a314610539578063bd5404a81461054c578063c16ac06f1461055f578063c87b56dd1461057257600080fd5b806395d89b41116100ff57806395d89b41146104b7578063978fbc3c146104bf578063a22cb465146104ed578063a5eb6ff214610500578063b4f035a41461051357600080fd5b806370a0823114610458578063751149791461046b5780637ca510a41461047e5780637cb81fe5146104915780638da5cb5b146104a457600080fd5b806342842e0e116101c957806357b3aa761161018d57806357b3aa76146103e95780635a1389111461040c5780636352211e1461041f578063639807d0146104325780636509e7761461044557600080fd5b806342842e0e1461036c578063438b63001461037f5780634724e5461461039f5780634be99cd6146103c25780635589655a146103d557600080fd5b806323b872dd1161021057806323b872dd146102f75780632463a55a1461030a578063383505411461031d5780633ae23cc4146103465780633b5006071461035957600080fd5b806301ffc9a71461024d57806306fdde0314610275578063081812fc1461028a578063095ea7b3146102cb57806318160ddd146102e0575b600080fd5b61026061025b366004612b1c565b61060c565b60405190151581526020015b60405180910390f35b61027d610643565b60405161026c9190612b90565b6102b3610298366004612ba3565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6102de6102d9366004612bd1565b6106d1565b005b6102e960045481565b60405190815260200161026c565b6102de610305366004612bfd565b610824565b6102de610318366004612c3e565b61083a565b6102b361032b366004612ba3565b6005602052600090815260409020546001600160a01b031681565b600a546102b3906001600160a01b031681565b6102de610367366004612e09565b6108d4565b6102de61037a366004612bfd565b6109d8565b61039261038d366004612e91565b6109f3565b60405161026c9190612eae565b6102606103ad366004612e91565b60076020526000908152604090205460ff1681565b6102de6103d0366004612e91565b610b1b565b600f5461026090600160a01b900460ff1681565b6102606103f7366004612ef2565b60116020526000908152604090205460ff1681565b600f546102b3906001600160a01b031681565b6102b361042d366004612ba3565b610b67565b600e546102b3906001600160a01b031681565b600b546102b3906001600160a01b031681565b6102e9610466366004612e91565b610c22565b6102de610479366004612f0f565b610ccd565b6102de61048c36600461301d565b610e3f565b6102de61049f366004613089565b610f68565b6000546102b3906001600160a01b031681565b61027d61137c565b6102606104cd366004612bd1565b601060209081526000928352604080842090915290825290205460ff1681565b6102de6104fb3660046130d2565b611389565b600d546102b3906001600160a01b031681565b6102de610521366004613107565b611398565b6102de61053436600461314d565b6113e7565b6102de6105473660046131f7565b611545565b6102de61055a366004612e91565b611adb565b6001546102b3906001600160a01b031681565b61027d610580366004612ba3565b611bc4565b6102e9610593366004612e91565b60066020526000908152604090205481565b600c546102b3906001600160a01b031681565b6102606105c6366004613249565b600960209081526000928352604080842090915290825290205460ff1681565b6102de6105f4366004612e91565b611c8c565b6102de610607366004612ba3565b611d06565b60006380ac58cd60e01b6001600160e01b03198316148061063d5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6002805461065090613282565b80601f016020809104026020016040519081016040528092919081815260200182805461067c90613282565b80156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505081565b60006106dc82610b67565b9050806001600160a01b0316836001600160a01b03160361075d5760405162461bcd60e51b815260206004820152603060248201527f455243373231494d69677261746f723a20617070726f766528292063616e6e6f60448201526f7420617070726f7665206f776e65722160801b60648201526084015b60405180910390fd5b336001600160a01b038216148061079757506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b6108155760405162461bcd60e51b815260206004820152604360248201527f455243373231494d69677261746f723a20617070726f766528292043616c6c6560448201527f72206973206e6f74206f776e6572206f66206973417070726f766564466f72416064820152626c6c2160e81b608482015260a401610754565b61081f8383611d35565b505050565b61082f838383611dc4565b61081f83838361205d565b6000546001600160a01b031633146108645760405162461bcd60e51b8152600401610754906132bc565b600a80546001600160a01b03199081166001600160a01b0396871617909155600b8054821696861696909617909555600c8054861693851693909317909255600d8054851695841695909517909455600e8054841694831694909417909355600f80549092169216919091179055565b81518351146109165760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b805183511461095e5760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b60005b83518110156109d2576109c084828151811061097f5761097f6132ea565b6020026020010151848381518110610999576109996132ea565b60200260200101518484815181106109b3576109b36132ea565b6020026020010151610f68565b806109ca81613316565b915050610961565b50505050565b61081f838383604051806020016040528060008152506113e7565b60606000610a0083610c22565b905060008167ffffffffffffffff811115610a1d57610a1d612cc0565b604051908082528060200260200182016040528015610a46578160200160208202803683370190505b50600454909150600090815b81811015610b10576000610a6582610b67565b6001600160a01b0316148015610a9e575083610a8260018761332f565b81518110610a9257610a926132ea565b60200260200101516000145b15610ab15781610aad81613316565b9250505b866001600160a01b0316610ac482610b67565b6001600160a01b031603610afe5780848481518110610ae557610ae56132ea565b602090810291909101015282610afa81613316565b9350505b80610b0881613316565b915050610a52565b509195945050505050565b6000546001600160a01b03163314610b455760405162461bcd60e51b8152600401610754906132bc565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2482108015610b8f57506000828152600560205260409020546001600160a01b0316155b15610c01576001546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d9190613342565b506000908152600560205260409020546001600160a01b031690565b919050565b6001600160a01b03811660009081526007602052604081205460ff1615610c5f57506001600160a01b031660009081526006602052604090205490565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d919061335f565b8351855114610d0f5760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b8251855114610d575760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b8051855114610da85760405162461bcd60e51b815260206004820152601d60248201527f55706c6f616420494473206d69736d617463686564206c656e677468210000006044820152606401610754565b60005b8551811015610e3757610e25868281518110610dc957610dc96132ea565b6020026020010151868381518110610de357610de36132ea565b6020026020010151868481518110610dfd57610dfd6132ea565b602002602001015186868681518110610e1857610e186132ea565b6020026020010151611545565b80610e2f81613316565b915050610dab565b505050505050565b6000546001600160a01b03163314610e695760405162461bcd60e51b8152600401610754906132bc565b828114610ec45760405162461bcd60e51b8152602060048201526024808201527f696e697469616c697a6528293a206172726179206c656e677468206d69736d616044820152637463682160e01b6064820152608401610754565b60005b83811015610f6157848482818110610ee157610ee16132ea565b90506020020135838383818110610efa57610efa6132ea565b9050602002016020810190610f0f9190612e91565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480610f5981613316565b915050610ec7565b5050505050565b600e546040516331a9108f60e11b8152600481018590526001600160a01b0390911690636352211e90602401602060405180830381865afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd59190613342565b6001600160a01b0316336001600160a01b03161480156110725750600f546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015611039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105d9190613342565b6001600160a01b0316336001600160a01b0316145b6110ae5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b60ff8082166000908152601160205260409020541661110f5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061114390339030908890600401613378565b600060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506111a990339030908790600401613378565b600060405180830381600087803b1580156111c357600080fd5b505af11580156111d7573d6000803e3d6000fd5b50506040516bffffffffffffffffffffffff193360601b166020820152426034820152446054820152607481018690526094810185905260009250600a915060b4016040516020818303038152906040528051906020012060001c61123c919061339c565b6112479060016133be565b600b5460405163813fd7fd60e01b815261ffff861660048201529192506000916001600160a01b039091169063813fd7fd90602401602060405180830381865afa158015611299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bd91906133e3565b6040805160e08101825260ff80861682528616602082015261ffff80891682840152878116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611332928691016133fe565b600060405180830381600087803b15801561134c57600080fd5b505af1158015611360573d6000803e3d6000fd5b50505050611370336004546120e4565b610e37336004546122ad565b6003805461065090613282565b61139433838361253c565b5050565b6000546001600160a01b031633146113c25760405162461bcd60e51b8152600401610754906132bc565b60ff919091166000908152601160205260409020805460ff1916911515919091179055565b6113f2848484610824565b6001600160a01b0383163b156109d2576000836001600160a01b031663150b7a023387868660405160240161142a949392919061346b565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161146391906134a8565b600060405180830381855afa9150503d806000811461149e576040519150601f19603f3d011682016040523d82523d6000602084013e6114a3565b606091505b509150506000818060200190518101906114bd91906134c4565b9050630a85bd0160e11b6001600160e01b0319821614610e375760405162461bcd60e51b815260206004820152603d60248201527f455243373231494d69677261746f723a20736166655472616e7366657246726f60448201527f6d282920746f5f206e6f742045524337323152656365697661626c65210000006064820152608401610754565b600e546040516331a9108f60e11b8152600481018790526001600160a01b0390911690636352211e90602401602060405180830381865afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190613342565b6001600160a01b0316336001600160a01b031614801561164f5750600f546040516331a9108f60e11b8152600481018690526001600160a01b0390911690636352211e90602401602060405180830381865afa158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190613342565b6001600160a01b0316336001600160a01b0316145b61168b5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b6040516331a9108f60e11b8152600481018290526001600160a01b03831690636352211e90602401602060405180830381865afa1580156116d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f49190613342565b6001600160a01b0316336001600160a01b0316146117545760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206f776e207468697320636861726163746572210000006044820152606401610754565b6001600160a01b038216600090815260106020908152604080832084845290915290205460ff16156117da5760405162461bcd60e51b815260206004820152602960248201527f54686973206368617261637465722068617320616c7265616479206265656e2060448201526875706c6f616465642160b81b6064820152608401610754565b60ff8084166000908152601160205260409020541661183b5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061186f90339030908a90600401613378565b600060405180830381600087803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506118d590339030908990600401613378565b600060405180830381600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b505050506001600160a01b038281166000818152601060209081526040808320868452909152808220805460ff19166001179055600a549051630da46c0f60e01b8152600481019390935290921690630da46c0f90602401602060405180830381865afa158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c91906134e1565b600b5460405163813fd7fd60e01b815261ffff881660048201529192506000916001600160a01b039091169063813fd7fd90602401602060405180830381865afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1291906133e3565b6040805160e08101825260ff80861682528816602082015261ffff808b1682840152898116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611a87928691016133fe565b600060405180830381600087803b158015611aa157600080fd5b505af1158015611ab5573d6000803e3d6000fd5b50505050611ac5336004546120e4565b611ad1336004546122ad565b5050505050505050565b600f54600160a01b900460ff1615611b2a5760405162461bcd60e51b815260206004820152601260248201527150726f787920496e697469616c697a65642160701b6044820152606401610754565b600f805460ff60a01b1916600160a01b1790556040805180820190915260138152724d61727469616e73204368617261637465727360681b6020820152600290611b749082613544565b506040805180820190915260088152674d41525449414e5360c01b6020820152600390611ba19082613544565b50600080546001600160a01b0319166001600160a01b0392909216919091179055565b6060611bcf8261263e565b611c1b5760405162461bcd60e51b815260206004820152601960248201527f43686172616374657220646f6573206e6f7420657869737421000000000000006044820152606401610754565b600d54604051630eaa6a0560e31b8152600481018490526001600160a01b0390911690637553502890602401600060405180830381865afa158015611c64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261063d9190810190613604565b6000546001600160a01b03163314611cb65760405162461bcd60e51b8152600401610754906132bc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611d305760405162461bcd60e51b8152600401610754906132bc565b600455565b6000818152600860205260409020546001600160a01b0383811691161461139457600081815260086020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d8b82610b67565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600c5460405163632447c960e01b81526001600160a01b0385811660048301529091169063632447c990602401600060405180830381600087803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b5050600c5460405163632447c960e01b81526001600160a01b038681166004830152909116925063632447c99150602401600060405180830381600087803b158015611e6a57600080fd5b505af1158015611e7e573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e060405180830381865afa158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef2919061367b565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b0390911690633616171190606401602060405180830381865afa158015611f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f88919061335f565b600c54604051631fa86bd160e31b81526001600160a01b0388811660048301526024820184905292935091169063fd435e8890604401600060405180830381600087803b158015611fd857600080fd5b505af1158015611fec573d6000803e3d6000fd5b5050600c5460405163b5862c2560e01b81526001600160a01b03888116600483015260248201869052909116925063b5862c259150604401600060405180830381600087803b15801561203e57600080fd5b505af1158015612052573d6000803e3d6000fd5b505050505050505050565b6120673382612670565b6120d95760405162461bcd60e51b815260206004820152603b60248201527f455243373231494d69677261746f723a207472616e7366657246726f6d28292060448201527f5f6973417070726f7665644f724f776e6572203d2066616c73652100000000006064820152608401610754565b61081f83838361276b565b600c5460405163632447c960e01b81526001600160a01b0384811660048301529091169063632447c990602401600060405180830381600087803b15801561212b57600080fd5b505af115801561213f573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e060405180830381865afa15801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b3919061367b565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b0390911690633616171190606401602060405180830381865afa158015612225573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612249919061335f565b600c5460405163b5862c2560e01b81526001600160a01b0387811660048301526024820184905292935091169063b5862c2590604401600060405180830381600087803b15801561229957600080fd5b505af1158015611ad1573d6000803e3d6000fd5b6001600160a01b03821661231a5760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e742829204d696e7420746f60448201526d205a65726f20416464726573732160901b6064820152608401610754565b600061232582610b67565b6001600160a01b0316146123925760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e74282920546f6b656e206160448201526d6c7265616479204578697374732160901b6064820152608401610754565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600790915290205460ff16156123ff576001600160a01b03821660009081526006602052604081208054916123f583613316565b91905055506124a8565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015612449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246d919061335f565b6124789060016133be565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b600480549060006124b883613316565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161253091815260200190565b60405180910390a25050565b816001600160a01b0316836001600160a01b0316036125d15760405162461bcd60e51b815260206004820152604560248201527f455243373231494d69677261746f723a205f736574417070726f76616c466f7260448201527f416c6c2829204f776e6572206d757374206e6f7420626520746865204f70657260648201526461746f722160d81b608482015260a401610754565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000610e2482101561265257506001919050565b506000908152600560205260409020546001600160a01b0316151590565b60008061267c83610b67565b90506001600160a01b0381166126fa5760405162461bcd60e51b815260206004820152603c60248201527f455243373231494d69677261746f723a205f6973417070726f7665644f724f7760448201527f6e65722829204f776e6572206973205a65726f204164647265737321000000006064820152608401610754565b806001600160a01b0316846001600160a01b0316148061273357506000838152600860205260409020546001600160a01b038581169116145b8061276357506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b61277481610b67565b6001600160a01b0316836001600160a01b0316146127fc576040805162461bcd60e51b81526020600482015260248101919091527f455243373231494d69677261746f723a205f7472616e7366657228292054726160448201527f6e736665722066726f6d5f20213d206f776e65724f6628746f6b656e49645f296064820152608401610754565b6001600160a01b0382166128715760405162461bcd60e51b815260206004820152603660248201527f455243373231494d69677261746f723a205f7472616e736665722829205472616044820152756e7366657220746f205a65726f20416464726573732160501b6064820152608401610754565b6000818152600860205260409020546001600160a01b0316156128ab57600081815260086020526040902080546001600160a01b03191690555b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038781169190911790915586168352600790915290205460ff161561291c576001600160a01b038316600090815260066020526040812080549161291283613731565b91905055506129c5565b600180546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298b919061335f565b612995919061332f565b6001600160a01b0384166000908152600660209081526040808320939093556007905220805460ff191660011790555b6001600160a01b03821660009081526007602052604090205460ff1615612a14576001600160a01b0382166000908152600660205260408120805491612a0a83613316565b9190505550612abd565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015612a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a82919061335f565b612a8d9060016133be565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160e01b031981168114612b1957600080fd5b50565b600060208284031215612b2e57600080fd5b8135612b3981612b03565b9392505050565b60005b83811015612b5b578181015183820152602001612b43565b50506000910152565b60008151808452612b7c816020860160208601612b40565b601f01601f19169290920160200192915050565b602081526000612b396020830184612b64565b600060208284031215612bb557600080fd5b5035919050565b6001600160a01b0381168114612b1957600080fd5b60008060408385031215612be457600080fd5b8235612bef81612bbc565b946020939093013593505050565b600080600060608486031215612c1257600080fd5b8335612c1d81612bbc565b92506020840135612c2d81612bbc565b929592945050506040919091013590565b60008060008060008060c08789031215612c5757600080fd5b8635612c6281612bbc565b95506020870135612c7281612bbc565b94506040870135612c8281612bbc565b93506060870135612c9281612bbc565b92506080870135612ca281612bbc565b915060a0870135612cb281612bbc565b809150509295509295509295565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612cff57612cff612cc0565b604052919050565b600067ffffffffffffffff821115612d2157612d21612cc0565b5060051b60200190565b600082601f830112612d3c57600080fd5b81356020612d51612d4c83612d07565b612cd6565b82815260059290921b84018101918181019086841115612d7057600080fd5b8286015b84811015612d8b5780358352918301918301612d74565b509695505050505050565b60ff81168114612b1957600080fd5b600082601f830112612db657600080fd5b81356020612dc6612d4c83612d07565b82815260059290921b84018101918181019086841115612de557600080fd5b8286015b84811015612d8b578035612dfc81612d96565b8352918301918301612de9565b600080600060608486031215612e1e57600080fd5b833567ffffffffffffffff80821115612e3657600080fd5b612e4287838801612d2b565b94506020860135915080821115612e5857600080fd5b612e6487838801612d2b565b93506040860135915080821115612e7a57600080fd5b50612e8786828701612da5565b9150509250925092565b600060208284031215612ea357600080fd5b8135612b3981612bbc565b6020808252825182820181905260009190848201906040850190845b81811015612ee657835183529284019291840191600101612eca565b50909695505050505050565b600060208284031215612f0457600080fd5b8135612b3981612d96565b600080600080600060a08688031215612f2757600080fd5b853567ffffffffffffffff80821115612f3f57600080fd5b612f4b89838a01612d2b565b96506020880135915080821115612f6157600080fd5b612f6d89838a01612d2b565b95506040880135915080821115612f8357600080fd5b612f8f89838a01612da5565b945060608801359150612fa182612bbc565b90925060808701359080821115612fb757600080fd5b50612fc488828901612d2b565b9150509295509295909350565b60008083601f840112612fe357600080fd5b50813567ffffffffffffffff811115612ffb57600080fd5b6020830191508360208260051b850101111561301657600080fd5b9250929050565b6000806000806040858703121561303357600080fd5b843567ffffffffffffffff8082111561304b57600080fd5b61305788838901612fd1565b9096509450602087013591508082111561307057600080fd5b5061307d87828801612fd1565b95989497509550505050565b60008060006060848603121561309e57600080fd5b833592506020840135915060408401356130b781612d96565b809150509250925092565b80358015158114610c1d57600080fd5b600080604083850312156130e557600080fd5b82356130f081612bbc565b91506130fe602084016130c2565b90509250929050565b6000806040838503121561311a57600080fd5b82356130f081612d96565b600067ffffffffffffffff82111561313f5761313f612cc0565b50601f01601f191660200190565b6000806000806080858703121561316357600080fd5b843561316e81612bbc565b9350602085013561317e81612bbc565b925060408501359150606085013567ffffffffffffffff8111156131a157600080fd5b8501601f810187136131b257600080fd5b80356131c0612d4c82613125565b8181528860208385010111156131d557600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080600080600060a0868803121561320f57600080fd5b8535945060208601359350604086013561322881612d96565b9250606086013561323881612bbc565b949793965091946080013592915050565b6000806040838503121561325c57600080fd5b823561326781612bbc565b9150602083013561327781612bbc565b809150509250929050565b600181811c9082168061329657607f821691505b6020821081036132b657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601490820152736f6e6c794f776e6572206e6f74206f776e65722160601b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161332857613328613300565b5060010190565b8181038181111561063d5761063d613300565b60006020828403121561335457600080fd5b8151612b3981612bbc565b60006020828403121561337157600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000826133b957634e487b7160e01b600052601260045260246000fd5b500690565b8082018082111561063d5761063d613300565b805161ffff81168114610c1d57600080fd5b6000602082840312156133f557600080fd5b612b39826133d1565b60006101008201905083825260ff835116602083015260ff6020840151166040830152604083015161ffff808216606085015280606086015116608085015260ff60808601511660a08501528060a08601511660c08501528060c08601511660e085015250509392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061349e90830184612b64565b9695505050505050565b600082516134ba818460208701612b40565b9190910192915050565b6000602082840312156134d657600080fd5b8151612b3981612b03565b6000602082840312156134f357600080fd5b8151612b3981612d96565b601f82111561081f57600081815260208120601f850160051c810160208610156135255750805b601f850160051c820191505b81811015610e3757828155600101613531565b815167ffffffffffffffff81111561355e5761355e612cc0565b6135728161356c8454613282565b846134fe565b602080601f8311600181146135a7576000841561358f5750858301515b600019600386901b1c1916600185901b178555610e37565b600085815260208120601f198616915b828110156135d6578886015182559484019460019091019084016135b7565b50858210156135f45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561361657600080fd5b815167ffffffffffffffff81111561362d57600080fd5b8201601f8101841361363e57600080fd5b805161364c612d4c82613125565b81815285602083850101111561366157600080fd5b613672826020830160208601612b40565b95945050505050565b600060e0828403121561368d57600080fd5b60405160e0810181811067ffffffffffffffff821117156136b0576136b0612cc0565b60405282516136be81612d96565b815260208301516136ce81612d96565b60208201526136df604084016133d1565b60408201526136f0606084016133d1565b6060820152608083015161370381612d96565b608082015261371460a084016133d1565b60a082015261372560c084016133d1565b60c08201529392505050565b60008161374057613740613300565b50600019019056fea264697066735822122004a861ce3d850a738964e0a61c38b49408badbe3856d9c367ab35083b272010764736f6c63430008120033
Deployed Bytecode Sourcemap
15742:7401:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10363:159;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;10363:159:0;;;;;;;;1747:18;;;:::i;:::-;;;;;;;:::i;2434:46::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2434:46:0;;;;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;2434:46:0;1533:203:1;8642:485:0;;;;;;:::i;:::-;;:::i;:::-;;2091:26;;;;;;;;;2343:25:1;;;2331:2;2316:18;2091:26:0;2197:177:1;22190:205:0;;;;;;:::i;:::-;;:::i;15960:317::-;;;;;;:::i;:::-;;:::i;2124:43::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2124:43:0;;;15812:13;;;;;-1:-1:-1;;;;;15812:13:0;;;21009:478;;;;;;:::i;:::-;;:::i;10181:148::-;;;;;;:::i;:::-;;:::i;10567:829::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2317:53::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1620:89;;;;;;:::i;:::-;;:::i;16321:28::-;;;;;-1:-1:-1;;;16321:28:0;;;;;;18108:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15934:17;;;;;-1:-1:-1;;;;;15934:17:0;;;3274:583;;;;;;:::i;:::-;;:::i;15909:17::-;;;;;-1:-1:-1;;;;;15909:17:0;;;15833:13;;;;;-1:-1:-1;;;;;15833:13:0;;;3896:452;;;;;;:::i;:::-;;:::i;21493:666::-;;;;;;:::i;:::-;;:::i;2878:359::-;;;;;;:::i;:::-;;:::i;18307:1184::-;;;;;;:::i;:::-;;:::i;332:20::-;;;;;-1:-1:-1;;;;;332:20:0;;;1767;;;:::i;16811:82::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;9210:148;;;;;;:::i;:::-;;:::i;15877:25::-;;;;;-1:-1:-1;;;;;15877:25:0;;;18162:137;;;;;;:::i;:::-;;:::i;9660:515::-;;;;;;:::i;:::-;;:::i;19497:1467::-;;;;;;:::i;:::-;;:::i;16358:329::-;;;;;;:::i;:::-;;:::i;1600:13::-;;;;;-1:-1:-1;;;;;1600:13:0;;;22943:197;;;;;;:::i;:::-;;:::i;2174:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;15854:15;;;;;-1:-1:-1;;;;;15854:15:0;;;2487:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;591:170;;;;;;:::i;:::-;;:::i;2653:111::-;;;;;;:::i;:::-;;:::i;10363:159::-;10432:4;-1:-1:-1;;;;;;;;;10457:26:0;;;;:56;;-1:-1:-1;;;;;;;;;;10487:26:0;;;10457:56;10449:65;10363:159;-1:-1:-1;;10363:159:0:o;1747:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8642:485::-;8716:14;8733:17;8741:8;8733:7;:17::i;:::-;8716:34;;8776:6;-1:-1:-1;;;;;8769:13:0;:3;-1:-1:-1;;;;;8769:13:0;;8761:74;;;;-1:-1:-1;;;8761:74:0;;15518:2:1;8761:74:0;;;15500:21:1;15557:2;15537:18;;;15530:30;15596:34;15576:18;;;15569:62;-1:-1:-1;;;15647:18:1;;;15640:46;15703:19;;8761:74:0;;;;;;;;;8854:10;-1:-1:-1;;;;;8854:20:0;;;;:109;;-1:-1:-1;;;;;;8927:24:0;;;;;;:16;:24;;;;;;;;8952:10;8927:36;;;;;;;;;;8854:109;8846:239;;;;-1:-1:-1;;;8846:239:0;;15935:2:1;8846:239:0;;;15917:21:1;15974:2;15954:18;;;15947:30;16013:34;15993:18;;;15986:62;16084:34;16064:18;;;16057:62;-1:-1:-1;;;16135:19:1;;;16128:34;16179:19;;8846:239:0;15733:471:1;8846:239:0;9096:23;9105:3;9110:8;9096;:23::i;:::-;8705:422;8642:485;;:::o;22190:205::-;22285:41;22305:5;22312:3;22317:8;22285:19;:41::i;:::-;22337:50;22366:5;22373:3;22378:8;22337:28;:50::i;15960:317::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;16103:2:::1;:13:::0;;-1:-1:-1;;;;;;16103:13:0;;::::1;-1:-1:-1::0;;;;;16103:13:0;;::::1;;::::0;;;16128:2:::1;:13:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16153:3:::1;:16:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16181:8:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16223:2:::1;:17:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16252:2:::1;:17:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;15960:317::o;21009:478::-;21187:16;:23;21161:15;:22;:49;21153:76;;;;-1:-1:-1;;;21153:76:0;;16760:2:1;21153:76:0;;;16742:21:1;16799:2;16779:18;;;16772:30;-1:-1:-1;;;16818:18:1;;;16811:44;16872:18;;21153:76:0;16558:338:1;21153:76:0;21274:12;:19;21248:15;:22;:45;21240:78;;;;-1:-1:-1;;;21240:78:0;;17103:2:1;21240:78:0;;;17085:21:1;17142:2;17122:18;;;17115:30;-1:-1:-1;;;17161:18:1;;;17154:50;17221:18;;21240:78:0;16901:344:1;21240:78:0;21334:9;21329:151;21353:15;:22;21349:1;:26;21329:151;;;21397:71;21411:15;21427:1;21411:18;;;;;;;;:::i;:::-;;;;;;;21431:16;21448:1;21431:19;;;;;;;;:::i;:::-;;;;;;;21452:12;21465:1;21452:15;;;;;;;;:::i;:::-;;;;;;;21397:13;:71::i;:::-;21377:3;;;;:::i;:::-;;;;21329:151;;;;21009:478;;;:::o;10181:148::-;10279:42;10296:5;10303:3;10308:8;10279:42;;;;;;;;;;;;:16;:42::i;10567:829::-;10637:16;10666;10685:19;10695:8;10685:9;:19::i;:::-;10666:38;;10715:24;10756:8;10742:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10742:23:0;-1:-1:-1;10824:11:0;;10715:50;;-1:-1:-1;10776:14:0;;;10846:518;10870:12;10866:1;:16;10846:518;;;11006:3;10984:10;10992:1;10984:7;:10::i;:::-;-1:-1:-1;;;;;10984:26:0;;:56;;;;-1:-1:-1;11014:7:0;11022:12;11033:1;11022:8;:12;:::i;:::-;11014:21;;;;;;;;:::i;:::-;;;;;;;11039:1;11014:26;10984:56;10980:111;;;11061:14;;;;:::i;:::-;;;;10980:111;11174:8;-1:-1:-1;;;;;11160:22:0;:10;11168:1;11160:7;:10::i;:::-;-1:-1:-1;;;;;11160:22:0;;11156:197;;11269:1;11251:7;11259:6;11251:15;;;;;;;;:::i;:::-;;;;;;;;;;:19;11329:8;;;;:::i;:::-;;;;11156:197;10884:3;;;;:::i;:::-;;;;10846:518;;;-1:-1:-1;11381:7:0;;10567:829;-1:-1:-1;;;;;10567:829:0:o;1620:89::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;1683:2:::1;:18:::0;;-1:-1:-1;;;;;;1683:18:0::1;-1:-1:-1::0;;;;;1683:18:0;;;::::1;::::0;;;::::1;::::0;;1620:89::o;3274:583::-;3330:7;3479:4;3468:8;:15;:53;;;;-1:-1:-1;3517:3:0;3487:18;;;:8;:18;;;;;;-1:-1:-1;;;;;3487:18:0;:34;3468:53;3464:386;;;3631:2;;:20;;-1:-1:-1;;;3631:20:0;;;;;2343:25:1;;;-1:-1:-1;;;;;3631:2:0;;;;:10;;2316:18:1;;3631:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3464:386::-;-1:-1:-1;3820:18:0;;;;:8;:18;;;;;;-1:-1:-1;;;;;3820:18:0;;3274:583::o;3464:386::-;3274:583;;;:::o;3896:452::-;-1:-1:-1;;;;;4191:31:0;;3954:7;4191:31;;;:21;:31;;;;;;;;4187:154;;;-1:-1:-1;;;;;;4246:20:0;;;;;:10;:20;;;;;;;3896:452::o;4187:154::-;4307:2;;:22;;-1:-1:-1;;;4307:22:0;;-1:-1:-1;;;;;1697:32:1;;;4307:22:0;;;1679:51:1;4307:2:0;;;;:12;;1652:18:1;;4307:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21493:666::-;21728:16;:23;21702:15;:22;:49;21694:76;;;;-1:-1:-1;;;21694:76:0;;16760:2:1;21694:76:0;;;16742:21:1;16799:2;16779:18;;;16772:30;-1:-1:-1;;;16818:18:1;;;16811:44;16872:18;;21694:76:0;16558:338:1;21694:76:0;21815:12;:19;21789:15;:22;:45;21781:78;;;;-1:-1:-1;;;21781:78:0;;17103:2:1;21781:78:0;;;17085:21:1;17142:2;17122:18;;;17115:30;-1:-1:-1;;;17161:18:1;;;17154:50;17221:18;;21781:78:0;16901:344:1;21781:78:0;21904:10;:17;21878:15;:22;:43;21870:85;;;;-1:-1:-1;;;21870:85:0;;18434:2:1;21870:85:0;;;18416:21:1;18473:2;18453:18;;;18446:30;18512:31;18492:18;;;18485:59;18561:18;;21870:85:0;18232:353:1;21870:85:0;21971:9;21966:186;21990:15;:22;21986:1;:26;21966:186;;;22034:106;22050:15;22066:1;22050:18;;;;;;;;:::i;:::-;;;;;;;22070:16;22087:1;22070:19;;;;;;;;:::i;:::-;;;;;;;22091:12;22104:1;22091:15;;;;;;;;:::i;:::-;;;;;;;22108:16;22126:10;22137:1;22126:13;;;;;;;;:::i;:::-;;;;;;;22034:15;:106::i;:::-;22014:3;;;;:::i;:::-;;;;21966:186;;;;21493:666;;;;;:::o;2878:359::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;2994:34;;::::1;2986:96;;;::::0;-1:-1:-1;;;2986:96:0;;18792:2:1;2986:96:0::1;::::0;::::1;18774:21:1::0;18831:2;18811:18;;;18804:30;18870:34;18850:18;;;18843:62;-1:-1:-1;;;18921:18:1;;;18914:34;18965:19;;2986:96:0::1;18590:400:1::0;2986:96:0::1;3108:9;3103:127;3123:20:::0;;::::1;3103:127;;;3205:9;;3215:1;3205:12;;;;;;;:::i;:::-;;;;;;;3193:7;;3201:1;3193:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3170:48:0::1;3187:3;-1:-1:-1::0;;;;;3170:48:0::1;;;;;;;;;;;3145:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3103:127;;;;2878:359:::0;;;;:::o;18307:1184::-;18438:2;;:26;;-1:-1:-1;;;18438:26:0;;;;;2343:25:1;;;-1:-1:-1;;;;;18438:2:0;;;;:10;;2316:18:1;;18438:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18424:40:0;:10;-1:-1:-1;;;;;18424:40:0;;:85;;;;-1:-1:-1;18482:2:0;;:27;;-1:-1:-1;;;18482:27:0;;;;;2343:25:1;;;-1:-1:-1;;;;;18482:2:0;;;;:10;;2316:18:1;;18482:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18468:41:0;:10;-1:-1:-1;;;;;18468:41:0;;18424:85;18416:111;;;;-1:-1:-1;;;18416:111:0;;19197:2:1;18416:111:0;;;19179:21:1;19236:2;19216:18;;;19209:30;-1:-1:-1;;;19255:18:1;;;19248:43;19308:18;;18416:111:0;18995:337:1;18416:111:0;18546:30;;;;;;;;:17;:30;;;;;;;18538:75;;;;-1:-1:-1;;;18538:75:0;;19539:2:1;18538:75:0;;;19521:21:1;;;19558:18;;;19551:30;19617:34;19597:18;;;19590:62;19669:18;;18538:75:0;19337:356:1;18538:75:0;18678:2;;:58;;-1:-1:-1;;;18678:58:0;;-1:-1:-1;;;;;18678:2:0;;;;:15;;:58;;18694:10;;18714:4;;18721:14;;18678:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18747:2:0;;:59;;-1:-1:-1;;;18747:59:0;;-1:-1:-1;;;;;18747:2:0;;;;-1:-1:-1;18747:15:0;;-1:-1:-1;18747:59:0;;18763:10;;18783:4;;18790:15;;18747:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18859:96:0;;-1:-1:-1;;18876:10:0;20339:2:1;20335:15;20331:53;18859:96:0;;;20319:66:1;18888:15:0;20401:12:1;;;20394:28;18905:16:0;20438:12:1;;;20431:28;20475:12;;;20468:28;;;20512:13;;;20505:29;;;18819:11:0;;-1:-1:-1;18960:2:0;;-1:-1:-1;20550:13:1;;18859:96:0;;;;;;;;;;;;18849:107;;;;;;18841:116;;:121;;;;:::i;:::-;18840:127;;18966:1;18840:127;:::i;:::-;19020:2;;:51;;-1:-1:-1;;;19020:51:0;;21092:6:1;21080:19;;19020:51:0;;;21062:38:1;18819:150:0;;-1:-1:-1;18995:22:0;;-1:-1:-1;;;;;19020:2:0;;;;:24;;21035:18:1;;19020:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19118:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19084:31;19118:207;;;;;;;;;;;;;;;;19338:2;;19357:11;;;19338:43;;-1:-1:-1;;;19338:43:0;;18995:76;;-1:-1:-1;19118:207:0;;-1:-1:-1;;;;;19338:2:0;;;;:18;;:43;;19118:207;;19338:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19402:40;19418:10;19430:11;;19402:15;:40::i;:::-;19453:30;19459:10;19471:11;;19453:5;:30::i;1767:20::-;;;;;;;:::i;9210:148::-;9298:52;9317:10;9329:9;9340;9298:18;:52::i;:::-;9210:148;;:::o;18162:137::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;18253:30:::1;::::0;;;::::1;;::::0;;;:17:::1;:30;::::0;;;;:38;;-1:-1:-1;;18253:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18162:137::o;9660:515::-;9778:34;9791:5;9798:3;9803:8;9778:12;:34::i;:::-;-1:-1:-1;;;;;9827:15:0;;;:20;9823:345;;9867:22;9893:3;-1:-1:-1;;;;;9893:14:0;9931:10;9943;9955:5;9962:8;9972:5;9908:70;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9908:70:0;;;;;;;;;;;9893:86;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9864:115;;;9994:16;10024:9;10013:31;;;;;;;;;;;;:::i;:::-;9994:50;-1:-1:-1;;;;;;;;;;10067:23:0;;;10059:97;;;;-1:-1:-1;;;10059:97:0;;23541:2:1;10059:97:0;;;23523:21:1;23580:2;23560:18;;;23553:30;23619:34;23599:18;;;23592:62;23690:31;23670:18;;;23663:59;23739:19;;10059:97:0;23339:425:1;19497:1467:0;19675:2;;:26;;-1:-1:-1;;;19675:26:0;;;;;2343:25:1;;;-1:-1:-1;;;;;19675:2:0;;;;:10;;2316:18:1;;19675:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19661:40:0;:10;-1:-1:-1;;;;;19661:40:0;;:85;;;;-1:-1:-1;19719:2:0;;:27;;-1:-1:-1;;;19719:27:0;;;;;2343:25:1;;;-1:-1:-1;;;;;19719:2:0;;;;:10;;2316:18:1;;19719:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19705:41:0;:10;-1:-1:-1;;;;;19705:41:0;;19661:85;19653:111;;;;-1:-1:-1;;;19653:111:0;;19197:2:1;19653:111:0;;;19179:21:1;19236:2;19216:18;;;19209:30;-1:-1:-1;;;19255:18:1;;;19248:43;19308:18;;19653:111:0;18995:337:1;19653:111:0;19797:44;;-1:-1:-1;;;19797:44:0;;;;;2343:25:1;;;-1:-1:-1;;;;;19797:33:0;;;;;2316:18:1;;19797:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19783:58:0;:10;-1:-1:-1;;;;;19783:58:0;;19775:100;;;;-1:-1:-1;;;19775:100:0;;23971:2:1;19775:100:0;;;23953:21:1;24010:2;23990:18;;;23983:30;24049:31;24029:18;;;24022:59;24098:18;;19775:100:0;23769:353:1;19775:100:0;-1:-1:-1;;;;;19895:48:0;;;;;;:30;:48;;;;;;;;:59;;;;;;;;;;;19894:60;19886:114;;;;-1:-1:-1;;;19886:114:0;;24329:2:1;19886:114:0;;;24311:21:1;24368:2;24348:18;;;24341:30;24407:34;24387:18;;;24380:62;-1:-1:-1;;;24458:18:1;;;24451:39;24507:19;;19886:114:0;24127:405:1;19886:114:0;20019:30;;;;;;;;:17;:30;;;;;;;20011:75;;;;-1:-1:-1;;;20011:75:0;;19539:2:1;20011:75:0;;;19521:21:1;;;19558:18;;;19551:30;19617:34;19597:18;;;19590:62;19669:18;;20011:75:0;19337:356:1;20011:75:0;20188:2;;:58;;-1:-1:-1;;;20188:58:0;;-1:-1:-1;;;;;20188:2:0;;;;:15;;:58;;20204:10;;20224:4;;20231:14;;20188:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20257:2:0;;:59;;-1:-1:-1;;;20257:59:0;;-1:-1:-1;;;;;20257:2:0;;;;-1:-1:-1;20257:15:0;;-1:-1:-1;20257:59:0;;20273:10;;20293:4;;20300:15;;20257:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;20327:48:0;;;;;;;:30;:48;;;;;;;;:59;;;;;;;;;:66;;-1:-1:-1;;20327:66:0;20389:4;20327:66;;;20420:2;;:35;;-1:-1:-1;;;20420:35:0;;;;;1679:51:1;;;;20327:48:0;;20420:2;;:17;;1652:18:1;;20420:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20491:2;;:51;;-1:-1:-1;;;20491:51:0;;21092:6:1;21080:19;;20491:51:0;;;21062:38:1;20406:49:0;;-1:-1:-1;20466:22:0;;-1:-1:-1;;;;;20491:2:0;;;;:24;;21035:18:1;;20491:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20597:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20563:31;20597:207;;;;;;;;;;;;;;;;20817:2;;20836:11;;;20817:43;;-1:-1:-1;;;20817:43:0;;20466:76;;-1:-1:-1;20597:207:0;;-1:-1:-1;;;;;20817:2:0;;;;:18;;:43;;20597:207;;20817:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20874:40;20890:10;20902:11;;20874:15;:40::i;:::-;20925:30;20931:10;20943:11;;20925:5;:30::i;:::-;19642:1322;;;19497:1467;;;;;:::o;16358:329::-;16466:16;;-1:-1:-1;;;16466:16:0;;;;16465:17;16457:48;;;;-1:-1:-1;;;16457:48:0;;24991:2:1;16457:48:0;;;24973:21:1;25030:2;25010:18;;;25003:30;-1:-1:-1;;;25049:18:1;;;25042:48;25107:18;;16457:48:0;24789:342:1;16457:48:0;16516:16;:23;;-1:-1:-1;;;;16516:23:0;-1:-1:-1;;;16516:23:0;;;16571:28;;;;;;;;;;;;-1:-1:-1;;;16571:28:0;;;;:4;;:28;;:4;:28;:::i;:::-;-1:-1:-1;16610:19:0;;;;;;;;;;;;-1:-1:-1;;;16610:19:0;;;;:6;;:19;;:6;:19;:::i;:::-;-1:-1:-1;16662:5:0;:17;;-1:-1:-1;;;;;;16662:17:0;-1:-1:-1;;;;;16662:17:0;;;;;;;;;;16358:329::o;22943:197::-;23000:13;23034:17;23042:8;23034:7;:17::i;:::-;23026:55;;;;-1:-1:-1;;;23026:55:0;;27542:2:1;23026:55:0;;;27524:21:1;27581:2;27561:18;;;27554:30;27620:27;27600:18;;;27593:55;27665:18;;23026:55:0;27340:349:1;23026:55:0;23099:8;;:33;;-1:-1:-1;;;23099:33:0;;;;;2343:25:1;;;-1:-1:-1;;;;;23099:8:0;;;;:23;;2316:18:1;;23099:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23099:33:0;;;;;;;;;;;;:::i;591:170::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;662:12:::1;677:5:::0;;-1:-1:-1;;;;;693:12:0;;::::1;-1:-1:-1::0;;;;;;693:12:0;::::1;::::0;::::1;::::0;;721:32:::1;::::0;677:5;;;::::1;::::0;;;721:32:::1;::::0;662:12;721:32:::1;651:110;591:170:::0;:::o;2653:111::-;520:5;;-1:-1:-1;;;;;520:5:0;529:10;520:19;512:52;;;;-1:-1:-1;;;512:52:0;;;;;;;:::i;:::-;2729:11:::1;:26:::0;2653:111::o;7255:234::-;7336:21;;;;:11;:21;;;;;;-1:-1:-1;;;;;7336:28:0;;;:21;;:28;7332:150;;7381:21;;;;:11;:21;;;;;:27;;-1:-1:-1;;;;;;7381:27:0;-1:-1:-1;;;;;7381:27:0;;;;;;;;:21;;7437:17;7381:21;7437:7;:17::i;:::-;-1:-1:-1;;;;;7428:42:0;;;;;;;;;;;7255:234;;:::o;17461:608::-;17598:3;;:23;;-1:-1:-1;;;17598:23:0;;-1:-1:-1;;;;;1697:32:1;;;17598:23:0;;;1679:51:1;17598:3:0;;;;:16;;1652:18:1;;17598:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17623:3:0;;:21;;-1:-1:-1;;;17623:21:0;;-1:-1:-1;;;;;1697:32:1;;;17623:21:0;;;1679:51:1;17623:3:0;;;;-1:-1:-1;17623:16:0;;-1:-1:-1;1652:18:1;;17623:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17740:2:0;;:23;;-1:-1:-1;;;17740:23:0;;;;;2343:25:1;;;17706:31:0;;-1:-1:-1;;;;;;17740:2:0;;;;-1:-1:-1;17740:13:0;;2316:18:1;;17740:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17800:2;;17827:20;;;;17849:22;;;;17873:31;;;;17800:105;;-1:-1:-1;;;17800:105:0;;29680:4:1;29668:17;;;17800:105:0;;;29650:36:1;29705:6;29747:15;;;29727:18;;;29720:43;29799:15;29779:18;;;29772:43;17827:20:0;;-1:-1:-1;17774:23:0;;-1:-1:-1;;;;;17800:2:0;;;;:26;;29623:18:1;;17800:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17981:3;;:40;;-1:-1:-1;;;17981:40:0;;-1:-1:-1;;;;;30018:32:1;;;17981:40:0;;;30000:51:1;30067:18;;;30060:34;;;17774:131:0;;-1:-1:-1;17981:3:0;;;:16;;29973:18:1;;17981:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18023:3:0;;:38;;-1:-1:-1;;;18023:38:0;;-1:-1:-1;;;;;30018:32:1;;;18023:38:0;;;30000:51:1;30067:18;;;30060:34;;;18023:3:0;;;;-1:-1:-1;18023:16:0;;-1:-1:-1;29973:18:1;;18023:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17545:524;;17461:608;;;:::o;9384:270::-;9486:40;9505:10;9517:8;9486:18;:40::i;:::-;9478:126;;;;-1:-1:-1;;;9478:126:0;;30307:2:1;9478:126:0;;;30289:21:1;30346:2;30326:18;;;30319:30;30385:34;30365:18;;;30358:62;30456:29;30436:18;;;30429:57;30503:19;;9478:126:0;30105:423:1;9478:126:0;9615:31;9625:5;9632:3;9637:8;9615:9;:31::i;16935:520::-;17053:3;;:21;;-1:-1:-1;;;17053:21:0;;-1:-1:-1;;;;;1697:32:1;;;17053:21:0;;;1679:51:1;17053:3:0;;;;:16;;1652:18:1;;17053:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17170:2:0;;:23;;-1:-1:-1;;;17170:23:0;;;;;2343:25:1;;;17136:31:0;;-1:-1:-1;;;;;;17170:2:0;;;;-1:-1:-1;17170:13:0;;2316:18:1;;17170:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17230:2;;17257:20;;;;17279:22;;;;17303:31;;;;17230:105;;-1:-1:-1;;;17230:105:0;;29680:4:1;29668:17;;;17230:105:0;;;29650:36:1;29705:6;29747:15;;;29727:18;;;29720:43;29799:15;29779:18;;;29772:43;17257:20:0;;-1:-1:-1;17204:23:0;;-1:-1:-1;;;;;17230:2:0;;;;:26;;29623:18:1;;17230:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17409:3;;:38;;-1:-1:-1;;;17409:38:0;;-1:-1:-1;;;;;30018:32:1;;;17409:38:0;;;30000:51:1;30067:18;;;30060:34;;;17204:131:0;;-1:-1:-1;17409:3:0;;;:16;;29973:18:1;;17409:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4731:947;-1:-1:-1;;;;;4813:19:0;;4805:78;;;;-1:-1:-1;;;4805:78:0;;30735:2:1;4805:78:0;;;30717:21:1;30774:2;30754:18;;;30747:30;30813:34;30793:18;;;30786:62;-1:-1:-1;;;30864:18:1;;;30857:44;30918:19;;4805:78:0;30533:410:1;4805:78:0;4931:3;4902:17;4910:8;4902:7;:17::i;:::-;-1:-1:-1;;;;;4902:33:0;;4894:92;;;;-1:-1:-1;;;4894:92:0;;31150:2:1;4894:92:0;;;31132:21:1;31189:2;31169:18;;;31162:30;31228:34;31208:18;;;31201:62;-1:-1:-1;;;31279:18:1;;;31272:44;31333:19;;4894:92:0;30948:410:1;4894:92:0;5074:18;;;;:8;:18;;;;;;;;:24;;-1:-1:-1;;;;;;5074:24:0;-1:-1:-1;;;;;5074:24:0;;;;;;;;5212:26;;:21;:26;;;;;;;;5208:244;;;-1:-1:-1;;;;;5301:15:0;;;;;;:10;:15;;;;;:17;;;;;;:::i;:::-;;;;;;5208:244;;;5370:2;;:17;;-1:-1:-1;;;5370:17:0;;-1:-1:-1;;;;;1697:32:1;;;5370:17:0;;;1679:51:1;5370:2:0;;;;:12;;1652:18:1;;5370:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:21;;5390:1;5370:21;:::i;:::-;-1:-1:-1;;;;;5351:15:0;;;;;;:10;:15;;;;;;;;:41;;;;5407:21;:26;;;:33;;-1:-1:-1;;5407:33:0;5436:4;5407:33;;;5208:244;5508:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;;5598:37:0;;5626:8;;-1:-1:-1;;;;;5598:37:0;;;5615:3;;5598:37;;5615:3;;5598:37;5656:3;-1:-1:-1;;;;;5651:19:0;;5661:8;5651:19;;;;2343:25:1;;2331:2;2316:18;;2197:177;5651:19:0;;;;;;;;4731:947;;:::o;7495:334::-;7620:9;-1:-1:-1;;;;;7610:19:0;:6;-1:-1:-1;;;;;7610:19:0;;7602:101;;;;-1:-1:-1;;;7602:101:0;;31565:2:1;7602:101:0;;;31547:21:1;31604:2;31584:18;;;31577:30;31643:34;31623:18;;;31616:62;31714:34;31694:18;;;31687:62;-1:-1:-1;;;31765:19:1;;;31758:36;31811:19;;7602:101:0;31363:473:1;7602:101:0;-1:-1:-1;;;;;7714:24:0;;;;;;;:16;:24;;;;;;;;:35;;;;;;;;;;;;;:47;;-1:-1:-1;;7714:47:0;;;;;;;;;;7777:44;;540:41:1;;;7777:44:0;;513:18:1;7777:44:0;;;;;;;7495:334;;;:::o;8374:228::-;8440:4;8521;8510:8;:15;8506:37;;;-1:-1:-1;8536:4:0;;8374:228;-1:-1:-1;8374:228:0:o;8506:37::-;-1:-1:-1;8590:3:0;8560:18;;;:8;:18;;;;;;-1:-1:-1;;;;;8560:18:0;:34;;;8374:228::o;7874:477::-;7961:4;7978:14;7995:17;8003:8;7995:7;:17::i;:::-;7978:34;-1:-1:-1;;;;;;8031:22:0;;8023:95;;;;-1:-1:-1;;;8023:95:0;;32043:2:1;8023:95:0;;;32025:21:1;32082:2;32062:18;;;32055:30;32121:34;32101:18;;;32094:62;32192:30;32172:18;;;32165:58;32240:19;;8023:95:0;31841:424:1;8023:95:0;8149:6;-1:-1:-1;;;;;8137:18:0;:8;-1:-1:-1;;;;;8137:18:0;;:87;;;-1:-1:-1;8203:21:0;;;;:11;:21;;;;;;-1:-1:-1;;;;;8191:33:0;;;8203:21;;8191:33;8137:87;:166;;;-1:-1:-1;;;;;;8269:24:0;;;;;;;:16;:24;;;;;;;;:34;;;;;;;;;;;;8137:166;8129:214;7874:477;-1:-1:-1;;;;7874:477:0:o;5686:1543::-;5796:17;5804:8;5796:7;:17::i;:::-;-1:-1:-1;;;;;5787:26:0;:5;-1:-1:-1;;;;;5787:26:0;;5779:103;;;;;-1:-1:-1;;;5779:103:0;;32472:2:1;5779:103:0;;;32454:21:1;32491:18;;;32484:30;;;;32550:34;32530:18;;;32523:62;32621:34;32601:18;;;32594:62;32673:19;;5779:103:0;32270:428:1;5779:103:0;-1:-1:-1;;;;;5901:19:0;;5893:86;;;;-1:-1:-1;;;5893:86:0;;32905:2:1;5893:86:0;;;32887:21:1;32944:2;32924:18;;;32917:30;32983:34;32963:18;;;32956:62;-1:-1:-1;;;33034:18:1;;;33027:52;33096:19;;5893:86:0;32703:418:1;5893:86:0;6106:3;6073:21;;;:11;:21;;;;;;-1:-1:-1;;;;;6073:21:0;:37;6069:154;;6207:3;6175:21;;;:11;:21;;;;;:36;;-1:-1:-1;;;;;;6175:36:0;;;6069:154;6280:18;;;;:8;:18;;;;;;;;:24;;-1:-1:-1;;;;;;6280:24:0;-1:-1:-1;;;;;6280:24:0;;;;;;;;;;6373:28;;;;:21;:28;;;;;;;;6369:382;;;-1:-1:-1;;;;;6484:17:0;;;;;;:10;:17;;;;;:19;;;;;;:::i;:::-;;;;;;6369:382;;;6646:1;6624:2;;:19;;-1:-1:-1;;;6624:19:0;;-1:-1:-1;;;;;1697:32:1;;;6624:19:0;;;1679:51:1;6624:2:0;;;;:12;;1652:18:1;;6624:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;;;:::i;:::-;-1:-1:-1;;;;;6603:17:0;;;;;;:10;:17;;;;;;;;:45;;;;6704:21;:28;;;:35;;-1:-1:-1;;6704:35:0;6735:4;6704:35;;;6369:382;-1:-1:-1;;;;;6767:26:0;;;;;;:21;:26;;;;;;;;6763:367;;;-1:-1:-1;;;;;6874:15:0;;;;;;:10;:15;;;;;:17;;;;;;:::i;:::-;;;;;;6763:367;;;7008:2;;:17;;-1:-1:-1;;;7008:17:0;;-1:-1:-1;;;;;1697:32:1;;;7008:17:0;;;1679:51:1;7008:2:0;;;;:12;;1652:18:1;;7008:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:21;;7028:1;7008:21;:::i;:::-;-1:-1:-1;;;;;6989:15:0;;;;;;:10;:15;;;;;;;;:41;;;;7085:21;:26;;;:33;;-1:-1:-1;;7085:33:0;7114:4;7085:33;;;6763:367;7212:8;7207:3;-1:-1:-1;;;;;7191:30:0;7200:5;-1:-1:-1;;;;;7191:30:0;;;;;;;;;;;5686:1543;;;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;68:71;14:131;:::o;150:245::-;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:131::-;-1:-1:-1;;;;;1816:31:1;;1806:42;;1796:70;;1862:1;1859;1852:12;1877:315;1945:6;1953;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2061:9;2048:23;2080:31;2105:5;2080:31;:::i;:::-;2130:5;2182:2;2167:18;;;;2154:32;;-1:-1:-1;;;1877:315:1:o;2379:456::-;2456:6;2464;2472;2525:2;2513:9;2504:7;2500:23;2496:32;2493:52;;;2541:1;2538;2531:12;2493:52;2580:9;2567:23;2599:31;2624:5;2599:31;:::i;:::-;2649:5;-1:-1:-1;2706:2:1;2691:18;;2678:32;2719:33;2678:32;2719:33;:::i;:::-;2379:456;;2771:7;;-1:-1:-1;;;2825:2:1;2810:18;;;;2797:32;;2379:456::o;2840:955::-;2944:6;2952;2960;2968;2976;2984;3037:3;3025:9;3016:7;3012:23;3008:33;3005:53;;;3054:1;3051;3044:12;3005:53;3093:9;3080:23;3112:31;3137:5;3112:31;:::i;:::-;3162:5;-1:-1:-1;3219:2:1;3204:18;;3191:32;3232:33;3191:32;3232:33;:::i;:::-;3284:7;-1:-1:-1;3343:2:1;3328:18;;3315:32;3356:33;3315:32;3356:33;:::i;:::-;3408:7;-1:-1:-1;3467:2:1;3452:18;;3439:32;3480:33;3439:32;3480:33;:::i;:::-;3532:7;-1:-1:-1;3591:3:1;3576:19;;3563:33;3605;3563;3605;:::i;:::-;3657:7;-1:-1:-1;3716:3:1;3701:19;;3688:33;3730;3688;3730;:::i;:::-;3782:7;3772:17;;;2840:955;;;;;;;;:::o;4020:127::-;4081:10;4076:3;4072:20;4069:1;4062:31;4112:4;4109:1;4102:15;4136:4;4133:1;4126:15;4152:275;4223:2;4217:9;4288:2;4269:13;;-1:-1:-1;;4265:27:1;4253:40;;4323:18;4308:34;;4344:22;;;4305:62;4302:88;;;4370:18;;:::i;:::-;4406:2;4399:22;4152:275;;-1:-1:-1;4152:275:1:o;4432:183::-;4492:4;4525:18;4517:6;4514:30;4511:56;;;4547:18;;:::i;:::-;-1:-1:-1;4592:1:1;4588:14;4604:4;4584:25;;4432:183::o;4620:662::-;4674:5;4727:3;4720:4;4712:6;4708:17;4704:27;4694:55;;4745:1;4742;4735:12;4694:55;4781:6;4768:20;4807:4;4831:60;4847:43;4887:2;4847:43;:::i;:::-;4831:60;:::i;:::-;4925:15;;;5011:1;5007:10;;;;4995:23;;4991:32;;;4956:12;;;;5035:15;;;5032:35;;;5063:1;5060;5053:12;5032:35;5099:2;5091:6;5087:15;5111:142;5127:6;5122:3;5119:15;5111:142;;;5193:17;;5181:30;;5231:12;;;;5144;;5111:142;;;-1:-1:-1;5271:5:1;4620:662;-1:-1:-1;;;;;;4620:662:1:o;5287:114::-;5371:4;5364:5;5360:16;5353:5;5350:27;5340:55;;5391:1;5388;5381:12;5406:733;5458:5;5511:3;5504:4;5496:6;5492:17;5488:27;5478:55;;5529:1;5526;5519:12;5478:55;5565:6;5552:20;5591:4;5615:60;5631:43;5671:2;5631:43;:::i;5615:60::-;5709:15;;;5795:1;5791:10;;;;5779:23;;5775:32;;;5740:12;;;;5819:15;;;5816:35;;;5847:1;5844;5837:12;5816:35;5883:2;5875:6;5871:15;5895:215;5911:6;5906:3;5903:15;5895:215;;;5991:3;5978:17;6008:29;6031:5;6008:29;:::i;:::-;6050:18;;6088:12;;;;5928;;5895:215;;6144:817;6294:6;6302;6310;6363:2;6351:9;6342:7;6338:23;6334:32;6331:52;;;6379:1;6376;6369:12;6331:52;6419:9;6406:23;6448:18;6489:2;6481:6;6478:14;6475:34;;;6505:1;6502;6495:12;6475:34;6528:61;6581:7;6572:6;6561:9;6557:22;6528:61;:::i;:::-;6518:71;;6642:2;6631:9;6627:18;6614:32;6598:48;;6671:2;6661:8;6658:16;6655:36;;;6687:1;6684;6677:12;6655:36;6710:63;6765:7;6754:8;6743:9;6739:24;6710:63;:::i;:::-;6700:73;;6826:2;6815:9;6811:18;6798:32;6782:48;;6855:2;6845:8;6842:16;6839:36;;;6871:1;6868;6861:12;6839:36;;6894:61;6947:7;6936:8;6925:9;6921:24;6894:61;:::i;:::-;6884:71;;;6144:817;;;;;:::o;6966:247::-;7025:6;7078:2;7066:9;7057:7;7053:23;7049:32;7046:52;;;7094:1;7091;7084:12;7046:52;7133:9;7120:23;7152:31;7177:5;7152:31;:::i;7218:632::-;7389:2;7441:21;;;7511:13;;7414:18;;;7533:22;;;7360:4;;7389:2;7612:15;;;;7586:2;7571:18;;;7360:4;7655:169;7669:6;7666:1;7663:13;7655:169;;;7730:13;;7718:26;;7799:15;;;;7764:12;;;;7691:1;7684:9;7655:169;;;-1:-1:-1;7841:3:1;;7218:632;-1:-1:-1;;;;;;7218:632:1:o;7855:243::-;7912:6;7965:2;7953:9;7944:7;7940:23;7936:32;7933:52;;;7981:1;7978;7971:12;7933:52;8020:9;8007:23;8039:29;8062:5;8039:29;:::i;8546:1180::-;8739:6;8747;8755;8763;8771;8824:3;8812:9;8803:7;8799:23;8795:33;8792:53;;;8841:1;8838;8831:12;8792:53;8881:9;8868:23;8910:18;8951:2;8943:6;8940:14;8937:34;;;8967:1;8964;8957:12;8937:34;8990:61;9043:7;9034:6;9023:9;9019:22;8990:61;:::i;:::-;8980:71;;9104:2;9093:9;9089:18;9076:32;9060:48;;9133:2;9123:8;9120:16;9117:36;;;9149:1;9146;9139:12;9117:36;9172:63;9227:7;9216:8;9205:9;9201:24;9172:63;:::i;:::-;9162:73;;9288:2;9277:9;9273:18;9260:32;9244:48;;9317:2;9307:8;9304:16;9301:36;;;9333:1;9330;9323:12;9301:36;9356:61;9409:7;9398:8;9387:9;9383:24;9356:61;:::i;:::-;9346:71;;9467:2;9456:9;9452:18;9439:32;9426:45;;9480:31;9505:5;9480:31;:::i;:::-;9530:5;;-1:-1:-1;9588:3:1;9573:19;;9560:33;;9605:16;;;9602:36;;;9634:1;9631;9624:12;9602:36;;9657:63;9712:7;9701:8;9690:9;9686:24;9657:63;:::i;:::-;9647:73;;;8546:1180;;;;;;;;:::o;9731:367::-;9794:8;9804:6;9858:3;9851:4;9843:6;9839:17;9835:27;9825:55;;9876:1;9873;9866:12;9825:55;-1:-1:-1;9899:20:1;;9942:18;9931:30;;9928:50;;;9974:1;9971;9964:12;9928:50;10011:4;10003:6;9999:17;9987:29;;10071:3;10064:4;10054:6;10051:1;10047:14;10039:6;10035:27;10031:38;10028:47;10025:67;;;10088:1;10085;10078:12;10025:67;9731:367;;;;;:::o;10103:773::-;10225:6;10233;10241;10249;10302:2;10290:9;10281:7;10277:23;10273:32;10270:52;;;10318:1;10315;10308:12;10270:52;10358:9;10345:23;10387:18;10428:2;10420:6;10417:14;10414:34;;;10444:1;10441;10434:12;10414:34;10483:70;10545:7;10536:6;10525:9;10521:22;10483:70;:::i;:::-;10572:8;;-1:-1:-1;10457:96:1;-1:-1:-1;10660:2:1;10645:18;;10632:32;;-1:-1:-1;10676:16:1;;;10673:36;;;10705:1;10702;10695:12;10673:36;;10744:72;10808:7;10797:8;10786:9;10782:24;10744:72;:::i;:::-;10103:773;;;;-1:-1:-1;10835:8:1;-1:-1:-1;;;;10103:773:1:o;10881:379::-;10956:6;10964;10972;11025:2;11013:9;11004:7;11000:23;10996:32;10993:52;;;11041:1;11038;11031:12;10993:52;11077:9;11064:23;11054:33;;11134:2;11123:9;11119:18;11106:32;11096:42;;11188:2;11177:9;11173:18;11160:32;11201:29;11224:5;11201:29;:::i;:::-;11249:5;11239:15;;;10881:379;;;;;:::o;11265:160::-;11330:20;;11386:13;;11379:21;11369:32;;11359:60;;11415:1;11412;11405:12;11430:315;11495:6;11503;11556:2;11544:9;11535:7;11531:23;11527:32;11524:52;;;11572:1;11569;11562:12;11524:52;11611:9;11598:23;11630:31;11655:5;11630:31;:::i;:::-;11680:5;-1:-1:-1;11704:35:1;11735:2;11720:18;;11704:35;:::i;:::-;11694:45;;11430:315;;;;;:::o;11976:311::-;12039:6;12047;12100:2;12088:9;12079:7;12075:23;12071:32;12068:52;;;12116:1;12113;12106:12;12068:52;12155:9;12142:23;12174:29;12197:5;12174:29;:::i;12292:186::-;12340:4;12373:18;12365:6;12362:30;12359:56;;;12395:18;;:::i;:::-;-1:-1:-1;12461:2:1;12440:15;-1:-1:-1;;12436:29:1;12467:4;12432:40;;12292:186::o;12483:1016::-;12578:6;12586;12594;12602;12655:3;12643:9;12634:7;12630:23;12626:33;12623:53;;;12672:1;12669;12662:12;12623:53;12711:9;12698:23;12730:31;12755:5;12730:31;:::i;:::-;12780:5;-1:-1:-1;12837:2:1;12822:18;;12809:32;12850:33;12809:32;12850:33;:::i;:::-;12902:7;-1:-1:-1;12956:2:1;12941:18;;12928:32;;-1:-1:-1;13011:2:1;12996:18;;12983:32;13038:18;13027:30;;13024:50;;;13070:1;13067;13060:12;13024:50;13093:22;;13146:4;13138:13;;13134:27;-1:-1:-1;13124:55:1;;13175:1;13172;13165:12;13124:55;13211:2;13198:16;13236:48;13252:31;13280:2;13252:31;:::i;13236:48::-;13307:2;13300:5;13293:17;13347:7;13342:2;13337;13333;13329:11;13325:20;13322:33;13319:53;;;13368:1;13365;13358:12;13319:53;13423:2;13418;13414;13410:11;13405:2;13398:5;13394:14;13381:45;13467:1;13462:2;13457;13450:5;13446:14;13442:23;13435:34;13488:5;13478:15;;;;;12483:1016;;;;;;;:::o;13504:590::-;13597:6;13605;13613;13621;13629;13682:3;13670:9;13661:7;13657:23;13653:33;13650:53;;;13699:1;13696;13689:12;13650:53;13735:9;13722:23;13712:33;;13792:2;13781:9;13777:18;13764:32;13754:42;;13846:2;13835:9;13831:18;13818:32;13859:29;13882:5;13859:29;:::i;:::-;13907:5;-1:-1:-1;13964:2:1;13949:18;;13936:32;13977:33;13936:32;13977:33;:::i;:::-;13504:590;;;;-1:-1:-1;13504:590:1;;14083:3;14068:19;14055:33;;13504:590;-1:-1:-1;;13504:590:1:o;14538:388::-;14606:6;14614;14667:2;14655:9;14646:7;14642:23;14638:32;14635:52;;;14683:1;14680;14673:12;14635:52;14722:9;14709:23;14741:31;14766:5;14741:31;:::i;:::-;14791:5;-1:-1:-1;14848:2:1;14833:18;;14820:32;14861:33;14820:32;14861:33;:::i;:::-;14913:7;14903:17;;;14538:388;;;;;:::o;14931:380::-;15010:1;15006:12;;;;15053;;;15074:61;;15128:4;15120:6;15116:17;15106:27;;15074:61;15181:2;15173:6;15170:14;15150:18;15147:38;15144:161;;15227:10;15222:3;15218:20;15215:1;15208:31;15262:4;15259:1;15252:15;15290:4;15287:1;15280:15;15144:161;;14931:380;;;:::o;16209:344::-;16411:2;16393:21;;;16450:2;16430:18;;;16423:30;-1:-1:-1;;;16484:2:1;16469:18;;16462:50;16544:2;16529:18;;16209:344::o;17250:127::-;17311:10;17306:3;17302:20;17299:1;17292:31;17342:4;17339:1;17332:15;17366:4;17363:1;17356:15;17382:127;17443:10;17438:3;17434:20;17431:1;17424:31;17474:4;17471:1;17464:15;17498:4;17495:1;17488:15;17514:135;17553:3;17574:17;;;17571:43;;17594:18;;:::i;:::-;-1:-1:-1;17641:1:1;17630:13;;17514:135::o;17654:128::-;17721:9;;;17742:11;;;17739:37;;;17756:18;;:::i;17787:251::-;17857:6;17910:2;17898:9;17889:7;17885:23;17881:32;17878:52;;;17926:1;17923;17916:12;17878:52;17958:9;17952:16;17977:31;18002:5;17977:31;:::i;18043:184::-;18113:6;18166:2;18154:9;18145:7;18141:23;18137:32;18134:52;;;18182:1;18179;18172:12;18134:52;-1:-1:-1;18205:16:1;;18043:184;-1:-1:-1;18043:184:1:o;19698:375::-;-1:-1:-1;;;;;19956:15:1;;;19938:34;;20008:15;;;;20003:2;19988:18;;19981:43;20055:2;20040:18;;20033:34;;;;19888:2;19873:18;;19698:375::o;20574:209::-;20606:1;20632;20622:132;;20676:10;20671:3;20667:20;20664:1;20657:31;20711:4;20708:1;20701:15;20739:4;20736:1;20729:15;20622:132;-1:-1:-1;20768:9:1;;20574:209::o;20788:125::-;20853:9;;;20874:10;;;20871:36;;;20887:18;;:::i;21111:163::-;21189:13;;21242:6;21231:18;;21221:29;;21211:57;;21264:1;21261;21254:12;21279:206;21348:6;21401:2;21389:9;21380:7;21376:23;21372:32;21369:52;;;21417:1;21414;21407:12;21369:52;21440:39;21469:9;21440:39;:::i;21490:804::-;21662:4;21704:3;21693:9;21689:19;21681:27;;21735:6;21724:9;21717:25;21797:4;21788:6;21782:13;21778:24;21773:2;21762:9;21758:18;21751:52;21867:4;21861:2;21853:6;21849:15;21843:22;21839:33;21834:2;21823:9;21819:18;21812:61;21920:2;21912:6;21908:15;21902:22;21943:6;22003:2;21989:12;21985:21;21980:2;21969:9;21965:18;21958:49;22072:2;22066;22058:6;22054:15;22048:22;22044:31;22038:3;22027:9;22023:19;22016:60;22142:4;22135:3;22127:6;22123:16;22117:23;22113:34;22107:3;22096:9;22092:19;22085:63;22214:2;22207:3;22199:6;22195:16;22189:23;22185:32;22179:3;22168:9;22164:19;22157:61;22284:2;22277:3;22269:6;22265:16;22259:23;22255:32;22249:3;22238:9;22234:19;22227:61;;;21490:804;;;;;:::o;22299:489::-;-1:-1:-1;;;;;22568:15:1;;;22550:34;;22620:15;;22615:2;22600:18;;22593:43;22667:2;22652:18;;22645:34;;;22715:3;22710:2;22695:18;;22688:31;;;22493:4;;22736:46;;22762:19;;22754:6;22736:46;:::i;:::-;22728:54;22299:489;-1:-1:-1;;;;;;22299:489:1:o;22793:287::-;22922:3;22960:6;22954:13;22976:66;23035:6;23030:3;23023:4;23015:6;23011:17;22976:66;:::i;:::-;23058:16;;;;;22793:287;-1:-1:-1;;22793:287:1:o;23085:249::-;23154:6;23207:2;23195:9;23186:7;23182:23;23178:32;23175:52;;;23223:1;23220;23213:12;23175:52;23255:9;23249:16;23274:30;23298:5;23274:30;:::i;24537:247::-;24605:6;24658:2;24646:9;24637:7;24633:23;24629:32;24626:52;;;24674:1;24671;24664:12;24626:52;24706:9;24700:16;24725:29;24748:5;24725:29;:::i;25262:545::-;25364:2;25359:3;25356:11;25353:448;;;25400:1;25425:5;25421:2;25414:17;25470:4;25466:2;25456:19;25540:2;25528:10;25524:19;25521:1;25517:27;25511:4;25507:38;25576:4;25564:10;25561:20;25558:47;;;-1:-1:-1;25599:4:1;25558:47;25654:2;25649:3;25645:12;25642:1;25638:20;25632:4;25628:31;25618:41;;25709:82;25727:2;25720:5;25717:13;25709:82;;;25772:17;;;25753:1;25742:13;25709:82;;25983:1352;26109:3;26103:10;26136:18;26128:6;26125:30;26122:56;;;26158:18;;:::i;:::-;26187:97;26277:6;26237:38;26269:4;26263:11;26237:38;:::i;:::-;26231:4;26187:97;:::i;:::-;26339:4;;26403:2;26392:14;;26420:1;26415:663;;;;27122:1;27139:6;27136:89;;;-1:-1:-1;27191:19:1;;;27185:26;27136:89;-1:-1:-1;;25940:1:1;25936:11;;;25932:24;25928:29;25918:40;25964:1;25960:11;;;25915:57;27238:81;;26385:944;;26415:663;25209:1;25202:14;;;25246:4;25233:18;;-1:-1:-1;;26451:20:1;;;26569:236;26583:7;26580:1;26577:14;26569:236;;;26672:19;;;26666:26;26651:42;;26764:27;;;;26732:1;26720:14;;;;26599:19;;26569:236;;;26573:3;26833:6;26824:7;26821:19;26818:201;;;26894:19;;;26888:26;-1:-1:-1;;26977:1:1;26973:14;;;26989:3;26969:24;26965:37;26961:42;26946:58;26931:74;;26818:201;-1:-1:-1;;;;;27065:1:1;27049:14;;;27045:22;27032:36;;-1:-1:-1;25983:1352:1:o;27694:648::-;27774:6;27827:2;27815:9;27806:7;27802:23;27798:32;27795:52;;;27843:1;27840;27833:12;27795:52;27876:9;27870:16;27909:18;27901:6;27898:30;27895:50;;;27941:1;27938;27931:12;27895:50;27964:22;;28017:4;28009:13;;28005:27;-1:-1:-1;27995:55:1;;28046:1;28043;28036:12;27995:55;28075:2;28069:9;28100:48;28116:31;28144:2;28116:31;:::i;28100:48::-;28171:2;28164:5;28157:17;28211:7;28206:2;28201;28197;28193:11;28189:20;28186:33;28183:53;;;28232:1;28229;28222:12;28183:53;28245:67;28309:2;28304;28297:5;28293:14;28288:2;28284;28280:11;28245:67;:::i;:::-;28331:5;27694:648;-1:-1:-1;;;;;27694:648:1:o;28347:1104::-;28443:6;28496:3;28484:9;28475:7;28471:23;28467:33;28464:53;;;28513:1;28510;28503:12;28464:53;28546:2;28540:9;28588:3;28580:6;28576:16;28658:6;28646:10;28643:22;28622:18;28610:10;28607:34;28604:62;28601:88;;;28669:18;;:::i;:::-;28705:2;28698:22;28742:16;;28767:29;28742:16;28767:29;:::i;:::-;28805:21;;28871:2;28856:18;;28850:25;28884:31;28850:25;28884:31;:::i;:::-;28943:2;28931:15;;28924:32;28989:48;29033:2;29018:18;;28989:48;:::i;:::-;28984:2;28976:6;28972:15;28965:73;29071:48;29115:2;29104:9;29100:18;29071:48;:::i;:::-;29066:2;29058:6;29054:15;29047:73;29165:3;29154:9;29150:19;29144:26;29179:31;29202:7;29179:31;:::i;:::-;29238:3;29226:16;;29219:33;29286:49;29330:3;29315:19;;29286:49;:::i;:::-;29280:3;29272:6;29268:16;29261:75;29370:49;29414:3;29403:9;29399:19;29370:49;:::i;:::-;29364:3;29352:16;;29345:75;29356:6;28347:1104;-1:-1:-1;;;28347:1104:1:o;33126:136::-;33165:3;33193:5;33183:39;;33202:18;;:::i;:::-;-1:-1:-1;;;33238:18:1;;33126:136::o
Swarm Source
ipfs://04a861ce3d850a738964e0a61c38b49408badbe3856d9c367ab35083b2720107
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.