Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 26 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Summon Lings Fro... | 7942362 | 7 days ago | IN | 0 S | 0.02689273 | ||||
Summon Lings Fro... | 7941444 | 7 days ago | IN | 0 S | 0.02941436 | ||||
Infuse Lings To ... | 7828359 | 8 days ago | IN | 0 S | 0.00766775 | ||||
Swap UID_Relayer... | 7805633 | 8 days ago | IN | 0 S | 0.00490935 | ||||
Web2Wallet Take ... | 7805628 | 8 days ago | IN | 0 S | 0.00325685 | ||||
Web3Wallet Give ... | 7805623 | 8 days ago | IN | 0 S | 0.00479602 | ||||
Delete Personal ... | 7805258 | 8 days ago | IN | 0 S | 0.00196685 | ||||
Swap UID_Relayer... | 7805134 | 8 days ago | IN | 0 S | 0.00343935 | ||||
Web2Wallet Take ... | 7805088 | 8 days ago | IN | 0 S | 0.00325625 | ||||
Web3Wallet Give ... | 7805084 | 8 days ago | IN | 0 S | 0.00243133 | ||||
Web3Wallet Give ... | 7804770 | 8 days ago | IN | 0 S | 0.00456847 | ||||
Delete Personal ... | 7804699 | 8 days ago | IN | 0 S | 0.00196685 | ||||
Swap UID_Relayer... | 7802815 | 8 days ago | IN | 0 S | 0.00343935 | ||||
Web2Wallet Take ... | 7802767 | 8 days ago | IN | 0 S | 0.00325685 | ||||
Web3Wallet Give ... | 7802761 | 8 days ago | IN | 0 S | 0.00243133 | ||||
Delete Personal ... | 7788156 | 8 days ago | IN | 0 S | 0.00196685 | ||||
Swap UID_Relayer... | 7788150 | 8 days ago | IN | 0 S | 0.00343935 | ||||
Swap UID_Relayer... | 7787814 | 8 days ago | IN | 0 S | 0.00343935 | ||||
Web2Wallet Take ... | 7787793 | 8 days ago | IN | 0 S | 0.00325685 | ||||
Web3Wallet Give ... | 7787782 | 8 days ago | IN | 0 S | 0.00512824 | ||||
Delete Personal ... | 7773110 | 8 days ago | IN | 0 S | 0.00282185 | ||||
Update ITEM Cont... | 7712107 | 8 days ago | IN | 0 S | 0.00281296 | ||||
Update Lings NFT... | 7712036 | 8 days ago | IN | 0 S | 0.00399852 | ||||
Update RAM Contr... | 7711994 | 8 days ago | IN | 0 S | 0.00290958 | ||||
Update Storage C... | 7711967 | 8 days ago | IN | 0 S | 0.00291084 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
InfuseSummonTransferV1
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-13 */ // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: FINALdeployFA/LIB - Common Structs.sol pragma solidity ^0.8.9; library S { //Pet struct struct Unit { uint hp; //unit fainted when hp <= 0 uint attack; //attack - defense = damage on hp uint defense; //attack - defense = damage on hp uint speed; //how frequent to take a move uint intelligence; //how frequent to use skill uint genestrength; //depends on how many duplicates uint range; //range skill, id uint special; //special skill, id } struct Status { uint id; //unit id uint family; //determine which class of gear it can be wore. record while evolve, since its only has max 2 family, example Dragon+phantom, and 30gene max, so can use *100 uint stage; //1 is rookie, 2 is mature, 3 is perfect } struct Time { uint bond; //how many time you took on this unit , use to evolve uint stamina; //how much you can train it per day. it should follow saturation graph uint hunger; //how much you feed it per day. it should follow saturation graph } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: FINALdeployFA/INTERFACE - StorageV2.sol pragma solidity ^0.8.20; // Import your custom structs /** * @title IFARPG_Storage * @dev Interface for FARPG_Storage so other contracts can call it */ interface IFARPG_Storage { //------------------------------------------------------------------------- // Administrative / Master Contract Access //------------------------------------------------------------------------- function owner() external view returns (address); function masterContracts(uint index) external view returns (address); function masterIndex(address) external view returns (uint); function addMasterContract(address _address, uint _index) external; function addMasterContractBatch(address[] memory _addresses, uint[] memory _indices) external; function removeMasterContract(uint _index) external; function getAllMasterContracts() external view returns (address[] memory, uint[] memory); //------------------------------------------------------------------------- // UID Management //------------------------------------------------------------------------- function UIDmain(address) external view returns (uint); function UID_ownedby(uint) external view returns (address); function UIDcounter() external view returns (uint); function getUID(address player) external view returns (uint _UID); function transferUID(address player, address newplayerwallet) external; function registerUID(address player) external; function setUIDmain (address playerAddress, uint UID) external; function setUID_ownedby (uint UID, address playerAddress) external; //------------------------------------------------------------------------- // Quest (setters) //------------------------------------------------------------------------- function setMainQuest(address player, uint index, uint8 progress) external; function setSideQuest(address player, uint index, uint8 progress) external; function setPremiumScore(address player, uint score) external; function setPlayerGeneStrength(address player, uint index, uint strength) external; function setPlayerVitamin(address player, uint index, uint amount) external; //------------------------------------------------------------------------- // Quest (getters) //------------------------------------------------------------------------- function getMainQuestProgress(address player, uint index) external view returns (uint8); function getSideQuestProgress(address player, uint index) external view returns (uint8); function getPremiumScore(address player) external view returns (uint); function getPlayerQuestAndScore(address player, uint index) external view returns (uint, uint, uint); function getMainQuestProgressArray(address player) external view returns (uint8[64] memory); function getSideQuestProgressArray(address player) external view returns (uint8[64] memory); //------------------------------------------------------------------------- // Player Stats (setters) //------------------------------------------------------------------------- function setPersonalWallet(address player, address personal) external; function setGiveControlTo(address player, address web2wallet) external; function setExp(address player, uint experience) external; function setRankScore(address player, uint score) external; function setEnergy1(address player, uint energy) external; function setEnergy2(address player, uint energy) external; function setEnergy22(address player, uint energy) external; function setEnergy3(address player, uint energy) external; function setTeamFormat(address player, uint[60] calldata format) external; function setUsernameToUID(string memory username, uint _UID) external; function setUIDToUsername(uint _UID, string memory username) external; function deleteUsernameToAddress (string memory username) external; // Points function setPoint1(address player, uint point) external; function setPoint2(address player, uint point) external; function setPoint3(address player, uint point) external; function setPoint4(address player, uint point) external; function setPoint5(address player, uint point) external; function addPoint1(address player, uint point) external; function addPoint2(address player, uint point) external; function addPoint3(address player, uint point) external; function addPoint4(address player, uint point) external; function addPoint5(address player, uint point) external; //------------------------------------------------------------------------- // Player Stats (getters) //------------------------------------------------------------------------- function personalwallet(address) external view returns (address); function givecontrolto(address) external view returns (address); function getExperience(address player) external view returns (uint); function getRankingScore(address player) external view returns (uint); function getEnergy1(address player) external view returns (uint); function getEnergy2(address player) external view returns (uint); function getEnergy22(address player) external view returns (uint); function getEnergy3(address player) external view returns (uint); function getPlayerStats(address player) external view returns (uint, uint, uint, uint, uint, uint); function UIDToUsername(uint) external view returns (string memory); function usernameToUID(string memory) external view returns (uint); function getPoint1(address player) external view returns (uint); function getPoint2(address player) external view returns (uint); function getPoint3(address player) external view returns (uint); function getPoint4(address player) external view returns (uint); function getPoint5(address player) external view returns (uint); function getPlayerPoints(address player) external view returns (uint, uint, uint, uint, uint); function getPlayergenestrengthArray(address player) external view returns (uint[50] memory); function getPlayerGeneStrength(address player, uint index) external view returns (uint); function getPlayervitaminArray(address player) external view returns (uint[50] memory); function getPlayerVitamin(address player, uint index) external view returns (uint); //------------------------------------------------------------------------- // Limits (setters) //------------------------------------------------------------------------- function setLimit1(address player, uint limit) external; function setLimit2(address player, uint limit) external; function setLimit3(address player, uint limit) external; function setTimebound1(address player, uint timestamp) external; function setTimebound2(address player, uint timestamp) external; function setTimebound3(address player, uint timestamp) external; //------------------------------------------------------------------------- // Limits (getters) //------------------------------------------------------------------------- function getLimit1(address player) external view returns (uint); function getLimit2(address player) external view returns (uint); function getLimit3(address player) external view returns (uint); function getTimebound1(address player) external view returns (uint); function getTimebound2(address player) external view returns (uint); function getTimebound3(address player) external view returns (uint); function getPlayerLimits(address player) external view returns (uint, uint, uint, uint, uint, uint); //------------------------------------------------------------------------- // Numberset (setters) //------------------------------------------------------------------------- function setNumberSet1(address player, uint[6] memory number) external; function setNumberSet2(address player, uint[5] memory number) external; function setNumberSet3(address player, uint[5] memory number) external; function setNumberSet4(address player, uint[5] memory number) external; function setNumberSet5(address player, uint[5] memory number) external; function setNumberSet6(address player, uint[5] memory number) external; function setNumberSet7(address player, uint[5] memory number) external; function setNumberSet8(address player, uint[5] memory number) external; function setNumberSet9(address player, uint[5] memory number) external; function setNumberSetA(address player, uint[5] memory number) external; function setNumberSetB(address player, uint[5] memory number) external; function setNumberSetC(address player, uint[5] memory number) external; function setNumberSetD(address player, uint[5] memory number) external; function setNumberSetE(address player, uint[10] memory number) external; function setNumberSetF(address player, uint[10] memory number) external; function setNumberSetG(address player, uint[10] memory number) external; function setNumberSetH(address player, uint[10] memory number) external; //------------------------------------------------------------------------- // Numberset (getters) //------------------------------------------------------------------------- function getNumberSet1(address player) external view returns (uint[6] memory); function getNumberSet2(address player) external view returns (uint[5] memory); function getNumberSet3(address player) external view returns (uint[5] memory); function getNumberSet4(address player) external view returns (uint[5] memory); function getNumberSet5(address player) external view returns (uint[5] memory); function getNumberSet6(address player) external view returns (uint[5] memory); function getNumberSet7(address player) external view returns (uint[5] memory); function getNumberSet8(address player) external view returns (uint[5] memory); function getNumberSet9(address player) external view returns (uint[5] memory); function getNumberSetA(address player) external view returns (uint[5] memory); function getNumberSetB(address player) external view returns (uint[5] memory); function getNumberSetC(address player) external view returns (uint[5] memory); function getNumberSetD(address player) external view returns (uint[5] memory); function getNumberSetE(address player) external view returns (uint[10] memory); function getNumberSetF(address player) external view returns (uint[10] memory); function getNumberSetG(address player) external view returns (uint[10] memory); function getNumberSetH(address player) external view returns (uint[10] memory); //------------------------------------------------------------------------- // PVP Ranks //------------------------------------------------------------------------- struct Player { uint256 rankPoints; uint256 league; uint256 indexInLeague; // Index of the player within their league array } function setPlayers(address player, Player memory rankpointleagueindexinleague) external; function setReset_Time_Attempts(address player, uint[2] memory resettimeattemps) external; function setEligible_Opponents(address player, address[5] memory eligibleOppo) external; function setFaught_Opponents(address player, uint[5] memory faughtOppo) external; function setDefending_Formation(address player, uint[3] memory defendingslot) external; function getPlayers(address player) external view returns (Player memory ) ; function getReset_Time_Attempts(address player ) external view returns (uint[2] memory ); function getEligible_Opponents(address player ) external view returns (address[5] memory); function getFaught_Opponents(address player ) external view returns(uint[5] memory) ; function getDefending_Formation(address player) external view returns (uint[3] memory ); //------------------------------------------------------------------------- // Pet data (setters) //------------------------------------------------------------------------- function setPetUnits(address player, uint index, S.Unit memory newUnit) external; function setPetUnitsMaxVitamined(address player, uint index, S.Unit memory newUnit) external; function setPetStatuses(address player, uint index, S.Status memory newStatus) external; function setPetTimes(address player, uint index, S.Time memory newTime) external; //------------------------------------------------------------------------- // Pet data (getters) //------------------------------------------------------------------------- function getPetUnitsAll(address player) external view returns (S.Unit[500] memory); function getPetUnits(address player, uint _index) external view returns (S.Unit memory); function getPetUnitsMaxVitaminedAll(address player) external view returns (S.Unit[500] memory); function getPetUnitsMaxVitamined(address player, uint _index) external view returns (S.Unit memory); function getPetStatusesAll(address player) external view returns (S.Status[500] memory); function getPetStatuses(address player, uint _index) external view returns (S.Status memory); function getPetTimesAll(address player) external view returns (S.Time[500] memory); function getPetTimes(address player, uint _index) external view returns (S.Time memory); //------------------------------------------------------------------------- // Party / Outfit //------------------------------------------------------------------------- function setPartyFormation(address player, uint[30] memory slots) external; function setTrainerOutfitPosition(address player, uint[150] memory outfitIds) external; function getPartyFormation(address player) external view returns (uint[30] memory); function getAllOutfits(address player) external view returns (uint[150] memory); //------------------------------------------------------------------------- // Trainer Gene Infusing //------------------------------------------------------------------------- function setTrainerGeneInfusingGene(address player, uint index, uint value) external; function setTrainerGeneInfusingGeneAll(address player, uint[50] memory newData) external; function setTrainerGeneInfusingTimer(address player, uint index, uint value) external; function setTrainerGeneInfusingTimerAll(address player, uint[50] memory newData) external; function getTrainerGeneInfusingGeneAll(address player) external view returns (uint[50] memory) ; function getTrainerGeneInfusingTimerAll(address player) external view returns (uint[50] memory); function getTrainerGeneInfusingGene(address player, uint Index)external view returns (uint ) ; function getTrainerGeneInfusingTimer(address player, uint Index)external view returns (uint ); //------------------------------------------------------------------------- // Additional Utility //------------------------------------------------------------------------- function getBattleUnit3(address player, uint[3] calldata slots) external view returns (S.Unit[3] memory Units3, uint[3] memory UnitIds); function getSlotUnitMore(address player, uint startindex, uint stopindex) external view returns (S.Unit[] memory Units, uint[] memory UnitIds); function getTeamFormat(address _addr) external view returns (uint[60] memory); //------------------------------------------------------------------------- // Weather System //------------------------------------------------------------------------- function getWeatherUnity() external view returns (uint _weather, uint _daylight, uint _blocktime); function getWeatherBattle(uint _timenow) external view returns (uint _weather); function setWeatherConstants(uint[12] memory _weatherIndices) external; function getWeatherIndexConstants() external view returns (uint[] memory); } // File: FINALdeployFA/PUBLIC - InfuseSummonTransferV1.sol pragma solidity ^0.8.19; //_______________________________________________________________ // ___ __ __ _ ___ _ ___ _ __ // | _ )\ \ / / _ | | / _ \ _ | | / _ \ (_)\ \ // | _ \ \ V / | || || (_) || || || (_) | _ | | // |___/ |_| \__/ \___/ \__/ \___/ ( ) | | // |/ /_/ //_______________________________________________________________ // Interface for accessing Storage //------------------------------------------------------------------- // _____ _ _ _______ ______ _____ ______ _____ ______ // |_ _| \ | |__ __| ____| __ \| ____/\ / ____| ____| // | | | \| | | | | |__ | |__) | |__ / \ | | | |__ // | | | . ` | | | | __| | _ /| __/ /\ \| | | __| // _| |_| |\ | | | | |____| | \ \| | / ____ \ |____| |____ // |_____|_| \_| |_| |______|_| \_\_|/_/ \_\_____|______| // //------------------------------------------------------------------- interface FARPG_RAMInterface { // Read functions function genetoid_mapping(uint trainergene) external pure returns (uint); function petunitsmax(uint id) external pure returns (S.Unit calldata); function petunitsevolveid(S.Status calldata _status, uint _trainergene, uint _exp, uint _hash) external pure returns (S.Status calldata); function transformIDtoStageFamily(uint _id) external pure returns (S.Status memory unitstatus); function summonStage3RangeSkill(uint _id_transformed) external pure returns (uint ranged); } interface IFARPGItemsToken { function mint( uint _amount, address _to, uint _id) external; function burn(address owner, uint _id, uint _amount) external; function balanceOf(address account, uint256 id) external view returns (uint256); } interface IFARPGLingsNFTToken { function mint( uint _amount, address _to, uint _id) external; function burn(address owner, uint _id, uint _amount) external; function balanceOf(address account, uint256 id) external view returns (uint256); } //-------*************************************************----------- contract InfuseSummonTransferV1 is Ownable, ReentrancyGuard { IFARPG_Storage public contractStorage; FARPG_RAMInterface public contractRAM; IFARPGItemsToken public contractITEMS; IFARPGLingsNFTToken public contractLingsNFT; constructor() { } event StatChangedResult(S.Unit AfterUnit, S.Status AfterStatus, S.Time AfterTime); //------------------------------------------------------------------- // _____ _ ____ ____ _ __ __ // / ____| | / __ \| _ \ /\ | | \ \ / / // | | __| | | | | | |_) | / \ | | \ \ / / // | | |_ | | | | | | _ < / /\ \ | | \ \/ / // | |__| | |___| |__| | |_) / ____ \| |____ \ / _ // \_____|______\____/|____/_/ \_\______| \/ (_) // //------------------------------------------------------------------- mapping (address => uint) private reentrant_time; uint constant TIME_INITIALSTAMINA = 24 hours; //initial stamina uint constant TIME_INITIALENDURANCE = 3 hours; //initial endurance/hunger //--------------------------------------------------------- // _____ __ __ _____ _ _ // /\ | __ \| \/ |_ _| \ | | // / \ | | | | \ / | | | | \| | // / /\ \ | | | | |\/| | | | | . ` | // / ____ \| |__| | | | |_| |_| |\ | // /_/ \_\_____/|_| |_|_____|_| \_| // //--------------------------------------------------------- function updateStorageContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractStorage = IFARPG_Storage(_newContractAAddress); } function updateRAMContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractRAM = FARPG_RAMInterface(_newContractAAddress); } function updateITEMContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractITEMS = IFARPGItemsToken(_newContractAAddress); } function updateLingsNFTContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractLingsNFT = IFARPGLingsNFTToken(_newContractAAddress); } function withdraw() external onlyOwner { // Function to withdraw all balance from the contract for revenue require(address(this).balance > 0, "Contract balance is zero"); payable(msg.sender).transfer(address(this).balance); } uint UNLOCKPERIOD = 1 minutes; //1 min for testing will be 25 hours function changeTrainerUnlockPeriod (uint _seconds) external onlyOwner { UNLOCKPERIOD = _seconds; } //--------------------------------------------------------- // // _____ _______ _____ _______ // / ____|__ __|/\ | __ \__ __| // | (___ | | / \ | |__) | | | // \___ \ | | / /\ \ | _ / | | // ____) | | |/ ____ \| | \ \ | | // |_____/ |_/_/ \_\_| \_\ |_| // //--------------------------------------------------------- function noneReentrant_time(address player, uint timeSeconds) internal { //this is to prevent player spam an action or botting effectively. //this function must be Internal otherwise, it will congest a player reentrant time to make him/her unplayable require(block.timestamp - reentrant_time[player] >= timeSeconds,"Non-Reentrant, slow down TX attempts."); reentrant_time[player] = block.timestamp; } function accountAddressToProceed() public view returns (address) { address playerAddress = contractStorage.personalwallet(msg.sender); if (playerAddress == address(0)) { return msg.sender; } else { return playerAddress; } } //--------------------------------------------------------- function SummonLingsFromNFT (uint NFT_ID, uint _slot) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); //confirm the choosing slot is empty and available uint limit2 = contractStorage.getLimit2(playerAddress); //limit2 is slot limit require(_slot < limit2, "Chosen slot exceeds limit."); S.Status memory _petstatus = contractStorage.getPetStatuses(playerAddress, _slot); require(_petstatus.id == 0, "Chosen slot is occupied."); //Confirm player has the NFT require(contractLingsNFT.balanceOf(playerAddress,NFT_ID) >= 1, "Lings NFT not find. You dont have this NFT."); contractLingsNFT.burn(playerAddress, NFT_ID, 1); //after Consume the NFT Summon a new Lings for it S.Unit memory _petunit = S.Unit({ hp: 1000, attack: 100, defense: 50, speed: 100, intelligence: 100, genestrength: 1, range: contractRAM.summonStage3RangeSkill(NFT_ID), special:0}); _petstatus = contractRAM.transformIDtoStageFamily(NFT_ID); if (_petstatus.stage == 3) { _petunit.special = NFT_ID; } S.Time memory _pettime = S.Time({bond: 0, stamina: block.timestamp - TIME_INITIALSTAMINA, hunger: block.timestamp + TIME_INITIALENDURANCE}); contractStorage.setPetUnits(playerAddress, _slot ,_petunit); contractStorage.setPetStatuses(playerAddress,_slot , _petstatus); contractStorage.setPetTimes(playerAddress, _slot ,_pettime); contractStorage.setPetUnitsMaxVitamined(playerAddress, _slot ,contractRAM.petunitsmax(_petstatus.id)); //***//** evolve set bit based on ID/////////////// // Function to set the bit corresponding to the ID uint GENEbit = contractStorage.getPoint2(playerAddress); // Set the bit at the position corresponding to ID GENEbit |= (1 << (_petstatus.id%10000)); contractStorage.setPoint2(playerAddress,GENEbit); emit StatChangedResult(_petunit,_petstatus,_pettime); } //WARN the user that Stats will be reset. function InfuseLingsToNFT (uint _slot, uint _genestrength) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); S.Status memory _petstatus = contractStorage.getPetStatuses(playerAddress, _slot); require(_petstatus.id > 0, "empty slot, nothing to infuse"); S.Unit memory _petunits = contractStorage.getPetUnits(playerAddress, _slot); require(_petunits.genestrength >= _genestrength, "not enough genestrength to infuse"); S.Unit memory emptypetunits; S.Status memory emptypetstatus; S.Time memory emptypettime; if (_petunits.genestrength == _genestrength ) { //infused all! Empty the slot //empty all storage of that slot contractStorage.setPetUnits(playerAddress, _slot ,emptypetunits); contractStorage.setPetStatuses(playerAddress,_slot , emptypetstatus); contractStorage.setPetTimes(playerAddress, _slot ,emptypettime); contractStorage.setPetUnitsMaxVitamined(playerAddress, _slot ,emptypetunits); //mint according to genestrength contractLingsNFT.mint(_genestrength, playerAddress, _petstatus.id); } else { // at least 1 genestrength left, no need empty slot //update new genestrength at storage _petunits.genestrength -= _genestrength; contractStorage.setPetUnits(playerAddress, _slot ,_petunits); //mint according to genestrength contractLingsNFT.mint(_genestrength, playerAddress, _petstatus.id); } } function InfuseTrainersToNFT (uint _TrainerID, uint _genestrength) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); require (_TrainerID < 40, "invalid trainerID"); require (_genestrength >= 1, "0 input, nothing to infuse."); //check if the player really have the genestrength to infused uint TrainerGeneStr = contractStorage.getPlayerGeneStrength(playerAddress,_TrainerID); if (_TrainerID == 0) { //Jojo given 1 free per UID, so cannot infused require(TrainerGeneStr >= _genestrength+1, "not enough genestrength to infuse"); } else { require(TrainerGeneStr >= _genestrength, "not enough genestrength to infuse"); } //take away the genestrength contractStorage.setPlayerGeneStrength(playerAddress, _TrainerID, TrainerGeneStr -= _genestrength); //and locked them for 25 hours uint lockingGene = contractStorage.getTrainerGeneInfusingGene(playerAddress, _TrainerID); contractStorage.setTrainerGeneInfusingGene(playerAddress,_TrainerID,lockingGene+_genestrength); contractStorage.setTrainerGeneInfusingTimer(playerAddress,_TrainerID,block.timestamp); } function ClaimTrainerNFT (uint claimTrainersID) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); uint TimeLocked = contractStorage.getTrainerGeneInfusingTimer(playerAddress,claimTrainersID); require(block.timestamp >= TimeLocked + UNLOCKPERIOD, "Still unlocking"); //passed require means the trainer ID has unlock! //make sure there is locking gene uint lockingGene = contractStorage.getTrainerGeneInfusingGene(playerAddress, claimTrainersID); require(lockingGene > 0,"No gene is locking.."); //pass both, meet criteria //reset the timer and locking gene! contractStorage.setTrainerGeneInfusingGene(playerAddress,claimTrainersID,0); contractStorage.setTrainerGeneInfusingTimer(playerAddress,claimTrainersID,0); //mint trainer nft to the player as successful claim uint ItemID; //need to remapping trainer ID to item ID. (based on mapping, always + 201) ItemID = claimTrainersID + 201; contractITEMS.mint(lockingGene, playerAddress, ItemID); } function GainLingsStrength (uint _slot, uint _Gainquantity) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); //LingNFT ID = Ling ID //confirm the choosing slot is empty and available uint limit2 = contractStorage.getLimit2(playerAddress); //limit2 is slot limit require(_slot < limit2, "Chosen slot exceeds limit."); S.Status memory _petstatus = contractStorage.getPetStatuses(playerAddress, _slot); require(_petstatus.id > 0, "empty slot, nothing to gain"); S.Unit memory _petunits = contractStorage.getPetUnits(playerAddress, _slot); require(_petunits.genestrength >= 1, "not genestrength to top up, empty slot?"); //Confirm player has the NFT require(contractLingsNFT.balanceOf(playerAddress,_petstatus.id ) >= _Gainquantity, "Lings NFT not enough. Check Lings ID"); contractLingsNFT.burn(playerAddress, _petstatus.id, _Gainquantity); //after Consume the NFT, add the genestr on the Ling _petunits.genestrength += _Gainquantity; contractStorage.setPetUnits(playerAddress, _slot ,_petunits); } function GainTrainersStrength (uint TrainerID, uint _Gainquantity) public nonReentrant { //storage Index for trainer //trainer gene ID //Jojo 0 //Michael 1 //Klue 2 //Emo 3 //so on... address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); uint TrainerNFTID = TrainerID + 201; //remapping storage trainerID to trainerNFTID at item //Confirm player has the trainer item NFT require(contractITEMS.balanceOf(playerAddress,TrainerNFTID) >= _Gainquantity, "Trainer Item NFT not enough. Check trainer ID"); //consume it contractITEMS.burn(playerAddress, TrainerNFTID, _Gainquantity); //take away the genestrength uint trainergenestrengthnow = contractStorage.getPlayerGeneStrength(playerAddress, TrainerID); contractStorage.setPlayerGeneStrength(playerAddress, TrainerID, trainergenestrengthnow+_Gainquantity); } function viewForUnityTrainerInfuse () public view returns(uint[50] memory infusingGENE, uint[50] memory infusingStartTime , uint cooldownLimit){ address playerAddress = accountAddressToProceed(); infusingGENE = contractStorage.getTrainerGeneInfusingGeneAll(playerAddress); infusingStartTime = contractStorage.getTrainerGeneInfusingTimerAll(playerAddress); cooldownLimit = UNLOCKPERIOD; } //----- transfer account UID -------- function TransferUID_ACCOUNT (address to_new_address) public nonReentrant { require(contractStorage.UIDmain(to_new_address) == 0, "New Address has already linked to an UID."); address OldAddress = msg.sender; uint transferingUID = contractStorage.UIDmain(OldAddress); require(transferingUID != 0, "Existing address has no UID..."); contractStorage.transferUID(OldAddress,to_new_address); } //----- setup PersonalWallet ---> link Web2 wallet --------- function web3WalletGivePermissionToWeb2Wallet(address web2wallet) public nonReentrant { address web3wallet = msg.sender; noneReentrant_time(web3wallet , 1); contractStorage.setGiveControlTo(web3wallet,web2wallet); } function web2WalletTakeControlOfWeb3Wallet(address web3wallet) public nonReentrant { //get permitted address from the web3 address noneReentrant_time(web3wallet , 1); address permittedAddress = contractStorage.givecontrolto(web3wallet); address web2wallet = msg.sender; require(permittedAddress == web2wallet, "you are not permitted to control this web3wallet."); //if you are permitted then set to your control contractStorage.setPersonalWallet(web2wallet,web3wallet); } //--------- SWAP UID if already talking control (optional) ------------- event UIDSwapped(address indexed relayerWallet, address indexed personalWallet, uint relayerUID, uint personalUID); function swapUID_RelayeredtoPersonal() external nonReentrant { //get what is the controlling wallet (Personal Wallet) address personalWallet = myControllingWallet(msg.sender); require(personalWallet != address(0), "You do not have personal wallet authenticated."); //Verify that personalWallet has given control to the relayered wallet. address relayeredwallet = contractStorage.givecontrolto(personalWallet); require(relayeredwallet == msg.sender, "You do not have control over this personal wallet."); //Retrieve UIDs of both wallets uint relayerUID = contractStorage.UIDmain(msg.sender); uint personalUID = contractStorage.UIDmain(personalWallet); contractStorage.setUIDmain(relayeredwallet, personalUID); contractStorage.setUID_ownedby(personalUID, relayeredwallet ); contractStorage.setUIDmain(personalWallet, relayerUID); contractStorage.setUID_ownedby(relayerUID, personalWallet ); // Emit an event for transparency emit UIDSwapped(relayeredwallet, personalWallet, relayerUID, personalUID); } function deletePersonalWalletControl() public nonReentrant { noneReentrant_time(msg.sender,1); contractStorage.setPersonalWallet(msg.sender,address(0)); } function deletePermissionForControlling() public nonReentrant { noneReentrant_time(msg.sender,1); contractStorage.setGiveControlTo(msg.sender,address(0)); } function readPermissionGivenTo (address web3wallet) public view returns(address thiswallet) { thiswallet = contractStorage.givecontrolto(web3wallet); } function myControllingWallet (address web2wallet) public view returns(address walletgotcontrolled) { walletgotcontrolled = contractStorage.personalwallet(web2wallet); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":[{"components":[{"internalType":"uint256","name":"hp","type":"uint256"},{"internalType":"uint256","name":"attack","type":"uint256"},{"internalType":"uint256","name":"defense","type":"uint256"},{"internalType":"uint256","name":"speed","type":"uint256"},{"internalType":"uint256","name":"intelligence","type":"uint256"},{"internalType":"uint256","name":"genestrength","type":"uint256"},{"internalType":"uint256","name":"range","type":"uint256"},{"internalType":"uint256","name":"special","type":"uint256"}],"indexed":false,"internalType":"struct S.Unit","name":"AfterUnit","type":"tuple"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"family","type":"uint256"},{"internalType":"uint256","name":"stage","type":"uint256"}],"indexed":false,"internalType":"struct S.Status","name":"AfterStatus","type":"tuple"},{"components":[{"internalType":"uint256","name":"bond","type":"uint256"},{"internalType":"uint256","name":"stamina","type":"uint256"},{"internalType":"uint256","name":"hunger","type":"uint256"}],"indexed":false,"internalType":"struct S.Time","name":"AfterTime","type":"tuple"}],"name":"StatChangedResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"relayerWallet","type":"address"},{"indexed":true,"internalType":"address","name":"personalWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"relayerUID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"personalUID","type":"uint256"}],"name":"UIDSwapped","type":"event"},{"inputs":[{"internalType":"uint256","name":"claimTrainersID","type":"uint256"}],"name":"ClaimTrainerNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slot","type":"uint256"},{"internalType":"uint256","name":"_Gainquantity","type":"uint256"}],"name":"GainLingsStrength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"TrainerID","type":"uint256"},{"internalType":"uint256","name":"_Gainquantity","type":"uint256"}],"name":"GainTrainersStrength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slot","type":"uint256"},{"internalType":"uint256","name":"_genestrength","type":"uint256"}],"name":"InfuseLingsToNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_TrainerID","type":"uint256"},{"internalType":"uint256","name":"_genestrength","type":"uint256"}],"name":"InfuseTrainersToNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"NFT_ID","type":"uint256"},{"internalType":"uint256","name":"_slot","type":"uint256"}],"name":"SummonLingsFromNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_new_address","type":"address"}],"name":"TransferUID_ACCOUNT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accountAddressToProceed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"changeTrainerUnlockPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractITEMS","outputs":[{"internalType":"contract IFARPGItemsToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractLingsNFT","outputs":[{"internalType":"contract IFARPGLingsNFTToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractRAM","outputs":[{"internalType":"contract FARPG_RAMInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStorage","outputs":[{"internalType":"contract IFARPG_Storage","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deletePermissionForControlling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deletePersonalWalletControl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"web2wallet","type":"address"}],"name":"myControllingWallet","outputs":[{"internalType":"address","name":"walletgotcontrolled","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"web3wallet","type":"address"}],"name":"readPermissionGivenTo","outputs":[{"internalType":"address","name":"thiswallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapUID_RelayeredtoPersonal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateITEMContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateLingsNFTContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateRAMContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateStorageContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewForUnityTrainerInfuse","outputs":[{"internalType":"uint256[50]","name":"infusingGENE","type":"uint256[50]"},{"internalType":"uint256[50]","name":"infusingStartTime","type":"uint256[50]"},{"internalType":"uint256","name":"cooldownLimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"web3wallet","type":"address"}],"name":"web2WalletTakeControlOfWeb3Wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"web2wallet","type":"address"}],"name":"web3WalletGivePermissionToWeb2Wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052603c6007553480156013575f5ffd5b50601b336023565b600180556072565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612fd68061007f5f395ff3fe608060405234801561000f575f5ffd5b50600436106101c6575f3560e01c806356b54192116100fe578063c02816b11161009e578063e56066591161006e578063e560665914610383578063f17756e114610396578063f1b1a6ab146103a9578063f2fde38b146103bc575f5ffd5b8063c02816b114610342578063c113d0d914610355578063c2b7ac4914610368578063dcc6aaaa1461037b575f5ffd5b80638da5cb5b116100d95780638da5cb5b1461030457806396a33dc5146103145780639ad56dd51461031c578063b9f54f2c1461032f575f5ffd5b806356b54192146102d6578063715018a6146102e95780637d35f912146102f1575f5ffd5b80632c45fa49116101695780634410015c116101445780634410015c1461028a5780634af2fe6f1461029d5780634c4808fa146102b0578063521f4f0c146102c3575f5ffd5b80632c45fa4914610267578063324381561461026f5780633ccfd60b14610282575f5ffd5b806309fb0795116101a457806309fb0795146102225780631b8c058c146102355780631dec52911461023d5780632acd699214610250575f5ffd5b806303eaa141146101ca5780630549b27e146101df57806306f949131461020f575b5f5ffd5b6101dd6101d8366004612b3f565b6103cf565b005b6002546101f2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101dd61021d366004612b3f565b6105d8565b6101dd610230366004612b61565b610628565b6101dd61095e565b6101dd61024b366004612b61565b6109db565b610258610bed565b60405161020693929190612ba9565b6101dd610cf2565b6101dd61027d366004612b3f565b610d3b565b6101dd610dbb565b6101dd610298366004612b61565b610e3b565b6003546101f2906001600160a01b031681565b6101f26102be366004612b3f565b61125f565b6101dd6102d1366004612b3f565b6112d2565b6101dd6102e4366004612b61565b611400565b6101dd6118e8565b6101dd6102ff366004612bd5565b6118f9565b5f546001600160a01b03166101f2565b6101f2611bdb565b6101dd61032a366004612b3f565b611c65565b6101dd61033d366004612b3f565b611cb5565b6101dd610350366004612b61565b611d05565b6101f2610363366004612b3f565b612457565b6101dd610376366004612bd5565b612489565b6101dd612496565b6004546101f2906001600160a01b031681565b6101dd6103a4366004612b3f565b6128a9565b6005546101f2906001600160a01b031681565b6101dd6103ca366004612b3f565b6128f9565b6103d761296f565b600254604051630bc7d91360e31b81526001600160a01b03838116600483015290911690635e3ec89890602401602060405180830381865afa15801561041f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104439190612bec565b156104a75760405162461bcd60e51b815260206004820152602960248201527f4e657720416464726573732068617320616c7265616479206c696e6b65642074604482015268379030b7102aa4a21760b91b60648201526084015b60405180910390fd5b600254604051630bc7d91360e31b81523360048201819052915f916001600160a01b0390911690635e3ec89890602401602060405180830381865afa1580156104f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105169190612bec565b9050805f036105675760405162461bcd60e51b815260206004820152601e60248201527f4578697374696e67206164647265737320686173206e6f205549442e2e2e0000604482015260640161049e565b6002546040516306c34e9360e51b81526001600160a01b03848116600483015285811660248301529091169063d869d260906044015b5f604051808303815f87803b1580156105b4575f5ffd5b505af11580156105c6573d5f5f3e3d5ffd5b5050505050506105d560018055565b50565b6105e06129c8565b6001600160a01b0381166106065760405162461bcd60e51b815260040161049e90612c03565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61063061296f565b5f610639611bdb565b9050610646816002612a21565b6028831061068a5760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081d1c985a5b995c9251607a1b604482015260640161049e565b60018210156106db5760405162461bcd60e51b815260206004820152601b60248201527f3020696e7075742c206e6f7468696e6720746f20696e667573652e0000000000604482015260640161049e565b6002546040516315f67cf360e31b81525f916001600160a01b03169063afb3e7989061070d9085908890600401612c2c565b602060405180830381865afa158015610728573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074c9190612bec565b9050835f0361078457610760836001612c59565b81101561077f5760405162461bcd60e51b815260040161049e90612c6c565b6107a4565b828110156107a45760405162461bcd60e51b815260040161049e90612c6c565b6002546001600160a01b0316635af875f783866107c18786612cad565b9450846040518463ffffffff1660e01b81526004016107e293929190612cc0565b5f604051808303815f87803b1580156107f9575f5ffd5b505af115801561080b573d5f5f3e3d5ffd5b505060025460405163067f299160e31b81525f93506001600160a01b0390911691506333f94c88906108439086908990600401612c2c565b602060405180830381865afa15801561085e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108829190612bec565b6002549091506001600160a01b03166371a2058884876108a28886612c59565b6040518463ffffffff1660e01b81526004016108c093929190612cc0565b5f604051808303815f87803b1580156108d7575f5ffd5b505af11580156108e9573d5f5f3e3d5ffd5b5050600254604051637d30ac7160e01b81526001600160a01b039091169250637d30ac71915061092190869089904290600401612cc0565b5f604051808303815f87803b158015610938575f5ffd5b505af115801561094a573d5f5f3e3d5ffd5b5050505050505061095a60018055565b5050565b61096661296f565b610971336001612a21565b600254604051639cef0bd560e01b81523360048201525f60248201526001600160a01b0390911690639cef0bd5906044015b5f604051808303815f87803b1580156109ba575f5ffd5b505af11580156109cc573d5f5f3e3d5ffd5b505050506109d960018055565b565b6109e361296f565b5f6109ec611bdb565b90506109f9816002612a21565b5f610a058460c9612c59565b60048054604051627eeac760e11b815292935085926001600160a01b039091169162fdd58e91610a39918791879101612c2c565b602060405180830381865afa158015610a54573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a789190612bec565b1015610adc5760405162461bcd60e51b815260206004820152602d60248201527f547261696e6572204974656d204e4654206e6f7420656e6f7567682e2043686560448201526c18dac81d1c985a5b995c881251609a1b606482015260840161049e565b60048054604051637a94c56560e11b81526001600160a01b039091169163f5298aca91610b0f9186918691899101612cc0565b5f604051808303815f87803b158015610b26575f5ffd5b505af1158015610b38573d5f5f3e3d5ffd5b50506002546040516315f67cf360e31b81525f93506001600160a01b03909116915063afb3e79890610b709086908990600401612c2c565b602060405180830381865afa158015610b8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610baf9190612bec565b6002549091506001600160a01b0316635af875f78487610bcf8886612c59565b6040518463ffffffff1660e01b815260040161092193929190612cc0565b610bf5612b0c565b610bfd612b0c565b5f5f610c07611bdb565b600254604051633003c07760e21b81526001600160a01b03808416600483015292935091169063c00f01dc9060240161064060405180830381865afa158015610c52573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c769190612d1f565b6002546040516308a924af60e01b81526001600160a01b0384811660048301529296509116906308a924af9060240161064060405180830381865afa158015610cc1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce59190612d1f565b9250600754915050909192565b610cfa61296f565b610d05336001612a21565b600254604051637fd7374f60e01b81523360048201525f60248201526001600160a01b0390911690637fd7374f906044016109a3565b610d4361296f565b33610d4f816001612a21565b600254604051639cef0bd560e01b81526001600160a01b038381166004830152848116602483015290911690639cef0bd5906044015f604051808303815f87803b158015610d9b575f5ffd5b505af1158015610dad573d5f5f3e3d5ffd5b50505050506105d560018055565b610dc36129c8565b5f4711610e125760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f0000000000000000604482015260640161049e565b60405133904780156108fc02915f818181858888f193505050501580156105d5573d5f5f3e3d5ffd5b610e4361296f565b5f610e4c611bdb565b9050610e59816002612a21565b6002546040516329323b0d60e21b81526001600160a01b0383811660048301525f92169063a4c8ec3490602401602060405180830381865afa158015610ea1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec59190612bec565b9050808410610f165760405162461bcd60e51b815260206004820152601a60248201527f43686f73656e20736c6f742065786365656473206c696d69742e000000000000604482015260640161049e565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d90610f489086908990600401612c2c565b606060405180830381865afa158015610f63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f879190612d9c565b8051909150610fd85760405162461bcd60e51b815260206004820152601b60248201527f656d70747920736c6f742c206e6f7468696e6720746f206761696e0000000000604482015260640161049e565b600254604051636802761f60e01b81525f916001600160a01b031690636802761f9061100a9087908a90600401612c2c565b61010060405180830381865afa158015611026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104a9190612df5565b905060018160a0015110156110b15760405162461bcd60e51b815260206004820152602760248201527f6e6f742067656e65737472656e67746820746f20746f702075702c20656d70746044820152667920736c6f743f60c81b606482015260840161049e565b6005548251604051627eeac760e11b815287926001600160a01b03169162fdd58e916110e1918991600401612c2c565b602060405180830381865afa1580156110fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111209190612bec565b101561117a5760405162461bcd60e51b8152602060048201526024808201527f4c696e6773204e4654206e6f7420656e6f7567682e20436865636b204c696e676044820152631cc8125160e21b606482015260840161049e565b6005548251604051637a94c56560e11b81526001600160a01b039092169163f5298aca916111af918891908a90600401612cc0565b5f604051808303815f87803b1580156111c6575f5ffd5b505af11580156111d8573d5f5f3e3d5ffd5b50505050848160a0018181516111ee9190612c59565b90525060025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906112259087908a908690600401612eb1565b5f604051808303815f87803b15801561123c575f5ffd5b505af115801561124e573d5f5f3e3d5ffd5b505050505050505061095a60018055565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed906024015b602060405180830381865afa1580156112a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cc9190612ede565b92915050565b6112da61296f565b6112e5816001612a21565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed90602401602060405180830381865afa15801561132d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113519190612ede565b9050336001600160a01b03821681146113c65760405162461bcd60e51b815260206004820152603160248201527f796f7520617265206e6f74207065726d697474656420746f20636f6e74726f6c604482015270103a3434b9903bb2b119bbb0b63632ba1760791b606482015260840161049e565b600254604051637fd7374f60e01b81526001600160a01b038381166004830152858116602483015290911690637fd7374f9060440161059d565b61140861296f565b5f611411611bdb565b905061141e816002612a21565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d906114509085908890600401612c2c565b606060405180830381865afa15801561146b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148f9190612d9c565b80519091506114e05760405162461bcd60e51b815260206004820152601d60248201527f656d70747920736c6f742c206e6f7468696e6720746f20696e66757365000000604482015260640161049e565b600254604051636802761f60e01b81525f916001600160a01b031690636802761f906115129086908990600401612c2c565b61010060405180830381865afa15801561152e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115529190612df5565b9050838160a0015110156115785760405162461bcd60e51b815260040161049e90612c6c565b6115b86040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6115d960405180606001604052805f81526020015f81526020015f81525090565b6115fa60405180606001604052805f81526020015f81526020015f81525090565b868460a00151036117f85760025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906116399089908c908890600401612eb1565b5f604051808303815f87803b158015611650575f5ffd5b505af1158015611662573d5f5f3e3d5ffd5b50506002546040516318f626f560e11b81526001600160a01b0390911692506331ec4dea915061169a9089908c908790600401612ef9565b5f604051808303815f87803b1580156116b1575f5ffd5b505af11580156116c3573d5f5f3e3d5ffd5b505060025460405163108b074f60e31b81526001600160a01b0390911692506384583a7891506116fb9089908c908690600401612ef9565b5f604051808303815f87803b158015611712575f5ffd5b505af1158015611724573d5f5f3e3d5ffd5b505060025460405163c10e83e160e01b81526001600160a01b03909116925063c10e83e1915061175c9089908c908890600401612eb1565b5f604051808303815f87803b158015611773575f5ffd5b505af1158015611785573d5f5f3e3d5ffd5b5050600554875160405163020da84160e61b8152600481018c90526001600160a01b038b8116602483015260448201929092529116925063836a104091506064015f604051808303815f87803b1580156117dd575f5ffd5b505af11580156117ef573d5f5f3e3d5ffd5b505050506118d9565b868460a00181815161180a9190612cad565b90525060025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906118419089908c908990600401612eb1565b5f604051808303815f87803b158015611858575f5ffd5b505af115801561186a573d5f5f3e3d5ffd5b5050600554875160405163020da84160e61b8152600481018c90526001600160a01b038b8116602483015260448201929092529116925063836a104091506064015f604051808303815f87803b1580156118c2575f5ffd5b505af11580156118d4573d5f5f3e3d5ffd5b505050505b50505050505061095a60018055565b6118f06129c8565b6109d95f612abd565b61190161296f565b5f61190a611bdb565b9050611917816002612a21565b60025460405163246ccd7b60e01b81525f916001600160a01b03169063246ccd7b906119499085908790600401612c2c565b602060405180830381865afa158015611964573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119889190612bec565b9050600754816119989190612c59565b4210156119d95760405162461bcd60e51b815260206004820152600f60248201526e5374696c6c20756e6c6f636b696e6760881b604482015260640161049e565b60025460405163067f299160e31b81525f916001600160a01b0316906333f94c8890611a0b9086908890600401612c2c565b602060405180830381865afa158015611a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4a9190612bec565b90505f8111611a925760405162461bcd60e51b815260206004820152601460248201527327379033b2b7329034b9903637b1b5b4b733971760611b604482015260640161049e565b600254604051630e3440b160e31b81526001600160a01b03909116906371a2058890611ac690869088905f90600401612cc0565b5f604051808303815f87803b158015611add575f5ffd5b505af1158015611aef573d5f5f3e3d5ffd5b5050600254604051637d30ac7160e01b81526001600160a01b039091169250637d30ac719150611b2790869088905f90600401612cc0565b5f604051808303815f87803b158015611b3e575f5ffd5b505af1158015611b50573d5f5f3e3d5ffd5b505050505f8460c9611b629190612c59565b6004805460405163020da84160e61b81529182018590526001600160a01b03878116602484015260448301849052929350919091169063836a1040906064015f604051808303815f87803b158015611bb8575f5ffd5b505af1158015611bca573d5f5f3e3d5ffd5b50505050505050506105d560018055565b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015611c25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c499190612ede565b90506001600160a01b038116611c60573391505090565b919050565b611c6d6129c8565b6001600160a01b038116611c935760405162461bcd60e51b815260040161049e90612c03565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b611cbd6129c8565b6001600160a01b038116611ce35760405162461bcd60e51b815260040161049e90612c03565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611d0d61296f565b5f611d16611bdb565b9050611d23816002612a21565b6002546040516329323b0d60e21b81526001600160a01b0383811660048301525f92169063a4c8ec3490602401602060405180830381865afa158015611d6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d8f9190612bec565b9050808310611de05760405162461bcd60e51b815260206004820152601a60248201527f43686f73656e20736c6f742065786365656473206c696d69742e000000000000604482015260640161049e565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d90611e129086908890600401612c2c565b606060405180830381865afa158015611e2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e519190612d9c565b805190915015611ea35760405162461bcd60e51b815260206004820152601860248201527f43686f73656e20736c6f74206973206f636375706965642e0000000000000000604482015260640161049e565b600554604051627eeac760e11b81526001916001600160a01b03169062fdd58e90611ed49087908a90600401612c2c565b602060405180830381865afa158015611eef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f139190612bec565b1015611f755760405162461bcd60e51b815260206004820152602b60248201527f4c696e6773204e4654206e6f742066696e642e20596f7520646f6e742068617660448201526a32903a3434b99027232a1760a91b606482015260840161049e565b600554604051637a94c56560e11b81526001600160a01b039091169063f5298aca90611faa9086908990600190600401612cc0565b5f604051808303815f87803b158015611fc1575f5ffd5b505af1158015611fd3573d5f5f3e3d5ffd5b505060408051610100810182526103e88152606460208201819052603282840152606082018190526080820152600160a082015260035491516304fe10d360e41b8152600481018a90525f945090925060c08301916001600160a01b031690634fe10d3090602401602060405180830381865afa158015612056573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207a9190612bec565b81525f6020909101526003546040516353b4eff960e11b8152600481018990529192506001600160a01b03169063a769dff290602401606060405180830381865afa1580156120cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120ef9190612d9c565b915081604001516003036121055760e081018690525b5f60405180606001604052805f815260200162015180426121269190612cad565b8152602001612137612a3042612c59565b905260025460405163daa3f88b60e01b81529192506001600160a01b03169063daa3f88b9061216e9088908a908790600401612eb1565b5f604051808303815f87803b158015612185575f5ffd5b505af1158015612197573d5f5f3e3d5ffd5b50506002546040516318f626f560e11b81526001600160a01b0390911692506331ec4dea91506121cf9088908a908890600401612ef9565b5f604051808303815f87803b1580156121e6575f5ffd5b505af11580156121f8573d5f5f3e3d5ffd5b505060025460405163108b074f60e31b81526001600160a01b0390911692506384583a7891506122309088908a908690600401612ef9565b5f604051808303815f87803b158015612247575f5ffd5b505af1158015612259573d5f5f3e3d5ffd5b505060025460035486516040516315e3d00d60e11b815260048101919091526001600160a01b03928316945063c10e83e1935089928b921690632bc7a01a9060240161010060405180830381865afa1580156122b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122db9190612df5565b6040518463ffffffff1660e01b81526004016122f993929190612eb1565b5f604051808303815f87803b158015612310575f5ffd5b505af1158015612322573d5f5f3e3d5ffd5b505060025460405163b2cbbfad60e01b81526001600160a01b0389811660048301525f9450909116915063b2cbbfad90602401602060405180830381865afa158015612370573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123949190612bec565b84519091506123a69061271090612f31565b600254604051636ed6fed760e11b8152600190921b92909217916001600160a01b03169063ddadfdae906123e09089908590600401612c2c565b5f604051808303815f87803b1580156123f7575f5ffd5b505af1158015612409573d5f5f3e3d5ffd5b505050507fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd83858460405161244093929190612f50565b60405180910390a150505050505061095a60018055565b6002546040516302e6c26360e11b81526001600160a01b0383811660048301525f9216906305cd84c69060240161128d565b6124916129c8565b600755565b61249e61296f565b5f6124a833612457565b90506001600160a01b0381166125175760405162461bcd60e51b815260206004820152602e60248201527f596f7520646f206e6f74206861766520706572736f6e616c2077616c6c65742060448201526d30baba3432b73a34b1b0ba32b21760911b606482015260840161049e565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed90602401602060405180830381865afa15801561255f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125839190612ede565b90506001600160a01b03811633146125f85760405162461bcd60e51b815260206004820152603260248201527f596f7520646f206e6f74206861766520636f6e74726f6c206f7665722074686960448201527139903832b939b7b730b6103bb0b63632ba1760711b606482015260840161049e565b600254604051630bc7d91360e31b81523360048201525f916001600160a01b031690635e3ec89890602401602060405180830381865afa15801561263e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126629190612bec565b600254604051630bc7d91360e31b81526001600160a01b0386811660048301529293505f9290911690635e3ec89890602401602060405180830381865afa1580156126af573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126d39190612bec565b600254604051632875cd2b60e01b81529192506001600160a01b031690632875cd2b906127069086908590600401612c2c565b5f604051808303815f87803b15801561271d575f5ffd5b505af115801561272f573d5f5f3e3d5ffd5b50506002546040516311fa2c4960e01b8152600481018590526001600160a01b03878116602483015290911692506311fa2c4991506044015f604051808303815f87803b15801561277e575f5ffd5b505af1158015612790573d5f5f3e3d5ffd5b5050600254604051632875cd2b60e01b81526001600160a01b039091169250632875cd2b91506127c69087908690600401612c2c565b5f604051808303815f87803b1580156127dd575f5ffd5b505af11580156127ef573d5f5f3e3d5ffd5b50506002546040516311fa2c4960e01b8152600481018690526001600160a01b03888116602483015290911692506311fa2c4991506044015f604051808303815f87803b15801561283e575f5ffd5b505af1158015612850573d5f5f3e3d5ffd5b505060408051858152602081018590526001600160a01b038089169450871692507f1d5be8888e86a0f9d77e7d6375cd8a6824db2f90cd41d56455e437c8b4eb9fc3910160405180910390a3505050506109d960018055565b6128b16129c8565b6001600160a01b0381166128d75760405162461bcd60e51b815260040161049e90612c03565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6129016129c8565b6001600160a01b0381166129665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161049e565b6105d581612abd565b6002600154036129c15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161049e565b6002600155565b5f546001600160a01b031633146109d95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049e565b6001600160a01b0382165f908152600660205260409020548190612a459042612cad565b1015612aa15760405162461bcd60e51b815260206004820152602560248201527f4e6f6e2d5265656e7472616e742c20736c6f7720646f776e205458206174746560448201526436b83a399760d91b606482015260840161049e565b506001600160a01b03165f908152600660205260409020429055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518061064001604052806032906020820280368337509192915050565b6001600160a01b03811681146105d5575f5ffd5b5f60208284031215612b4f575f5ffd5b8135612b5a81612b2b565b9392505050565b5f5f60408385031215612b72575f5ffd5b50508035926020909101359150565b805f5b6032811015612ba3578151845260209384019390910190600101612b84565b50505050565b610ca08101612bb88286612b81565b612bc6610640830185612b81565b82610c80830152949350505050565b5f60208284031215612be5575f5ffd5b5035919050565b5f60208284031215612bfc575f5ffd5b5051919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156112cc576112cc612c45565b60208082526021908201527f6e6f7420656e6f7567682067656e65737472656e67746820746f20696e6675736040820152606560f81b606082015260800190565b818103818111156112cc576112cc612c45565b6001600160a01b039390931683526020830191909152604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff81118282101715612d1957612d19612ce1565b60405290565b5f6106408284031215612d30575f5ffd5b82601f830112612d3e575f5ffd5b604051610640810167ffffffffffffffff81118282101715612d6257612d62612ce1565b60405280610640840185811115612d77575f5ffd5b845b81811015612d91578051835260209283019201612d79565b509195945050505050565b5f6060828403128015612dad575f5ffd5b506040516060810167ffffffffffffffff81118282101715612dd157612dd1612ce1565b60409081528351825260208085015190830152928301519281019290925250919050565b5f610100828403128015612e07575f5ffd5b50612e10612cf5565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b6001600160a01b0384168152602081018390526101408101612ed66040830184612e63565b949350505050565b5f60208284031215612eee575f5ffd5b8151612b5a81612b2b565b6001600160a01b03841681526020810183905260a08101612ed660408301848051825260208082015190830152604090810151910152565b5f82612f4b57634e487b7160e01b5f52601260045260245ffd5b500690565b6101c08101612f5f8286612e63565b8351610100830152602084015161012083015260408401516101408301528251610160830152602083015161018083015260408301516101a0830152612ed656fea26469706673582212205fe51a119d9743b22adbb9956ed0c125d30078e05b4bb2dfdb8b17ff26becd6464736f6c634300081c0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106101c6575f3560e01c806356b54192116100fe578063c02816b11161009e578063e56066591161006e578063e560665914610383578063f17756e114610396578063f1b1a6ab146103a9578063f2fde38b146103bc575f5ffd5b8063c02816b114610342578063c113d0d914610355578063c2b7ac4914610368578063dcc6aaaa1461037b575f5ffd5b80638da5cb5b116100d95780638da5cb5b1461030457806396a33dc5146103145780639ad56dd51461031c578063b9f54f2c1461032f575f5ffd5b806356b54192146102d6578063715018a6146102e95780637d35f912146102f1575f5ffd5b80632c45fa49116101695780634410015c116101445780634410015c1461028a5780634af2fe6f1461029d5780634c4808fa146102b0578063521f4f0c146102c3575f5ffd5b80632c45fa4914610267578063324381561461026f5780633ccfd60b14610282575f5ffd5b806309fb0795116101a457806309fb0795146102225780631b8c058c146102355780631dec52911461023d5780632acd699214610250575f5ffd5b806303eaa141146101ca5780630549b27e146101df57806306f949131461020f575b5f5ffd5b6101dd6101d8366004612b3f565b6103cf565b005b6002546101f2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101dd61021d366004612b3f565b6105d8565b6101dd610230366004612b61565b610628565b6101dd61095e565b6101dd61024b366004612b61565b6109db565b610258610bed565b60405161020693929190612ba9565b6101dd610cf2565b6101dd61027d366004612b3f565b610d3b565b6101dd610dbb565b6101dd610298366004612b61565b610e3b565b6003546101f2906001600160a01b031681565b6101f26102be366004612b3f565b61125f565b6101dd6102d1366004612b3f565b6112d2565b6101dd6102e4366004612b61565b611400565b6101dd6118e8565b6101dd6102ff366004612bd5565b6118f9565b5f546001600160a01b03166101f2565b6101f2611bdb565b6101dd61032a366004612b3f565b611c65565b6101dd61033d366004612b3f565b611cb5565b6101dd610350366004612b61565b611d05565b6101f2610363366004612b3f565b612457565b6101dd610376366004612bd5565b612489565b6101dd612496565b6004546101f2906001600160a01b031681565b6101dd6103a4366004612b3f565b6128a9565b6005546101f2906001600160a01b031681565b6101dd6103ca366004612b3f565b6128f9565b6103d761296f565b600254604051630bc7d91360e31b81526001600160a01b03838116600483015290911690635e3ec89890602401602060405180830381865afa15801561041f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104439190612bec565b156104a75760405162461bcd60e51b815260206004820152602960248201527f4e657720416464726573732068617320616c7265616479206c696e6b65642074604482015268379030b7102aa4a21760b91b60648201526084015b60405180910390fd5b600254604051630bc7d91360e31b81523360048201819052915f916001600160a01b0390911690635e3ec89890602401602060405180830381865afa1580156104f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105169190612bec565b9050805f036105675760405162461bcd60e51b815260206004820152601e60248201527f4578697374696e67206164647265737320686173206e6f205549442e2e2e0000604482015260640161049e565b6002546040516306c34e9360e51b81526001600160a01b03848116600483015285811660248301529091169063d869d260906044015b5f604051808303815f87803b1580156105b4575f5ffd5b505af11580156105c6573d5f5f3e3d5ffd5b5050505050506105d560018055565b50565b6105e06129c8565b6001600160a01b0381166106065760405162461bcd60e51b815260040161049e90612c03565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61063061296f565b5f610639611bdb565b9050610646816002612a21565b6028831061068a5760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081d1c985a5b995c9251607a1b604482015260640161049e565b60018210156106db5760405162461bcd60e51b815260206004820152601b60248201527f3020696e7075742c206e6f7468696e6720746f20696e667573652e0000000000604482015260640161049e565b6002546040516315f67cf360e31b81525f916001600160a01b03169063afb3e7989061070d9085908890600401612c2c565b602060405180830381865afa158015610728573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074c9190612bec565b9050835f0361078457610760836001612c59565b81101561077f5760405162461bcd60e51b815260040161049e90612c6c565b6107a4565b828110156107a45760405162461bcd60e51b815260040161049e90612c6c565b6002546001600160a01b0316635af875f783866107c18786612cad565b9450846040518463ffffffff1660e01b81526004016107e293929190612cc0565b5f604051808303815f87803b1580156107f9575f5ffd5b505af115801561080b573d5f5f3e3d5ffd5b505060025460405163067f299160e31b81525f93506001600160a01b0390911691506333f94c88906108439086908990600401612c2c565b602060405180830381865afa15801561085e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108829190612bec565b6002549091506001600160a01b03166371a2058884876108a28886612c59565b6040518463ffffffff1660e01b81526004016108c093929190612cc0565b5f604051808303815f87803b1580156108d7575f5ffd5b505af11580156108e9573d5f5f3e3d5ffd5b5050600254604051637d30ac7160e01b81526001600160a01b039091169250637d30ac71915061092190869089904290600401612cc0565b5f604051808303815f87803b158015610938575f5ffd5b505af115801561094a573d5f5f3e3d5ffd5b5050505050505061095a60018055565b5050565b61096661296f565b610971336001612a21565b600254604051639cef0bd560e01b81523360048201525f60248201526001600160a01b0390911690639cef0bd5906044015b5f604051808303815f87803b1580156109ba575f5ffd5b505af11580156109cc573d5f5f3e3d5ffd5b505050506109d960018055565b565b6109e361296f565b5f6109ec611bdb565b90506109f9816002612a21565b5f610a058460c9612c59565b60048054604051627eeac760e11b815292935085926001600160a01b039091169162fdd58e91610a39918791879101612c2c565b602060405180830381865afa158015610a54573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a789190612bec565b1015610adc5760405162461bcd60e51b815260206004820152602d60248201527f547261696e6572204974656d204e4654206e6f7420656e6f7567682e2043686560448201526c18dac81d1c985a5b995c881251609a1b606482015260840161049e565b60048054604051637a94c56560e11b81526001600160a01b039091169163f5298aca91610b0f9186918691899101612cc0565b5f604051808303815f87803b158015610b26575f5ffd5b505af1158015610b38573d5f5f3e3d5ffd5b50506002546040516315f67cf360e31b81525f93506001600160a01b03909116915063afb3e79890610b709086908990600401612c2c565b602060405180830381865afa158015610b8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610baf9190612bec565b6002549091506001600160a01b0316635af875f78487610bcf8886612c59565b6040518463ffffffff1660e01b815260040161092193929190612cc0565b610bf5612b0c565b610bfd612b0c565b5f5f610c07611bdb565b600254604051633003c07760e21b81526001600160a01b03808416600483015292935091169063c00f01dc9060240161064060405180830381865afa158015610c52573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c769190612d1f565b6002546040516308a924af60e01b81526001600160a01b0384811660048301529296509116906308a924af9060240161064060405180830381865afa158015610cc1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce59190612d1f565b9250600754915050909192565b610cfa61296f565b610d05336001612a21565b600254604051637fd7374f60e01b81523360048201525f60248201526001600160a01b0390911690637fd7374f906044016109a3565b610d4361296f565b33610d4f816001612a21565b600254604051639cef0bd560e01b81526001600160a01b038381166004830152848116602483015290911690639cef0bd5906044015f604051808303815f87803b158015610d9b575f5ffd5b505af1158015610dad573d5f5f3e3d5ffd5b50505050506105d560018055565b610dc36129c8565b5f4711610e125760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f0000000000000000604482015260640161049e565b60405133904780156108fc02915f818181858888f193505050501580156105d5573d5f5f3e3d5ffd5b610e4361296f565b5f610e4c611bdb565b9050610e59816002612a21565b6002546040516329323b0d60e21b81526001600160a01b0383811660048301525f92169063a4c8ec3490602401602060405180830381865afa158015610ea1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec59190612bec565b9050808410610f165760405162461bcd60e51b815260206004820152601a60248201527f43686f73656e20736c6f742065786365656473206c696d69742e000000000000604482015260640161049e565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d90610f489086908990600401612c2c565b606060405180830381865afa158015610f63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f879190612d9c565b8051909150610fd85760405162461bcd60e51b815260206004820152601b60248201527f656d70747920736c6f742c206e6f7468696e6720746f206761696e0000000000604482015260640161049e565b600254604051636802761f60e01b81525f916001600160a01b031690636802761f9061100a9087908a90600401612c2c565b61010060405180830381865afa158015611026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104a9190612df5565b905060018160a0015110156110b15760405162461bcd60e51b815260206004820152602760248201527f6e6f742067656e65737472656e67746820746f20746f702075702c20656d70746044820152667920736c6f743f60c81b606482015260840161049e565b6005548251604051627eeac760e11b815287926001600160a01b03169162fdd58e916110e1918991600401612c2c565b602060405180830381865afa1580156110fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111209190612bec565b101561117a5760405162461bcd60e51b8152602060048201526024808201527f4c696e6773204e4654206e6f7420656e6f7567682e20436865636b204c696e676044820152631cc8125160e21b606482015260840161049e565b6005548251604051637a94c56560e11b81526001600160a01b039092169163f5298aca916111af918891908a90600401612cc0565b5f604051808303815f87803b1580156111c6575f5ffd5b505af11580156111d8573d5f5f3e3d5ffd5b50505050848160a0018181516111ee9190612c59565b90525060025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906112259087908a908690600401612eb1565b5f604051808303815f87803b15801561123c575f5ffd5b505af115801561124e573d5f5f3e3d5ffd5b505050505050505061095a60018055565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed906024015b602060405180830381865afa1580156112a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cc9190612ede565b92915050565b6112da61296f565b6112e5816001612a21565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed90602401602060405180830381865afa15801561132d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113519190612ede565b9050336001600160a01b03821681146113c65760405162461bcd60e51b815260206004820152603160248201527f796f7520617265206e6f74207065726d697474656420746f20636f6e74726f6c604482015270103a3434b9903bb2b119bbb0b63632ba1760791b606482015260840161049e565b600254604051637fd7374f60e01b81526001600160a01b038381166004830152858116602483015290911690637fd7374f9060440161059d565b61140861296f565b5f611411611bdb565b905061141e816002612a21565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d906114509085908890600401612c2c565b606060405180830381865afa15801561146b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148f9190612d9c565b80519091506114e05760405162461bcd60e51b815260206004820152601d60248201527f656d70747920736c6f742c206e6f7468696e6720746f20696e66757365000000604482015260640161049e565b600254604051636802761f60e01b81525f916001600160a01b031690636802761f906115129086908990600401612c2c565b61010060405180830381865afa15801561152e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115529190612df5565b9050838160a0015110156115785760405162461bcd60e51b815260040161049e90612c6c565b6115b86040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6115d960405180606001604052805f81526020015f81526020015f81525090565b6115fa60405180606001604052805f81526020015f81526020015f81525090565b868460a00151036117f85760025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906116399089908c908890600401612eb1565b5f604051808303815f87803b158015611650575f5ffd5b505af1158015611662573d5f5f3e3d5ffd5b50506002546040516318f626f560e11b81526001600160a01b0390911692506331ec4dea915061169a9089908c908790600401612ef9565b5f604051808303815f87803b1580156116b1575f5ffd5b505af11580156116c3573d5f5f3e3d5ffd5b505060025460405163108b074f60e31b81526001600160a01b0390911692506384583a7891506116fb9089908c908690600401612ef9565b5f604051808303815f87803b158015611712575f5ffd5b505af1158015611724573d5f5f3e3d5ffd5b505060025460405163c10e83e160e01b81526001600160a01b03909116925063c10e83e1915061175c9089908c908890600401612eb1565b5f604051808303815f87803b158015611773575f5ffd5b505af1158015611785573d5f5f3e3d5ffd5b5050600554875160405163020da84160e61b8152600481018c90526001600160a01b038b8116602483015260448201929092529116925063836a104091506064015f604051808303815f87803b1580156117dd575f5ffd5b505af11580156117ef573d5f5f3e3d5ffd5b505050506118d9565b868460a00181815161180a9190612cad565b90525060025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906118419089908c908990600401612eb1565b5f604051808303815f87803b158015611858575f5ffd5b505af115801561186a573d5f5f3e3d5ffd5b5050600554875160405163020da84160e61b8152600481018c90526001600160a01b038b8116602483015260448201929092529116925063836a104091506064015f604051808303815f87803b1580156118c2575f5ffd5b505af11580156118d4573d5f5f3e3d5ffd5b505050505b50505050505061095a60018055565b6118f06129c8565b6109d95f612abd565b61190161296f565b5f61190a611bdb565b9050611917816002612a21565b60025460405163246ccd7b60e01b81525f916001600160a01b03169063246ccd7b906119499085908790600401612c2c565b602060405180830381865afa158015611964573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119889190612bec565b9050600754816119989190612c59565b4210156119d95760405162461bcd60e51b815260206004820152600f60248201526e5374696c6c20756e6c6f636b696e6760881b604482015260640161049e565b60025460405163067f299160e31b81525f916001600160a01b0316906333f94c8890611a0b9086908890600401612c2c565b602060405180830381865afa158015611a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4a9190612bec565b90505f8111611a925760405162461bcd60e51b815260206004820152601460248201527327379033b2b7329034b9903637b1b5b4b733971760611b604482015260640161049e565b600254604051630e3440b160e31b81526001600160a01b03909116906371a2058890611ac690869088905f90600401612cc0565b5f604051808303815f87803b158015611add575f5ffd5b505af1158015611aef573d5f5f3e3d5ffd5b5050600254604051637d30ac7160e01b81526001600160a01b039091169250637d30ac719150611b2790869088905f90600401612cc0565b5f604051808303815f87803b158015611b3e575f5ffd5b505af1158015611b50573d5f5f3e3d5ffd5b505050505f8460c9611b629190612c59565b6004805460405163020da84160e61b81529182018590526001600160a01b03878116602484015260448301849052929350919091169063836a1040906064015f604051808303815f87803b158015611bb8575f5ffd5b505af1158015611bca573d5f5f3e3d5ffd5b50505050505050506105d560018055565b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015611c25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c499190612ede565b90506001600160a01b038116611c60573391505090565b919050565b611c6d6129c8565b6001600160a01b038116611c935760405162461bcd60e51b815260040161049e90612c03565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b611cbd6129c8565b6001600160a01b038116611ce35760405162461bcd60e51b815260040161049e90612c03565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611d0d61296f565b5f611d16611bdb565b9050611d23816002612a21565b6002546040516329323b0d60e21b81526001600160a01b0383811660048301525f92169063a4c8ec3490602401602060405180830381865afa158015611d6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d8f9190612bec565b9050808310611de05760405162461bcd60e51b815260206004820152601a60248201527f43686f73656e20736c6f742065786365656473206c696d69742e000000000000604482015260640161049e565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d90611e129086908890600401612c2c565b606060405180830381865afa158015611e2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e519190612d9c565b805190915015611ea35760405162461bcd60e51b815260206004820152601860248201527f43686f73656e20736c6f74206973206f636375706965642e0000000000000000604482015260640161049e565b600554604051627eeac760e11b81526001916001600160a01b03169062fdd58e90611ed49087908a90600401612c2c565b602060405180830381865afa158015611eef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f139190612bec565b1015611f755760405162461bcd60e51b815260206004820152602b60248201527f4c696e6773204e4654206e6f742066696e642e20596f7520646f6e742068617660448201526a32903a3434b99027232a1760a91b606482015260840161049e565b600554604051637a94c56560e11b81526001600160a01b039091169063f5298aca90611faa9086908990600190600401612cc0565b5f604051808303815f87803b158015611fc1575f5ffd5b505af1158015611fd3573d5f5f3e3d5ffd5b505060408051610100810182526103e88152606460208201819052603282840152606082018190526080820152600160a082015260035491516304fe10d360e41b8152600481018a90525f945090925060c08301916001600160a01b031690634fe10d3090602401602060405180830381865afa158015612056573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207a9190612bec565b81525f6020909101526003546040516353b4eff960e11b8152600481018990529192506001600160a01b03169063a769dff290602401606060405180830381865afa1580156120cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120ef9190612d9c565b915081604001516003036121055760e081018690525b5f60405180606001604052805f815260200162015180426121269190612cad565b8152602001612137612a3042612c59565b905260025460405163daa3f88b60e01b81529192506001600160a01b03169063daa3f88b9061216e9088908a908790600401612eb1565b5f604051808303815f87803b158015612185575f5ffd5b505af1158015612197573d5f5f3e3d5ffd5b50506002546040516318f626f560e11b81526001600160a01b0390911692506331ec4dea91506121cf9088908a908890600401612ef9565b5f604051808303815f87803b1580156121e6575f5ffd5b505af11580156121f8573d5f5f3e3d5ffd5b505060025460405163108b074f60e31b81526001600160a01b0390911692506384583a7891506122309088908a908690600401612ef9565b5f604051808303815f87803b158015612247575f5ffd5b505af1158015612259573d5f5f3e3d5ffd5b505060025460035486516040516315e3d00d60e11b815260048101919091526001600160a01b03928316945063c10e83e1935089928b921690632bc7a01a9060240161010060405180830381865afa1580156122b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122db9190612df5565b6040518463ffffffff1660e01b81526004016122f993929190612eb1565b5f604051808303815f87803b158015612310575f5ffd5b505af1158015612322573d5f5f3e3d5ffd5b505060025460405163b2cbbfad60e01b81526001600160a01b0389811660048301525f9450909116915063b2cbbfad90602401602060405180830381865afa158015612370573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123949190612bec565b84519091506123a69061271090612f31565b600254604051636ed6fed760e11b8152600190921b92909217916001600160a01b03169063ddadfdae906123e09089908590600401612c2c565b5f604051808303815f87803b1580156123f7575f5ffd5b505af1158015612409573d5f5f3e3d5ffd5b505050507fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd83858460405161244093929190612f50565b60405180910390a150505050505061095a60018055565b6002546040516302e6c26360e11b81526001600160a01b0383811660048301525f9216906305cd84c69060240161128d565b6124916129c8565b600755565b61249e61296f565b5f6124a833612457565b90506001600160a01b0381166125175760405162461bcd60e51b815260206004820152602e60248201527f596f7520646f206e6f74206861766520706572736f6e616c2077616c6c65742060448201526d30baba3432b73a34b1b0ba32b21760911b606482015260840161049e565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed90602401602060405180830381865afa15801561255f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125839190612ede565b90506001600160a01b03811633146125f85760405162461bcd60e51b815260206004820152603260248201527f596f7520646f206e6f74206861766520636f6e74726f6c206f7665722074686960448201527139903832b939b7b730b6103bb0b63632ba1760711b606482015260840161049e565b600254604051630bc7d91360e31b81523360048201525f916001600160a01b031690635e3ec89890602401602060405180830381865afa15801561263e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126629190612bec565b600254604051630bc7d91360e31b81526001600160a01b0386811660048301529293505f9290911690635e3ec89890602401602060405180830381865afa1580156126af573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126d39190612bec565b600254604051632875cd2b60e01b81529192506001600160a01b031690632875cd2b906127069086908590600401612c2c565b5f604051808303815f87803b15801561271d575f5ffd5b505af115801561272f573d5f5f3e3d5ffd5b50506002546040516311fa2c4960e01b8152600481018590526001600160a01b03878116602483015290911692506311fa2c4991506044015f604051808303815f87803b15801561277e575f5ffd5b505af1158015612790573d5f5f3e3d5ffd5b5050600254604051632875cd2b60e01b81526001600160a01b039091169250632875cd2b91506127c69087908690600401612c2c565b5f604051808303815f87803b1580156127dd575f5ffd5b505af11580156127ef573d5f5f3e3d5ffd5b50506002546040516311fa2c4960e01b8152600481018690526001600160a01b03888116602483015290911692506311fa2c4991506044015f604051808303815f87803b15801561283e575f5ffd5b505af1158015612850573d5f5f3e3d5ffd5b505060408051858152602081018590526001600160a01b038089169450871692507f1d5be8888e86a0f9d77e7d6375cd8a6824db2f90cd41d56455e437c8b4eb9fc3910160405180910390a3505050506109d960018055565b6128b16129c8565b6001600160a01b0381166128d75760405162461bcd60e51b815260040161049e90612c03565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6129016129c8565b6001600160a01b0381166129665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161049e565b6105d581612abd565b6002600154036129c15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161049e565b6002600155565b5f546001600160a01b031633146109d95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049e565b6001600160a01b0382165f908152600660205260409020548190612a459042612cad565b1015612aa15760405162461bcd60e51b815260206004820152602560248201527f4e6f6e2d5265656e7472616e742c20736c6f7720646f776e205458206174746560448201526436b83a399760d91b606482015260840161049e565b506001600160a01b03165f908152600660205260409020429055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518061064001604052806032906020820280368337509192915050565b6001600160a01b03811681146105d5575f5ffd5b5f60208284031215612b4f575f5ffd5b8135612b5a81612b2b565b9392505050565b5f5f60408385031215612b72575f5ffd5b50508035926020909101359150565b805f5b6032811015612ba3578151845260209384019390910190600101612b84565b50505050565b610ca08101612bb88286612b81565b612bc6610640830185612b81565b82610c80830152949350505050565b5f60208284031215612be5575f5ffd5b5035919050565b5f60208284031215612bfc575f5ffd5b5051919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156112cc576112cc612c45565b60208082526021908201527f6e6f7420656e6f7567682067656e65737472656e67746820746f20696e6675736040820152606560f81b606082015260800190565b818103818111156112cc576112cc612c45565b6001600160a01b039390931683526020830191909152604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff81118282101715612d1957612d19612ce1565b60405290565b5f6106408284031215612d30575f5ffd5b82601f830112612d3e575f5ffd5b604051610640810167ffffffffffffffff81118282101715612d6257612d62612ce1565b60405280610640840185811115612d77575f5ffd5b845b81811015612d91578051835260209283019201612d79565b509195945050505050565b5f6060828403128015612dad575f5ffd5b506040516060810167ffffffffffffffff81118282101715612dd157612dd1612ce1565b60409081528351825260208085015190830152928301519281019290925250919050565b5f610100828403128015612e07575f5ffd5b50612e10612cf5565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b6001600160a01b0384168152602081018390526101408101612ed66040830184612e63565b949350505050565b5f60208284031215612eee575f5ffd5b8151612b5a81612b2b565b6001600160a01b03841681526020810183905260a08101612ed660408301848051825260208082015190830152604090810151910152565b5f82612f4b57634e487b7160e01b5f52601260045260245ffd5b500690565b6101c08101612f5f8286612e63565b8351610100830152602084015161012083015260408401516101408301528251610160830152602083015161018083015260408301516101a0830152612ed656fea26469706673582212205fe51a119d9743b22adbb9956ed0c125d30078e05b4bb2dfdb8b17ff26becd6464736f6c634300081c0033
Deployed Bytecode Sourcemap
26822:17063:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40441:458;;;;;;:::i;:::-;;:::i;:::-;;26889:37;;;;;-1:-1:-1;;;;;26889:37:0;;;;;;-1:-1:-1;;;;;589:32:1;;;571:51;;559:2;544:18;26889:37:0;;;;;;;;28806:230;;;;;;:::i;:::-;;:::i;35198:1287::-;;;;;;:::i;:::-;;:::i;43338:179::-;;;:::i;38926:1021::-;;;;;;:::i;:::-;;:::i;39955:430::-;;;:::i;:::-;;;;;;;;;:::i;43155:177::-;;;:::i;40973:247::-;;;;;;:::i;:::-;;:::i;29528:257::-;;;:::i;37680:1238::-;;;;;;:::i;:::-;;:::i;26933:37::-;;;;;-1:-1:-1;;;;;26933:37:0;;;43523:165;;;;;;:::i;:::-;;:::i;41228:549::-;;;;;;:::i;:::-;;:::i;33530:1660::-;;;;;;:::i;:::-;;:::i;2788:103::-;;;:::i;36499:1171::-;;;;;;:::i;:::-;;:::i;2140:87::-;2186:7;2213:6;-1:-1:-1;;;;;2213:6:0;2140:87;;30946:292;;;:::i;29042:231::-;;;;;;:::i;:::-;;:::i;28566:234::-;;;;;;:::i;:::-;;:::i;31335:2139::-;;;;;;:::i;:::-;;:::i;43694:182::-;;;;;;:::i;:::-;;:::i;29868:112::-;;;;;;:::i;:::-;;:::i;41984:1157::-;;;:::i;26977:37::-;;;;;-1:-1:-1;;;;;26977:37:0;;;29279:241;;;;;;:::i;:::-;;:::i;27021:43::-;;;;;-1:-1:-1;;;;;27021:43:0;;;3046:201;;;;;;:::i;:::-;;:::i;40441:458::-;7139:21;:19;:21::i;:::-;40539:15:::1;::::0;:39:::1;::::0;-1:-1:-1;;;40539:39:0;;-1:-1:-1;;;;;589:32:1;;;40539:39:0::1;::::0;::::1;571:51:1::0;40539:15:0;;::::1;::::0;:23:::1;::::0;544:18:1;;40539:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44:::0;40531:98:::1;;;::::0;-1:-1:-1;;;40531:98:0;;3334:2:1;40531:98:0::1;::::0;::::1;3316:21:1::0;3373:2;3353:18;;;3346:30;3412:34;3392:18;;;3385:62;-1:-1:-1;;;3463:18:1;;;3456:39;3512:19;;40531:98:0::1;;;;;;;;;40706:15;::::0;:35:::1;::::0;-1:-1:-1;;;40706:35:0;;40663:10:::1;40706:35;::::0;::::1;571:51:1::0;;;40663:10:0;40642:18:::1;::::0;-1:-1:-1;;;;;40706:15:0;;::::1;::::0;:23:::1;::::0;544:18:1;;40706:35:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40684:57;;40760:14;40778:1;40760:19:::0;40752:62:::1;;;::::0;-1:-1:-1;;;40752:62:0;;3744:2:1;40752:62:0::1;::::0;::::1;3726:21:1::0;3783:2;3763:18;;;3756:30;3822:32;3802:18;;;3795:60;3872:18;;40752:62:0::1;3542:354:1::0;40752:62:0::1;40835:15;::::0;:54:::1;::::0;-1:-1:-1;;;40835:54:0;;-1:-1:-1;;;;;4093:32:1;;;40835:54:0::1;::::0;::::1;4075:51:1::0;4162:32;;;4142:18;;;4135:60;40835:15:0;;::::1;::::0;:27:::1;::::0;4048:18:1;;40835:54:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40515:384;;7183:20:::0;6577:1;7703:22;;7520:213;7183:20;40441:458;:::o;28806:230::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;28909:34:0;::::1;28901:62;;;;-1:-1:-1::0;;;28901:62:0::1;;;;;;;:::i;:::-;28974:11;:54:::0;;-1:-1:-1;;;;;;28974:54:0::1;-1:-1:-1::0;;;;;28974:54:0;;;::::1;::::0;;;::::1;::::0;;28806:230::o;35198:1287::-;7139:21;:19;:21::i;:::-;35296::::1;35320:25;:23;:25::i;:::-;35296:49;;35359:37;35378:13;35394:1;35359:18;:37::i;:::-;35429:2;35416:10;:15;35407:46;;;::::0;-1:-1:-1;;;35407:46:0;;4752:2:1;35407:46:0::1;::::0;::::1;4734:21:1::0;4791:2;4771:18;;;4764:30;-1:-1:-1;;;4810:18:1;;;4803:47;4867:18;;35407:46:0::1;4550:341:1::0;35407:46:0::1;35490:1;35473:13;:18;;35464:59;;;::::0;-1:-1:-1;;;35464:59:0;;5098:2:1;35464:59:0::1;::::0;::::1;5080:21:1::0;5137:2;5117:18;;;5110:30;5176:29;5156:18;;;5149:57;5223:18;;35464:59:0::1;4896:351:1::0;35464:59:0::1;35627:15;::::0;:63:::1;::::0;-1:-1:-1;;;35627:63:0;;35605:19:::1;::::0;-1:-1:-1;;;;;35627:15:0::1;::::0;:37:::1;::::0;:63:::1;::::0;35665:13;;35679:10;;35627:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35605:85;;35705:10;35719:1;35705:15:::0;35701:284:::1;;35810:15;:13:::0;35824:1:::1;35810:15;:::i;:::-;35792:14;:33;;35784:79;;;;-1:-1:-1::0;;;35784:79:0::1;;;;;;;:::i;:::-;35701:284;;;35922:13;35904:14;:31;;35896:77;;;;-1:-1:-1::0;;;35896:77:0::1;;;;;;;:::i;:::-;36036:15;::::0;-1:-1:-1;;;;;36036:15:0::1;:37;36074:13:::0;36089:10;36101:31:::1;36119:13:::0;36101:31;::::1;:::i;:::-;;;;36036:97;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;36205:15:0::1;::::0;:69:::1;::::0;-1:-1:-1;;;36205:69:0;;36186:16:::1;::::0;-1:-1:-1;;;;;;36205:15:0;;::::1;::::0;-1:-1:-1;36205:42:0::1;::::0;:69:::1;::::0;36248:13;;36263:10;;36205:69:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36285:15;::::0;36186:88;;-1:-1:-1;;;;;;36285:15:0::1;:42;36328:13:::0;36342:10;36353:25:::1;36365:13:::0;36186:88;36353:25:::1;:::i;:::-;36285:94;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;36390:15:0::1;::::0;:85:::1;::::0;-1:-1:-1;;;36390:85:0;;-1:-1:-1;;;;;36390:15:0;;::::1;::::0;-1:-1:-1;36390:43:0::1;::::0;-1:-1:-1;36390:85:0::1;::::0;36434:13;;36448:10;;36459:15:::1;::::0;36390:85:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35285:1200;;;7183:20:::0;6577:1;7703:22;;7520:213;7183:20;35198:1287;;:::o;43338:179::-;7139:21;:19;:21::i;:::-;43411:32:::1;43430:10;43441:1;43411:18;:32::i;:::-;43454:15;::::0;:55:::1;::::0;-1:-1:-1;;;43454:55:0;;43487:10:::1;43454:55;::::0;::::1;4075:51:1::0;43454:15:0::1;4142:18:1::0;;;4135:60;-1:-1:-1;;;;;43454:15:0;;::::1;::::0;:32:::1;::::0;4048:18:1;;43454:55:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:20:::0;6577:1;7703:22;;7520:213;7183:20;43338:179::o;38926:1021::-;7139:21;:19;:21::i;:::-;39194::::1;39218:25;:23;:25::i;:::-;39194:49;;39257:37;39276:13;39292:1;39257:18;:37::i;:::-;39307:17;39327:15;:9:::0;39339:3:::1;39327:15;:::i;:::-;39466:13;::::0;;:51:::1;::::0;-1:-1:-1;;;39466:51:0;;39307:35;;-1:-1:-1;39521:13:0;;-1:-1:-1;;;;;39466:13:0;;::::1;::::0;:23:::1;::::0;:51:::1;::::0;39490:13;;39307:35;;39466:51:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;;39458:126;;;::::0;-1:-1:-1;;;39458:126:0;;6880:2:1;39458:126:0::1;::::0;::::1;6862:21:1::0;6919:2;6899:18;;;6892:30;6958:34;6938:18;;;6931:62;-1:-1:-1;;;7009:18:1;;;7002:43;7062:19;;39458:126:0::1;6678:409:1::0;39458:126:0::1;39617:13;::::0;;:62:::1;::::0;-1:-1:-1;;;39617:62:0;;-1:-1:-1;;;;;39617:13:0;;::::1;::::0;:18:::1;::::0;:62:::1;::::0;39636:13;;39651:12;;39665:13;;39617:62:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;39762:15:0::1;::::0;:63:::1;::::0;-1:-1:-1;;;39762:63:0;;39732:27:::1;::::0;-1:-1:-1;;;;;;39762:15:0;;::::1;::::0;-1:-1:-1;39762:37:0::1;::::0;:63:::1;::::0;39800:13;;39815:9;;39762:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39836:15;::::0;39732:93;;-1:-1:-1;;;;;;39836:15:0::1;:37;39874:13:::0;39889:9;39900:36:::1;39923:13:::0;39732:93;39900:36:::1;:::i;:::-;39836:101;;;;;;;;;;;;;;;;;:::i;39955:430::-:0;40013:28;;:::i;:::-;40043:33;;:::i;:::-;40079:18;40109:21;40133:25;:23;:25::i;:::-;40184:15;;:60;;-1:-1:-1;;;40184:60:0;;-1:-1:-1;;;;;589:32:1;;;40184:60:0;;;571:51:1;40109:49:0;;-1:-1:-1;40184:15:0;;;:45;;544:18:1;;40184:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40275:15;;:61;;-1:-1:-1;;;40275:61:0;;-1:-1:-1;;;;;589:32:1;;;40275:61:0;;;571:51:1;40169:75:0;;-1:-1:-1;40275:15:0;;;:46;;544:18:1;;40275:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40255:81;;40363:12;;40347:28;;40098:287;39955:430;;;:::o;43155:177::-;7139:21;:19;:21::i;:::-;43225:32:::1;43244:10;43255:1;43225:18;:32::i;:::-;43268:15;::::0;:56:::1;::::0;-1:-1:-1;;;43268:56:0;;43302:10:::1;43268:56;::::0;::::1;4075:51:1::0;43268:15:0::1;4142:18:1::0;;;4135:60;-1:-1:-1;;;;;43268:15:0;;::::1;::::0;:33:::1;::::0;4048:18:1;;43268:56:0::1;3901:300:1::0;40973:247:0;7139:21;:19;:21::i;:::-;41091:10:::1;41112:34;41091:10:::0;41144:1:::1;41112:18;:34::i;:::-;41157:15;::::0;:55:::1;::::0;-1:-1:-1;;;41157:55:0;;-1:-1:-1;;;;;4093:32:1;;;41157:55:0::1;::::0;::::1;4075:51:1::0;4162:32;;;4142:18;;;4135:60;41157:15:0;;::::1;::::0;:32:::1;::::0;4048:18:1;;41157:55:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41059:161;7183:20:::0;6577:1;7703:22;;7520:213;29528:257;2026:13;:11;:13::i;:::-;29685:1:::1;29661:21;:25;29653:62;;;::::0;-1:-1:-1;;;29653:62:0;;8526:2:1;29653:62:0::1;::::0;::::1;8508:21:1::0;8565:2;8545:18;;;8538:30;8604:26;8584:18;;;8577:54;8648:18;;29653:62:0::1;8324:348:1::0;29653:62:0::1;29726:51;::::0;29734:10:::1;::::0;29755:21:::1;29726:51:::0;::::1;;;::::0;::::1;::::0;;;29755:21;29734:10;29726:51;::::1;;;;;;;;;;;;;;;;;;37680:1238:::0;7139:21;:19;:21::i;:::-;37771::::1;37795:25;:23;:25::i;:::-;37771:49;;37834:37;37853:13;37869:1;37834:18;:37::i;:::-;38000:15;::::0;:40:::1;::::0;-1:-1:-1;;;38000:40:0;;-1:-1:-1;;;;;589:32:1;;;38000:40:0::1;::::0;::::1;571:51:1::0;37986:11:0::1;::::0;38000:15:::1;::::0;:25:::1;::::0;544:18:1;;38000:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37986:54;;38090:6;38082:5;:14;38074:53;;;::::0;-1:-1:-1;;;38074:53:0;;8879:2:1;38074:53:0::1;::::0;::::1;8861:21:1::0;8918:2;8898:18;;;8891:30;8957:28;8937:18;;;8930:56;9003:18;;38074:53:0::1;8677:350:1::0;38074:53:0::1;38169:15;::::0;:52:::1;::::0;-1:-1:-1;;;38169:52:0;;38140:26:::1;::::0;-1:-1:-1;;;;;38169:15:0::1;::::0;:30:::1;::::0;:52:::1;::::0;38200:13;;38215:5;;38169:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38240:13:::0;;38140:81;;-1:-1:-1;38232:57:0::1;;;::::0;-1:-1:-1;;;38232:57:0;;10004:2:1;38232:57:0::1;::::0;::::1;9986:21:1::0;10043:2;10023:18;;;10016:30;10082:29;10062:18;;;10055:57;10129:18;;38232:57:0::1;9802:351:1::0;38232:57:0::1;38328:15;::::0;:49:::1;::::0;-1:-1:-1;;;38328:49:0;;38302:23:::1;::::0;-1:-1:-1;;;;;38328:15:0::1;::::0;:27:::1;::::0;:49:::1;::::0;38356:13;;38371:5;;38328:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38302:75;;38422:1;38396:9;:22;;;:27;;38388:79;;;::::0;-1:-1:-1;;;38388:79:0;;11506:2:1;38388:79:0::1;::::0;::::1;11488:21:1::0;11545:2;11525:18;;;11518:30;11584:34;11564:18;;;11557:62;-1:-1:-1;;;11635:18:1;;;11628:37;11682:19;;38388:79:0::1;11304:403:1::0;38388:79:0::1;38534:16;::::0;38575:13;;38534:56:::1;::::0;-1:-1:-1;;;38534:56:0;;38594:13;;-1:-1:-1;;;;;38534:16:0::1;::::0;:26:::1;::::0;:56:::1;::::0;38561:13;;38534:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;38526:122;;;::::0;-1:-1:-1;;;38526:122:0;;11914:2:1;38526:122:0::1;::::0;::::1;11896:21:1::0;11953:2;11933:18;;;11926:30;11992:34;11972:18;;;11965:62;-1:-1:-1;;;12043:18:1;;;12036:34;12087:19;;38526:122:0::1;11712:400:1::0;38526:122:0::1;38659:16;::::0;38696:13;;38659:66:::1;::::0;-1:-1:-1;;;38659:66:0;;-1:-1:-1;;;;;38659:16:0;;::::1;::::0;:21:::1;::::0;:66:::1;::::0;38681:13;;38696;38711;;38659:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38826:13;38800:9;:22;;:39;;;;;;;:::i;:::-;::::0;;-1:-1:-1;38850:15:0::1;::::0;:60:::1;::::0;-1:-1:-1;;;38850:60:0;;-1:-1:-1;;;;;38850:15:0;;::::1;::::0;:27:::1;::::0;:60:::1;::::0;38878:13;;38893:5;;38900:9;;38850:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37760:1158;;;;7183:20:::0;6577:1;7703:22;;7520:213;43523:165;43639:15;;:41;;-1:-1:-1;;;43639:41:0;;-1:-1:-1;;;;;589:32:1;;;43639:41:0;;;571:51:1;43595:18:0;;43639:15;;:29;;544:18:1;;43639:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43626:54;43523:165;-1:-1:-1;;43523:165:0:o;41228:549::-;7139:21;:19;:21::i;:::-;41377:34:::1;41396:10;41409:1;41377:18;:34::i;:::-;41449:15;::::0;:41:::1;::::0;-1:-1:-1;;;41449:41:0;;-1:-1:-1;;;;;589:32:1;;;41449:41:0::1;::::0;::::1;571:51:1::0;41422:24:0::1;::::0;41449:15:::1;::::0;:29:::1;::::0;544:18:1;;41449:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41422:68:::0;-1:-1:-1;41522:10:0::1;-1:-1:-1::0;;;;;41551:30:0;::::1;::::0;::::1;41543:92;;;::::0;-1:-1:-1;;;41543:92:0;;13470:2:1;41543:92:0::1;::::0;::::1;13452:21:1::0;13509:2;13489:18;;;13482:30;13548:34;13528:18;;;13521:62;-1:-1:-1;;;13599:18:1;;;13592:47;13656:19;;41543:92:0::1;13268:413:1::0;41543:92:0::1;41713:15;::::0;:56:::1;::::0;-1:-1:-1;;;41713:56:0;;-1:-1:-1;;;;;4093:32:1;;;41713:56:0::1;::::0;::::1;4075:51:1::0;4162:32;;;4142:18;;;4135:60;41713:15:0;;::::1;::::0;:33:::1;::::0;4048:18:1;;41713:56:0::1;3901:300:1::0;33530:1660:0;7139:21;:19;:21::i;:::-;33620::::1;33644:25;:23;:25::i;:::-;33620:49;;33683:37;33702:13;33718:1;33683:18;:37::i;:::-;33762:15;::::0;:52:::1;::::0;-1:-1:-1;;;33762:52:0;;33733:26:::1;::::0;-1:-1:-1;;;;;33762:15:0::1;::::0;:30:::1;::::0;:52:::1;::::0;33793:13;;33808:5;;33762:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33833:13:::0;;33733:81;;-1:-1:-1;33825:59:0::1;;;::::0;-1:-1:-1;;;33825:59:0;;13888:2:1;33825:59:0::1;::::0;::::1;13870:21:1::0;13927:2;13907:18;;;13900:30;13966:31;13946:18;;;13939:59;14015:18;;33825:59:0::1;13686:353:1::0;33825:59:0::1;33923:15;::::0;:49:::1;::::0;-1:-1:-1;;;33923:49:0;;33897:23:::1;::::0;-1:-1:-1;;;;;33923:15:0::1;::::0;:27:::1;::::0;:49:::1;::::0;33951:13;;33966:5;;33923:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33897:75;;34017:13;33991:9;:22;;;:39;;33983:85;;;;-1:-1:-1::0;;;33983:85:0::1;;;;;;;:::i;:::-;34089:27;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34089:27:0::1;34127:30;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;34127:30:0::1;34168:26;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;34168:26:0::1;34237:13;34211:9;:22;;;:39:::0;34207:974:::1;;34344:15;::::0;:64:::1;::::0;-1:-1:-1;;;34344:64:0;;-1:-1:-1;;;;;34344:15:0;;::::1;::::0;:27:::1;::::0;:64:::1;::::0;34372:13;;34387:5;;34394:13;;34344:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34423:15:0::1;::::0;:68:::1;::::0;-1:-1:-1;;;34423:68:0;;-1:-1:-1;;;;;34423:15:0;;::::1;::::0;-1:-1:-1;34423:30:0::1;::::0;-1:-1:-1;34423:68:0::1;::::0;34454:13;;34468:5;;34476:14;;34423:68:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34506:15:0::1;::::0;:63:::1;::::0;-1:-1:-1;;;34506:63:0;;-1:-1:-1;;;;;34506:15:0;;::::1;::::0;-1:-1:-1;34506:27:0::1;::::0;-1:-1:-1;34506:63:0::1;::::0;34534:13;;34549:5;;34556:12;;34506:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34584:15:0::1;::::0;:76:::1;::::0;-1:-1:-1;;;34584:76:0;;-1:-1:-1;;;;;34584:15:0;;::::1;::::0;-1:-1:-1;34584:39:0::1;::::0;-1:-1:-1;34584:76:0::1;::::0;34624:13;;34639:5;;34646:13;;34584:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34723:16:0::1;::::0;34775:13;;34723:66:::1;::::0;-1:-1:-1;;;34723:66:0;;::::1;::::0;::::1;15280:25:1::0;;;-1:-1:-1;;;;;15341:32:1;;;15321:18;;;15314:60;15390:18;;;15383:34;;;;34723:16:0;::::1;::::0;-1:-1:-1;34723:21:0::1;::::0;-1:-1:-1;15253:18:1;;34723:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34207:974;;;34952:13;34926:9;:22;;:39;;;;;;;:::i;:::-;::::0;;-1:-1:-1;34980:15:0::1;::::0;:60:::1;::::0;-1:-1:-1;;;34980:60:0;;-1:-1:-1;;;;;34980:15:0;;::::1;::::0;:27:::1;::::0;:60:::1;::::0;35008:13;;35023:5;;35030:9;;34980:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;35103:16:0::1;::::0;35155:13;;35103:66:::1;::::0;-1:-1:-1;;;35103:66:0;;::::1;::::0;::::1;15280:25:1::0;;;-1:-1:-1;;;;;15341:32:1;;;15321:18;;;15314:60;15390:18;;;15383:34;;;;35103:16:0;::::1;::::0;-1:-1:-1;35103:21:0::1;::::0;-1:-1:-1;15253:18:1;;35103:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34207:974;33609:1581;;;;;;7183:20:::0;6577:1;7703:22;;7520:213;2788:103;2026:13;:11;:13::i;:::-;2853:30:::1;2880:1;2853:18;:30::i;36499:1171::-:0;7139:21;:19;:21::i;:::-;36578::::1;36602:25;:23;:25::i;:::-;36578:49;;36641:37;36660:13;36676:1;36641:18;:37::i;:::-;36709:15;::::0;:74:::1;::::0;-1:-1:-1;;;36709:74:0;;36691:15:::1;::::0;-1:-1:-1;;;;;36709:15:0::1;::::0;:43:::1;::::0;:74:::1;::::0;36753:13;;36767:15;;36709:74:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36691:92;;36834:12;;36821:10;:25;;;;:::i;:::-;36802:15;:44;;36794:72;;;::::0;-1:-1:-1;;;36794:72:0;;15630:2:1;36794:72:0::1;::::0;::::1;15612:21:1::0;15669:2;15649:18;;;15642:30;-1:-1:-1;;;15688:18:1;;;15681:45;15743:18;;36794:72:0::1;15428:339:1::0;36794:72:0::1;37000:15;::::0;:74:::1;::::0;-1:-1:-1;;;37000:74:0;;36981:16:::1;::::0;-1:-1:-1;;;;;37000:15:0::1;::::0;:42:::1;::::0;:74:::1;::::0;37043:13;;37058:15;;37000:74:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36981:93;;37107:1;37093:11;:15;37085:47;;;::::0;-1:-1:-1;;;37085:47:0;;15974:2:1;37085:47:0::1;::::0;::::1;15956:21:1::0;16013:2;15993:18;;;15986:30;-1:-1:-1;;;16032:18:1;;;16025:50;16092:18;;37085:47:0::1;15772:344:1::0;37085:47:0::1;37226:15;::::0;:75:::1;::::0;-1:-1:-1;;;37226:75:0;;-1:-1:-1;;;;;37226:15:0;;::::1;::::0;:42:::1;::::0;:75:::1;::::0;37269:13;;37283:15;;37226::::1;::::0;:75:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;37312:15:0::1;::::0;:76:::1;::::0;-1:-1:-1;;;37312:76:0;;-1:-1:-1;;;;;37312:15:0;;::::1;::::0;-1:-1:-1;37312:43:0::1;::::0;-1:-1:-1;37312:76:0::1;::::0;37356:13;;37370:15;;37312::::1;::::0;:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37463:11;37570:15;37588:3;37570:21;;;;:::i;:::-;37602:13;::::0;;:54:::1;::::0;-1:-1:-1;;;37602:54:0;;;;::::1;15280:25:1::0;;;-1:-1:-1;;;;;15341:32:1;;;15321:18;;;15314:60;15390:18;;;15383:34;;;37561:30:0;;-1:-1:-1;37602:13:0;;;::::1;::::0;:18:::1;::::0;15253::1;;37602:54:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36567:1103;;;;7183:20:::0;6577:1;7703:22;;7520:213;30946:292;31048:15;;:42;;-1:-1:-1;;;31048:42:0;;31079:10;31048:42;;;571:51:1;31002:7:0;;;;-1:-1:-1;;;;;31048:15:0;;;;:30;;544:18:1;;31048:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31024:66;-1:-1:-1;;;;;;31105:27:0;;31101:130;;31156:10;31149:17;;;30946:292;:::o;31101:130::-;31206:13;30946:292;-1:-1:-1;30946:292:0:o;29042:231::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;29146:34:0;::::1;29138:62;;;;-1:-1:-1::0;;;29138:62:0::1;;;;;;;:::i;:::-;29211:13;:54:::0;;-1:-1:-1;;;;;;29211:54:0::1;-1:-1:-1::0;;;;;29211:54:0;;;::::1;::::0;;;::::1;::::0;;29042:231::o;28566:234::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;28673:34:0;::::1;28665:62;;;;-1:-1:-1::0;;;28665:62:0::1;;;;;;;:::i;:::-;28738:15;:54:::0;;-1:-1:-1;;;;;;28738:54:0::1;-1:-1:-1::0;;;;;28738:54:0;;;::::1;::::0;;;::::1;::::0;;28566:234::o;31335:2139::-;7139:21;:19;:21::i;:::-;31420::::1;31444:25;:23;:25::i;:::-;31420:49;;31483:37;31502:13;31518:1;31483:18;:37::i;:::-;31615:15;::::0;:40:::1;::::0;-1:-1:-1;;;31615:40:0;;-1:-1:-1;;;;;589:32:1;;;31615:40:0::1;::::0;::::1;571:51:1::0;31601:11:0::1;::::0;31615:15:::1;::::0;:25:::1;::::0;544:18:1;;31615:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31601:54;;31705:6;31697:5;:14;31689:53;;;::::0;-1:-1:-1;;;31689:53:0;;8879:2:1;31689:53:0::1;::::0;::::1;8861:21:1::0;8918:2;8898:18;;;8891:30;8957:28;8937:18;;;8930:56;9003:18;;31689:53:0::1;8677:350:1::0;31689:53:0::1;31792:15;::::0;:52:::1;::::0;-1:-1:-1;;;31792:52:0;;31763:26:::1;::::0;-1:-1:-1;;;;;31792:15:0::1;::::0;:30:::1;::::0;:52:::1;::::0;31823:13;;31838:5;;31792:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31863:13:::0;;31763:81;;-1:-1:-1;31863:18:0;31855:55:::1;;;::::0;-1:-1:-1;;;31855:55:0;;16681:2:1;31855:55:0::1;::::0;::::1;16663:21:1::0;16720:2;16700:18;;;16693:30;16759:26;16739:18;;;16732:54;16803:18;;31855:55:0::1;16479:348:1::0;31855:55:0::1;31969:16;::::0;:48:::1;::::0;-1:-1:-1;;;31969:48:0;;32021:1:::1;::::0;-1:-1:-1;;;;;31969:16:0::1;::::0;:26:::1;::::0;:48:::1;::::0;31996:13;;32010:6;;31969:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;31961:109;;;::::0;-1:-1:-1;;;31961:109:0;;17034:2:1;31961:109:0::1;::::0;::::1;17016:21:1::0;17073:2;17053:18;;;17046:30;17112:34;17092:18;;;17085:62;-1:-1:-1;;;17163:18:1;;;17156:41;17214:19;;31961:109:0::1;16832:407:1::0;31961:109:0::1;32081:16;::::0;:47:::1;::::0;-1:-1:-1;;;32081:47:0;;-1:-1:-1;;;;;32081:16:0;;::::1;::::0;:21:::1;::::0;:47:::1;::::0;32103:13;;32118:6;;32081:16;;:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32235:155:0::1;::::0;;::::1;::::0;::::1;::::0;;32248:4:::1;32235:155:::0;;32262:3:::1;32235:155;::::0;::::1;::::0;;;32276:2:::1;32235:155:::0;;;;;;;;;;;;;;32325:1:::1;32235:155:::0;;;;32335:11:::1;::::0;:42;;-1:-1:-1;;;32335:42:0;;::::1;::::0;::::1;17748:25:1::0;;;-1:-1:-1;;;32235:155:0;;-1:-1:-1;32235:155:0;;;;-1:-1:-1;;;;;32335:11:0::1;::::0;:34:::1;::::0;17721:18:1;;32335:42:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32235:155:::0;;32387:1:::1;32235:155;::::0;;::::1;::::0;32414:11:::1;::::0;:44:::1;::::0;-1:-1:-1;;;32414:44:0;;::::1;::::0;::::1;17748:25:1::0;;;32210:180:0;;-1:-1:-1;;;;;;32414:11:0::1;::::0;:36:::1;::::0;17721:18:1;;32414:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32401:57;;32473:10;:16;;;32493:1;32473:21:::0;32469:79:::1;;32511:16;::::0;::::1;:25:::0;;;32469:79:::1;32558:22;32584:114;;;;;;;;32598:1;32584:114;;;;27925:8;32610:15;:37;;;;:::i;:::-;32584:114:::0;;::::1;;32657:39;27996:7;32657:15;:39;:::i;:::-;32584:114:::0;;32711:15:::1;::::0;:59:::1;::::0;-1:-1:-1;;;32711:59:0;;32558:140;;-1:-1:-1;;;;;;32711:15:0::1;::::0;:27:::1;::::0;:59:::1;::::0;32739:13;;32754:5;;32761:8;;32711:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32781:15:0::1;::::0;:64:::1;::::0;-1:-1:-1;;;32781:64:0;;-1:-1:-1;;;;;32781:15:0;;::::1;::::0;-1:-1:-1;32781:30:0::1;::::0;-1:-1:-1;32781:64:0::1;::::0;32812:13;;32826:5;;32834:10;;32781:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32856:15:0::1;::::0;:59:::1;::::0;-1:-1:-1;;;32856:59:0;;-1:-1:-1;;;;;32856:15:0;;::::1;::::0;-1:-1:-1;32856:27:0::1;::::0;-1:-1:-1;32856:59:0::1;::::0;32884:13;;32899:5;;32906:8;;32856:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32926:15:0::1;::::0;32988:11:::1;::::0;33012:13;;32988:38:::1;::::0;-1:-1:-1;;;32988:38:0;;::::1;::::0;::::1;17748:25:1::0;;;;-1:-1:-1;;;;;32926:15:0;;::::1;::::0;-1:-1:-1;32926:39:0::1;::::0;-1:-1:-1;32966:13:0;;32981:5;;32988:11:::1;::::0;:23:::1;::::0;17721:18:1;;32988:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32926:101;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;33184:15:0::1;::::0;:40:::1;::::0;-1:-1:-1;;;33184:40:0;;-1:-1:-1;;;;;589:32:1;;;33184:40:0::1;::::0;::::1;571:51:1::0;33169:12:0::1;::::0;-1:-1:-1;33184:15:0;;::::1;::::0;-1:-1:-1;33184:25:0::1;::::0;544:18:1;;33184:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33313:13:::0;;33169:55;;-1:-1:-1;33313:19:0::1;::::0;33327:5:::1;::::0;33313:19:::1;:::i;:::-;33345:15;::::0;:48:::1;::::0;-1:-1:-1;;;33345:48:0;;33307:1:::1;:26:::0;;::::1;33295:39:::0;;;::::1;::::0;-1:-1:-1;;;;;33345:15:0::1;::::0;:25:::1;::::0;:48:::1;::::0;33371:13;;33295:39;;33345:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33419:47;33437:8;33446:10;33457:8;33419:47;;;;;;;;:::i;:::-;;;;;;;;31409:2065;;;;;;7183:20:::0;6577:1;7703:22;;7520:213;43694:182;43826:15;;:42;;-1:-1:-1;;;43826:42:0;;-1:-1:-1;;;;;589:32:1;;;43826:42:0;;;571:51:1;43764:27:0;;43826:15;;:30;;544:18:1;;43826:42:0;402:226:1;29868:112:0;2026:13;:11;:13::i;:::-;29949:12:::1;:23:::0;29868:112::o;41984:1157::-;7139:21;:19;:21::i;:::-;42120:22:::1;42145:31;42165:10;42145:19;:31::i;:::-;42120:56:::0;-1:-1:-1;;;;;;42195:28:0;::::1;42187:87;;;::::0;-1:-1:-1;;;42187:87:0;;18709:2:1;42187:87:0::1;::::0;::::1;18691:21:1::0;18748:2;18728:18;;;18721:30;18787:34;18767:18;;;18760:62;-1:-1:-1;;;18838:18:1;;;18831:44;18892:19;;42187:87:0::1;18507:410:1::0;42187:87:0::1;42402:15;::::0;:45:::1;::::0;-1:-1:-1;;;42402:45:0;;-1:-1:-1;;;;;589:32:1;;;42402:45:0::1;::::0;::::1;571:51:1::0;42376:23:0::1;::::0;42402:15:::1;::::0;:29:::1;::::0;544:18:1;;42402:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42376:71:::0;-1:-1:-1;;;;;;42466:29:0;::::1;42485:10;42466:29;42458:92;;;::::0;-1:-1:-1;;;42458:92:0;;19124:2:1;42458:92:0::1;::::0;::::1;19106:21:1::0;19163:2;19143:18;;;19136:30;19202:34;19182:18;;;19175:62;-1:-1:-1;;;19253:18:1;;;19246:48;19311:19;;42458:92:0::1;18922:414:1::0;42458:92:0::1;42622:15;::::0;:35:::1;::::0;-1:-1:-1;;;42622:35:0;;42646:10:::1;42622:35;::::0;::::1;571:51:1::0;42604:15:0::1;::::0;-1:-1:-1;;;;;42622:15:0::1;::::0;:23:::1;::::0;544:18:1;;42622:35:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42687:15;::::0;:39:::1;::::0;-1:-1:-1;;;42687:39:0;;-1:-1:-1;;;;;589:32:1;;;42687:39:0::1;::::0;::::1;571:51:1::0;42604:53:0;;-1:-1:-1;42668:16:0::1;::::0;42687:15;;::::1;::::0;:23:::1;::::0;544:18:1;;42687:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42739:15;::::0;:56:::1;::::0;-1:-1:-1;;;42739:56:0;;42668:58;;-1:-1:-1;;;;;;42739:15:0::1;::::0;:26:::1;::::0;:56:::1;::::0;42766:15;;42668:58;;42739:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;42806:15:0::1;::::0;:61:::1;::::0;-1:-1:-1;;;42806:61:0;;::::1;::::0;::::1;19515:25:1::0;;;-1:-1:-1;;;;;19576:32:1;;;19556:18;;;19549:60;42806:15:0;;::::1;::::0;-1:-1:-1;42806:30:0::1;::::0;-1:-1:-1;19488:18:1;;42806:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;42880:15:0::1;::::0;:54:::1;::::0;-1:-1:-1;;;42880:54:0;;-1:-1:-1;;;;;42880:15:0;;::::1;::::0;-1:-1:-1;42880:26:0::1;::::0;-1:-1:-1;42880:54:0::1;::::0;42907:14;;42923:10;;42880:54:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;42945:15:0::1;::::0;:59:::1;::::0;-1:-1:-1;;;42945:59:0;;::::1;::::0;::::1;19515:25:1::0;;;-1:-1:-1;;;;;19576:32:1;;;19556:18;;;19549:60;42945:15:0;;::::1;::::0;-1:-1:-1;42945:30:0::1;::::0;-1:-1:-1;19488:18:1;;42945:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;43065:68:0::1;::::0;;19794:25:1;;;19850:2;19835:18;;19828:34;;;-1:-1:-1;;;;;43065:68:0;;::::1;::::0;-1:-1:-1;43065:68:0;::::1;::::0;-1:-1:-1;43065:68:0::1;::::0;19767:18:1;43065:68:0::1;;;;;;;42045:1096;;;;7183:20:::0;6577:1;7703:22;;7520:213;29279:241;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;29387:34:0;::::1;29379:62;;;;-1:-1:-1::0;;;29379:62:0::1;;;;;;;:::i;:::-;29452:16;:60:::0;;-1:-1:-1;;;;;;29452:60:0::1;-1:-1:-1::0;;;;;29452:60:0;;;::::1;::::0;;;::::1;::::0;;29279:241::o;3046:201::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;3135:22:0;::::1;3127:73;;;::::0;-1:-1:-1;;;3127:73:0;;20075:2:1;3127:73:0::1;::::0;::::1;20057:21:1::0;20114:2;20094:18;;;20087:30;20153:34;20133:18;;;20126:62;-1:-1:-1;;;20204:18:1;;;20197:36;20250:19;;3127:73:0::1;19873:402:1::0;3127:73:0::1;3211:28;3230:8;3211:18;:28::i;7219:293::-:0;6621:1;7353:7;;:19;7345:63;;;;-1:-1:-1;;;7345:63:0;;20482:2:1;7345:63:0;;;20464:21:1;20521:2;20501:18;;;20494:30;20560:33;20540:18;;;20533:61;20611:18;;7345:63:0;20280:355:1;7345:63:0;6621:1;7486:7;:18;7219:293::o;2305:132::-;2186:7;2213:6;-1:-1:-1;;;;;2213:6:0;765:10;2369:23;2361:68;;;;-1:-1:-1;;;2361:68:0;;20842:2:1;2361:68:0;;;20824:21:1;;;20861:18;;;20854:30;20920:34;20900:18;;;20893:62;20972:18;;2361:68:0;20640:356:1;30483:441:0;-1:-1:-1;;;;;30787:22:0;;;;;;:14;:22;;;;;;30813:11;;30769:40;;:15;:40;:::i;:::-;:55;;30761:104;;;;-1:-1:-1;;;30761:104:0;;21203:2:1;30761:104:0;;;21185:21:1;21242:2;21222:18;;;21215:30;21281:34;21261:18;;;21254:62;-1:-1:-1;;;21332:18:1;;;21325:35;21377:19;;30761:104:0;21001:401:1;30761:104:0;-1:-1:-1;;;;;;30876:22:0;;;;;:14;:22;;;;;30901:15;30876:40;;30483:441::o;3407:191::-;3481:16;3500:6;;-1:-1:-1;;;;;3517:17:0;;;-1:-1:-1;;;;;;3517:17:0;;;;;;3550:40;;3500:6;;;;;;;3550:40;;3481:16;3550:40;3470:128;3407:191;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;633:346::-;701:6;709;762:2;750:9;741:7;737:23;733:32;730:52;;;778:1;775;768:12;730:52;-1:-1:-1;;823:23:1;;;943:2;928:18;;;915:32;;-1:-1:-1;633:346:1:o;984:303::-;1077:5;1100:1;1110:171;1124:4;1121:1;1118:11;1110:171;;;1183:13;;1171:26;;1226:4;1217:14;;;;1254:17;;;;1144:1;1137:9;1110:171;;;1114:3;;984:303;;:::o;1292:457::-;1578:4;1563:20;;1592:43;1567:9;1617:6;1592:43;:::i;:::-;1644:54;1692:4;1681:9;1677:20;1669:6;1644:54;:::i;:::-;1736:6;1729:4;1718:9;1714:20;1707:36;1292:457;;;;;;:::o;2197:226::-;2256:6;2309:2;2297:9;2288:7;2284:23;2280:32;2277:52;;;2325:1;2322;2315:12;2277:52;-1:-1:-1;2370:23:1;;2197:226;-1:-1:-1;2197:226:1:o;2897:230::-;2967:6;3020:2;3008:9;2999:7;2995:23;2991:32;2988:52;;;3036:1;3033;3026:12;2988:52;-1:-1:-1;3081:16:1;;2897:230;-1:-1:-1;2897:230:1:o;4206:339::-;4408:2;4390:21;;;4447:2;4427:18;;;4420:30;-1:-1:-1;;;4481:2:1;4466:18;;4459:45;4536:2;4521:18;;4206:339::o;5252:274::-;-1:-1:-1;;;;;5444:32:1;;;;5426:51;;5508:2;5493:18;;5486:34;5414:2;5399:18;;5252:274::o;5531:127::-;5592:10;5587:3;5583:20;5580:1;5573:31;5623:4;5620:1;5613:15;5647:4;5644:1;5637:15;5663:125;5728:9;;;5749:10;;;5746:36;;;5762:18;;:::i;5793:397::-;5995:2;5977:21;;;6034:2;6014:18;;;6007:30;6073:34;6068:2;6053:18;;6046:62;-1:-1:-1;;;6139:2:1;6124:18;;6117:31;6180:3;6165:19;;5793:397::o;6195:128::-;6262:9;;;6283:11;;;6280:37;;;6297:18;;:::i;6328:345::-;-1:-1:-1;;;;;6548:32:1;;;;6530:51;;6612:2;6597:18;;6590:34;;;;6655:2;6640:18;;6633:34;6518:2;6503:18;;6328:345::o;7092:127::-;7153:10;7148:3;7144:20;7141:1;7134:31;7184:4;7181:1;7174:15;7208:4;7205:1;7198:15;7224:247;7291:2;7285:9;7333:3;7321:16;;7367:18;7352:34;;7388:22;;;7349:62;7346:88;;;7414:18;;:::i;:::-;7450:2;7443:22;7224:247;:::o;7476:843::-;7570:6;7623:4;7611:9;7602:7;7598:23;7594:34;7591:54;;;7641:1;7638;7631:12;7591:54;7690:7;7683:4;7672:9;7668:20;7664:34;7654:62;;7712:1;7709;7702:12;7654:62;7765:2;7759:9;7807:4;7795:17;;7842:18;7827:34;;7863:22;;;7824:62;7821:88;;;7889:18;;:::i;:::-;7925:2;7918:22;7960:6;8004:4;7989:20;;8021:19;;;8018:39;;;8053:1;8050;8043:12;8018:39;8077:9;8095:193;8111:6;8106:3;8103:15;8095:193;;;8203:10;;8226:18;;8273:4;8264:14;;;;8128;8095:193;;;-1:-1:-1;8307:6:1;;7476:843;-1:-1:-1;;;;;7476:843:1:o;9032:765::-;9125:6;9185:2;9173:9;9164:7;9160:23;9156:32;9200:2;9197:22;;;9215:1;9212;9205:12;9197:22;-1:-1:-1;9284:2:1;9278:9;9326:2;9314:15;;9359:18;9344:34;;9380:22;;;9341:62;9338:88;;;9406:18;;:::i;:::-;9442:2;9435:22;;;9498:16;;9523:21;;9610:2;9595:18;;;9589:25;9630:15;;;9623:32;9706:18;;;9700:25;9741:15;;;9734:32;;;;-1:-1:-1;9530:6:1;9032:765;-1:-1:-1;9032:765:1:o;10158:1141::-;10249:6;10309:3;10297:9;10288:7;10284:23;10280:33;10325:2;10322:22;;;10340:1;10337;10330:12;10322:22;-1:-1:-1;10382:17:1;;:::i;:::-;10444:16;;10469:22;;10557:2;10542:18;;;10536:25;10577:14;;;10570:31;10667:2;10652:18;;;10646:25;10687:14;;;10680:31;10777:2;10762:18;;;10756:25;10797:14;;;10790:31;10887:3;10872:19;;;10866:26;10908:15;;;10901:32;10999:3;10984:19;;;10978:26;11020:15;;;11013:32;11111:3;11096:19;;;11090:26;11132:15;;;11125:32;11223:3;11208:19;;;11202:26;11244:15;;;11237:32;;;;-1:-1:-1;10476:5:1;10158:1141;-1:-1:-1;10158:1141:1:o;12117:481::-;12193:5;12187:12;12182:3;12175:25;12249:4;12242:5;12238:16;12232:23;12225:4;12220:3;12216:14;12209:47;12305:4;12298:5;12294:16;12288:23;12281:4;12276:3;12272:14;12265:47;12361:4;12354:5;12350:16;12344:23;12337:4;12332:3;12328:14;12321:47;12417:4;12410:5;12406:16;12400:23;12393:4;12388:3;12384:14;12377:47;12473:4;12466:5;12462:16;12456:23;12449:4;12444:3;12440:14;12433:47;12529:4;12522:5;12518:16;12512:23;12505:4;12500:3;12496:14;12489:47;12585:4;12578:5;12574:16;12568:23;12561:4;12556:3;12552:14;12545:47;;;12117:481::o;12603:404::-;-1:-1:-1;;;;;12866:32:1;;12848:51;;12930:2;12915:18;;12908:34;;;12835:3;12820:19;;12951:50;12997:2;12982:18;;12974:6;12951:50;:::i;:::-;12603:404;;;;;;:::o;13012:251::-;13082:6;13135:2;13123:9;13114:7;13110:23;13106:32;13103:52;;;13151:1;13148;13141:12;13103:52;13183:9;13177:16;13202:31;13227:5;13202:31;:::i;14252:410::-;-1:-1:-1;;;;;14519:32:1;;14501:51;;14583:2;14568:18;;14561:34;;;14488:3;14473:19;;14604:52;14652:2;14637:18;;14629:6;14116:12;;14104:25;;14178:4;14167:16;;;14161:23;14145:14;;;14138:47;14234:4;14223:16;;;14217:23;14201:14;;14194:47;14044:203;17784:209;17816:1;17842;17832:132;;17886:10;17881:3;17877:20;17874:1;17867:31;17921:4;17918:1;17911:15;17949:4;17946:1;17939:15;17832:132;-1:-1:-1;17978:9:1;;17784:209::o;17998:504::-;18318:3;18303:19;;18331:41;18307:9;18354:6;18331:41;:::i;:::-;14116:12;;18429:3;18414:19;;14104:25;14178:4;14167:16;;14161:23;14145:14;;;14138:47;14234:4;14223:16;;14217:23;14201:14;;;14194:47;14116:12;;18491:3;18476:19;;14104:25;14178:4;14167:16;;14161:23;14145:14;;;14138:47;14234:4;14223:16;;14217:23;14201:14;;;14194:47;18443:53;14044:203
Swarm Source
ipfs://5fe51a119d9743b22adbb9956ed0c125d30078e05b4bb2dfdb8b17ff26becd64
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.