From 25538bcd790fb5548f9b5d5448fd442ecd09437f Mon Sep 17 00:00:00 2001 From: David Vilela Date: Tue, 7 Jan 2025 12:00:04 +0100 Subject: [PATCH 1/6] fix: prompt typos --- packages/dvilela/skills/memeooorr_abci/prompts.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dvilela/skills/memeooorr_abci/prompts.py b/packages/dvilela/skills/memeooorr_abci/prompts.py index 8d081d0..91c2e6d 100644 --- a/packages/dvilela/skills/memeooorr_abci/prompts.py +++ b/packages/dvilela/skills/memeooorr_abci/prompts.py @@ -114,7 +114,7 @@ You have two options: * Do nothing -* Execute one actions from the available actions for one token of your choice +* Execute one action from the available actions for one token of your choice Here's the list of memecoins: {meme_coins} @@ -152,7 +152,7 @@ Here are the tweets: "{tweet_data}" -Your task is to decide which tweets to interact with and how. We encourgae you to interact with multiple tweets. +Your task is to decide which tweets to interact with and how. We encourage you to interact with multiple tweets. OUTPUT_FORMAT * Your output response must be only a single JSON object to be parsed by Python's "json.loads()". From 9c6d507583a01cc13904b31d108d9abcacecaaf0 Mon Sep 17 00:00:00 2001 From: David Vilela Date: Tue, 7 Jan 2025 14:06:11 +0100 Subject: [PATCH 2/6] fix: update abi --- .../meme_factory/build/MemeBase.json | 1525 +++++++++-------- 1 file changed, 790 insertions(+), 735 deletions(-) diff --git a/packages/dvilela/contracts/meme_factory/build/MemeBase.json b/packages/dvilela/contracts/meme_factory/build/MemeBase.json index 2cf3855..9164914 100644 --- a/packages/dvilela/contracts/meme_factory/build/MemeBase.json +++ b/packages/dvilela/contracts/meme_factory/build/MemeBase.json @@ -1,735 +1,790 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "MemeBase", - "sourceName": "contracts/MemeBase.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_olas", - "type": "address" - }, - { - "internalType": "address", - "name": "_nativeToken", - "type": "address" - }, - { - "internalType": "address", - "name": "_uniV3PositionManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_buyBackBurner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minNativeTokenValue", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "hearter", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "memeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "allocation", - "type": "uint256" - } - ], - "name": "Collected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "feeCollector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "memeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "memeTokenAmount", - "type": "uint256" - } - ], - "name": "FeesCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "hearter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "memeNonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Hearted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "OLASJourneyToAscendance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "memeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Purged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "summoner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "memeNonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Summoned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "unleasher", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "memeNonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "memeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "liquidity", - "type": "uint256" - } - ], - "name": "Unleashed", - "type": "event" - }, - { - "inputs": [], - "name": "COLLECT_DELAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "CONTRIBUTION_AGNT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DECIMALS", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FEE_TIER", - "outputs": [ - { - "internalType": "uint24", - "name": "", - "type": "uint24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_AGNT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LP_PERCENTAGE", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_TICK", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIN_TICK", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIN_TOTAL_SUPPLY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OLAS_BURN_PERCENTAGE", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SUMMON_AGNT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "UNLEASH_DELAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "buyBackBurner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "tokens", - "type": "address[]" - } - ], - "name": "collectFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "memeToken", - "type": "address" - } - ], - "name": "collectThisMeme", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "memeNonce", - "type": "uint256" - } - ], - "name": "heartThisMeme", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "launchCampaignNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "mapAccountActivities", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "memeHearters", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "memeSummons", - "outputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "totalSupply", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nativeTokenContributed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "summonTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unleashTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "heartersAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "positionId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isNativeFirst", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "memeTokenNonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "memeTokens", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minNativeTokenValue", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nativeToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "numTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "olas", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "memeToken", - "type": "address" - } - ], - "name": "purgeThisMeme", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "scheduleForAscendance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "scheduledForAscendance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "totalSupply", - "type": "uint256" - } - ], - "name": "summonThisMeme", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "uniV3PositionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "memeNonce", - "type": "uint256" - } - ], - "name": "unleashThisMeme", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x61014060405260016002556001600355600160045534801561001f575f5ffd5b506040516156a93803806156a983398101604081905261003e916105c3565b6001600160a01b0380881660a05280871660c05280861660e0528416610100526080839052815115610092576002546101205261007b828261009e565b6101205161008a9060016106e4565b6002555f6004555b50505050505050610885565b80518251146100f45760405162461bcd60e51b815260206004820152601b60248201527f4172726179206c656e6774687320617265206e6f7420657175616c000000000060448201526064015b60405180910390fd5b6040805161016081018252600b6101208083019182526a20b3b2b73a102a37b5b2b760a91b610140840152908252825180840184526005808252641051ccd39560da1b602083810191909152808501929092526b033b2e3c9fd0803ce8000000848601526807acad1d521ea40800606085015263015d78d16080850152600160a08501525f60c0850181905260e08501819052610100850181905292518352905291909120815181906101a79082610781565b50602082015160018201906101bc9082610781565b5060408201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e08201516007820155610100909101516008909101805460ff191691151591909117905561012051825183905f9061022a5761022a61083b565b60200260200101516001600160a01b03167f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc835f8151811061026e5761026e61083b565b602002602001015160405161028591815260200190565b60405180910390a35f805b83518110156103ad578281815181106102ab576102ab61083b565b6020026020010151826102be91906106e4565b91508281815181106102d2576102d261083b565b602002602001015160065f6101205181526020019081526020015f205f8684815181106103015761030161083b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2081905550610120518482815181106103425761034261083b565b60200260200101516001600160a01b03167fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda18584815181106103865761038661083b565b602002602001015160405161039d91815260200190565b60405180910390a3600101610290565b506807acad1d521ea40800811461042c5760405162461bcd60e51b815260206004820152603460248201527f546f74616c20616d6f756e74206d757374206d61746368206f726967696e616c60448201527f20636f6e747269627574696f6e20616d6f756e7400000000000000000000000060648201526084016100eb565b5f600a61043a83600961084f565b6104449190610866565b90506806e83567304ec6d40081146104d25760405162461bcd60e51b815260206004820152604560248201527f546f74616c20616d6f756e742061646a757374656420666f72206275726e206160448201527f6c6c6f636174696f6e206d757374206d61746368206c697175696469747920616064820152641b5bdd5b9d60da1b608482015260a4016100eb565b50505050565b80516001600160a01b03811681146104ee575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561052f5761052f6104f3565b604052919050565b5f6001600160401b0382111561054f5761054f6104f3565b5060051b60200190565b5f82601f830112610568575f5ffd5b815161057b61057682610537565b610507565b8082825260208201915060208360051b86010192508583111561059c575f5ffd5b602085015b838110156105b95780518352602092830192016105a1565b5095945050505050565b5f5f5f5f5f5f5f60e0888a0312156105d9575f5ffd5b6105e2886104d8565b96506105f0602089016104d8565b95506105fe604089016104d8565b945061060c606089016104d8565b608089015160a08a015191955093506001600160401b0381111561062e575f5ffd5b8801601f81018a1361063e575f5ffd5b805161064c61057682610537565b8082825260208201915060208360051b85010192508c83111561066d575f5ffd5b6020840193505b8284101561069657610685846104d8565b825260209384019390910190610674565b60c08c0151909550925050506001600160401b038111156106b5575f5ffd5b6106c18a828b01610559565b91505092959891949750929550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106f7576106f76106d0565b92915050565b600181811c9082168061071157607f821691505b60208210810361072f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561077c57805f5260205f20601f840160051c8101602085101561075a5750805b601f840160051c820191505b81811015610779575f8155600101610766565b50505b505050565b81516001600160401b0381111561079a5761079a6104f3565b6107ae816107a884546106fd565b84610735565b6020601f8211600181146107e0575f83156107c95750848201515b5f19600385901b1c1916600184901b178455610779565b5f84815260208120601f198516915b8281101561080f57878501518255602094850194600190920191016107ef565b508482101561082c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b80820281158282048414176106f7576106f76106d0565b5f8261088057634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e0516101005161012051614d5f61094a5f395f81816102cb015261320101525f81816104d3015281816112b6015261240601525f818161054d015281816123d0015281816124f501528181612bab01528181612db601528181612e5d01528181612f18015261307b01525f8181610618015281816112e501528181611fda0152818161233c0152818161236201528181612ab601528181612b010152612b2901525f61020901525f8181610580015261161c0152614d5f5ff3fe6080604052600436106101f4575f3560e01c80636882a88811610117578063b72124e3116100ac578063e0be16171161007c578063ea43cf5011610062578063ea43cf501461063a578063f74e481b14610656578063ffa1ad7414610675575f5ffd5b8063e0be1617146105f4578063e1758bd814610607575f5ffd5b8063b72124e3146105b5578063be399e2b146105cb578063d1b0c288146105b5578063dab346ff146105e0575f5ffd5b8063a1634b14116100e7578063a1634b1414610509578063a2a7eb951461053c578063a5ae390c1461056f578063b1bd3c95146105a2575f5ffd5b80636882a8881461046757806372f2a36b1461048e578063803551a9146104c25780638e499bcf146104f5575f5ffd5b806340b67a9b1161018d57806352d15d361161015d57806352d15d361461040157806358c0f7291461041d578063644c81141461043c57806367608ad014610453575f5ffd5b806340b67a9b14610371578063466ffbce1461039c5780634c69a6c9146103bb5780635122c409146103e4575f5ffd5b80631ecfd535116101c85780631ecfd535146102ed5780632e0f26251461031857806335f9f8d91461033e5780633d0cc37514610352575f5ffd5b806231d115146101f857806309ca5a11146102555780630df400c61461027657806317c6df2d146102ba575b5f5ffd5b348015610203575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610260575f5ffd5b5061027461026f36600461330e565b6106ca565b005b348015610281575f5ffd5b506102ac610290366004613346565b600660209081525f928352604080842090915290825290205481565b60405190815260200161024c565b3480156102c5575f5ffd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f8575f5ffd5b506102ac610307366004613374565b60076020525f908152604090205481565b348015610323575f5ffd5b5061032c601281565b60405160ff909116815260200161024c565b348015610349575f5ffd5b506102ac603281565b34801561035d575f5ffd5b5061027461036c366004613374565b610922565b34801561037c575f5ffd5b506102ac61038b366004613374565b60086020525f908152604090205481565b3480156103a7575f5ffd5b5061022b6103b636600461330e565b610e66565b3480156103c6575f5ffd5b506103d061271081565b60405162ffffff909116815260200161024c565b3480156103ef575f5ffd5b506102ac69d3c21bcecceda100000081565b34801561040c575f5ffd5b506102ac6807acad1d521ea4080081565b348015610428575f5ffd5b50610274610437366004613412565b610e9b565b348015610447575f5ffd5b506102ac63015d78d181565b34801561045e575f5ffd5b50610274611160565b348015610472575f5ffd5b5061047b61138b565b60405160029190910b815260200161024c565b348015610499575f5ffd5b506104ad6104a836600461330e565b6113b7565b60405161024c99989796959493929190613512565b3480156104cd575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610500575f5ffd5b506102ac5f5481565b348015610514575f5ffd5b5061047b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766081565b348015610547575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561057a575f5ffd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b6102746105b03660046135fd565b61150d565b3480156105c0575f5ffd5b506102ac6201518081565b3480156105d6575f5ffd5b506102ac60015481565b3480156105eb575f5ffd5b506102ac600a81565b61027461060236600461330e565b611961565b348015610612575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610645575f5ffd5b506102ac6806e83567304ec6d40081565b348015610661575f5ffd5b50610274610670366004613374565b611beb565b348015610680575f5ffd5b506106bd6040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161024c919061366b565b60035460011461073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026003555f81815260056020526040902060048101546107b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610732565b600581015415610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610732565b62015180816004015461083791906136aa565b4210156108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c656173682079657400000000000000000000000000006044820152606401610732565b60038101546108ae81611fd8565b5f60646108bc600a846136c3565b6108c691906136da565b90505f6108d38284613712565b90508160015f8282546108e691906136aa565b9091555050335f90815260086020526040812080549161090583613725565b919050555061091685858386612058565b50506001600355505050565b60035460011461098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f908152600760209081526040808320548084526005909252808320815161012081019092528054929392829082906109e29061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e9061375c565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b50505050508152602001600182018054610a729061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e9061375c565b8015610ae95780601f10610ac057610100808354040283529160200191610ae9565b820191905f5260205f20905b815481529060010190602001808311610acc57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150610bae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610732565b620151808160a00151610bc191906136aa565b4211610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20323420686f75727360448201527f20616674657220756e6c656173680000000000000000000000000000000000006064820152608401610732565b335f908152600860205260408120805491610c6983613725565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283905f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610cda573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfe91906137ad565b90505f8111610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f72676500000000000000000000000000000000000000000000000000000000006064820152608401610732565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c68906024015f604051808303815f87803b158015610df4575f5ffd5b505af1158015610e06573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610e5291815260200190565b60405180910390a250506001600355505050565b60098181548110610e75575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600354600114610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b6002600355335f908152600860205260408120805491610f2683613725565b909155505f90505b8151811015611157575f60075f848481518110610f4d57610f4d6137c4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8381526020019081526020015f20604051806101200160405290815f82018054610fbe9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fea9061375c565b80156110355780601f1061100c57610100808354040283529160200191611035565b820191905f5260205f20905b81548152906001019060200180831161101857829003601f168201915b5050505050815260200160018201805461104e9061375c565b80601f016020809104026020016040519081016040528092919081815260200182805461107a9061375c565b80156110c55780601f1061109c576101008083540402835291602001916110c5565b820191905f5260205f20905b8154815290600101906020018083116110a857829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a0820152600782015460c082015260089091015460ff16151560e090910152845190915061114d90859085908110611135576111356137c4565b60200260200101518260e00151836101000151612332565b5050600101610f2e565b50506001600355565b6003546001146111cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b60026003556004545f906111e7576111e26126dd565b6111eb565b6001545b90505f8111611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f2073656e6400000000000000000000000000000000006044820152606401610732565b5f600181905533815260086020526040812080549161127483613725565b90915550506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af115801561132b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134f91906137f1565b506040518181527f132eb3b7605c938c3aa08831e03193219701a828c869ae61e2eac9ae2e97d6439060200160405180910390a1506001600355565b6113b47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27660613810565b81565b60056020525f90815260409020805481906113d19061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546113fd9061375c565b80156114485780601f1061141f57610100808354040283529160200191611448565b820191905f5260205f20905b81548152906001019060200180831161142b57829003601f168201915b50505050509080600101805461145d9061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546114899061375c565b80156114d45780601f106114ab576101008083540402835291602001916114d4565b820191905f5260205f20905b8154815290600101906020018083116114b757829003601f168201915b50505050600283015460038401546004850154600586015460068701546007880154600890980154969794969395509193909260ff1689565b600354600114611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035582511580159061158e57505f8251115b61161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e616d6520616e642073796d626f6c206d757374206e6f7420626520656d707460448201527f79000000000000000000000000000000000000000000000000000000000000006064820152608401610732565b7f00000000000000000000000000000000000000000000000000000000000000003410156116ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e000000000000000000000000000000006064820152608401610732565b69d3c21bcecceda100000081101561173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d6574006044820152606401610732565b6fffffffffffffffffffffffffffffffff81106117b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d6178696d756d20746f74616c20737570706c79206f766572666c6f770000006044820152606401610732565b600254604080516101208101825285815260208082018690528183018590523460608301524260808301525f60a0830181905260c0830181905260e0830181905261010083018190528481526005909152919091208151819061181a9082613898565b506020820151600182019061182f9082613898565b506040828101516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068084019190915560e0840151600784015561010090930151600892830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f84815260209384528181203382528452818120349055919092529081208054916118d483613725565b909155506118e590508160016136aa565b600255604051348152819033907f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc9060200160405180910390a3604051348152819033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a3505060016003555050565b6003546001146119cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035534611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f000000000000000000000000000000000000006064820152608401610732565b5f8181526005602052604090206004810154611ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610732565b600581015415611b43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610732565b6003810154611b5234826136aa565b600383018190555f848152600660209081526040808320338452909152812080549293503492909190611b869084906136aa565b9091555050335f908152600860205260408120805491611ba583613725565b9091555050604051348152839033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a35050600160035550565b600354600114611c57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f90815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290611cab9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd79061375c565b8015611d225780601f10611cf957610100808354040283529160200191611d22565b820191905f5260205f20905b815481529060010190602001808311611d0557829003601f168201915b50505050508152602001600182018054611d3b9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054611d679061375c565b8015611db25780601f10611d8957610100808354040283529160200191611db2565b820191905f5260205f20905b815481529060010190602001808311611d9557829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150611e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610732565b620151808160a00151611e8a91906136aa565b421115611f19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20323420686f60448201527f75727320616674657220756e6c656173680000000000000000000000000000006064820152608401610732565b5f82815260066020908152604080832033845290915290205480611f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e000000000000000000000000006044820152606401610732565b335f908152600860205260408120805491611fb383613725565b9190505550611fcd84848460c001518486606001516127a2565b505060016003555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b15801561203e575f5ffd5b505af1158015612050573d5f5f3e3d5ffd5b505050505050565b5f60646032856002015461206c91906136c3565b61207691906136da565b90505f8185600201546120899190613712565b90505f6121af87875f01805461209e9061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546120ca9061375c565b80156121155780601f106120ec57610100808354040283529160200191612115565b820191905f5260205f20905b8154815290600101906020018083116120f857829003601f168201915b50505050508860010180546121299061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546121559061375c565b80156121a05780601f10612177576101008083540402835291602001916121a0565b820191905f5260205f20905b81548152906001019060200180831161218357829003601f168201915b505050505089600201546128c6565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260076020526040812089905590915080806121e6848988612a9a565b4260058d015560068c0188905560078c01839055919450925090508015612236576008890180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b600980546001810182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055545f9081558a815260066020908152604080832033845290915290205480156122d0576122d0858c88848c6127a2565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8716918d9133917fbbd80a362e989e1735d4e639796d60a759994a28ab43a4ab255336414657e914910160405180910390a45050505050505050505050565b5f5f8261236057847f0000000000000000000000000000000000000000000000000000000000000000612383565b7f0000000000000000000000000000000000000000000000000000000000000000855b6040517f43b23a1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015280831660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015261271060648301529294509092507f0000000000000000000000000000000000000000000000000000000000000000909116906343b23a1b906084015f6040518083038186803b158015612448575f5ffd5b505afa15801561245a573d5f5f3e3d5ffd5b50506040805160808101825287815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529093505f925082917f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303815f875af115801561253a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255e91906139af565b915091505f82118061256f57505f81115b6125d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5a65726f206665657320617661696c61626c65000000000000000000000000006044820152606401610732565b5f5f87156125e75750829050816125ed565b50819050825b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8b16906342966c68906024015f604051808303815f87803b158015612652575f5ffd5b505af1158015612664573d5f5f3e3d5ffd5b505050508160015f82825461267991906136aa565b9091555050604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8c169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a350505050505050505050565b5f6806e83567304ec6d4006001541015612779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f7420656e6f75676820746f20636f766572206c61756e63682063616d706160448201527f69676e00000000000000000000000000000000000000000000000000000000006064820152608401610732565b6127816131ff565b6806e83567304ec6d4006001546127989190613712565b6001600455919050565b5f816127ae84866136c3565b6127b891906136da565b5f8681526006602090815260408083203380855292528083209290925590517fa9059cbb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052909150869073ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303815f875af115801561284b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286f91906137f1565b5060405182815273ffffffffffffffffffffffffffffffffffffffff88169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a350505050505050565b604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018590525f908190607401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250016040516020818303038152906040528051906020012090505f6040518060200161297390613301565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f9091011660408190526129bb908890889060129089906020016139d1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526129f79291602001613a23565b6040516020818303038152906040529050818151826020015ff5925073ffffffffffffffffffffffffffffffffffffffff8316612a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e206372656174696f6e206661696c656400000000000000000000006044820152606401610732565b5050949350505050565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161015612af5575060015b5f5f5f5f84612b2757897f0000000000000000000000000000000000000000000000000000000000000000898b612b4c565b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a5b93509350935093505f8282670de0b6b3a7640000612b6a91906136c3565b612b7491906136da565b90505f633b9aca00612b858361324f565b612b9c906c010000000000000000000000006136c3565b612ba691906136da565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c12573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c369190613a3f565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015261271060448301529192505f91831690631698ee8290606401602060405180830381865afa158015612cb5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cd99190613a3f565b905073ffffffffffffffffffffffffffffffffffffffff811615612d59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f506f6f6c2061646472657373206d757374206265207a65726f000000000000006044820152606401610732565b6040517f13ead56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152612710604483015284811660648301527f000000000000000000000000000000000000000000000000000000000000000016906313ead562906084016020604051808303815f875af1158015612dfc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190613a3f565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192509089169063095ea7b3906044016020604051808303815f875af1158015612eb6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eda91906137f1565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905288169063095ea7b3906044016020604051808303815f875af1158015612f6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906137f1565b505f6040518061016001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766060020b81526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766061303790613810565b60020b81526020018881526020018781526020015f81526020015f81526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166388316456826040518263ffffffff1660e01b81526004016130d29190613a5a565b6080604051808303815f875af11580156130ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131129190613b45565b929e506fffffffffffffffffffffffffffffffff9091169c50975095505f8a61314657868f6131419190613712565b613152565b878f6131529190613712565b90508015613171578060015f82825461316b91906136aa565b90915550505b6040517f32148f67000000000000000000000000000000000000000000000000000000008152603c600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f67906024015f604051808303815f87803b1580156131d6575f5ffd5b505af11580156131e8573d5f5f3e3d5ffd5b505050505050505050505050505093509350939050565b7f00000000000000000000000000000000000000000000000000000000000000005f8181526005602052604090209061324c90826806e83567304ec6d4006807acad1d521ea40800612058565b50565b60b5817101000000000000000000000000000000000081106132765760409190911b9060801c5b690100000000000000000081106132925760209190911b9060401c5b6501000000000081106132aa5760109190911b9060201c5b630100000081106132c05760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b61119480613b9683390190565b5f6020828403121561331e575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461324c575f5ffd5b5f5f60408385031215613357575f5ffd5b82359150602083013561336981613325565b809150509250929050565b5f60208284031215613384575f5ffd5b813561338f81613325565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561340a5761340a613396565b604052919050565b5f60208284031215613422575f5ffd5b813567ffffffffffffffff811115613438575f5ffd5b8201601f81018413613448575f5ffd5b803567ffffffffffffffff81111561346257613462613396565b8060051b613472602082016133c3565b9182526020818401810192908101908784111561348d575f5ffd5b6020850194505b838510156134bb57843592506134a983613325565b82825260209485019490910190613494565b979650505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b61012081525f61352661012083018c6134c6565b8281036020840152613538818c6134c6565b604084019a909a5250506060810196909652608086019490945260a085019290925260c084015260e083015215156101009091015292915050565b5f82601f830112613582575f5ffd5b813567ffffffffffffffff81111561359c5761359c613396565b6135cd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016133c3565b8181528460208386010111156135e1575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f6060848603121561360f575f5ffd5b833567ffffffffffffffff811115613625575f5ffd5b61363186828701613573565b935050602084013567ffffffffffffffff81111561364d575f5ffd5b61365986828701613573565b93969395505050506040919091013590565b602081525f61338f60208301846134c6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156136bd576136bd61367d565b92915050565b80820281158282048414176136bd576136bd61367d565b5f8261370d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156136bd576136bd61367d565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137555761375561367d565b5060010190565b600181811c9082168061377057607f821691505b6020821081036137a7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f602082840312156137bd575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613801575f5ffd5b8151801515811461338f575f5ffd5b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000081036138445761384461367d565b5f0392915050565b601f82111561389357805f5260205f20601f840160051c810160208510156138715750805b601f840160051c820191505b81811015613890575f815560010161387d565b50505b505050565b815167ffffffffffffffff8111156138b2576138b2613396565b6138c6816138c0845461375c565b8461384c565b6020601f821160018114613917575f83156138e15750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455613890565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156139645787850151825560209485019460019092019101613944565b50848210156139a057868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b5f5f604083850312156139c0575f5ffd5b505080516020909101519092909150565b608081525f6139e360808301876134c6565b82810360208401526139f581876134c6565b60ff95909516604084015250506060015292915050565b5f81518060208401855e5f93019283525090919050565b5f613a37613a318386613a0c565b84613a0c565b949350505050565b5f60208284031215613a4f575f5ffd5b815161338f81613325565b815173ffffffffffffffffffffffffffffffffffffffff16815261016081016020830151613aa0602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151613ab7604084018262ffffff169052565b506060830151613acc606084018260020b9052565b506080830151613ae1608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151613b3561012084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061014092830151919092015290565b5f5f5f5f60808587031215613b58575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114613b7f575f5ffd5b604086015160609096015194979096509250505056fe60e060405234801561000f575f5ffd5b5060405161119438038061119483398101604081905261002e91610216565b8383835f61003c848261031d565b506001610049838261031d565b5060ff81166080524660a05261005d610078565b60c0525061006f915033905082610110565b5050505061046d565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516100a891906103d7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546101219190610448565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261019c575f5ffd5b81516001600160401b038111156101b5576101b5610179565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101e3576101e3610179565b6040528181528382016020018510156101fa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610229575f5ffd5b84516001600160401b0381111561023e575f5ffd5b61024a8782880161018d565b602087015190955090506001600160401b03811115610267575f5ffd5b6102738782880161018d565b935050604085015160ff81168114610289575f5ffd5b6060959095015193969295505050565b600181811c908216806102ad57607f821691505b6020821081036102cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031857805f5260205f20601f840160051c810160208510156102f65750805b601f840160051c820191505b81811015610315575f8155600101610302565b50505b505050565b81516001600160401b0381111561033657610336610179565b61034a816103448454610299565b846102d1565b6020601f82116001811461037c575f83156103655750848201515b5f19600385901b1c1916600184901b178455610315565b5f84815260208120601f198516915b828110156103ab578785015182556020948501946001909201910161038b565b50848210156103c857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f83546103e481610299565b6001821680156103fb57600181146104105761043d565b60ff198316865281151582028601935061043d565b865f5260205f205f5b8381101561043557815488820152600190910190602001610419565b505081860193505b509195945050505050565b8082018082111561046757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610cfd6104975f395f6104b101525f61047c01525f61014e0152610cfd5ff3fe608060405234801561000f575f5ffd5b50600436106100da575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101dd578063a9059cbb146101e5578063d505accf146101f8578063dd62ed3e1461020b575f5ffd5b806342966c681461018a57806370a082311461019f5780637ecebe00146101be575f5ffd5b806323b872dd116100b857806323b872dd14610136578063313ce567146101495780633644e51514610182575f5ffd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f5ffd5b6100e6610235565b6040516100f391906109b9565b60405180910390f35b61010f61010a366004610a34565b6102c0565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610a5c565b610339565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b610128610479565b61019d610198366004610a96565b6104d3565b005b6101286101ad366004610aad565b60036020525f908152604090205481565b6101286101cc366004610aad565b60056020525f908152604090205481565b6100e66104e0565b61010f6101f3366004610a34565b6104ed565b61019d610206366004610acd565b610570565b610128610219366004610b3a565b600460209081525f928352604080842090915290825290205481565b5f805461024190610b6b565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90610b6b565b80156102b85780601f1061028f576101008083540402835291602001916102b8565b820191905f5260205f20905b81548152906001019060200180831161029b57829003601f168201915b505050505081565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103cb5761039a8382610bbc565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080548592906103ff908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104669087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104ae576104a961088e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104dd3382610926565b50565b6001805461024190610b6b565b335f9081526003602052604081208054839190839061050d908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b428410156105df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f60016105ea610479565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610738573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107b357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105d6565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516108be9190610bf4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260408120805483929061095a908490610bbc565b90915550506002805482900390556040518181525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a2f575f5ffd5b919050565b5f5f60408385031215610a45575f5ffd5b610a4e83610a0c565b946020939093013593505050565b5f5f5f60608486031215610a6e575f5ffd5b610a7784610a0c565b9250610a8560208501610a0c565b929592945050506040919091013590565b5f60208284031215610aa6575f5ffd5b5035919050565b5f60208284031215610abd575f5ffd5b610ac682610a0c565b9392505050565b5f5f5f5f5f5f5f60e0888a031215610ae3575f5ffd5b610aec88610a0c565b9650610afa60208901610a0c565b95506040880135945060608801359350608088013560ff81168114610b1d575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610b4b575f5ffd5b610b5483610a0c565b9150610b6260208401610a0c565b90509250929050565b600181811c90821680610b7f57607f821691505b602082108103610bb6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b81810381811115610333577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f5f83545f8160011c90506001821680610c0f57607f821691505b602082108103610c46577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015610c5a5760018114610c8d57610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610cbb565b5f888152602090205f5b84811015610cb357815489820152600190910190602001610c97565b505082870194505b5092969550505050505056fea26469706673582212205df7019458ddc6a358585d679221b07a9e24fb31dbf8c630fcd1d119dc2aee2864736f6c634300081c0033a2646970667358221220ab92cf3b0ead9062d9643cd5d39919065482921907c578016f0b6253dcf39d7a64736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106101f4575f3560e01c80636882a88811610117578063b72124e3116100ac578063e0be16171161007c578063ea43cf5011610062578063ea43cf501461063a578063f74e481b14610656578063ffa1ad7414610675575f5ffd5b8063e0be1617146105f4578063e1758bd814610607575f5ffd5b8063b72124e3146105b5578063be399e2b146105cb578063d1b0c288146105b5578063dab346ff146105e0575f5ffd5b8063a1634b14116100e7578063a1634b1414610509578063a2a7eb951461053c578063a5ae390c1461056f578063b1bd3c95146105a2575f5ffd5b80636882a8881461046757806372f2a36b1461048e578063803551a9146104c25780638e499bcf146104f5575f5ffd5b806340b67a9b1161018d57806352d15d361161015d57806352d15d361461040157806358c0f7291461041d578063644c81141461043c57806367608ad014610453575f5ffd5b806340b67a9b14610371578063466ffbce1461039c5780634c69a6c9146103bb5780635122c409146103e4575f5ffd5b80631ecfd535116101c85780631ecfd535146102ed5780632e0f26251461031857806335f9f8d91461033e5780633d0cc37514610352575f5ffd5b806231d115146101f857806309ca5a11146102555780630df400c61461027657806317c6df2d146102ba575b5f5ffd5b348015610203575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610260575f5ffd5b5061027461026f36600461330e565b6106ca565b005b348015610281575f5ffd5b506102ac610290366004613346565b600660209081525f928352604080842090915290825290205481565b60405190815260200161024c565b3480156102c5575f5ffd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f8575f5ffd5b506102ac610307366004613374565b60076020525f908152604090205481565b348015610323575f5ffd5b5061032c601281565b60405160ff909116815260200161024c565b348015610349575f5ffd5b506102ac603281565b34801561035d575f5ffd5b5061027461036c366004613374565b610922565b34801561037c575f5ffd5b506102ac61038b366004613374565b60086020525f908152604090205481565b3480156103a7575f5ffd5b5061022b6103b636600461330e565b610e66565b3480156103c6575f5ffd5b506103d061271081565b60405162ffffff909116815260200161024c565b3480156103ef575f5ffd5b506102ac69d3c21bcecceda100000081565b34801561040c575f5ffd5b506102ac6807acad1d521ea4080081565b348015610428575f5ffd5b50610274610437366004613412565b610e9b565b348015610447575f5ffd5b506102ac63015d78d181565b34801561045e575f5ffd5b50610274611160565b348015610472575f5ffd5b5061047b61138b565b60405160029190910b815260200161024c565b348015610499575f5ffd5b506104ad6104a836600461330e565b6113b7565b60405161024c99989796959493929190613512565b3480156104cd575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610500575f5ffd5b506102ac5f5481565b348015610514575f5ffd5b5061047b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766081565b348015610547575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561057a575f5ffd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b6102746105b03660046135fd565b61150d565b3480156105c0575f5ffd5b506102ac6201518081565b3480156105d6575f5ffd5b506102ac60015481565b3480156105eb575f5ffd5b506102ac600a81565b61027461060236600461330e565b611961565b348015610612575f5ffd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610645575f5ffd5b506102ac6806e83567304ec6d40081565b348015610661575f5ffd5b50610274610670366004613374565b611beb565b348015610680575f5ffd5b506106bd6040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161024c919061366b565b60035460011461073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e63792067756172640000000000000000000000000000000060448201526064015b60405180910390fd5b60026003555f81815260056020526040902060048101546107b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610732565b600581015415610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610732565b62015180816004015461083791906136aa565b4210156108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f43616e6e6f7420756e6c656173682079657400000000000000000000000000006044820152606401610732565b60038101546108ae81611fd8565b5f60646108bc600a846136c3565b6108c691906136da565b90505f6108d38284613712565b90508160015f8282546108e691906136aa565b9091555050335f90815260086020526040812080549161090583613725565b919050555061091685858386612058565b50506001600355505050565b60035460011461098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f908152600760209081526040808320548084526005909252808320815161012081019092528054929392829082906109e29061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e9061375c565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b50505050508152602001600182018054610a729061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e9061375c565b8015610ae95780601f10610ac057610100808354040283529160200191610ae9565b820191905f5260205f20905b815481529060010190602001808311610acc57829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150610bae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610732565b620151808160a00151610bc191906136aa565b4211610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5075726765206f6e6c7920616c6c6f7765642066726f6d20323420686f75727360448201527f20616674657220756e6c656173680000000000000000000000000000000000006064820152608401610732565b335f908152600860205260408120805491610c6983613725565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283905f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610cda573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfe91906137ad565b90505f8111610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f486173206265656e20707572676564206f72206e6f7468696e6720746f20707560448201527f72676500000000000000000000000000000000000000000000000000000000006064820152608401610732565b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8316906342966c68906024015f604051808303815f87803b158015610df4575f5ffd5b505af1158015610e06573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f265db6c9c62cb962adbcf4398a54e4b02b2d87b28ab5b7538850150465a5f43c82604051610e5291815260200190565b60405180910390a250506001600355505050565b60098181548110610e75575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600354600114610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b6002600355335f908152600860205260408120805491610f2683613725565b909155505f90505b8151811015611157575f60075f848481518110610f4d57610f4d6137c4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8381526020019081526020015f20604051806101200160405290815f82018054610fbe9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fea9061375c565b80156110355780601f1061100c57610100808354040283529160200191611035565b820191905f5260205f20905b81548152906001019060200180831161101857829003601f168201915b5050505050815260200160018201805461104e9061375c565b80601f016020809104026020016040519081016040528092919081815260200182805461107a9061375c565b80156110c55780601f1061109c576101008083540402835291602001916110c5565b820191905f5260205f20905b8154815290600101906020018083116110a857829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a0820152600782015460c082015260089091015460ff16151560e090910152845190915061114d90859085908110611135576111356137c4565b60200260200101518260e00151836101000151612332565b5050600101610f2e565b50506001600355565b6003546001146111cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b60026003556004545f906111e7576111e26126dd565b6111eb565b6001545b90505f8111611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7468696e6720746f2073656e6400000000000000000000000000000000006044820152606401610732565b5f600181905533815260086020526040812080549161127483613725565b90915550506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af115801561132b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134f91906137f1565b506040518181527f132eb3b7605c938c3aa08831e03193219701a828c869ae61e2eac9ae2e97d6439060200160405180910390a1506001600355565b6113b47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27660613810565b81565b60056020525f90815260409020805481906113d19061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546113fd9061375c565b80156114485780601f1061141f57610100808354040283529160200191611448565b820191905f5260205f20905b81548152906001019060200180831161142b57829003601f168201915b50505050509080600101805461145d9061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546114899061375c565b80156114d45780601f106114ab576101008083540402835291602001916114d4565b820191905f5260205f20905b8154815290600101906020018083116114b757829003601f168201915b50505050600283015460038401546004850154600586015460068701546007880154600890980154969794969395509193909260ff1689565b600354600114611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035582511580159061158e57505f8251115b61161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e616d6520616e642073796d626f6c206d757374206e6f7420626520656d707460448201527f79000000000000000000000000000000000000000000000000000000000000006064820152608401610732565b7f00000000000000000000000000000000000000000000000000000000000000003410156116ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d696e696d756d206e617469766520746f6b656e2076616c756520697320726560448201527f71756972656420746f2073756d6d6f6e000000000000000000000000000000006064820152608401610732565b69d3c21bcecceda100000081101561173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d696e696d756d20746f74616c20737570706c79206973206e6f74206d6574006044820152606401610732565b6fffffffffffffffffffffffffffffffff81106117b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d6178696d756d20746f74616c20737570706c79206f766572666c6f770000006044820152606401610732565b600254604080516101208101825285815260208082018690528183018590523460608301524260808301525f60a0830181905260c0830181905260e0830181905261010083018190528481526005909152919091208151819061181a9082613898565b506020820151600182019061182f9082613898565b506040828101516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068084019190915560e0840151600784015561010090930151600892830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f84815260209384528181203382528452818120349055919092529081208054916118d483613725565b909155506118e590508160016136aa565b600255604051348152819033907f5c41f4ea011db1ad5568b9114b1d3cab1ef32c9fbcda67408d722503d19002fc9060200160405180910390a3604051348152819033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a3505060016003555050565b6003546001146119cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035534611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e617469766520746f6b656e20616d6f756e74206d757374206265206772656160448201527f746572207468616e207a65726f000000000000000000000000000000000000006064820152608401610732565b5f8181526005602052604090206004810154611ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d656d65206e6f74207965742073756d6d6f6e656400000000000000000000006044820152606401610732565b600581015415611b43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d656d6520616c726561647920756e6c656173686564000000000000000000006044820152606401610732565b6003810154611b5234826136aa565b600383018190555f848152600660209081526040808320338452909152812080549293503492909190611b869084906136aa565b9091555050335f908152600860205260408120805491611ba583613725565b9091555050604051348152839033907fbe9e2dd3ea9f989c1b2e8c4e8f99d486f6fed42c7a8ec7f1ac42e550f571eda19060200160405180910390a35050600160035550565b600354600114611c57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5265656e7472616e6379206775617264000000000000000000000000000000006044820152606401610732565b600260035573ffffffffffffffffffffffffffffffffffffffff81165f90815260076020908152604080832054808452600590925280832081516101208101909252805492939282908290611cab9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd79061375c565b8015611d225780601f10611cf957610100808354040283529160200191611d22565b820191905f5260205f20905b815481529060010190602001808311611d0557829003601f168201915b50505050508152602001600182018054611d3b9061375c565b80601f0160208091040260200160405190810160405280929190818152602001828054611d679061375c565b8015611db25780601f10611d8957610100808354040283529160200191611db2565b820191905f5260205f20905b815481529060010190602001808311611d9557829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546080820152600682015460a080830191909152600783015460c083015260089092015460ff16151560e090910152810151909150611e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d656d65206e6f7420756e6c65617368656400000000000000000000000000006044820152606401610732565b620151808160a00151611e8a91906136aa565b421115611f19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f436f6c6c656374206f6e6c7920616c6c6f77656420756e74696c20323420686f60448201527f75727320616674657220756e6c656173680000000000000000000000000000006064820152608401610732565b5f82815260066020908152604080832033845290915290205480611f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f20746f6b656e20616c6c6f636174696f6e000000000000000000000000006044820152606401610732565b335f908152600860205260408120805491611fb383613725565b9190505550611fcd84848460c001518486606001516127a2565b505060016003555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b15801561203e575f5ffd5b505af1158015612050573d5f5f3e3d5ffd5b505050505050565b5f60646032856002015461206c91906136c3565b61207691906136da565b90505f8185600201546120899190613712565b90505f6121af87875f01805461209e9061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546120ca9061375c565b80156121155780601f106120ec57610100808354040283529160200191612115565b820191905f5260205f20905b8154815290600101906020018083116120f857829003601f168201915b50505050508860010180546121299061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546121559061375c565b80156121a05780601f10612177576101008083540402835291602001916121a0565b820191905f5260205f20905b81548152906001019060200180831161218357829003601f168201915b505050505089600201546128c6565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260076020526040812089905590915080806121e6848988612a9a565b4260058d015560068c0188905560078c01839055919450925090508015612236576008890180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b600980546001810182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055545f9081558a815260066020908152604080832033845290915290205480156122d0576122d0858c88848c6127a2565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8716918d9133917fbbd80a362e989e1735d4e639796d60a759994a28ab43a4ab255336414657e914910160405180910390a45050505050505050505050565b5f5f8261236057847f0000000000000000000000000000000000000000000000000000000000000000612383565b7f0000000000000000000000000000000000000000000000000000000000000000855b6040517f43b23a1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015280831660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015261271060648301529294509092507f0000000000000000000000000000000000000000000000000000000000000000909116906343b23a1b906084015f6040518083038186803b158015612448575f5ffd5b505afa15801561245a573d5f5f3e3d5ffd5b50506040805160808101825287815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529093505f925082917f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303815f875af115801561253a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255e91906139af565b915091505f82118061256f57505f81115b6125d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5a65726f206665657320617661696c61626c65000000000000000000000000006044820152606401610732565b5f5f87156125e75750829050816125ed565b50819050825b6040517f42966c680000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8b16906342966c68906024015f604051808303815f87803b158015612652575f5ffd5b505af1158015612664573d5f5f3e3d5ffd5b505050508160015f82825461267991906136aa565b9091555050604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8c169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a350505050505050505050565b5f6806e83567304ec6d4006001541015612779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f7420656e6f75676820746f20636f766572206c61756e63682063616d706160448201527f69676e00000000000000000000000000000000000000000000000000000000006064820152608401610732565b6127816131ff565b6806e83567304ec6d4006001546127989190613712565b6001600455919050565b5f816127ae84866136c3565b6127b891906136da565b5f8681526006602090815260408083203380855292528083209290925590517fa9059cbb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052909150869073ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303815f875af115801561284b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286f91906137f1565b5060405182815273ffffffffffffffffffffffffffffffffffffffff88169033907f484decdc1e9549e1866295f6f86c889ded3f7de410e7488a7a415978589dc8fd9060200160405180910390a350505050505050565b604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018590525f908190607401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250016040516020818303038152906040528051906020012090505f6040518060200161297390613301565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f9091011660408190526129bb908890889060129089906020016139d1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526129f79291602001613a23565b6040516020818303038152906040529050818151826020015ff5925073ffffffffffffffffffffffffffffffffffffffff8316612a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e206372656174696f6e206661696c656400000000000000000000006044820152606401610732565b5050949350505050565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161015612af5575060015b5f5f5f5f84612b2757897f0000000000000000000000000000000000000000000000000000000000000000898b612b4c565b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a5b93509350935093505f8282670de0b6b3a7640000612b6a91906136c3565b612b7491906136da565b90505f633b9aca00612b858361324f565b612b9c906c010000000000000000000000006136c3565b612ba691906136da565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c12573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c369190613a3f565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015261271060448301529192505f91831690631698ee8290606401602060405180830381865afa158015612cb5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cd99190613a3f565b905073ffffffffffffffffffffffffffffffffffffffff811615612d59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f506f6f6c2061646472657373206d757374206265207a65726f000000000000006044820152606401610732565b6040517f13ead56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152612710604483015284811660648301527f000000000000000000000000000000000000000000000000000000000000000016906313ead562906084016020604051808303815f875af1158015612dfc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190613a3f565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990529192509089169063095ea7b3906044016020604051808303815f875af1158015612eb6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eda91906137f1565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905288169063095ea7b3906044016020604051808303815f875af1158015612f6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906137f1565b505f6040518061016001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766060020b81526020017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766061303790613810565b60020b81526020018881526020018781526020015f81526020015f81526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166388316456826040518263ffffffff1660e01b81526004016130d29190613a5a565b6080604051808303815f875af11580156130ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131129190613b45565b929e506fffffffffffffffffffffffffffffffff9091169c50975095505f8a61314657868f6131419190613712565b613152565b878f6131529190613712565b90508015613171578060015f82825461316b91906136aa565b90915550505b6040517f32148f67000000000000000000000000000000000000000000000000000000008152603c600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f67906024015f604051808303815f87803b1580156131d6575f5ffd5b505af11580156131e8573d5f5f3e3d5ffd5b505050505050505050505050505093509350939050565b7f00000000000000000000000000000000000000000000000000000000000000005f8181526005602052604090209061324c90826806e83567304ec6d4006807acad1d521ea40800612058565b50565b60b5817101000000000000000000000000000000000081106132765760409190911b9060801c5b690100000000000000000081106132925760209190911b9060401c5b6501000000000081106132aa5760109190911b9060201c5b630100000081106132c05760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b61119480613b9683390190565b5f6020828403121561331e575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461324c575f5ffd5b5f5f60408385031215613357575f5ffd5b82359150602083013561336981613325565b809150509250929050565b5f60208284031215613384575f5ffd5b813561338f81613325565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561340a5761340a613396565b604052919050565b5f60208284031215613422575f5ffd5b813567ffffffffffffffff811115613438575f5ffd5b8201601f81018413613448575f5ffd5b803567ffffffffffffffff81111561346257613462613396565b8060051b613472602082016133c3565b9182526020818401810192908101908784111561348d575f5ffd5b6020850194505b838510156134bb57843592506134a983613325565b82825260209485019490910190613494565b979650505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b61012081525f61352661012083018c6134c6565b8281036020840152613538818c6134c6565b604084019a909a5250506060810196909652608086019490945260a085019290925260c084015260e083015215156101009091015292915050565b5f82601f830112613582575f5ffd5b813567ffffffffffffffff81111561359c5761359c613396565b6135cd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016133c3565b8181528460208386010111156135e1575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f6060848603121561360f575f5ffd5b833567ffffffffffffffff811115613625575f5ffd5b61363186828701613573565b935050602084013567ffffffffffffffff81111561364d575f5ffd5b61365986828701613573565b93969395505050506040919091013590565b602081525f61338f60208301846134c6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156136bd576136bd61367d565b92915050565b80820281158282048414176136bd576136bd61367d565b5f8261370d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156136bd576136bd61367d565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137555761375561367d565b5060010190565b600181811c9082168061377057607f821691505b6020821081036137a7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f602082840312156137bd575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613801575f5ffd5b8151801515811461338f575f5ffd5b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000081036138445761384461367d565b5f0392915050565b601f82111561389357805f5260205f20601f840160051c810160208510156138715750805b601f840160051c820191505b81811015613890575f815560010161387d565b50505b505050565b815167ffffffffffffffff8111156138b2576138b2613396565b6138c6816138c0845461375c565b8461384c565b6020601f821160018114613917575f83156138e15750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455613890565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156139645787850151825560209485019460019092019101613944565b50848210156139a057868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b5f5f604083850312156139c0575f5ffd5b505080516020909101519092909150565b608081525f6139e360808301876134c6565b82810360208401526139f581876134c6565b60ff95909516604084015250506060015292915050565b5f81518060208401855e5f93019283525090919050565b5f613a37613a318386613a0c565b84613a0c565b949350505050565b5f60208284031215613a4f575f5ffd5b815161338f81613325565b815173ffffffffffffffffffffffffffffffffffffffff16815261016081016020830151613aa0602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151613ab7604084018262ffffff169052565b506060830151613acc606084018260020b9052565b506080830151613ae1608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151613b3561012084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061014092830151919092015290565b5f5f5f5f60808587031215613b58575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114613b7f575f5ffd5b604086015160609096015194979096509250505056fe60e060405234801561000f575f5ffd5b5060405161119438038061119483398101604081905261002e91610216565b8383835f61003c848261031d565b506001610049838261031d565b5060ff81166080524660a05261005d610078565b60c0525061006f915033905082610110565b5050505061046d565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516100a891906103d7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546101219190610448565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261019c575f5ffd5b81516001600160401b038111156101b5576101b5610179565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101e3576101e3610179565b6040528181528382016020018510156101fa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610229575f5ffd5b84516001600160401b0381111561023e575f5ffd5b61024a8782880161018d565b602087015190955090506001600160401b03811115610267575f5ffd5b6102738782880161018d565b935050604085015160ff81168114610289575f5ffd5b6060959095015193969295505050565b600181811c908216806102ad57607f821691505b6020821081036102cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031857805f5260205f20601f840160051c810160208510156102f65750805b601f840160051c820191505b81811015610315575f8155600101610302565b50505b505050565b81516001600160401b0381111561033657610336610179565b61034a816103448454610299565b846102d1565b6020601f82116001811461037c575f83156103655750848201515b5f19600385901b1c1916600184901b178455610315565b5f84815260208120601f198516915b828110156103ab578785015182556020948501946001909201910161038b565b50848210156103c857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f83546103e481610299565b6001821680156103fb57600181146104105761043d565b60ff198316865281151582028601935061043d565b865f5260205f205f5b8381101561043557815488820152600190910190602001610419565b505081860193505b509195945050505050565b8082018082111561046757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610cfd6104975f395f6104b101525f61047c01525f61014e0152610cfd5ff3fe608060405234801561000f575f5ffd5b50600436106100da575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101dd578063a9059cbb146101e5578063d505accf146101f8578063dd62ed3e1461020b575f5ffd5b806342966c681461018a57806370a082311461019f5780637ecebe00146101be575f5ffd5b806323b872dd116100b857806323b872dd14610136578063313ce567146101495780633644e51514610182575f5ffd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f5ffd5b6100e6610235565b6040516100f391906109b9565b60405180910390f35b61010f61010a366004610a34565b6102c0565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610a5c565b610339565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b610128610479565b61019d610198366004610a96565b6104d3565b005b6101286101ad366004610aad565b60036020525f908152604090205481565b6101286101cc366004610aad565b60056020525f908152604090205481565b6100e66104e0565b61010f6101f3366004610a34565b6104ed565b61019d610206366004610acd565b610570565b610128610219366004610b3a565b600460209081525f928352604080842090915290825290205481565b5f805461024190610b6b565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90610b6b565b80156102b85780601f1061028f576101008083540402835291602001916102b8565b820191905f5260205f20905b81548152906001019060200180831161029b57829003601f168201915b505050505081565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103cb5761039a8382610bbc565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080548592906103ff908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104669087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104ae576104a961088e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104dd3382610926565b50565b6001805461024190610b6b565b335f9081526003602052604081208054839190839061050d908490610bbc565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b428410156105df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f60016105ea610479565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610738573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107b357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105d6565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516108be9190610bf4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600360205260408120805483929061095a908490610bbc565b90915550506002805482900390556040518181525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a2f575f5ffd5b919050565b5f5f60408385031215610a45575f5ffd5b610a4e83610a0c565b946020939093013593505050565b5f5f5f60608486031215610a6e575f5ffd5b610a7784610a0c565b9250610a8560208501610a0c565b929592945050506040919091013590565b5f60208284031215610aa6575f5ffd5b5035919050565b5f60208284031215610abd575f5ffd5b610ac682610a0c565b9392505050565b5f5f5f5f5f5f5f60e0888a031215610ae3575f5ffd5b610aec88610a0c565b9650610afa60208901610a0c565b95506040880135945060608801359350608088013560ff81168114610b1d575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610b4b575f5ffd5b610b5483610a0c565b9150610b6260208401610a0c565b90509250929050565b600181811c90821680610b7f57607f821691505b602082108103610bb6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b81810381811115610333577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f5f83545f8160011c90506001821680610c0f57607f821691505b602082108103610c46577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015610c5a5760018114610c8d57610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450610cbb565b5f888152602090205f5b84811015610cb357815489820152600190910190602001610c97565b505082870194505b5092969550505050505056fea26469706673582212205df7019458ddc6a358585d679221b07a9e24fb31dbf8c630fcd1d119dc2aee2864736f6c634300081c0033a2646970667358221220ab92cf3b0ead9062d9643cd5d39919065482921907c578016f0b6253dcf39d7a64736f6c634300081c0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} +{ + "_format": "hh-sol-artifact-1", + "contractName": "MemeBase", + "sourceName": "contracts/MemeBase.sol", + "abi": [ + { + "inputs":[ + { + "internalType":"address", + "name":"_olas", + "type":"address" + }, + { + "internalType":"address", + "name":"_nativeToken", + "type":"address" + }, + { + "internalType":"address", + "name":"_uniV3PositionManager", + "type":"address" + }, + { + "internalType":"address", + "name":"_buyBackBurner", + "type":"address" + }, + { + "internalType":"uint256", + "name":"_minNativeTokenValue", + "type":"uint256" + }, + { + "internalType":"address[]", + "name":"accounts", + "type":"address[]" + }, + { + "internalType":"uint256[]", + "name":"amounts", + "type":"uint256[]" + } + ], + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"hearter", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"memeToken", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"allocation", + "type":"uint256" + } + ], + "name":"Collected", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"feeCollector", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"memeToken", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"nativeTokenAmount", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"memeTokenAmount", + "type":"uint256" + } + ], + "name":"FeesCollected", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"hearter", + "type":"address" + }, + { + "indexed":true, + "internalType":"uint256", + "name":"memeNonce", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Hearted", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"OLASJourneyToAscendance", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"memeToken", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Purged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"summoner", + "type":"address" + }, + { + "indexed":true, + "internalType":"uint256", + "name":"memeNonce", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Summoned", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"unleasher", + "type":"address" + }, + { + "indexed":true, + "internalType":"uint256", + "name":"memeNonce", + "type":"uint256" + }, + { + "indexed":true, + "internalType":"address", + "name":"memeToken", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"lpTokenId", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"liquidity", + "type":"uint256" + } + ], + "name":"Unleashed", + "type":"event" + }, + { + "inputs":[ + + ], + "name":"COLLECT_DELAY", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"CONTRIBUTION_AGNT", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"DECIMALS", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"FEE_TIER", + "outputs":[ + { + "internalType":"uint24", + "name":"", + "type":"uint24" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"LIQUIDITY_AGNT", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"LP_PERCENTAGE", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"MAX_TICK", + "outputs":[ + { + "internalType":"int24", + "name":"", + "type":"int24" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"MIN_TICK", + "outputs":[ + { + "internalType":"int24", + "name":"", + "type":"int24" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"MIN_TOTAL_SUPPLY", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"OLAS_BURN_PERCENTAGE", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"SUMMON_AGNT", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"UNLEASH_DELAY", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"VERSION", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"buyBackBurner", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address[]", + "name":"tokens", + "type":"address[]" + } + ], + "name":"collectFees", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"memeToken", + "type":"address" + } + ], + "name":"collectThisMeme", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"memeNonce", + "type":"uint256" + } + ], + "name":"heartThisMeme", + "outputs":[ + + ], + "stateMutability":"payable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"launchCampaignNonce", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"mapAccountActivities", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + }, + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"memeHearters", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"memeSummons", + "outputs":[ + { + "internalType":"string", + "name":"name", + "type":"string" + }, + { + "internalType":"string", + "name":"symbol", + "type":"string" + }, + { + "internalType":"uint256", + "name":"totalSupply", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"nativeTokenContributed", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"summonTime", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"unleashTime", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"heartersAmount", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"positionId", + "type":"uint256" + }, + { + "internalType":"bool", + "name":"isNativeFirst", + "type":"bool" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"memeTokenNonces", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"memeTokens", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"minNativeTokenValue", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"nativeToken", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"numTokens", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"olas", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"memeToken", + "type":"address" + } + ], + "name":"purgeThisMeme", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"scheduleForAscendance", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"scheduledForAscendance", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"string", + "name":"name", + "type":"string" + }, + { + "internalType":"string", + "name":"symbol", + "type":"string" + }, + { + "internalType":"uint256", + "name":"totalSupply", + "type":"uint256" + } + ], + "name":"summonThisMeme", + "outputs":[ + + ], + "stateMutability":"payable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"uniV3PositionManager", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"memeNonce", + "type":"uint256" + } + ], + "name":"unleashThisMeme", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + } + ], + "bytecode": "" +} \ No newline at end of file From 3cf220355c9d11fa26cc9affadb203e8069b8fcf Mon Sep 17 00:00:00 2001 From: David Vilela Date: Tue, 7 Jan 2025 14:06:33 +0100 Subject: [PATCH 3/6] feat: summon script --- scripts/summon.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 scripts/summon.py diff --git a/scripts/summon.py b/scripts/summon.py new file mode 100644 index 0000000..18f226d --- /dev/null +++ b/scripts/summon.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# ------------------------------------------------------------------------------ +# +# Copyright 2021-2024 Valory AG +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ------------------------------------------------------------------------------ + +"""Test contracts""" + +import json +import os +from pathlib import Path + +import dotenv +from web3 import Web3 + + +dotenv.load_dotenv(override=True) + +rpc = os.getenv("BASE_LEDGER_RPC") +w3 = Web3(Web3.HTTPProvider(rpc)) +meme_factory_address_base = w3.to_checksum_address( + "0x82a9c823332518c32a0c0edc050ef00934cf04d4" +) +abi_file = Path( + "packages", "dvilela", "contracts", "meme_factory", "build", "MemeBase.json" +) + +BASE_CHAIN_ID = 8453 + +with open(abi_file, "r") as file: + abi = json.load(file)["abi"] + +with open("keys.json", "r") as file: + keys = json.load(file) + PUBLIC_KEY = keys[0]["address"] + PRIVATE_KEY = keys[0]["private_key"] + +meme_factory_contract = w3.eth.contract(address=meme_factory_address_base, abi=abi) + +tx = meme_factory_contract.functions.summonThisMeme( + "Test Meme", + "TST", + 1000000000000000000000000, +).build_transaction( + { + "value": int(0.01e18), + "chainId": BASE_CHAIN_ID, + "gas": 500000, + "gasPrice": w3.to_wei("3", "gwei"), + "nonce": w3.eth.get_transaction_count(PUBLIC_KEY), + } +) + +signed_tx = w3.eth.account.sign_transaction(tx, private_key=PRIVATE_KEY) +tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction) +tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash) +print(tx_receipt) From 2e557a1a876c5fdd20abdcafb9ea3a43a56f392a Mon Sep 17 00:00:00 2001 From: David Vilela Date: Tue, 7 Jan 2025 16:54:04 +0100 Subject: [PATCH 4/6] fix: available actions --- packages/dvilela/agents/memeooorr/aea-config.yaml | 6 +++--- packages/dvilela/contracts/meme_factory/contract.yaml | 2 +- packages/dvilela/services/memeooorr/service.yaml | 2 +- .../skills/memeooorr_abci/behaviour_classes/base.py | 7 +++++-- packages/dvilela/skills/memeooorr_abci/skill.yaml | 6 +++--- .../dvilela/skills/memeooorr_chained_abci/skill.yaml | 2 +- packages/packages.json | 10 +++++----- scripts/summon.py | 2 +- 8 files changed, 20 insertions(+), 17 deletions(-) diff --git a/packages/dvilela/agents/memeooorr/aea-config.yaml b/packages/dvilela/agents/memeooorr/aea-config.yaml index 218f332..c04bfbb 100644 --- a/packages/dvilela/agents/memeooorr/aea-config.yaml +++ b/packages/dvilela/agents/memeooorr/aea-config.yaml @@ -21,7 +21,7 @@ contracts: - valory/gnosis_safe:0.1.0:bafybeiaw4yr7ubqlp63iz5wxqep3a5fokqs3kqva7sp2nsqg355zzucqgm - valory/gnosis_safe_proxy_factory:0.1.0:bafybeidkqhw7smq4kbqryodom6maj7gubc5nbxwm4vi343xbkqxx3brjtm - valory/multisend:0.1.0:bafybeig5byt5urg2d2bsecufxe5ql7f4mezg3mekfleeh32nmuusx66p4y -- dvilela/meme_factory:0.1.0:bafybeigasbg2rsw4hw2metcqmwbffbo24qki63zylczyvd7qlxwdretfkq +- dvilela/meme_factory:0.1.0:bafybeifnxuvifsxmsoxiwzhsmb626sgmr2vim6lcynoggyach4bad5ddsi - dvilela/service_registry:0.1.0:bafybeie2rrgzcjehlp2feff6bhkuindxzrnuwxe2jcrsy2thcdtrsp2o24 protocols: - open_aea/signing:1.0.0:bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi @@ -41,8 +41,8 @@ skills: - valory/transaction_settlement_abci:0.1.0:bafybeigh2vkt74jrad5gtsczrgqcuhcqe7jkgjy7jdw56yamlzwwnaymjy - valory/registration_abci:0.1.0:bafybeib3n6vqkfbrcubcbliebjnuwyywdinxkbzt76n6gbn2kg7ace47dq - valory/reset_pause_abci:0.1.0:bafybeihkj6lmaypspyxe5qqrjgnolyck62pyvqoylr24ab6ue4steqcw7e -- dvilela/memeooorr_abci:0.1.0:bafybeihclcjklhjyma4t7emzj5gpbzlzfkj3j2rlqcljturpbqou4nv72e -- dvilela/memeooorr_chained_abci:0.1.0:bafybeiavdpblni26zztz6z6ovg3konaj4oei64srrvxpbgcpdf5eqchhym +- dvilela/memeooorr_abci:0.1.0:bafybeicz5oljj3iyw7yo5krmdznvbfrpf2totjnoqbb3monqne4ws47yaa +- dvilela/memeooorr_chained_abci:0.1.0:bafybeievyd6rb4klbdgoxhcgjrx34fr7hu7whfsr6axzpcnnd7rzx6dddu default_ledger: ethereum required_ledgers: - ethereum diff --git a/packages/dvilela/contracts/meme_factory/contract.yaml b/packages/dvilela/contracts/meme_factory/contract.yaml index da1b150..325f099 100644 --- a/packages/dvilela/contracts/meme_factory/contract.yaml +++ b/packages/dvilela/contracts/meme_factory/contract.yaml @@ -8,7 +8,7 @@ aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeies3iafkjwo4xvqtqpdxvood7pf2wgto4t76dqswy55rya7vl5zgu __init__.py: bafybeiddslgyschgiuwsfiovqgxqqbkazdy6h3d4swwnq3tvpqaxzy37si - build/MemeBase.json: bafybeibr3pkkofhukwqjuqxuxsb52g2xlquzhu5uv6xqo527s2zzmp3cq4 + build/MemeBase.json: bafybeiholsk2gmpvayfftai7envnllozw3rjdsxrmpplht2fw5g6qiht3e contract.py: bafybeidmzrtgt343oti4ghjpmlhrlebyn6f7lqefpbutflvghh6pjbc6by fingerprint_ignore_patterns: [] contracts: [] diff --git a/packages/dvilela/services/memeooorr/service.yaml b/packages/dvilela/services/memeooorr/service.yaml index c46ec50..d54c713 100644 --- a/packages/dvilela/services/memeooorr/service.yaml +++ b/packages/dvilela/services/memeooorr/service.yaml @@ -7,7 +7,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeiaekcmielp6mb4qvmo2twwkpmoun36bqajrh7wnnkcpdnia45ycl4 fingerprint_ignore_patterns: [] -agent: dvilela/memeooorr:0.1.0:bafybeihiejxhlkftxdry6gwvoig3wpc7m6ze2cpl2ikc5av5f5nfkcwp4a +agent: dvilela/memeooorr:0.1.0:bafybeiau32k73nk4ypdfrs4dusehzjtfi3g4vdsspys4l5ryww65qdkyyi number_of_agents: 1 deployment: agent: diff --git a/packages/dvilela/skills/memeooorr_abci/behaviour_classes/base.py b/packages/dvilela/skills/memeooorr_abci/behaviour_classes/base.py index b61413f..e4d421b 100644 --- a/packages/dvilela/skills/memeooorr_abci/behaviour_classes/base.py +++ b/packages/dvilela/skills/memeooorr_abci/behaviour_classes/base.py @@ -311,11 +311,14 @@ def get_meme_available_actions( available_actions.remove("burn") # We can collect if we have hearted this token - if meme_data.get("token_address", None) not in hearted_memes: + if ( + meme_data.get("token_address", None) not in hearted_memes + and "collect" in available_actions + ): available_actions.remove("collect") # can only collect until 24hrs of - if seconds_since_unleash > 24 * 3600: + if seconds_since_unleash > 24 * 3600 and "collect" in available_actions: available_actions.remove("collect") return available_actions diff --git a/packages/dvilela/skills/memeooorr_abci/skill.yaml b/packages/dvilela/skills/memeooorr_abci/skill.yaml index 298e4e7..88aa921 100644 --- a/packages/dvilela/skills/memeooorr_abci/skill.yaml +++ b/packages/dvilela/skills/memeooorr_abci/skill.yaml @@ -8,7 +8,7 @@ aea_version: '>=1.0.0, <2.0.0' fingerprint: __init__.py: bafybeidorrnxjv4n4ngovxnu4mzod46kyrdncfmli4hapqeqnzp7imq7hm behaviour_classes/__init__.py: bafybeicjks4kxsb2r6a4armmaqxyxngwm3pouegq3fycm37rbe7otiwsre - behaviour_classes/base.py: bafybeigkt4cqhsazubp2hv2np3ln3pt6tvioae5leg366leol2zrvupkua + behaviour_classes/base.py: bafybeibfxklw2qehb7uy63gp2c6yue4f3q5bc4qj2hhryzm7x4dwr36f2a behaviour_classes/chain.py: bafybeigxfwko3rofqlzyjjhgeo6yabxseqngo2uz5muyfk3f2jjpgdrsli behaviour_classes/db.py: bafybeieuhjes2gsiidepjxcojgnn3swx2znem5uwvz7rwkxpwls3dmlxf4 behaviour_classes/llm.py: bafybeifdhipccrdtfx5vay2sfd7vss4iovwtyeefuz5vrjewjbyatk35c4 @@ -19,7 +19,7 @@ fingerprint: handlers.py: bafybeibnnxjczbaeqzxvg4s5mmrogzhgpswwwwpmw6gds6mltgrq27r67y models.py: bafybeidwapsmqst3jw3ahsl4o2lfsapcyn4ojsqn3gz5nvivpsykc4sefy payloads.py: bafybeifxy5bsv3rovzhzasmrohfnlggpacluigxr6c5fdyux3dwihikpum - prompts.py: bafybeibahd4qsd2gp7bq3t5ebpxbqosl27smhybf4zuqy637bd5zr3o23e + prompts.py: bafybeibtsh7msuzuubmbhrnezftnckelcqkicmljssuy5ufkjz6evagliy rounds.py: bafybeicjqi4qchvja4n4kyyvhwlblrwr3lfxriiyu3gq6nyt7rpxpvdn3u rounds_info.py: bafybeieepy67c2g7dtkeuueuldhvcpbeavvtkg36gmoempftiic2tqxb4y fingerprint_ignore_patterns: [] @@ -30,7 +30,7 @@ connections: - valory/http_server:0.22.0:bafybeihpgu56ovmq4npazdbh6y6ru5i7zuv6wvdglpxavsckyih56smu7m contracts: - valory/gnosis_safe:0.1.0:bafybeiaw4yr7ubqlp63iz5wxqep3a5fokqs3kqva7sp2nsqg355zzucqgm -- dvilela/meme_factory:0.1.0:bafybeigasbg2rsw4hw2metcqmwbffbo24qki63zylczyvd7qlxwdretfkq +- dvilela/meme_factory:0.1.0:bafybeifnxuvifsxmsoxiwzhsmb626sgmr2vim6lcynoggyach4bad5ddsi - dvilela/service_registry:0.1.0:bafybeie2rrgzcjehlp2feff6bhkuindxzrnuwxe2jcrsy2thcdtrsp2o24 protocols: - valory/srr:0.1.0:bafybeihrixgptxuqpf2s4nujypwlv5aed2nboozq5kl4c26cxw6r7si2x4 diff --git a/packages/dvilela/skills/memeooorr_chained_abci/skill.yaml b/packages/dvilela/skills/memeooorr_chained_abci/skill.yaml index f8f095d..9677f88 100644 --- a/packages/dvilela/skills/memeooorr_chained_abci/skill.yaml +++ b/packages/dvilela/skills/memeooorr_chained_abci/skill.yaml @@ -23,7 +23,7 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeihkj6lmaypspyxe5qqrjgnolyck62pyvqoylr24ab6ue4steqcw7e - valory/transaction_settlement_abci:0.1.0:bafybeigh2vkt74jrad5gtsczrgqcuhcqe7jkgjy7jdw56yamlzwwnaymjy - valory/termination_abci:0.1.0:bafybeifi2uodnrjsrivj53g3sjutocmyusbx6mlsb6oanqdyt2mfbyvusy -- dvilela/memeooorr_abci:0.1.0:bafybeihclcjklhjyma4t7emzj5gpbzlzfkj3j2rlqcljturpbqou4nv72e +- dvilela/memeooorr_abci:0.1.0:bafybeicz5oljj3iyw7yo5krmdznvbfrpf2totjnoqbb3monqne4ws47yaa behaviours: main: args: {} diff --git a/packages/packages.json b/packages/packages.json index 9027f87..f852777 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -1,13 +1,13 @@ { "dev": { - "contract/dvilela/meme_factory/0.1.0": "bafybeigasbg2rsw4hw2metcqmwbffbo24qki63zylczyvd7qlxwdretfkq", + "contract/dvilela/meme_factory/0.1.0": "bafybeifnxuvifsxmsoxiwzhsmb626sgmr2vim6lcynoggyach4bad5ddsi", "contract/dvilela/service_registry/0.1.0": "bafybeie2rrgzcjehlp2feff6bhkuindxzrnuwxe2jcrsy2thcdtrsp2o24", "connection/dvilela/twikit/0.1.0": "bafybeigm54eigom3nyp2t3u54yxznhb5gshpydmrmgeibmw6gqnmyqrv6m", "connection/dvilela/genai/0.1.0": "bafybeidkxxlonrxirznivkmzc34wmby4e4s57rfg2b7k6xyos23g3y6cdy", - "skill/dvilela/memeooorr_abci/0.1.0": "bafybeihclcjklhjyma4t7emzj5gpbzlzfkj3j2rlqcljturpbqou4nv72e", - "skill/dvilela/memeooorr_chained_abci/0.1.0": "bafybeiavdpblni26zztz6z6ovg3konaj4oei64srrvxpbgcpdf5eqchhym", - "agent/dvilela/memeooorr/0.1.0": "bafybeihiejxhlkftxdry6gwvoig3wpc7m6ze2cpl2ikc5av5f5nfkcwp4a", - "service/dvilela/memeooorr/0.1.0": "bafybeicy44nktxwngev2dlgathl2ir644btp76q63wpcdteim66t6lyjuu" + "skill/dvilela/memeooorr_abci/0.1.0": "bafybeicz5oljj3iyw7yo5krmdznvbfrpf2totjnoqbb3monqne4ws47yaa", + "skill/dvilela/memeooorr_chained_abci/0.1.0": "bafybeievyd6rb4klbdgoxhcgjrx34fr7hu7whfsr6axzpcnnd7rzx6dddu", + "agent/dvilela/memeooorr/0.1.0": "bafybeiau32k73nk4ypdfrs4dusehzjtfi3g4vdsspys4l5ryww65qdkyyi", + "service/dvilela/memeooorr/0.1.0": "bafybeibcbvt5yojmcoa6y7cmzhgpo72m4zife37nggmmwmkxjezrs2rjzm" }, "third_party": { "protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi", diff --git a/scripts/summon.py b/scripts/summon.py index 18f226d..c0b0de8 100644 --- a/scripts/summon.py +++ b/scripts/summon.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2021-2024 Valory AG +# Copyright 2021-2025 Valory AG # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From d382584c41a8f7bae084d257c9a3fcece3c323e6 Mon Sep 17 00:00:00 2001 From: David Vilela Date: Tue, 7 Jan 2025 17:08:21 +0100 Subject: [PATCH 5/6] fix: rename file --- packages/dvilela/agents/memeooorr/aea-config.yaml | 6 +++--- .../build/{MemeBase.json => MemeFactory.json} | 0 packages/dvilela/contracts/meme_factory/contract.yaml | 4 ++-- packages/dvilela/services/memeooorr/service.yaml | 2 +- packages/dvilela/skills/memeooorr_abci/skill.yaml | 2 +- .../dvilela/skills/memeooorr_chained_abci/skill.yaml | 2 +- packages/packages.json | 10 +++++----- 7 files changed, 13 insertions(+), 13 deletions(-) rename packages/dvilela/contracts/meme_factory/build/{MemeBase.json => MemeFactory.json} (100%) diff --git a/packages/dvilela/agents/memeooorr/aea-config.yaml b/packages/dvilela/agents/memeooorr/aea-config.yaml index c04bfbb..8e1deb2 100644 --- a/packages/dvilela/agents/memeooorr/aea-config.yaml +++ b/packages/dvilela/agents/memeooorr/aea-config.yaml @@ -21,7 +21,7 @@ contracts: - valory/gnosis_safe:0.1.0:bafybeiaw4yr7ubqlp63iz5wxqep3a5fokqs3kqva7sp2nsqg355zzucqgm - valory/gnosis_safe_proxy_factory:0.1.0:bafybeidkqhw7smq4kbqryodom6maj7gubc5nbxwm4vi343xbkqxx3brjtm - valory/multisend:0.1.0:bafybeig5byt5urg2d2bsecufxe5ql7f4mezg3mekfleeh32nmuusx66p4y -- dvilela/meme_factory:0.1.0:bafybeifnxuvifsxmsoxiwzhsmb626sgmr2vim6lcynoggyach4bad5ddsi +- dvilela/meme_factory:0.1.0:bafybeiavxhmfuioccrt6v5qoj5hrae6nhvxsstl7ozcr37d5fymvpwjppa - dvilela/service_registry:0.1.0:bafybeie2rrgzcjehlp2feff6bhkuindxzrnuwxe2jcrsy2thcdtrsp2o24 protocols: - open_aea/signing:1.0.0:bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi @@ -41,8 +41,8 @@ skills: - valory/transaction_settlement_abci:0.1.0:bafybeigh2vkt74jrad5gtsczrgqcuhcqe7jkgjy7jdw56yamlzwwnaymjy - valory/registration_abci:0.1.0:bafybeib3n6vqkfbrcubcbliebjnuwyywdinxkbzt76n6gbn2kg7ace47dq - valory/reset_pause_abci:0.1.0:bafybeihkj6lmaypspyxe5qqrjgnolyck62pyvqoylr24ab6ue4steqcw7e -- dvilela/memeooorr_abci:0.1.0:bafybeicz5oljj3iyw7yo5krmdznvbfrpf2totjnoqbb3monqne4ws47yaa -- dvilela/memeooorr_chained_abci:0.1.0:bafybeievyd6rb4klbdgoxhcgjrx34fr7hu7whfsr6axzpcnnd7rzx6dddu +- dvilela/memeooorr_abci:0.1.0:bafybeie4p6q2zkjiopmskigvhbaaxgdw32es7gzpoq4df6jnsf735wszdy +- dvilela/memeooorr_chained_abci:0.1.0:bafybeibrjtfwtrx6prfc5o4fg3pvkqqjnzhbw2d62sra65nybtmpp3tb64 default_ledger: ethereum required_ledgers: - ethereum diff --git a/packages/dvilela/contracts/meme_factory/build/MemeBase.json b/packages/dvilela/contracts/meme_factory/build/MemeFactory.json similarity index 100% rename from packages/dvilela/contracts/meme_factory/build/MemeBase.json rename to packages/dvilela/contracts/meme_factory/build/MemeFactory.json diff --git a/packages/dvilela/contracts/meme_factory/contract.yaml b/packages/dvilela/contracts/meme_factory/contract.yaml index 325f099..f4d0eb5 100644 --- a/packages/dvilela/contracts/meme_factory/contract.yaml +++ b/packages/dvilela/contracts/meme_factory/contract.yaml @@ -8,13 +8,13 @@ aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeies3iafkjwo4xvqtqpdxvood7pf2wgto4t76dqswy55rya7vl5zgu __init__.py: bafybeiddslgyschgiuwsfiovqgxqqbkazdy6h3d4swwnq3tvpqaxzy37si - build/MemeBase.json: bafybeiholsk2gmpvayfftai7envnllozw3rjdsxrmpplht2fw5g6qiht3e + build/MemeFactory.json: bafybeiholsk2gmpvayfftai7envnllozw3rjdsxrmpplht2fw5g6qiht3e contract.py: bafybeidmzrtgt343oti4ghjpmlhrlebyn6f7lqefpbutflvghh6pjbc6by fingerprint_ignore_patterns: [] contracts: [] class_name: MemeFactoryContract contract_interface_paths: - ethereum: build/MemeBase.json + ethereum: build/MemeFactory.json dependencies: ecdsa: version: '>=0.15' diff --git a/packages/dvilela/services/memeooorr/service.yaml b/packages/dvilela/services/memeooorr/service.yaml index d54c713..2a4351f 100644 --- a/packages/dvilela/services/memeooorr/service.yaml +++ b/packages/dvilela/services/memeooorr/service.yaml @@ -7,7 +7,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeiaekcmielp6mb4qvmo2twwkpmoun36bqajrh7wnnkcpdnia45ycl4 fingerprint_ignore_patterns: [] -agent: dvilela/memeooorr:0.1.0:bafybeiau32k73nk4ypdfrs4dusehzjtfi3g4vdsspys4l5ryww65qdkyyi +agent: dvilela/memeooorr:0.1.0:bafybeidvqrbyihdio25fim7v3kw2vmudzr5tc3werzbolf3qn3clks5g4a number_of_agents: 1 deployment: agent: diff --git a/packages/dvilela/skills/memeooorr_abci/skill.yaml b/packages/dvilela/skills/memeooorr_abci/skill.yaml index 88aa921..232d06d 100644 --- a/packages/dvilela/skills/memeooorr_abci/skill.yaml +++ b/packages/dvilela/skills/memeooorr_abci/skill.yaml @@ -30,7 +30,7 @@ connections: - valory/http_server:0.22.0:bafybeihpgu56ovmq4npazdbh6y6ru5i7zuv6wvdglpxavsckyih56smu7m contracts: - valory/gnosis_safe:0.1.0:bafybeiaw4yr7ubqlp63iz5wxqep3a5fokqs3kqva7sp2nsqg355zzucqgm -- dvilela/meme_factory:0.1.0:bafybeifnxuvifsxmsoxiwzhsmb626sgmr2vim6lcynoggyach4bad5ddsi +- dvilela/meme_factory:0.1.0:bafybeiavxhmfuioccrt6v5qoj5hrae6nhvxsstl7ozcr37d5fymvpwjppa - dvilela/service_registry:0.1.0:bafybeie2rrgzcjehlp2feff6bhkuindxzrnuwxe2jcrsy2thcdtrsp2o24 protocols: - valory/srr:0.1.0:bafybeihrixgptxuqpf2s4nujypwlv5aed2nboozq5kl4c26cxw6r7si2x4 diff --git a/packages/dvilela/skills/memeooorr_chained_abci/skill.yaml b/packages/dvilela/skills/memeooorr_chained_abci/skill.yaml index 9677f88..0f4c762 100644 --- a/packages/dvilela/skills/memeooorr_chained_abci/skill.yaml +++ b/packages/dvilela/skills/memeooorr_chained_abci/skill.yaml @@ -23,7 +23,7 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeihkj6lmaypspyxe5qqrjgnolyck62pyvqoylr24ab6ue4steqcw7e - valory/transaction_settlement_abci:0.1.0:bafybeigh2vkt74jrad5gtsczrgqcuhcqe7jkgjy7jdw56yamlzwwnaymjy - valory/termination_abci:0.1.0:bafybeifi2uodnrjsrivj53g3sjutocmyusbx6mlsb6oanqdyt2mfbyvusy -- dvilela/memeooorr_abci:0.1.0:bafybeicz5oljj3iyw7yo5krmdznvbfrpf2totjnoqbb3monqne4ws47yaa +- dvilela/memeooorr_abci:0.1.0:bafybeie4p6q2zkjiopmskigvhbaaxgdw32es7gzpoq4df6jnsf735wszdy behaviours: main: args: {} diff --git a/packages/packages.json b/packages/packages.json index f852777..7c98574 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -1,13 +1,13 @@ { "dev": { - "contract/dvilela/meme_factory/0.1.0": "bafybeifnxuvifsxmsoxiwzhsmb626sgmr2vim6lcynoggyach4bad5ddsi", + "contract/dvilela/meme_factory/0.1.0": "bafybeiavxhmfuioccrt6v5qoj5hrae6nhvxsstl7ozcr37d5fymvpwjppa", "contract/dvilela/service_registry/0.1.0": "bafybeie2rrgzcjehlp2feff6bhkuindxzrnuwxe2jcrsy2thcdtrsp2o24", "connection/dvilela/twikit/0.1.0": "bafybeigm54eigom3nyp2t3u54yxznhb5gshpydmrmgeibmw6gqnmyqrv6m", "connection/dvilela/genai/0.1.0": "bafybeidkxxlonrxirznivkmzc34wmby4e4s57rfg2b7k6xyos23g3y6cdy", - "skill/dvilela/memeooorr_abci/0.1.0": "bafybeicz5oljj3iyw7yo5krmdznvbfrpf2totjnoqbb3monqne4ws47yaa", - "skill/dvilela/memeooorr_chained_abci/0.1.0": "bafybeievyd6rb4klbdgoxhcgjrx34fr7hu7whfsr6axzpcnnd7rzx6dddu", - "agent/dvilela/memeooorr/0.1.0": "bafybeiau32k73nk4ypdfrs4dusehzjtfi3g4vdsspys4l5ryww65qdkyyi", - "service/dvilela/memeooorr/0.1.0": "bafybeibcbvt5yojmcoa6y7cmzhgpo72m4zife37nggmmwmkxjezrs2rjzm" + "skill/dvilela/memeooorr_abci/0.1.0": "bafybeie4p6q2zkjiopmskigvhbaaxgdw32es7gzpoq4df6jnsf735wszdy", + "skill/dvilela/memeooorr_chained_abci/0.1.0": "bafybeibrjtfwtrx6prfc5o4fg3pvkqqjnzhbw2d62sra65nybtmpp3tb64", + "agent/dvilela/memeooorr/0.1.0": "bafybeidvqrbyihdio25fim7v3kw2vmudzr5tc3werzbolf3qn3clks5g4a", + "service/dvilela/memeooorr/0.1.0": "bafybeicecxdycxh6tthzsj6v2c7q5b6ufaqhtn2bn6mpn4ur23tuk7brsm" }, "third_party": { "protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi", From 5fabd1aa110321aa77083876dbe7b0607273eadc Mon Sep 17 00:00:00 2001 From: David Vilela Date: Tue, 7 Jan 2025 17:36:27 +0100 Subject: [PATCH 6/6] fix: linters --- .gitleaksignore | 5 +++++ scripts/summon.py | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitleaksignore b/.gitleaksignore index 349cfbd..bb0c1a6 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -390,3 +390,8 @@ f5704a9c546a17ac608b7d987a461963db3d37c4:scripts/deployment/globals_celo_mainnet fdee57a191711e8c578a87ad7d19e3bcabbafee3:scripts/deployment/globals_base_mainnet_meme_beta.json:generic-api-key:15 fdee57a191711e8c578a87ad7d19e3bcabbafee3:scripts/deployment/globals_base_mainnet_meme_beta.json:generic-api-key:16 fdee57a191711e8c578a87ad7d19e3bcabbafee3:scripts/deployment/globals_base_mainnet_meme_beta.json:generic-api-key:18 +cf5ef5cfdb24d6311f60e4b81b5923a244bcd283:packages/dvilela/skills/memeooorr_chained_abci/skill.yaml:generic-api-key:83 +cf5ef5cfdb24d6311f60e4b81b5923a244bcd283:packages/dvilela/skills/memeooorr_chained_abci/skill.yaml:generic-api-key:150 +cf5ef5cfdb24d6311f60e4b81b5923a244bcd283:packages/dvilela/skills/memeooorr_chained_abci/skill.yaml:generic-api-key:151 +cf5ef5cfdb24d6311f60e4b81b5923a244bcd283:packages/dvilela/services/memeooorr/service.yaml:generic-api-key:55 +cf5ef5cfdb24d6311f60e4b81b5923a244bcd283:packages/dvilela/agents/memeooorr/aea-config.yaml:generic-api-key:148 diff --git a/scripts/summon.py b/scripts/summon.py index c0b0de8..7b9709e 100644 --- a/scripts/summon.py +++ b/scripts/summon.py @@ -41,10 +41,10 @@ BASE_CHAIN_ID = 8453 -with open(abi_file, "r") as file: +with open(abi_file, "r", encoding="utf-8") as file: abi = json.load(file)["abi"] -with open("keys.json", "r") as file: +with open("keys.json", "r", encoding="utf-8") as file: keys = json.load(file) PUBLIC_KEY = keys[0]["address"] PRIVATE_KEY = keys[0]["private_key"]