From c4fbce9f76bc41c5bffad8ee95b66d34cae3134d Mon Sep 17 00:00:00 2001 From: Ladd Hoffman Date: Sun, 10 Mar 2024 19:39:15 -0500 Subject: [PATCH] Deployed to testnet --- client/src/App.jsx | 93 ++++---- client/src/assets/DAO.json | 453 +++++++++++++------------------------ ethereum/hardhat.config.js | 4 + 3 files changed, 212 insertions(+), 338 deletions(-) diff --git a/client/src/App.jsx b/client/src/App.jsx index 57436c0..7cc82eb 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -1,63 +1,75 @@ -import { useCallback, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useSDK } from '@metamask/sdk-react'; import { Web3 } from 'web3'; import Button from 'react-bootstrap/Button'; // import './App.css'; import DAOArtifact from './assets/DAO.json'; -import work1Artifact from './assets/Work1.json'; +// import work1Artifact from './assets/Work1.json'; -const DAOAddress = '0x91ffddC013E2Df43E8FB177922d762bC8D776e79'; -const work1Address = '0x08673dE03e1e9b4c9A0aF99463fa4DEFD3891987'; +const contracts = { + '0x539': { // Hardhat + DAO: '0x7209aa5b0B91700615bA982e4E4F1Eb967E31cf1', + Work1: '0x4a3f03f50b542BD27DbcaDAF9A3d608AE4f5AACc', + }, + '0xaa36a7': { // Sepolia + DAO: '0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3', + Work1: '0x050C420Cc4995B41217Eba1B54B82Fd5687e9139', + }, +}; function App() { const { sdk, connected, provider, chainId, account, balance, } = useSDK(); - const [work1, setWork1] = useState(); const [DAO, setDAO] = useState(); - const [work1Price, setWork1Price] = useState(); + // const [work1, setWork1] = useState(); + // const [work1Price, setWork1Price] = useState(); const [balanceEther, setBalanceEther] = useState(); const [reputation, setReputation] = useState(); + const [totalReputation, setTotalReputation] = useState(); const [validationPoolCount, setValidationPoolCount] = useState(); const [latestPoolIndex, setLatestPoolIndex] = useState(); const [votePasses, setVotePasses] = useState(); - const watchReputationNFT = useCallback(async (tokenId) => { - await provider.request({ - method: 'wallet_watchAsset', - params: { - type: 'ERC721', - options: { - address: DAOAddress, - tokenId: BigInt(tokenId).toString(), - }, - }, - }); - }, [provider]); + // const watchReputationToken = useCallback(async () => { + // await provider.request({ + // method: 'wallet_watchAsset', + // params: { + // type: 'ERC20', + // options: { + // address: DAOAddress, + // }, + // }, + // }); + // }, [provider]); useEffect(() => { - if (!provider) return; + if (!provider || !chainId || !account) return; + if (!contracts[chainId]) return; const web3 = new Web3(provider); - const work1Contract = new web3.eth.Contract(work1Artifact.abi, work1Address); - const DAOContract = new web3.eth.Contract(DAOArtifact.abi, DAOAddress); + const DAOContract = new web3.eth.Contract(DAOArtifact.abi, contracts[chainId].DAO); + // const work1Contract = new web3.eth.Contract(work1Artifact.abi, contracts[chainId].Work1); + + // const fetchPrice = async () => { + // const priceWei = await work1Contract.methods.price().call(); + // setWork1Price(web3.utils.fromWei(priceWei, 'ether')); + // }; - const fetchPrice = async () => { - const priceWei = await work1Contract.methods.price().call(); - setWork1Price(web3.utils.fromWei(priceWei, 'ether')); - }; const fetchReputation = async () => { - setReputation(await DAOContract.methods.valueOf(0).call()); + console.log(`fetchReputation, account: ${account}`); + setReputation(await DAOContract.methods.balanceOf(account).call()); + setTotalReputation(await DAOContract.methods.totalSupply().call()); }; const fetchValidationPoolCount = async () => { setValidationPoolCount(await DAOContract.methods.validationPoolCount().call()); }; - fetchPrice(); + // fetchPrice(); fetchReputation(); fetchValidationPoolCount(); - setWork1(work1Contract); + // setWork1(work1Contract); setDAO(DAOContract); DAOContract.events.ValidationPoolInitiated({ fromBlock: 'latest' }).on('data', (event) => { @@ -69,17 +81,14 @@ function App() { DAOContract.events.ValidationPoolResolved({ fromBlock: 'latest' }).on('data', (event) => { console.log('event: validation pool resolved', event); setVotePasses(event.returnValues.votePasses); - if (event.returnValues.votePasses) { - watchReputationNFT(event.returnValues.newTokenId); - } + fetchReputation(); }); - }, [provider, watchReputationNFT]); + }, [provider, account, chainId]); useEffect(() => { - if (provider && balance) { - const web3 = new Web3(provider); - setBalanceEther(web3.utils.fromWei(balance, 'ether')); - } + if (!provider || balance === undefined) return; + const web3 = new Web3(provider); + setBalanceEther(web3.utils.fromWei(balance, 'ether')); }, [provider, balance]); const connect = async () => { @@ -133,6 +142,11 @@ function App() { {connected && ( <>
+ {!contracts[chainId] && ( +
+ Please switch MetaMask to Sepolia testnet! +
+ )}
{chainId && `Chain ID: ${chainId}`}
@@ -143,7 +157,10 @@ function App() { {`Balance: ${balanceEther} ETH`}
- {`REP: ${reputation}`} + {`Your REP: ${reputation}`} +
+
+ {`Total REP: ${totalReputation}`}
@@ -160,7 +177,7 @@ function App() { {`Outcome: ${votePasses}`}
- {`Work1 Price: ${work1Price} ETH`} + { /* `Work1 Price: ${work1Price} ETH` */ }
{ /* */ } diff --git a/client/src/assets/DAO.json b/client/src/assets/DAO.json index b71e23f..e4e155d 100644 --- a/client/src/assets/DAO.json +++ b/client/src/assets/DAO.json @@ -7,37 +7,42 @@ "inputs": [ { "internalType": "address", - "name": "sender", + "name": "spender", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "allowance", "type": "uint256" }, { - "internalType": "address", - "name": "owner", - "type": "address" + "internalType": "uint256", + "name": "needed", + "type": "uint256" } ], - "name": "ERC721IncorrectOwner", + "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", - "name": "operator", + "name": "sender", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", "type": "uint256" } ], - "name": "ERC721InsufficientApproval", + "name": "ERC20InsufficientBalance", "type": "error" }, { @@ -48,29 +53,7 @@ "type": "address" } ], - "name": "ERC721InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "ERC721InvalidOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC721InvalidOwner", + "name": "ERC20InvalidApprover", "type": "error" }, { @@ -81,7 +64,7 @@ "type": "address" } ], - "name": "ERC721InvalidReceiver", + "name": "ERC20InvalidReceiver", "type": "error" }, { @@ -92,18 +75,18 @@ "type": "address" } ], - "name": "ERC721InvalidSender", + "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" + "internalType": "address", + "name": "spender", + "type": "address" } ], - "name": "ERC721NonexistentToken", + "name": "ERC20InvalidSpender", "type": "error" }, { @@ -118,42 +101,17 @@ { "indexed": true, "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", + "name": "spender", "type": "address" }, { "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" + "internalType": "uint256", + "name": "value", + "type": "uint256" } ], - "name": "ApprovalForAll", + "name": "Approval", "type": "event" }, { @@ -172,9 +130,9 @@ "type": "address" }, { - "indexed": true, + "indexed": false, "internalType": "uint256", - "name": "tokenId", + "name": "value", "type": "uint256" } ], @@ -202,12 +160,6 @@ "internalType": "bool", "name": "votePasses", "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newTokenId", - "type": "uint256" } ], "name": "ValidationPoolResolved", @@ -217,17 +169,47 @@ "inputs": [ { "internalType": "address", - "name": "to", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "value", "type": "uint256" } ], "name": "approve", - "outputs": [], + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], "stateMutability": "nonpayable", "type": "function" }, @@ -235,7 +217,7 @@ "inputs": [ { "internalType": "address", - "name": "owner", + "name": "account", "type": "address" } ], @@ -250,6 +232,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -269,25 +264,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -316,16 +292,11 @@ "inputs": [ { "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", + "name": "", "type": "address" } ], - "name": "isApprovedForAll", + "name": "isMember", "outputs": [ { "internalType": "bool", @@ -336,6 +307,38 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "memberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "members", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "name", @@ -351,145 +354,27 @@ }, { "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, { "internalType": "uint256", - "name": "tokenId", + "name": "poolIndex", "type": "uint256" }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ { "internalType": "uint256", - "name": "tokenId", + "name": "amount", "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" }, { "internalType": "bool", - "name": "approved", + "name": "inFavor", "type": "bool" } ], - "name": "setApprovalForAll", + "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "symbol", @@ -504,35 +389,40 @@ "type": "function" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", + "inputs": [], + "name": "totalSupply", "outputs": [ { - "internalType": "string", + "internalType": "uint256", "name": "", - "type": "string" + "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { - "inputs": [], - "name": "totalValue", - "outputs": [ + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, { "internalType": "uint256", - "name": "", + "name": "value", "type": "uint256" } ], - "stateMutability": "view", + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", "type": "function" }, { @@ -549,12 +439,18 @@ }, { "internalType": "uint256", - "name": "tokenId", + "name": "value", "type": "uint256" } ], "name": "transferFrom", - "outputs": [], + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], "stateMutability": "nonpayable", "type": "function" }, @@ -596,6 +492,16 @@ "name": "fee", "type": "uint256" }, + { + "internalType": "uint256", + "name": "initialStakedFor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialStakedAgainst", + "type": "uint256" + }, { "internalType": "uint256", "name": "duration", @@ -615,67 +521,14 @@ "internalType": "bool", "name": "outcome", "type": "bool" - }, - { - "internalType": "uint256", - "name": "tokenIdFor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenIdAgainst", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "valueOf", - "outputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "verifiedValueOf", - "outputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f524550000000000000000000000000000000000000000000000000000000000081525081600090816200008f919062000324565b508060019081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b613331806200041b6000396000f3fe60806040526004361061012a5760003560e01c80636352211e116100ab578063a23362791161006f578063a23362791461042f578063b88d4fde14610474578063c87b56dd1461049d578063cadf338f146104da578063d4c3eea014610517578063e985e9c5146105425761012a565b80636352211e14610336578063642b5bfb1461037357806370a082311461039e57806395d89b41146103db578063a22cb465146104065761012a565b806317c18217116100f257806317c182171461023a57806323b872dd14610277578063249cfda9146102a057806342842e0e146102dd57806360780cd7146103065761012a565b806301ffc9a71461012f57806306fdde031461016c578063081812fc14610197578063095ea7b3146101d4578063150b7a02146101fd575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612453565b61057f565b604051610163919061249b565b60405180910390f35b34801561017857600080fd5b50610181610661565b60405161018e9190612546565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b9919061259e565b6106f3565b6040516101cb919061260c565b60405180910390f35b3480156101e057600080fd5b506101fb60048036038101906101f69190612653565b61070f565b005b34801561020957600080fd5b50610224600480360381019061021f91906126f8565b610725565b604051610231919061278f565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061259e565b610779565b60405161026e919061249b565b60405180910390f35b34801561028357600080fd5b5061029e600480360381019061029991906127aa565b610c9c565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190612653565b610d9e565b6040516102d4919061280c565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff91906127aa565b610e27565b005b610320600480360381019061031b9190612653565b610e47565b60405161032d919061280c565b60405180910390f35b34801561034257600080fd5b5061035d6004803603810190610358919061259e565b610fbe565b60405161036a919061260c565b60405180910390f35b34801561037f57600080fd5b50610388610fd0565b604051610395919061280c565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190612827565b610fd6565b6040516103d2919061280c565b60405180910390f35b3480156103e757600080fd5b506103f0611090565b6040516103fd9190612546565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190612880565b611122565b005b34801561043b57600080fd5b506104566004803603810190610451919061259e565b611138565b60405161046b999897969594939291906128c0565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190612a7d565b6111c0565b005b3480156104a957600080fd5b506104c460048036038101906104bf919061259e565b6111dd565b6040516104d19190612546565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc919061259e565b611246565b60405161050e919061280c565b60405180910390f35b34801561052357600080fd5b5061052c611263565b604051610539919061280c565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190612b00565b611269565b604051610576919061249b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061065a5750610659826112fd565b5b9050919050565b60606000805461067090612b6f565b80601f016020809104026020016040519081016040528092919081815260200182805461069c90612b6f565b80156106e95780601f106106be576101008083540402835291602001916106e9565b820191906000526020600020905b8154815290600101906020018083116106cc57829003601f168201915b5050505050905090565b60006106fe82611367565b50610708826113ef565b9050919050565b610721828261071c61142c565b611434565b5050565b60008083838101906107379190612bf5565b90506000600960008360000151815260200190815260200160002090506107648188846020015189611446565b63150b7a0260e01b9250505095945050505050565b600080600960008481526020019081526020016000209050806005015442116107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90612c94565b60405180910390fd5b600015158160060160009054906101000a900460ff1615151461082f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082690612d00565b60405180910390fd5b600080600080600090505b84600101548110156108ab5784600001600082815260200190815260200160002091508160000160009054906101000a900460ff161561088b578160010154846108849190612d4f565b935061089e565b81600101548361089b9190612d4f565b92505b808060010191505061083a565b5081831015945060018460060160006101000a81548160ff0219169083151502179055507fea1bc2ea68f48594eea9b956b19b9e85216707c2b0660fb73dc9ee37d38f574d858560070154604051610904929190612d83565b60405180910390a160008060005b8660010154811015610a7757866000016000828152602001908152602001600020935087801561095157508360000160009054906101000a900460ff16155b15610984578360010154826109669190612d4f565b915061097f84600301548860070154866001015461153f565b610a6a565b871580156109a057508360000160009054906101000a900460ff165b156109d3578360010154826109b59190612d4f565b91506109ce84600301548860080154866001015461153f565b610a69565b8780156109ee57508360000160009054906101000a900460ff165b8015610a0257508660070154846003015414155b15610a1e57836001015483610a179190612d4f565b9250610a68565b87158015610a3b57508360000160009054906101000a900460ff16155b8015610a4f57508660080154846003015414155b15610a6757836001015483610a649190612d4f565b92505b5b5b5b8080600101915050610912565b5060005b8660010154811015610b82578660000160008281526020019081526020016000209350878015610ab957508360000160009054906101000a900460ff165b8015610acd57508660070154846003015414155b15610b0a57600083856001015484610ae59190612dac565b610aef9190612e1d565b9050610b04886008015486600301548361153f565b50610b75565b87158015610b2757508360000160009054906101000a900460ff16155b8015610b3b57508660080154846003015414155b15610b7457600083856001015484610b539190612dac565b610b5d9190612e1d565b9050610b72886007015486600301548361153f565b505b5b8080600101915050610a7b565b508615610bbd57610bbc308760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168860070154611627565b5b60005b600754811015610c90576000610bd582610fbe565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c105750610c83565b6000600854610c1e84611246565b8a60030154610c2d9190612dac565b610c379190612e1d565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c7f573d6000803e3d6000fd5b5050505b8080600101915050610bc0565b50505050505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d0e5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610d05919061260c565b60405180910390fd5b6000610d228383610d1d61142c565b611794565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d98578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610d8f93929190612e4e565b60405180910390fd5b50505050565b60008273ffffffffffffffffffffffffffffffffffffffff16610dc083610fbe565b73ffffffffffffffffffffffffffffffffffffffff1614610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90612ed1565b60405180910390fd5b610e1f82611246565b905092915050565b610e42838383604051806020016040528060008152506111c0565b505050565b6000803411610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8290612f63565b60405180910390fd5b600a6000815480929190610e9e90612f83565b9190505590506000600960008381526020019081526020016000209050838160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600301819055508281600401819055508242610f1c9190612d4f565b8160050181905550610f39600234610f349190612e1d565b6119ae565b8160070181905550610f56600234610f519190612e1d565b6119ae565b8160080181905550610f6f813060018460070154611446565b610f80813060008460080154611446565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a82604051610faf919061280c565b60405180910390a15092915050565b6000610fc982611367565b9050919050565b600a5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110495760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401611040919061260c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461109f90612b6f565b80601f01602080910402602001604051908101604052809291908181526020018280546110cb90612b6f565b80156111185780601f106110ed57610100808354040283529160200191611118565b820191906000526020600020905b8154815290600101906020018083116110fb57829003601f168201915b5050505050905090565b61113461112d61142c565b8383611a09565b5050565b60096020528060005260406000206000915090508060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040154908060050154908060060160009054906101000a900460ff16908060060160019054906101000a900460ff16908060070154908060080154905089565b6111cb848484610c9c565b6111d784848484611b78565b50505050565b60606111e882611367565b5060006111f3611d2f565b90506000815111611213576040518060200160405280600081525061123e565b8061121d84611d46565b60405160200161122e929190613007565b6040516020818303038152906040525b915050919050565b600060066000838152602001908152602001600020549050919050565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008061137383611e14565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113e657826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016113dd919061280c565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6114418383836001611e51565b505050565b836005015442111561148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490613077565b60405180910390fd5b60008460000160008660010160008154809291906114aa90612f83565b9190505581526020019081526020016000209050838160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160000160006101000a81548160ff0219169083151502179055506115278483610d9e565b81600101819055508181600301819055505050505050565b6000811015611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90613109565b60405180910390fd5b8061158d84611246565b10156115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c59061319b565b60405180910390fd5b806006600085815260200190815260200160002060008282546115f191906131bb565b925050819055508060066000848152602001908152602001600020600082825461161b9190612d4f565b92505081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116995760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611690919061260c565b60405180910390fd5b60006116a783836000611794565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361171a57816040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611711919061280c565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461178e578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161178593929190612e4e565b60405180910390fd5b50505050565b6000806117a084611e14565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146117e2576117e1818486612016565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461187357611824600085600080611e51565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146118f6576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6000600760008154809291906119c390612f83565b9190505590506119d330826120da565b81600660008381526020019081526020016000208190555081600860008282546119fd9190612d4f565b92505081905550919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a7a57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611a71919061260c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b6b919061249b565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611d29578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611bbc61142c565b8685856040518563ffffffff1660e01b8152600401611bde9493929190613244565b6020604051808303816000875af1925050508015611c1a57506040513d601f19601f82011682018060405250810190611c1791906132a5565b60015b611c9e573d8060008114611c4a576040519150601f19603f3d011682016040523d82523d6000602084013e611c4f565b606091505b506000815103611c9657836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611c8d919061260c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d2757836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611d1e919061260c565b60405180910390fd5b505b50505050565b606060405180602001604052806000815250905090565b606060006001611d55846121d3565b01905060008167ffffffffffffffff811115611d7457611d73612952565b5b6040519080825280601f01601f191660200182016040528015611da65781602001600182028036833780820191505090505b509050600082602001820190505b600115611e09578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611dfd57611dfc612dee565b5b04945060008503611db4575b819350505050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611e8a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611fbe576000611e9a84611367565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f0557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611f185750611f168184611269565b155b15611f5a57826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611f51919061260c565b60405180910390fd5b8115611fbc57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b612021838383612326565b6120d557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209657806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161208d919061280c565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016120cc9291906132d2565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361214c5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612143919061260c565b60405180910390fd5b600061215a83836000611794565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146121ce5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016121c5919061260c565b60405180910390fd5b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612231577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161222757612226612dee565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061226e576d04ee2d6d415b85acef8100000000838161226457612263612dee565b5b0492506020810190505b662386f26fc10000831061229d57662386f26fc10000838161229357612292612dee565b5b0492506010810190505b6305f5e10083106122c6576305f5e10083816122bc576122bb612dee565b5b0492506008810190505b61271083106122eb5761271083816122e1576122e0612dee565b5b0492506004810190505b6064831061230e576064838161230457612303612dee565b5b0492506002810190505b600a831061231d576001810190505b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123de57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061239f575061239e8484611269565b5b806123dd57508273ffffffffffffffffffffffffffffffffffffffff166123c5836113ef565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612430816123fb565b811461243b57600080fd5b50565b60008135905061244d81612427565b92915050565b600060208284031215612469576124686123f1565b5b60006124778482850161243e565b91505092915050565b60008115159050919050565b61249581612480565b82525050565b60006020820190506124b0600083018461248c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124f05780820151818401526020810190506124d5565b60008484015250505050565b6000601f19601f8301169050919050565b6000612518826124b6565b61252281856124c1565b93506125328185602086016124d2565b61253b816124fc565b840191505092915050565b60006020820190508181036000830152612560818461250d565b905092915050565b6000819050919050565b61257b81612568565b811461258657600080fd5b50565b60008135905061259881612572565b92915050565b6000602082840312156125b4576125b36123f1565b5b60006125c284828501612589565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125f6826125cb565b9050919050565b612606816125eb565b82525050565b600060208201905061262160008301846125fd565b92915050565b612630816125eb565b811461263b57600080fd5b50565b60008135905061264d81612627565b92915050565b6000806040838503121561266a576126696123f1565b5b60006126788582860161263e565b925050602061268985828601612589565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126126b8576126b7612693565b5b8235905067ffffffffffffffff8111156126d5576126d4612698565b5b6020830191508360018202830111156126f1576126f061269d565b5b9250929050565b600080600080600060808688031215612714576127136123f1565b5b60006127228882890161263e565b95505060206127338882890161263e565b945050604061274488828901612589565b935050606086013567ffffffffffffffff811115612765576127646123f6565b5b612771888289016126a2565b92509250509295509295909350565b612789816123fb565b82525050565b60006020820190506127a46000830184612780565b92915050565b6000806000606084860312156127c3576127c26123f1565b5b60006127d18682870161263e565b93505060206127e28682870161263e565b92505060406127f386828701612589565b9150509250925092565b61280681612568565b82525050565b600060208201905061282160008301846127fd565b92915050565b60006020828403121561283d5761283c6123f1565b5b600061284b8482850161263e565b91505092915050565b61285d81612480565b811461286857600080fd5b50565b60008135905061287a81612854565b92915050565b60008060408385031215612897576128966123f1565b5b60006128a58582860161263e565b92505060206128b68582860161286b565b9150509250929050565b6000610120820190506128d6600083018c6127fd565b6128e3602083018b6125fd565b6128f0604083018a6127fd565b6128fd60608301896127fd565b61290a60808301886127fd565b61291760a083018761248c565b61292460c083018661248c565b61293160e08301856127fd565b61293f6101008301846127fd565b9a9950505050505050505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61298a826124fc565b810181811067ffffffffffffffff821117156129a9576129a8612952565b5b80604052505050565b60006129bc6123e7565b90506129c88282612981565b919050565b600067ffffffffffffffff8211156129e8576129e7612952565b5b6129f1826124fc565b9050602081019050919050565b82818337600083830152505050565b6000612a20612a1b846129cd565b6129b2565b905082815260208101848484011115612a3c57612a3b61294d565b5b612a478482856129fe565b509392505050565b600082601f830112612a6457612a63612693565b5b8135612a74848260208601612a0d565b91505092915050565b60008060008060808587031215612a9757612a966123f1565b5b6000612aa58782880161263e565b9450506020612ab68782880161263e565b9350506040612ac787828801612589565b925050606085013567ffffffffffffffff811115612ae857612ae76123f6565b5b612af487828801612a4f565b91505092959194509250565b60008060408385031215612b1757612b166123f1565b5b6000612b258582860161263e565b9250506020612b368582860161263e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b8757607f821691505b602082108103612b9a57612b99612b40565b5b50919050565b600080fd5b600060408284031215612bbb57612bba612ba0565b5b612bc560406129b2565b90506000612bd584828501612589565b6000830152506020612be98482850161286b565b60208301525092915050565b600060408284031215612c0b57612c0a6123f1565b5b6000612c1984828501612ba5565b91505092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c7e6021836124c1565b9150612c8982612c22565b604082019050919050565b60006020820190508181036000830152612cad81612c71565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000612cea6018836124c1565b9150612cf582612cb4565b602082019050919050565b60006020820190508181036000830152612d1981612cdd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d5a82612568565b9150612d6583612568565b9250828201905080821115612d7d57612d7c612d20565b5b92915050565b6000604082019050612d98600083018561248c565b612da560208301846127fd565b9392505050565b6000612db782612568565b9150612dc283612568565b9250828202612dd081612568565b91508282048414831517612de757612de6612d20565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612e2882612568565b9150612e3383612568565b925082612e4357612e42612dee565b5b828204905092915050565b6000606082019050612e6360008301866125fd565b612e7060208301856127fd565b612e7d60408301846125fd565b949350505050565b7f4e4654206f776e6572206d69736d617463680000000000000000000000000000600082015250565b6000612ebb6012836124c1565b9150612ec682612e85565b602082019050919050565b60006020820190508181036000830152612eea81612eae565b9050919050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000612f4d602b836124c1565b9150612f5882612ef1565b604082019050919050565b60006020820190508181036000830152612f7c81612f40565b9050919050565b6000612f8e82612568565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fc057612fbf612d20565b5b600182019050919050565b600081905092915050565b6000612fe1826124b6565b612feb8185612fcb565b9350612ffb8185602086016124d2565b80840191505092915050565b60006130138285612fd6565b915061301f8284612fd6565b91508190509392505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b60006130616018836124c1565b915061306c8261302b565b602082019050919050565b6000602082019050818103600083015261309081613054565b9050919050565b7f56616c7565207472616e7366657220616d6f756e74206d75737420626520706f60008201527f7369746976650000000000000000000000000000000000000000000000000000602082015250565b60006130f36026836124c1565b91506130fe82613097565b604082019050919050565b60006020820190508181036000830152613122816130e6565b9050919050565b7f536f7572636520746f6b656e2068617320696e73756666696369656e7420766160008201527f6c75650000000000000000000000000000000000000000000000000000000000602082015250565b60006131856023836124c1565b915061319082613129565b604082019050919050565b600060208201905081810360008301526131b481613178565b9050919050565b60006131c682612568565b91506131d183612568565b92508282039050818111156131e9576131e8612d20565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000613216826131ef565b61322081856131fa565b93506132308185602086016124d2565b613239816124fc565b840191505092915050565b600060808201905061325960008301876125fd565b61326660208301866125fd565b61327360408301856127fd565b8181036060830152613285818461320b565b905095945050505050565b60008151905061329f81612427565b92915050565b6000602082840312156132bb576132ba6123f1565b5b60006132c984828501613290565b91505092915050565b60006040820190506132e760008301856125fd565b6132f460208301846127fd565b939250505056fea264697066735822122094887b35e6da3d3e4a3a6187dc4fe705db2a1d9dd8b6392268f5b637bef37e8064736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061012a5760003560e01c80636352211e116100ab578063a23362791161006f578063a23362791461042f578063b88d4fde14610474578063c87b56dd1461049d578063cadf338f146104da578063d4c3eea014610517578063e985e9c5146105425761012a565b80636352211e14610336578063642b5bfb1461037357806370a082311461039e57806395d89b41146103db578063a22cb465146104065761012a565b806317c18217116100f257806317c182171461023a57806323b872dd14610277578063249cfda9146102a057806342842e0e146102dd57806360780cd7146103065761012a565b806301ffc9a71461012f57806306fdde031461016c578063081812fc14610197578063095ea7b3146101d4578063150b7a02146101fd575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612453565b61057f565b604051610163919061249b565b60405180910390f35b34801561017857600080fd5b50610181610661565b60405161018e9190612546565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b9919061259e565b6106f3565b6040516101cb919061260c565b60405180910390f35b3480156101e057600080fd5b506101fb60048036038101906101f69190612653565b61070f565b005b34801561020957600080fd5b50610224600480360381019061021f91906126f8565b610725565b604051610231919061278f565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061259e565b610779565b60405161026e919061249b565b60405180910390f35b34801561028357600080fd5b5061029e600480360381019061029991906127aa565b610c9c565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190612653565b610d9e565b6040516102d4919061280c565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff91906127aa565b610e27565b005b610320600480360381019061031b9190612653565b610e47565b60405161032d919061280c565b60405180910390f35b34801561034257600080fd5b5061035d6004803603810190610358919061259e565b610fbe565b60405161036a919061260c565b60405180910390f35b34801561037f57600080fd5b50610388610fd0565b604051610395919061280c565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190612827565b610fd6565b6040516103d2919061280c565b60405180910390f35b3480156103e757600080fd5b506103f0611090565b6040516103fd9190612546565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190612880565b611122565b005b34801561043b57600080fd5b506104566004803603810190610451919061259e565b611138565b60405161046b999897969594939291906128c0565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190612a7d565b6111c0565b005b3480156104a957600080fd5b506104c460048036038101906104bf919061259e565b6111dd565b6040516104d19190612546565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc919061259e565b611246565b60405161050e919061280c565b60405180910390f35b34801561052357600080fd5b5061052c611263565b604051610539919061280c565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190612b00565b611269565b604051610576919061249b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061065a5750610659826112fd565b5b9050919050565b60606000805461067090612b6f565b80601f016020809104026020016040519081016040528092919081815260200182805461069c90612b6f565b80156106e95780601f106106be576101008083540402835291602001916106e9565b820191906000526020600020905b8154815290600101906020018083116106cc57829003601f168201915b5050505050905090565b60006106fe82611367565b50610708826113ef565b9050919050565b610721828261071c61142c565b611434565b5050565b60008083838101906107379190612bf5565b90506000600960008360000151815260200190815260200160002090506107648188846020015189611446565b63150b7a0260e01b9250505095945050505050565b600080600960008481526020019081526020016000209050806005015442116107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90612c94565b60405180910390fd5b600015158160060160009054906101000a900460ff1615151461082f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082690612d00565b60405180910390fd5b600080600080600090505b84600101548110156108ab5784600001600082815260200190815260200160002091508160000160009054906101000a900460ff161561088b578160010154846108849190612d4f565b935061089e565b81600101548361089b9190612d4f565b92505b808060010191505061083a565b5081831015945060018460060160006101000a81548160ff0219169083151502179055507fea1bc2ea68f48594eea9b956b19b9e85216707c2b0660fb73dc9ee37d38f574d858560070154604051610904929190612d83565b60405180910390a160008060005b8660010154811015610a7757866000016000828152602001908152602001600020935087801561095157508360000160009054906101000a900460ff16155b15610984578360010154826109669190612d4f565b915061097f84600301548860070154866001015461153f565b610a6a565b871580156109a057508360000160009054906101000a900460ff165b156109d3578360010154826109b59190612d4f565b91506109ce84600301548860080154866001015461153f565b610a69565b8780156109ee57508360000160009054906101000a900460ff165b8015610a0257508660070154846003015414155b15610a1e57836001015483610a179190612d4f565b9250610a68565b87158015610a3b57508360000160009054906101000a900460ff16155b8015610a4f57508660080154846003015414155b15610a6757836001015483610a649190612d4f565b92505b5b5b5b8080600101915050610912565b5060005b8660010154811015610b82578660000160008281526020019081526020016000209350878015610ab957508360000160009054906101000a900460ff165b8015610acd57508660070154846003015414155b15610b0a57600083856001015484610ae59190612dac565b610aef9190612e1d565b9050610b04886008015486600301548361153f565b50610b75565b87158015610b2757508360000160009054906101000a900460ff16155b8015610b3b57508660080154846003015414155b15610b7457600083856001015484610b539190612dac565b610b5d9190612e1d565b9050610b72886007015486600301548361153f565b505b5b8080600101915050610a7b565b508615610bbd57610bbc308760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168860070154611627565b5b60005b600754811015610c90576000610bd582610fbe565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c105750610c83565b6000600854610c1e84611246565b8a60030154610c2d9190612dac565b610c379190612e1d565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c7f573d6000803e3d6000fd5b5050505b8080600101915050610bc0565b50505050505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d0e5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610d05919061260c565b60405180910390fd5b6000610d228383610d1d61142c565b611794565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d98578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610d8f93929190612e4e565b60405180910390fd5b50505050565b60008273ffffffffffffffffffffffffffffffffffffffff16610dc083610fbe565b73ffffffffffffffffffffffffffffffffffffffff1614610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90612ed1565b60405180910390fd5b610e1f82611246565b905092915050565b610e42838383604051806020016040528060008152506111c0565b505050565b6000803411610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8290612f63565b60405180910390fd5b600a6000815480929190610e9e90612f83565b9190505590506000600960008381526020019081526020016000209050838160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600301819055508281600401819055508242610f1c9190612d4f565b8160050181905550610f39600234610f349190612e1d565b6119ae565b8160070181905550610f56600234610f519190612e1d565b6119ae565b8160080181905550610f6f813060018460070154611446565b610f80813060008460080154611446565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a82604051610faf919061280c565b60405180910390a15092915050565b6000610fc982611367565b9050919050565b600a5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110495760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401611040919061260c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461109f90612b6f565b80601f01602080910402602001604051908101604052809291908181526020018280546110cb90612b6f565b80156111185780601f106110ed57610100808354040283529160200191611118565b820191906000526020600020905b8154815290600101906020018083116110fb57829003601f168201915b5050505050905090565b61113461112d61142c565b8383611a09565b5050565b60096020528060005260406000206000915090508060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040154908060050154908060060160009054906101000a900460ff16908060060160019054906101000a900460ff16908060070154908060080154905089565b6111cb848484610c9c565b6111d784848484611b78565b50505050565b60606111e882611367565b5060006111f3611d2f565b90506000815111611213576040518060200160405280600081525061123e565b8061121d84611d46565b60405160200161122e929190613007565b6040516020818303038152906040525b915050919050565b600060066000838152602001908152602001600020549050919050565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008061137383611e14565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113e657826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016113dd919061280c565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6114418383836001611e51565b505050565b836005015442111561148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490613077565b60405180910390fd5b60008460000160008660010160008154809291906114aa90612f83565b9190505581526020019081526020016000209050838160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160000160006101000a81548160ff0219169083151502179055506115278483610d9e565b81600101819055508181600301819055505050505050565b6000811015611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90613109565b60405180910390fd5b8061158d84611246565b10156115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c59061319b565b60405180910390fd5b806006600085815260200190815260200160002060008282546115f191906131bb565b925050819055508060066000848152602001908152602001600020600082825461161b9190612d4f565b92505081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116995760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611690919061260c565b60405180910390fd5b60006116a783836000611794565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361171a57816040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611711919061280c565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461178e578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161178593929190612e4e565b60405180910390fd5b50505050565b6000806117a084611e14565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146117e2576117e1818486612016565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461187357611824600085600080611e51565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146118f6576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6000600760008154809291906119c390612f83565b9190505590506119d330826120da565b81600660008381526020019081526020016000208190555081600860008282546119fd9190612d4f565b92505081905550919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a7a57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611a71919061260c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b6b919061249b565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611d29578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611bbc61142c565b8685856040518563ffffffff1660e01b8152600401611bde9493929190613244565b6020604051808303816000875af1925050508015611c1a57506040513d601f19601f82011682018060405250810190611c1791906132a5565b60015b611c9e573d8060008114611c4a576040519150601f19603f3d011682016040523d82523d6000602084013e611c4f565b606091505b506000815103611c9657836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611c8d919061260c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d2757836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611d1e919061260c565b60405180910390fd5b505b50505050565b606060405180602001604052806000815250905090565b606060006001611d55846121d3565b01905060008167ffffffffffffffff811115611d7457611d73612952565b5b6040519080825280601f01601f191660200182016040528015611da65781602001600182028036833780820191505090505b509050600082602001820190505b600115611e09578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611dfd57611dfc612dee565b5b04945060008503611db4575b819350505050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611e8a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611fbe576000611e9a84611367565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f0557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611f185750611f168184611269565b155b15611f5a57826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611f51919061260c565b60405180910390fd5b8115611fbc57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b612021838383612326565b6120d557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209657806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161208d919061280c565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016120cc9291906132d2565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361214c5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612143919061260c565b60405180910390fd5b600061215a83836000611794565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146121ce5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016121c5919061260c565b60405180910390fd5b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612231577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161222757612226612dee565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061226e576d04ee2d6d415b85acef8100000000838161226457612263612dee565b5b0492506020810190505b662386f26fc10000831061229d57662386f26fc10000838161229357612292612dee565b5b0492506010810190505b6305f5e10083106122c6576305f5e10083816122bc576122bb612dee565b5b0492506008810190505b61271083106122eb5761271083816122e1576122e0612dee565b5b0492506004810190505b6064831061230e576064838161230457612303612dee565b5b0492506002810190505b600a831061231d576001810190505b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123de57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061239f575061239e8484611269565b5b806123dd57508273ffffffffffffffffffffffffffffffffffffffff166123c5836113ef565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612430816123fb565b811461243b57600080fd5b50565b60008135905061244d81612427565b92915050565b600060208284031215612469576124686123f1565b5b60006124778482850161243e565b91505092915050565b60008115159050919050565b61249581612480565b82525050565b60006020820190506124b0600083018461248c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124f05780820151818401526020810190506124d5565b60008484015250505050565b6000601f19601f8301169050919050565b6000612518826124b6565b61252281856124c1565b93506125328185602086016124d2565b61253b816124fc565b840191505092915050565b60006020820190508181036000830152612560818461250d565b905092915050565b6000819050919050565b61257b81612568565b811461258657600080fd5b50565b60008135905061259881612572565b92915050565b6000602082840312156125b4576125b36123f1565b5b60006125c284828501612589565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125f6826125cb565b9050919050565b612606816125eb565b82525050565b600060208201905061262160008301846125fd565b92915050565b612630816125eb565b811461263b57600080fd5b50565b60008135905061264d81612627565b92915050565b6000806040838503121561266a576126696123f1565b5b60006126788582860161263e565b925050602061268985828601612589565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126126b8576126b7612693565b5b8235905067ffffffffffffffff8111156126d5576126d4612698565b5b6020830191508360018202830111156126f1576126f061269d565b5b9250929050565b600080600080600060808688031215612714576127136123f1565b5b60006127228882890161263e565b95505060206127338882890161263e565b945050604061274488828901612589565b935050606086013567ffffffffffffffff811115612765576127646123f6565b5b612771888289016126a2565b92509250509295509295909350565b612789816123fb565b82525050565b60006020820190506127a46000830184612780565b92915050565b6000806000606084860312156127c3576127c26123f1565b5b60006127d18682870161263e565b93505060206127e28682870161263e565b92505060406127f386828701612589565b9150509250925092565b61280681612568565b82525050565b600060208201905061282160008301846127fd565b92915050565b60006020828403121561283d5761283c6123f1565b5b600061284b8482850161263e565b91505092915050565b61285d81612480565b811461286857600080fd5b50565b60008135905061287a81612854565b92915050565b60008060408385031215612897576128966123f1565b5b60006128a58582860161263e565b92505060206128b68582860161286b565b9150509250929050565b6000610120820190506128d6600083018c6127fd565b6128e3602083018b6125fd565b6128f0604083018a6127fd565b6128fd60608301896127fd565b61290a60808301886127fd565b61291760a083018761248c565b61292460c083018661248c565b61293160e08301856127fd565b61293f6101008301846127fd565b9a9950505050505050505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61298a826124fc565b810181811067ffffffffffffffff821117156129a9576129a8612952565b5b80604052505050565b60006129bc6123e7565b90506129c88282612981565b919050565b600067ffffffffffffffff8211156129e8576129e7612952565b5b6129f1826124fc565b9050602081019050919050565b82818337600083830152505050565b6000612a20612a1b846129cd565b6129b2565b905082815260208101848484011115612a3c57612a3b61294d565b5b612a478482856129fe565b509392505050565b600082601f830112612a6457612a63612693565b5b8135612a74848260208601612a0d565b91505092915050565b60008060008060808587031215612a9757612a966123f1565b5b6000612aa58782880161263e565b9450506020612ab68782880161263e565b9350506040612ac787828801612589565b925050606085013567ffffffffffffffff811115612ae857612ae76123f6565b5b612af487828801612a4f565b91505092959194509250565b60008060408385031215612b1757612b166123f1565b5b6000612b258582860161263e565b9250506020612b368582860161263e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b8757607f821691505b602082108103612b9a57612b99612b40565b5b50919050565b600080fd5b600060408284031215612bbb57612bba612ba0565b5b612bc560406129b2565b90506000612bd584828501612589565b6000830152506020612be98482850161286b565b60208301525092915050565b600060408284031215612c0b57612c0a6123f1565b5b6000612c1984828501612ba5565b91505092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c7e6021836124c1565b9150612c8982612c22565b604082019050919050565b60006020820190508181036000830152612cad81612c71565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000612cea6018836124c1565b9150612cf582612cb4565b602082019050919050565b60006020820190508181036000830152612d1981612cdd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d5a82612568565b9150612d6583612568565b9250828201905080821115612d7d57612d7c612d20565b5b92915050565b6000604082019050612d98600083018561248c565b612da560208301846127fd565b9392505050565b6000612db782612568565b9150612dc283612568565b9250828202612dd081612568565b91508282048414831517612de757612de6612d20565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612e2882612568565b9150612e3383612568565b925082612e4357612e42612dee565b5b828204905092915050565b6000606082019050612e6360008301866125fd565b612e7060208301856127fd565b612e7d60408301846125fd565b949350505050565b7f4e4654206f776e6572206d69736d617463680000000000000000000000000000600082015250565b6000612ebb6012836124c1565b9150612ec682612e85565b602082019050919050565b60006020820190508181036000830152612eea81612eae565b9050919050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000612f4d602b836124c1565b9150612f5882612ef1565b604082019050919050565b60006020820190508181036000830152612f7c81612f40565b9050919050565b6000612f8e82612568565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fc057612fbf612d20565b5b600182019050919050565b600081905092915050565b6000612fe1826124b6565b612feb8185612fcb565b9350612ffb8185602086016124d2565b80840191505092915050565b60006130138285612fd6565b915061301f8284612fd6565b91508190509392505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b60006130616018836124c1565b915061306c8261302b565b602082019050919050565b6000602082019050818103600083015261309081613054565b9050919050565b7f56616c7565207472616e7366657220616d6f756e74206d75737420626520706f60008201527f7369746976650000000000000000000000000000000000000000000000000000602082015250565b60006130f36026836124c1565b91506130fe82613097565b604082019050919050565b60006020820190508181036000830152613122816130e6565b9050919050565b7f536f7572636520746f6b656e2068617320696e73756666696369656e7420766160008201527f6c75650000000000000000000000000000000000000000000000000000000000602082015250565b60006131856023836124c1565b915061319082613129565b604082019050919050565b600060208201905081810360008301526131b481613178565b9050919050565b60006131c682612568565b91506131d183612568565b92508282039050818111156131e9576131e8612d20565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000613216826131ef565b61322081856131fa565b93506132308185602086016124d2565b613239816124fc565b840191505092915050565b600060808201905061325960008301876125fd565b61326660208301866125fd565b61327360408301856127fd565b8181036060830152613285818461320b565b905095945050505050565b60008151905061329f81612427565b92915050565b6000602082840312156132bb576132ba6123f1565b5b60006132c984828501613290565b91505092915050565b60006040820190506132e760008301856125fd565b6132f460208301846127fd565b939250505056fea264697066735822122094887b35e6da3d3e4a3a6187dc4fe705db2a1d9dd8b6392268f5b637bef37e8064736f6c63430008180033", + "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f524550000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000324565b508060049081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b611d8b806200041b6000396000f3fe6080604052600436106100fe5760003560e01c80635daf08ca1161009557806395d89b411161006457806395d89b4114610364578063a230c5241461038f578063a2336279146103cc578063a9059cbb14610411578063dd62ed3e1461044e576100fe565b80635daf08ca1461028f57806360780cd7146102cc578063642b5bfb146102fc57806370a0823114610327576100fe565b806318160ddd116100d157806318160ddd146101d357806323b872dd146101fe578063313ce5671461023b578063561b246314610266576100fe565b806306fdde0314610103578063095ea7b31461012e57806311aee3801461016b57806317c1821714610196575b600080fd5b34801561010f57600080fd5b5061011861048b565b60405161012591906115c0565b60405180910390f35b34801561013a57600080fd5b506101556004803603810190610150919061167b565b61051d565b60405161016291906116d6565b60405180910390f35b34801561017757600080fd5b50610180610540565b60405161018d9190611700565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b8919061171b565b610546565b6040516101ca91906116d6565b60405180910390f35b3480156101df57600080fd5b506101e8610a02565b6040516101f59190611700565b60405180910390f35b34801561020a57600080fd5b5061022560048036038101906102209190611748565b610a0c565b60405161023291906116d6565b60405180910390f35b34801561024757600080fd5b50610250610a3b565b60405161025d91906117b7565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906117fe565b610a44565b005b34801561029b57600080fd5b506102b660048036038101906102b1919061171b565b610a6d565b6040516102c39190611860565b60405180910390f35b6102e660048036038101906102e1919061167b565b610aa0565b6040516102f39190611700565b60405180910390f35b34801561030857600080fd5b50610311610bf7565b60405161031e9190611700565b60405180910390f35b34801561033357600080fd5b5061034e6004803603810190610349919061187b565b610bfd565b60405161035b9190611700565b60405180910390f35b34801561037057600080fd5b50610379610c45565b60405161038691906115c0565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b1919061187b565b610cd7565b6040516103c391906116d6565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee919061171b565b610cf7565b604051610408999897969594939291906118a8565b60405180910390f35b34801561041d57600080fd5b506104386004803603810190610433919061167b565b610d7f565b60405161044591906116d6565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190611935565b610da2565b6040516104829190611700565b60405180910390f35b60606003805461049a906119a4565b80601f01602080910402602001604051908101604052809291908181526020018280546104c6906119a4565b80156105135780601f106104e857610100808354040283529160200191610513565b820191906000526020600020905b8154815290600101906020018083116104f657829003601f168201915b5050505050905090565b600080610528610e29565b9050610535818585610e31565b600191505092915050565b60065481565b600080600860008481526020019081526020016000209050806007015442116105a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059b90611a47565b60405180910390fd5b600015158160080160009054906101000a900460ff161515146105fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f390611ab3565b60405180910390fd5b600080600080600090505b84600101548110156106785784600001600082815260200190815260200160002091508160000160009054906101000a900460ff1615610658578160010154846106519190611b02565b935061066b565b8160010154836106689190611b02565b92505b8080600101915050610607565b508183101594508480156106fa5750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610808578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006006600081548092919061073b90611b36565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60018460080160006101000a81548160ff0219169083151502179055507f9f3584cbb084f56a98b2b581e13f64e4ec315e59157d67dc65497890e85558658560405161085491906116d6565b60405180910390a1600085610869578261086b565b835b905060008661087a578461087c565b835b905060005b866001015481101561092c5786600001600082815260200190815260200160002093508360000160009054906101000a900460ff1615158815150361091f576000838560010154846108d39190611b7e565b6108dd9190611bef565b905061091d308660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168388600101546109189190611b02565b610e43565b505b8080600101915050610881565b5060005b6006548110156109f65760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061097c610a02565b61098583610bfd565b8a600301546109949190611b7e565b61099e9190611bef565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109e6573d6000803e3d6000fd5b5050508080600101915050610930565b50505050505050919050565b6000600254905090565b600080610a17610e29565b9050610a24858285610f37565b610a2f858585610e43565b60019150509392505050565b60006012905090565b6000600860008581526020019081526020016000209050610a6781338585610fcb565b50505050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803411610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb90611c92565b60405180910390fd5b60096000815480929190610af790611b36565b9190505590506000600860008381526020019081526020016000209050838160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600301819055508281600601819055508242610b759190611b02565b8160070181905550610b8730346110b2565b610ba08185600234610b999190611bef565b6001610fcb565b610bb98185600234610bb29190611bef565b6000610fcb565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a82604051610be89190611700565b60405180910390a15092915050565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054610c54906119a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c80906119a4565b8015610ccd5780601f10610ca257610100808354040283529160200191610ccd565b820191906000526020600020905b815481529060010190602001808311610cb057829003601f168201915b5050505050905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff16908060080160019054906101000a900460ff16905089565b600080610d8a610e29565b9050610d97818585610e43565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b610e3e8383836001611134565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610eb55760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610eac9190611860565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f275760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610f1e9190611860565b60405180910390fd5b610f3283838361130b565b505050565b6000610f438484610da2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610fc55781811015610fb5578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610fac93929190611cb2565b60405180910390fd5b610fc484848484036000611134565b5b50505050565b8360070154421115611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100990611d35565b60405180910390fd5b600084600001600086600101600081548092919061102f90611b36565b9190505581526020019081526020016000209050838160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160000160006101000a81548160ff0219169083151502179055508281600101819055505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111245760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161111b9190611860565b60405180910390fd5b6111306000838361130b565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111a65760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161119d9190611860565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112185760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161120f9190611860565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611305578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112fc9190611700565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361135d5780600260008282546113519190611b02565b92505081905550611430565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113e9578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016113e093929190611cb2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361147957806002600082825403925050819055506114c6565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115239190611700565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561156a57808201518184015260208101905061154f565b60008484015250505050565b6000601f19601f8301169050919050565b600061159282611530565b61159c818561153b565b93506115ac81856020860161154c565b6115b581611576565b840191505092915050565b600060208201905081810360008301526115da8184611587565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611612826115e7565b9050919050565b61162281611607565b811461162d57600080fd5b50565b60008135905061163f81611619565b92915050565b6000819050919050565b61165881611645565b811461166357600080fd5b50565b6000813590506116758161164f565b92915050565b60008060408385031215611692576116916115e2565b5b60006116a085828601611630565b92505060206116b185828601611666565b9150509250929050565b60008115159050919050565b6116d0816116bb565b82525050565b60006020820190506116eb60008301846116c7565b92915050565b6116fa81611645565b82525050565b600060208201905061171560008301846116f1565b92915050565b600060208284031215611731576117306115e2565b5b600061173f84828501611666565b91505092915050565b600080600060608486031215611761576117606115e2565b5b600061176f86828701611630565b935050602061178086828701611630565b925050604061179186828701611666565b9150509250925092565b600060ff82169050919050565b6117b18161179b565b82525050565b60006020820190506117cc60008301846117a8565b92915050565b6117db816116bb565b81146117e657600080fd5b50565b6000813590506117f8816117d2565b92915050565b600080600060608486031215611817576118166115e2565b5b600061182586828701611666565b935050602061183686828701611666565b9250506040611847868287016117e9565b9150509250925092565b61185a81611607565b82525050565b60006020820190506118756000830184611851565b92915050565b600060208284031215611891576118906115e2565b5b600061189f84828501611630565b91505092915050565b6000610120820190506118be600083018c6116f1565b6118cb602083018b611851565b6118d8604083018a6116f1565b6118e560608301896116f1565b6118f260808301886116f1565b6118ff60a08301876116f1565b61190c60c08301866116f1565b61191960e08301856116c7565b6119276101008301846116c7565b9a9950505050505050505050565b6000806040838503121561194c5761194b6115e2565b5b600061195a85828601611630565b925050602061196b85828601611630565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806119bc57607f821691505b6020821081036119cf576119ce611975565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a3160218361153b565b9150611a3c826119d5565b604082019050919050565b60006020820190508181036000830152611a6081611a24565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000611a9d60188361153b565b9150611aa882611a67565b602082019050919050565b60006020820190508181036000830152611acc81611a90565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b0d82611645565b9150611b1883611645565b9250828201905080821115611b3057611b2f611ad3565b5b92915050565b6000611b4182611645565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b7357611b72611ad3565b5b600182019050919050565b6000611b8982611645565b9150611b9483611645565b9250828202611ba281611645565b91508282048414831517611bb957611bb8611ad3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bfa82611645565b9150611c0583611645565b925082611c1557611c14611bc0565b5b828204905092915050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000611c7c602b8361153b565b9150611c8782611c20565b604082019050919050565b60006020820190508181036000830152611cab81611c6f565b9050919050565b6000606082019050611cc76000830186611851565b611cd460208301856116f1565b611ce160408301846116f1565b949350505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000611d1f60188361153b565b9150611d2a82611ce9565b602082019050919050565b60006020820190508181036000830152611d4e81611d12565b905091905056fea2646970667358221220543771aac7aa110b00bb69c10205354a58c1509a944f5ce6bd88adcebb5cf2c264736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100fe5760003560e01c80635daf08ca1161009557806395d89b411161006457806395d89b4114610364578063a230c5241461038f578063a2336279146103cc578063a9059cbb14610411578063dd62ed3e1461044e576100fe565b80635daf08ca1461028f57806360780cd7146102cc578063642b5bfb146102fc57806370a0823114610327576100fe565b806318160ddd116100d157806318160ddd146101d357806323b872dd146101fe578063313ce5671461023b578063561b246314610266576100fe565b806306fdde0314610103578063095ea7b31461012e57806311aee3801461016b57806317c1821714610196575b600080fd5b34801561010f57600080fd5b5061011861048b565b60405161012591906115c0565b60405180910390f35b34801561013a57600080fd5b506101556004803603810190610150919061167b565b61051d565b60405161016291906116d6565b60405180910390f35b34801561017757600080fd5b50610180610540565b60405161018d9190611700565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b8919061171b565b610546565b6040516101ca91906116d6565b60405180910390f35b3480156101df57600080fd5b506101e8610a02565b6040516101f59190611700565b60405180910390f35b34801561020a57600080fd5b5061022560048036038101906102209190611748565b610a0c565b60405161023291906116d6565b60405180910390f35b34801561024757600080fd5b50610250610a3b565b60405161025d91906117b7565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906117fe565b610a44565b005b34801561029b57600080fd5b506102b660048036038101906102b1919061171b565b610a6d565b6040516102c39190611860565b60405180910390f35b6102e660048036038101906102e1919061167b565b610aa0565b6040516102f39190611700565b60405180910390f35b34801561030857600080fd5b50610311610bf7565b60405161031e9190611700565b60405180910390f35b34801561033357600080fd5b5061034e6004803603810190610349919061187b565b610bfd565b60405161035b9190611700565b60405180910390f35b34801561037057600080fd5b50610379610c45565b60405161038691906115c0565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b1919061187b565b610cd7565b6040516103c391906116d6565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee919061171b565b610cf7565b604051610408999897969594939291906118a8565b60405180910390f35b34801561041d57600080fd5b506104386004803603810190610433919061167b565b610d7f565b60405161044591906116d6565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190611935565b610da2565b6040516104829190611700565b60405180910390f35b60606003805461049a906119a4565b80601f01602080910402602001604051908101604052809291908181526020018280546104c6906119a4565b80156105135780601f106104e857610100808354040283529160200191610513565b820191906000526020600020905b8154815290600101906020018083116104f657829003601f168201915b5050505050905090565b600080610528610e29565b9050610535818585610e31565b600191505092915050565b60065481565b600080600860008481526020019081526020016000209050806007015442116105a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059b90611a47565b60405180910390fd5b600015158160080160009054906101000a900460ff161515146105fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f390611ab3565b60405180910390fd5b600080600080600090505b84600101548110156106785784600001600082815260200190815260200160002091508160000160009054906101000a900460ff1615610658578160010154846106519190611b02565b935061066b565b8160010154836106689190611b02565b92505b8080600101915050610607565b508183101594508480156106fa5750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610808578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006006600081548092919061073b90611b36565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60018460080160006101000a81548160ff0219169083151502179055507f9f3584cbb084f56a98b2b581e13f64e4ec315e59157d67dc65497890e85558658560405161085491906116d6565b60405180910390a1600085610869578261086b565b835b905060008661087a578461087c565b835b905060005b866001015481101561092c5786600001600082815260200190815260200160002093508360000160009054906101000a900460ff1615158815150361091f576000838560010154846108d39190611b7e565b6108dd9190611bef565b905061091d308660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168388600101546109189190611b02565b610e43565b505b8080600101915050610881565b5060005b6006548110156109f65760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061097c610a02565b61098583610bfd565b8a600301546109949190611b7e565b61099e9190611bef565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109e6573d6000803e3d6000fd5b5050508080600101915050610930565b50505050505050919050565b6000600254905090565b600080610a17610e29565b9050610a24858285610f37565b610a2f858585610e43565b60019150509392505050565b60006012905090565b6000600860008581526020019081526020016000209050610a6781338585610fcb565b50505050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803411610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb90611c92565b60405180910390fd5b60096000815480929190610af790611b36565b9190505590506000600860008381526020019081526020016000209050838160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600301819055508281600601819055508242610b759190611b02565b8160070181905550610b8730346110b2565b610ba08185600234610b999190611bef565b6001610fcb565b610bb98185600234610bb29190611bef565b6000610fcb565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a82604051610be89190611700565b60405180910390a15092915050565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054610c54906119a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c80906119a4565b8015610ccd5780601f10610ca257610100808354040283529160200191610ccd565b820191906000526020600020905b815481529060010190602001808311610cb057829003601f168201915b5050505050905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff16908060080160019054906101000a900460ff16905089565b600080610d8a610e29565b9050610d97818585610e43565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b610e3e8383836001611134565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610eb55760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610eac9190611860565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f275760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610f1e9190611860565b60405180910390fd5b610f3283838361130b565b505050565b6000610f438484610da2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610fc55781811015610fb5578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610fac93929190611cb2565b60405180910390fd5b610fc484848484036000611134565b5b50505050565b8360070154421115611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100990611d35565b60405180910390fd5b600084600001600086600101600081548092919061102f90611b36565b9190505581526020019081526020016000209050838160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160000160006101000a81548160ff0219169083151502179055508281600101819055505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111245760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161111b9190611860565b60405180910390fd5b6111306000838361130b565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111a65760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161119d9190611860565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112185760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161120f9190611860565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611305578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112fc9190611700565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361135d5780600260008282546113519190611b02565b92505081905550611430565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113e9578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016113e093929190611cb2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361147957806002600082825403925050819055506114c6565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115239190611700565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561156a57808201518184015260208101905061154f565b60008484015250505050565b6000601f19601f8301169050919050565b600061159282611530565b61159c818561153b565b93506115ac81856020860161154c565b6115b581611576565b840191505092915050565b600060208201905081810360008301526115da8184611587565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611612826115e7565b9050919050565b61162281611607565b811461162d57600080fd5b50565b60008135905061163f81611619565b92915050565b6000819050919050565b61165881611645565b811461166357600080fd5b50565b6000813590506116758161164f565b92915050565b60008060408385031215611692576116916115e2565b5b60006116a085828601611630565b92505060206116b185828601611666565b9150509250929050565b60008115159050919050565b6116d0816116bb565b82525050565b60006020820190506116eb60008301846116c7565b92915050565b6116fa81611645565b82525050565b600060208201905061171560008301846116f1565b92915050565b600060208284031215611731576117306115e2565b5b600061173f84828501611666565b91505092915050565b600080600060608486031215611761576117606115e2565b5b600061176f86828701611630565b935050602061178086828701611630565b925050604061179186828701611666565b9150509250925092565b600060ff82169050919050565b6117b18161179b565b82525050565b60006020820190506117cc60008301846117a8565b92915050565b6117db816116bb565b81146117e657600080fd5b50565b6000813590506117f8816117d2565b92915050565b600080600060608486031215611817576118166115e2565b5b600061182586828701611666565b935050602061183686828701611666565b9250506040611847868287016117e9565b9150509250925092565b61185a81611607565b82525050565b60006020820190506118756000830184611851565b92915050565b600060208284031215611891576118906115e2565b5b600061189f84828501611630565b91505092915050565b6000610120820190506118be600083018c6116f1565b6118cb602083018b611851565b6118d8604083018a6116f1565b6118e560608301896116f1565b6118f260808301886116f1565b6118ff60a08301876116f1565b61190c60c08301866116f1565b61191960e08301856116c7565b6119276101008301846116c7565b9a9950505050505050505050565b6000806040838503121561194c5761194b6115e2565b5b600061195a85828601611630565b925050602061196b85828601611630565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806119bc57607f821691505b6020821081036119cf576119ce611975565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a3160218361153b565b9150611a3c826119d5565b604082019050919050565b60006020820190508181036000830152611a6081611a24565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000611a9d60188361153b565b9150611aa882611a67565b602082019050919050565b60006020820190508181036000830152611acc81611a90565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b0d82611645565b9150611b1883611645565b9250828201905080821115611b3057611b2f611ad3565b5b92915050565b6000611b4182611645565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b7357611b72611ad3565b5b600182019050919050565b6000611b8982611645565b9150611b9483611645565b9250828202611ba281611645565b91508282048414831517611bb957611bb8611ad3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bfa82611645565b9150611c0583611645565b925082611c1557611c14611bc0565b5b828204905092915050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000611c7c602b8361153b565b9150611c8782611c20565b604082019050919050565b60006020820190508181036000830152611cab81611c6f565b9050919050565b6000606082019050611cc76000830186611851565b611cd460208301856116f1565b611ce160408301846116f1565b949350505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000611d1f60188361153b565b9150611d2a82611ce9565b602082019050919050565b60006020820190508181036000830152611d4e81611d12565b905091905056fea2646970667358221220543771aac7aa110b00bb69c10205354a58c1509a944f5ce6bd88adcebb5cf2c264736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/ethereum/hardhat.config.js b/ethereum/hardhat.config.js index f76c1cb..beda1d6 100644 --- a/ethereum/hardhat.config.js +++ b/ethereum/hardhat.config.js @@ -11,5 +11,9 @@ module.exports = { }, chainId: 1337, }, + sepolia: { + url: `https://sepolia.infura.io/v3/${process.env.INFURA_API_KEY}`, + accounts: [process.env.SEPOLIA_PRIVATE_KEY], + }, }, };