UNPKG

@settlemint/solidity-soulbound

Version:

Smart contract set to build an Soulbound token in SettleMint

1 lines 151 kB
{"abi":[{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MINTER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"balanceOfBatch","inputs":[{"name":"accounts","type":"address[]","internalType":"address[]"},{"name":"ids","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"amounts","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burnBatch","inputs":[{"name":"tokenIds","type":"uint256[]","internalType":"uint256[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"exists","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getCurrentTokenId","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"name_","type":"string","internalType":"string"},{"name":"symbol_","type":"string","internalType":"string"},{"name":"uri_","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isApprovedForAll","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"amounts","type":"uint256","internalType":"uint256"},{"name":"recipient","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mintBatch","inputs":[{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"recipient","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeBatchTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"ids","type":"uint256[]","internalType":"uint256[]"},{"name":"values","type":"uint256[]","internalType":"uint256[]"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApprovalForAll","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setURI","inputs":[{"name":"newuri","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"uri","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"ApprovalForAll","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TransferBatch","inputs":[{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"ids","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"values","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"TransferSingle","inputs":[{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"URI","inputs":[{"name":"value","type":"string","indexed":false,"internalType":"string"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1155InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"},{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC1155InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1155InvalidArrayLength","inputs":[{"name":"idsLength","type":"uint256","internalType":"uint256"},{"name":"valuesLength","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC1155InvalidOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1155InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1155InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1155MissingApprovalForAll","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a08060405234602957306080526133f5908161002e8239608051818181610e2601526110230152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8062fdd58e1461022357806301ffc9a71461021e57806302fe53051461021957806306fdde03146102145780630e89341c1461020f57806318160ddd1461020a578063248a9ca3146102055780632eb2c2d6146102005780632f2ff15d146101fb57806336568abe146101f65780633f4ba83a146101f15780634e1273f4146101ec5780634f1ef286146101e75780634f558e79146101e257806352d1902d146101dd57806356189236146101d85780635c975abb146101d35780636ac4d939146101ce57806383ca4b6f146101c95780638456cb59146101c457806391d14854146101bf57806394bf804d146101ba57806395d89b41146101b5578063a217fddf146101b0578063a22cb465146101ab578063a6487c53146101a6578063ad3cb1cc146101a1578063b390c0ab1461019c578063bd85b03914610197578063d539139314610192578063d547741f1461018d578063e985e9c5146101885763f242432a14610183575f80fd5b611ae5565b611a83565b611a26565b6119ec565b6119a3565b61194c565b6118ed565b61163a565b611548565b61152e565b611489565b6113d4565b611365565b611274565b6111d4565b6110d0565b61108f565b611073565b611009565b610fbe565b610de7565b610d26565b610bf4565b610b97565b610b35565b610aa8565b6109e1565b6109a5565b6107bd565b6106e3565b6104ed565b6102ff565b61026c565b600435906001600160a01b038216820361023e57565b5f80fd5b602435906001600160a01b038216820361023e57565b35906001600160a01b038216820361023e57565b3461023e57604060031936011261023e5760206102cc61028a610228565b6024355f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500835260405f20906001600160a01b03165f5260205260405f2090565b54604051908152f35b7fffffffff0000000000000000000000000000000000000000000000000000000081160361023e57565b3461023e57602060031936011261023e577fffffffff0000000000000000000000000000000000000000000000000000000060043561033d816102d5565b167f0e083076000000000000000000000000000000000000000000000000000000008114908115610377575b506040519015158152602090f35b7f7965db0b000000000000000000000000000000000000000000000000000000008114915081156103aa575b505f610369565b7fd9b67a260000000000000000000000000000000000000000000000000000000081149150811561040e575b81156103e4575b505f6103a3565b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f6103dd565b7f0e89341c00000000000000000000000000000000000000000000000000000000811491506103d6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff82111761048857604052565b610438565b67ffffffffffffffff811161048857601f01601f191660200190565b81601f8201121561023e576020813591016104c38261048d565b926104d16040519485610465565b8284528282011161023e57815f92602092838601378301015290565b3461023e57602060031936011261023e5760043567ffffffffffffffff811161023e576105216105629136906004016104a9565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040902061055d9060ff905b5416611bce565b61220d565b005b90600182811c921680156105ab575b602083101461057e57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610573565b604051905f827f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450254916105e783610564565b808352926001811690811561068b575060011461060d575b61060b92500383610465565b565b507f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45025f90815290917ff429cb5e2ec84cbb765e76b31964a56ccde03e7a6122d6cc4afb19edc55edeed5b81831061066f57505090602061060b928201016105ff565b6020919350806001915483858901015201910190918492610657565b6020925061060b94915060ff191682840152151560051b8201016105ff565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9060206106e09281815201906106aa565b90565b3461023e575f60031936011261023e576040515f60015461070381610564565b8084529060018116908115610799575060011461073b575b6107378361072b81850382610465565b604051918291826106cf565b0390f35b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b80821061077f5750909150810160200161072b61071b565b919260018160209254838588010152019101909291610767565b60ff191660208086019190915291151560051b8401909101915061072b905061071b565b3461023e57602060031936011261023e576004356107d96105b5565b81825f937a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000081101561097a575b50806d04ee2d6d415b85acef8100000000600a92101561095e575b662386f26fc10000811015610949575b6305f5e100811015610937575b612710811015610927575b6064811015610918575b101561090d575b61089e5f1960216108686001870161235e565b958601015b01917f3031323334353637383961626364656600000000000000000000000000000000600a82061a8353600a900490565b9081156108b15761089e905f199061086d565b6040516107379061072b816108ff6108d6896108d0602085018b611c59565b90611c59565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b03601f198101835282610465565b600190920191610855565b6002906064900494019361084e565b6004906127109004940193610844565b6008906305f5e1009004940193610839565b601090662386f26fc10000900494019361082c565b6020906d04ee2d6d415b85acef8100000000900494019361081c565b604094507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000090049050600a610801565b3461023e575f60031936011261023e5760207f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154604051908152f35b3461023e57602060031936011261023e576020610a2b6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b67ffffffffffffffff81116104885760051b60200190565b9080601f8301121561023e578135610a6281610a33565b92610a706040519485610465565b81845260208085019260051b82010192831161023e57602001905b828210610a985750505090565b8135815260209182019101610a8b565b3461023e5760a060031936011261023e57610ac1610228565b610ac9610242565b9060443567ffffffffffffffff811161023e57610aea903690600401610a4b565b60643567ffffffffffffffff811161023e57610b0a903690600401610a4b565b906084359367ffffffffffffffff851161023e57610b2f6105629536906004016104a9565b93611c6b565b3461023e57604060031936011261023e57610562600435610b54610242565b90610b92610b8d825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b612385565b6124b4565b3461023e57604060031936011261023e57600435610bb3610242565b336001600160a01b03821603610bcc576105629161258c565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023e575f60031936011261023e57335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260409020610c3d9060ff90610556565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811615610cba5760ff19167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b90602080835192838152019201905f5b818110610cff5750505090565b8251845260209384019390920191600101610cf2565b9060206106e0928181520190610ce2565b3461023e57604060031936011261023e5760043567ffffffffffffffff811161023e573660238201121561023e57806004013590610d6382610a33565b91610d716040519384610465565b8083526024602084019160051b8301019136831161023e57602401905b828210610dcf578360243567ffffffffffffffff811161023e5761073791610dbd610dc3923690600401610a4b565b90611d5f565b60405191829182610d15565b60208091610ddc84610258565b815201910190610d8e565b604060031936011261023e57610dfb610228565b60243567ffffffffffffffff811161023e57610e1b9036906004016104a9565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803014908115610f89575b50610f6157604051917f52d1902d0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0386165afa5f9381610f30575b50610ed1577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610f03576105629250612c36565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b610f5391945060203d602011610f5a575b610f4b8183610465565b81019061265c565b925f610e97565b503d610f41565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610e51565b3461023e57602060031936011261023e576004355f527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052602060405f20541515604051908152f35b3461023e575f60031936011261023e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610f615760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461023e575f60031936011261023e5760205f54604051908152f35b3461023e575f60031936011261023e57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b3461023e57604060031936011261023e5760043567ffffffffffffffff811161023e57611101903690600401610a4b565b611109610242565b906111148151611ced565b335f9081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090206111509060ff905b5416611e23565b5f5b825181101561117c576001906111685f54611eb5565b805f556111758285611d1e565b5201611152565b50906040519161118d602084610465565b5f83526001600160a01b038416156111a8576105629361266b565b7f57f447ce000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b3461023e57604060031936011261023e5760043567ffffffffffffffff811161023e57611205903690600401610a4b565b60243567ffffffffffffffff811161023e57611225903690600401610a4b565b90331561124857610562916040519161123f602084610465565b5f835233612853565b7f01a83514000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b3461023e575f60031936011261023e57335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090206112bd9060ff90610556565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811661133d5760ff1960019116177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023e57604060031936011261023e57602060ff6113c8600435611388610242565b905f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800845260405f20906001600160a01b03165f5260205260405f2090565b54166040519015158152f35b3461023e57604060031936011261023e576004356113f0610242565b335f9081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090206114299060ff90611149565b6114335f54611eb5565b90815f5560405191611446602084610465565b5f83526001600160a01b038216156111a8576105629361148360405192600184526020840152604083019160018352606084015260808301604052565b9161266b565b3461023e575f60031936011261023e576040515f6002546114a981610564565b808452906001811690811561079957506001146114d0576107378361072b81850382610465565b60025f9081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b8082106115145750909150810160200161072b61071b565b9192600181602092548385880101520191019092916114fc565b3461023e575f60031936011261023e5760206040515f8152f35b3461023e57604060031936011261023e57611561610228565b60243580151580910361023e576001600160a01b03821691821561160e576115d3906115bd336001600160a01b03165f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450160205260405f2090565b906001600160a01b03165f5260205260405f2090565b60ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b7fced3e100000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b3461023e57606060031936011261023e5760043567ffffffffffffffff811161023e5761166b9036906004016104a9565b60243567ffffffffffffffff811161023e5761168b9036906004016104a9565b9060443567ffffffffffffffff811161023e576116ac9036906004016104a9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549267ffffffffffffffff6116f260ff604087901c16159567ffffffffffffffff1690565b16801590816118e5575b60011490816118db575b1590816118d2575b506118aa5761178f928461178660017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61182f576120b9565b61179557005b6118007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6118a5680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6120b9565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f61170e565b303b159150611706565b8591506116fc565b3461023e575f60031936011261023e5761073760405161190e604082610465565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906106aa565b3461023e57604060031936011261023e576024356004353315611248576105629161199460405192600184526020840152604083019160018352606084015260808301604052565b6040519161123f602084610465565b3461023e57602060031936011261023e576004355f527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052602060405f2054604051908152f35b3461023e575f60031936011261023e5760206040517f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68152f35b3461023e57604060031936011261023e57610562600435611a45610242565b90611a7e610b8d825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b61258c565b3461023e57604060031936011261023e57602060ff6113c8611aa3610228565b6115bd611aae610242565b916001600160a01b03165f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450160205260405f2090565b3461023e5760a060031936011261023e57611afe610228565b611b06610242565b604435906064359260843567ffffffffffffffff811161023e57611b2e9036906004016104a9565b926001600160a01b0382163381141580611bbd575b611b8e576001600160a01b038416156111a857156112485761056294611b8660405192600184526020840152604083019160018352606084015260808301604052565b929091612a4f565b7fe237d922000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b50611bc833846121c8565b15611b43565b15611bd557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f43616c6c6572206973206e6f7420616e2061646d696e20726f6c65206175746860448201527f6f726973656400000000000000000000000000000000000000000000000000006064820152fd5b805191908290602001825e015f815290565b939291906001600160a01b0385163381141580611ca4575b611b8e576001600160a01b038216156111a857156112485761060b94612a4f565b5060ff611ce5336115bd896001600160a01b03165f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450160205260405f2090565b541615611c83565b90611cf782610a33565b611d046040519182610465565b828152601f19611d148294610a33565b0190602036910137565b8051821015611d325760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91909180518351808203611df5575050611d798151611ced565b905f5b8151811015611dee5780611ddc60019260051b602080828701015191890101515f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450060205260405f20906001600160a01b03165f5260205260405f2090565b54611de78286611d1e565b5201611d7c565b5090925050565b7f5b059991000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b15611e2a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e746572000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f198114611ec35760010190565b611e88565b601f8111611ed4575050565b60015f5260205f20906020601f840160051c83019310611f0e575b601f0160051c01905b818110611f03575050565b5f8155600101611ef8565b9091508190611eef565b601f8111611f24575050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45025f5260205f20906020601f840160051c83019310611f7d575b601f0160051c01905b818110611f72575050565b5f8155600101611f67565b9091508190611f5e565b601f8211611f9457505050565b5f5260205f20906020601f840160051c83019310611fcc575b601f0160051c01905b818110611fc1575050565b5f8155600101611fb6565b9091508190611fad565b90815167ffffffffffffffff811161048857611ffe81611ff7600254610564565b6002611f87565b602092601f821160011461203d5761202d929382915f92612032575b50505f198260011b9260031b1c19161790565b600255565b015190505f8061201a565b60025f52601f198216937f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace915f5b8681106120a15750836001959610612089575b505050811b01600255565b01515f1960f88460031b161c191690555f808061207e565b9192602060018192868501518155019401920161206b565b90916120cf906120c7612d4d565b61055d612d4d565b6120d7612d4d565b6120e033612405565b5080519067ffffffffffffffff82116104885761210782612102600154610564565b611ec8565b602090601f83116001146121415791806121399261060b95945f926120325750505f198260011b9260031b1c19161790565b600155611fd6565b60015f52601f19831691907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f5b8181106121b0575091600193918561060b97969410612198575b505050811b01600155611fd6565b01515f1960f88460031b161c191690555f808061218a565b92936020600181928786015181550195019301612170565b60ff916115bd612208926001600160a01b03165f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450160205260405f2090565b541690565b90815167ffffffffffffffff8111610488576122528161224d7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450254610564565b611f18565b602092601f82116001146122a457612280929382915f926120325750505f198260011b9260031b1c19161790565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450255565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45025f52601f198216937ff429cb5e2ec84cbb765e76b31964a56ccde03e7a6122d6cc4afb19edc55edeed915f5b868110612346575083600195961061232e575b505050811b017f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450255565b01515f1960f88460031b161c191690555f8080612304565b919260206001819286850151815501940192016122f1565b906123688261048d565b6123756040519182610465565b828152601f19611d14829461048d565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6123cc3360405f20906001600160a01b03165f5260205260405f2090565b5416156123d65750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166124af576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6124fb8360405f20906001600160a01b03165f5260205260405f2090565b541661258657805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526125468260405f20906001600160a01b03165f5260205260405f2090565b600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6125d38360405f20906001600160a01b03165f5260205260405f2090565b54161561258657805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205261261f8260405f20906001600160a01b03165f5260205260405f2090565b60ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b9081602091031261023e575190565b9391909161267b8284875f6131a1565b5f94855b84518710156126ea576126e26001918860051b906126d0602080848a010151938a0101515f527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280060205260405f2090565b6126db8382546130e3565b90556130e3565b96019561267f565b61274291959492965061271e907f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546130e3565b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b6001600160a01b0384161580612797575b1561275f575b50505050565b8051600103612787579060208061277e95930151910151915f33612fdd565b5f808080612759565b612792935f33612e36565b61277e565b935f9591935f965b85518810156127fc576001908860051b906127ed602080848a010151938a0101515f527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280060205260405f2090565b8281540390550197019661279f565b61284e91959397509591957f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b612753565b90919392506001600160a01b0381161590818015612a47575b156129c35784835f61287d936131a1565b612932575b5f805b82518210156128e2576001908260051b906128d3602080848a01015193870101515f527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280060205260405f2090565b82815403905501910190612885565b91505061060b9192507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b5f805b825182101561298e576129866001918360051b906126d0602080848b01015193880101515f527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280060205260405f2090565b910190612935565b6129be915061271e907f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546130e3565b612882565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4120536f756c626f756e6420746f6b656e2063616e6e6f74206265207472616e60448201527f73666572726564000000000000000000000000000000000000000000000000006064820152fd5b50600161286c565b919392906001600160a01b03831615808015612c25575b156129c357612a77838784876131a1565b612b8c575b6001600160a01b0381161580612ad1575b15612a9a575b5050505050565b8451600103612ac057602080612ab69601519201519233612fdd565b5f80808080612a93565b612acc94919233612e36565b612ab6565b94935f939091845b8651861015612b36576001908660051b90612b27602080848a010151938b0101515f527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280060205260405f2090565b82815403905501950194612ad9565b612b87919396979295507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b612a8d565b93925f92835b8551851015612beb57612be36001918660051b906126d0602080848a010151938b0101515f527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280060205260405f2090565b940193612b92565b612c2091945061271e90969295967f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546130e3565b612a7c565b506001600160a01b03821615612a66565b90813b15612d18576001600160a01b038216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115612ce757612ce4916130c6565b50565b505034612cf057565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b03827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612d7c57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b9081602091031261023e57516106e0816102d5565b93906106e095936001600160a01b03612df99481612deb9416885216602087015260a0604087015260a0860190610ce2565b908482036060860152610ce2565b9160808184039101526106aa565b3d15612e31573d90612e188261048d565b91612e266040519384610465565b82523d5f602084013e565b606090565b9091949293853b612e4a575b505050505050565b602093612e859160405196879586957fbc197c8100000000000000000000000000000000000000000000000000000000875260048701612db9565b03815f6001600160a01b0387165af15f9181612f78575b50612eef5750612eaa612e07565b8051919082612ee8577f57f447ce000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b6020915001fd5b7fffffffff000000000000000000000000000000000000000000000000000000007fbc197c8100000000000000000000000000000000000000000000000000000000911603612f4457505f8080808080612e42565b7f57f447ce000000000000000000000000000000000000000000000000000000005f526001600160a01b031660045260245ffd5b612f9b91925060203d602011612fa2575b612f938183610465565b810190612da4565b905f612e9c565b503d612f89565b91926001600160a01b0360a094816106e09897941685521660208401526040830152606082015281608082015201906106aa565b9091949293853b612ff057505050505050565b60209361302b9160405196879586957ff23a6e6100000000000000000000000000000000000000000000000000000000875260048701612fa9565b03815f6001600160a01b0387165af15f91816130a5575b506130505750612eaa612e07565b7fffffffff000000000000000000000000000000000000000000000000000000007ff23a6e6100000000000000000000000000000000000000000000000000000000911603612f4457505f8080808080612e42565b6130bf91925060203d602011612fa257612f938183610465565b905f613042565b5f806106e093602081519101845af46130dd612e07565b916130f0565b91908201809211611ec357565b9061312d575080511561310557602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613173575b61313e575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613136565b90916131936106e093604084526040840190610ce2565b916020818403910152610ce2565b9392918051835190818103611df55750505f5b815181101561331a578060051b9060208083850101519286010151846001600160a01b038916613244575b6001936001600160a01b0382166131fa575b505050016131b4565b61323a916115bd613232925f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450060205260405f2090565b9182546130e3565b90555f84816131f1565b50909161327c886115bd835f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450060205260405f2090565b548281106132ca578291600194938792036132c28b6115bd845f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450060205260405f2090565b5593506131df565b6040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038a16600482015260248101919091526044810183905260648101829052608490fd5b50805193949391929160010361337d576020908101519181015160408051938452918301526001600160a01b03928316939092169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291819081015b0390a4565b90916001600160a01b037f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb91613378826040519384931697169533958361317c56fea2646970667358221220e734a6508d861d4bbc41f6aae94c777165b2c80cc1b796f95e2ca3c68ec6dcb264736f6c634300081b0033","sourceMap":"760:3370:0:-:0;;;;;;;1171:4:23;1163:13;;760:3370:0;;;;;;1163:13:23;760:3370:0;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c8062fdd58e1461022357806301ffc9a71461021e57806302fe53051461021957806306fdde03146102145780630e89341c1461020f57806318160ddd1461020a578063248a9ca3146102055780632eb2c2d6146102005780632f2ff15d146101fb57806336568abe146101f65780633f4ba83a146101f15780634e1273f4146101ec5780634f1ef286146101e75780634f558e79146101e257806352d1902d146101dd57806356189236146101d85780635c975abb146101d35780636ac4d939146101ce57806383ca4b6f146101c95780638456cb59146101c457806391d14854146101bf57806394bf804d146101ba57806395d89b41146101b5578063a217fddf146101b0578063a22cb465146101ab578063a6487c53146101a6578063ad3cb1cc146101a1578063b390c0ab1461019c578063bd85b03914610197578063d539139314610192578063d547741f1461018d578063e985e9c5146101885763f242432a14610183575f80fd5b611ae5565b611a83565b611a26565b6119ec565b6119a3565b61194c565b6118ed565b61163a565b611548565b61152e565b611489565b6113d4565b611365565b611274565b6111d4565b6110d0565b61108f565b611073565b611009565b610fbe565b610de7565b610d26565b610bf4565b610b97565b610b35565b610aa8565b6109e1565b6109a5565b6107bd565b6106e3565b6104ed565b6102ff565b61026c565b600435906001600160a01b038216820361023e57565b5f80fd5b602435906001600160a01b038216820361023e57565b35906001600160a01b038216820361023e57565b3461023e57604060031936011261023e5760206102cc61028a610228565b6024355f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500835260405f20906001600160a01b03165f5260205260405f2090565b54604051908152f35b7fffffffff0000000000000000000000000000000000000000000000000000000081160361023e57565b3461023e57602060031936011261023e577fffffffff0000000000000000000000000000000000000000000000000000000060043561033d816102d5565b167f0e083076000000000000000000000000000000000000000000000000000000008114908115610377575b506040519015158152602090f35b7f7965db0b000000000000000000000000000000000000000000000000000000008114915081156103aa575b505f610369565b7fd9b67a260000000000000000000000000000000000000000000000000000000081149150811561040e575b81156103e4575b505f6103a3565b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f6103dd565b7f0e89341c00000000000000000000000000000000000000000000000000000000811491506103d6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff82111761048857604052565b610438565b67ffffffffffffffff811161048857601f01601f191660200190565b81601f8201121561023e576020813591016104c38261048d565b926104d16040519485610465565b8284528282011161023e57815f92602092838601378301015290565b3461023e57602060031936011261023e5760043567ffffffffffffffff811161023e576105216105629136906004016104a9565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040902061055d9060ff905b5416611bce565b61220d565b005b90600182811c921680156105ab575b602083101461057e57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610573565b604051905f827f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450254916105e783610564565b808352926001811690811561068b575060011461060d575b61060b92500383610465565b565b507f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45025f90815290917ff429cb5e2ec84cbb765e76b31964a56ccde03e7a6122d6cc4afb19edc55edeed5b81831061066f57505090602061060b928201016105ff565b6020919350806001915483858901015201910190918492610657565b6020925061060b94915060ff191682840152151560051b8201016105ff565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9060206106e09281815201906106aa565b90565b3461023e575f60031936011261023e576040515f60015461070381610564565b8084529060018116908115610799575060011461073b575b6107378361072b81850382610465565b604051918291826106cf565b0390f35b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b80821061077f5750909150810160200161072b61071b565b919260018160209254838588010152019101909291610767565b60ff191660208086019190915291151560051b8401909101915061072b905061071b565b3461023e57602060031936011261023e576004356107d96105b5565b81825f937a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000081101561097a575b50806d04ee2d6d415b85acef8100000000600a92101561095e575b662386f26fc10000811015610949575b6305f5e100811015610937575b612710811015610927575b6064811015610918575b101561090d575b61089e5f1960216108686001870161235e565b958601015b01917f3031323334353637383961626364656600000000000000000000000000000000600a82061a8353600a900490565b9081156108b15761089e905f199061086d565b6040516107379061072b816108ff6108d6896108d0602085018b611c59565b90611c59565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b03601f198101835282610465565b600190920191610855565b6002906064900494019361084e565b6004906127109004940193610844565b6008906305f5e1009004940193610839565b601090662386f26fc10000900494019361082c565b6020906d04ee2d6d415b85acef8100000000900494019361081c565b604094507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000090049050600a610801565b3461023e575f60031936011261023e5760207f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154604051908152f35b3461023e57602060031936011261023e576020610a2b6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b67ffffffffffffffff81116104885760051b60200190565b9080601f8301121561023e578135610a6281610a33565b92610a706040519485610465565b81845260208085019260051b82010192831161023e57602001905b828210610a985750505090565b8135815260209182019101610a8b565b3461023e5760a060031936011261023e57610ac1610228565b610ac9610242565b9060443567ffffffffffffffff811161023e57610aea903690600401610a4b565b60643567ffffffffffffffff811161023e57610b0a903690600401610a4b565b906084359367ffffffffffffffff851161023e57610b2f6105629536906004016104a9565b93611c6b565b3461023e57604060031936011261023e57610562600435610b54610242565b90610b92610b8d825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b612385565b6124b4565b3461023e57604060031936011261023e57600435610bb3610242565b336001600160a01b03821603610bcc576105629161258c565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023e575f60031936011261023e57335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260409020610c3d9060ff90610556565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811615610cba5760ff19167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b90602080835192838152019201905f5b818110610cff5750505090565b8251845260209384019390920191600101610cf2565b9060206106e0928181520190610ce2565b3461023e57604060031936011261023e5760043567ffffffffffffffff811161023e573660238201121561023e57806004013590610d6382610a33565b91610d716040519384610465565b8083526024602084019160051b8301019136831161023e57602401905b828210610dcf578360243567ffffffffffffffff811161023e5761073791610dbd610dc3923690600401610a4b565b90611d5f565b60405191829182610d15565b60208091610ddc84610258565b815201910190610d8e565b604060031936011261023e57610dfb610228565b60243567ffffffffffffffff811161023e57610e1b9036906004016104a9565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803014908115610f89575b50610f6157604051917f52d1902d0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0386165afa5f9381610f30575b50610ed1577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610f03576105629250612c36565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b610f5391945060203d602011610f5a575b610f4b8183610465565b81019061265c565b925f610e97565b503d610f41565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610e51565b3461023e57602060031936011261023e576004355f527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052602060405f20541515604051908152f35b3461023e575f60031936011261023e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610f615760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461023e575f60031936011261023e5760205f54604051908152f35b3461023e575f60031936011261023e57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b3461023e57604060031936011261023e5760043567ffffffffffffffff811161023e57611101903690600401610a4b565b611109610242565b906111148151611ced565b335f9081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090206111509060ff905b5416611e23565b5f5b825181101561117c576001906111685f54611eb5565b805f556111758285611d1e565b5201611152565b50906040519161118d602084610465565b5f83526001600160a01b038416156111a8576105629361266b565b7f57f447ce000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b3461023e57604060031936011261023e5760043567ffffffffffffffff811161023e57611205903690600401610a4b565b60243567ffffffffffffffff811161023e57611225903690600401610a4b565b90331561124857610562916040519161123f602084610465565b5f835233612853565b7f01a83514000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b3461023e575f60031936011261023e57335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090206112bd9060ff90610556565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811661133d5760ff1960019116177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023e57604060031936011261023e57602060ff6113c8600435611388610242565b905f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800845260405f20906001600160a01b03165f5260205260405f2090565b54166040519015158152f35b3461023e57604060031936011261023e576004356113f0610242565b335f9081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090206114299060ff90611149565b6114335f54611eb5565b90815f5560405191611446602084610465565b5f83526001600160a01b038216156111a8576105629361148360405192600184526020840152604083019160018352606084015260808301604052565b9161266b565b3461023e575f60031936011261023e576040515f6002546114a981610564565b808452906001811690811561079957506001146114d0576107378361072b81850382610465565b60025f9081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b8082106115145750909150810160200161072b61071b565b9192600181602092548385880101520191019092916114fc565b3461023e575f60031936011261023e5760206040515f8152f35b3461023e57604060031936011261023e57611561610228565b60243580151580910361023e576001600160a01b03821691821561160e576115d3906115bd336001600160a01b03165f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450160205260405f2090565b906001600160a01b03165f5260205260405f2090565b60ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b7fced3e100000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b3461023e5