0 txs
8.9k calls
constructor
constructor()
functions
bank
viewfunction bank() view returns (uint256)
bas
viewfunction bas() view returns (address)
bucketRegistry
viewfunction bucketRegistry() view returns (address)
check_used_proof_hash
viewfunction check_used_proof_hash(bytes32 proof_hash, address recipient) view returns (bool)
createBucketFee
viewfunction createBucketFee() view returns (uint256)
fee_sharing_ratios
viewfunction fee_sharing_ratios(uint256) view returns (uint256)
get_mint_fee
viewfunction get_mint_fee(bytes32 schema_id, uint256 invite_code) view returns (uint256)
get_proof_from_attestation
purefunction get_proof_from_attestation(bytes data) pure returns (bytes32, bool)
get_user_attested_schemas_in_given_schema_set
viewfunction get_user_attested_schemas_in_given_schema_set(address users, bytes32[] schemas) view returns (bytes32[])
get_user_attested_schemas
viewfunction get_user_attested_schemas(address user) view returns (bytes32[])
get_user_last_attestation_record
viewfunction get_user_last_attestation_record(address user, bytes32 schema_id) view returns (tuple, bool)
invite_code_discount
viewfunction invite_code_discount(uint256) view returns (uint256)
invite_code_incomes
viewfunction invite_code_incomes(uint256) view returns (uint256)
invite_code_users
viewfunction invite_code_users(uint256, uint256) view returns (address)
invited_amount
viewfunction invited_amount(uint256) view returns (uint64)
mint_fees
viewfunction mint_fees(bytes32) view returns (uint256)
minted_passport
viewfunction minted_passport(address) view returns (uint8)
minted_result
viewfunction minted_result(address, uint256) view returns (bytes32 schemaId, uint8 _type)
owner
viewfunction owner() view returns (address)
passport
viewfunction passport() view returns (bytes32)
proof_hash_users
viewfunction proof_hash_users(bytes32) view returns (address)
receive_fee_addresses
viewfunction receive_fee_addresses(uint256) view returns (address)
unique_proof_schema_ids
viewfunction unique_proof_schema_ids(bytes32) view returns (bool)
user_finished_all_attestation
viewfunction user_finished_all_attestation(address user, bytes32[] schemas) view returns (bool)
user_finished_all_attestations_after
viewfunction user_finished_all_attestations_after(address user, bytes32[] schemas, uint64 timestamp) view returns (bool)
user_finished_one_of_attestation_after
viewfunction user_finished_one_of_attestation_after(address user, bytes32[] schemas, uint64 timestamp) view returns (bool)
user_finished_one_of_attestation
viewfunction user_finished_one_of_attestation(address user, bytes32[] schemas) view returns (bool)
user_invited_codes
viewfunction user_invited_codes(address) view returns (uint256)
validate_attestors
viewfunction validate_attestors(bytes32) view returns (address)
verifier
viewfunction verifier() view returns (address)
initialize
nonpayablefunction initialize(address _bas, uint256 _createBucketFee, bytes32 _passport, address _verifier, address _bucketRegistry)
mint
payablefunction mint(tuple request, uint8 _type, uint256 invite_code) payable
mintPassport
payablefunction mintPassport(tuple request, uint8 _type, uint256 invite_code) payable
renounceOwnership
nonpayablefunction renounceOwnership()
setBucketFee
nonpayablefunction setBucketFee(uint256 _createBucketFee)
setInitAttestation
nonpayablefunction setInitAttestation(address[] _recipients, bytes32[] _schema_ids, bytes32[] _attestations, bytes32[] _proof_hashes)
setInviteCode
nonpayablefunction setInviteCode(uint256[] _invite_codes, uint256[] _invite_code_discounts, address[] _receive_fee_addresses, uint256[] _fee_sharing_ratios)
setMintFees
nonpayablefunction setMintFees(bytes32[] schemaIds, uint256[] _mint_fees, address[] _validate_attestors, bool[] _unique_proof_schema_ids)
setPassport
nonpayablefunction setPassport(bytes32 _passport)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdraw
nonpayablefunction withdraw(uint256 amount, address to)
events
BucketFeeUpdated
event BucketFeeUpdated(uint256 oldFee, uint256 newFee)
Initialized
event Initialized(uint8 version)
InviteCodeUpdated
event InviteCodeUpdated(uint256 indexed invite_code, uint256 discount, address receive_address, uint256 sharing_ratio)
MintOffChain
event MintOffChain(address indexed recipient, bytes32, (bytes32 schema, (address recipient, uint64 expirationTime, bool revocable, bytes32 refUID, bytes data, uint256 value) data, (uint8 v, bytes32 r, bytes32 s) signature, address attester, uint64 deadline) request)
MintPassport
event MintPassport(address indexed recipient, uint8 indexed passportType, uint256 indexed discount)
MintSchema
event MintSchema(address indexed user, bytes32 indexed schema, uint256 indexed invite_code, uint256 fee)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PassportUpdated
event PassportUpdated(bytes32 oldPassport, bytes32 newPassport)
SetMintFee
event SetMintFee(bytes32 indexed schema_uid, address indexed attestor, uint256 fee, bool indexed uniqe_proof_schema)
errors
BucketSoldOut
error BucketSoldOut()
InsufficientFunds
error InsufficientFunds()
InvalidAddress
error InvalidAddress()
InvalidAttestor
error InvalidAttestor()
InvalidInputLength
error InvalidInputLength()
InvalidInviteCode
error InvalidInviteCode()
InvalidProofHash
error InvalidProofHash()
InvalidSchemaId
error InvalidSchemaId()
NoBucketManager
error NoBucketManager()
ProofHashUsed
error ProofHashUsed()
creation bytecode
0x6080806040523460bd576000549060ff8260081c16606b575060ff808216036031575b6040516133ba90816100c38239f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a1386022565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe60a0604052600436101561001257600080fd5b60006080526080513560e01c8062f714ce146125b757806317ba9c4d1461257a5780631e8dc2231461255e57806324c10e8d14611c9b5780632580275614611c485780632941e66414611bd95780632b7ac3f314611b865780632ba1898014611a775780633437778d14611a3a57806334e4d2e4146119d8578063392c8fbc146119945780634eb9b23b146116c657806351c4c05e146116735780635c6b2b2d1461165a57806368740c28146115f35780636e0e11931461157e578063715018a6146114d5578063766b791c1461133a57806376cdb03b146112fd5780638265f0ed1461127357806382dcc88c146111d557806388791cd7146111735780638da5cb5b1461112057806390fe924a14610f99578063915f6e4514610f7d57806394b899bf14610a985780639dd2c37714610a75578063a060e8e014610a24578063a11482c6146109d8578063a13dfb0214610935578063a3e0e2f9146108e9578063a9af58f2146107db578063ba2ad1b61461075c578063bdc5e46814610547578063ca2c372a146104d2578063cd054e2d14610486578063d28448d7146103dc578063df5790131461037a578063df9c709514610324578063f08e10e1146102d85763f2fde38b146101e457600080fd5b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25761021b612690565b610223612fd1565b73ffffffffffffffffffffffffffffffffffffffff81161561024e57610248906132b9565b60805180f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b60805180fd5b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257600435608051526075602052602060406080512054604051908152f35b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25760043560805152606d602052602067ffffffffffffffff6040608051205416604051908152f35b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257600435608051526078602052602073ffffffffffffffffffffffffffffffffffffffff6040608051205416604051908152f35b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25773ffffffffffffffffffffffffffffffffffffffff610428612690565b16608051526077602052604060805120805461044381612f6e565b916080515b828110610461576040518061045d86826128fb565b0390f35b8061046e60019284612935565b90549060031b1c61047f8287612fbd565b5201610448565b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25760043560805152606e602052602060406080512054604051908152f35b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25760043561050c612fd1565b7fc3c6dabc12436b6bc8aa94735d30ca897b18a76467f342edbc449eb8606b76176040606a548151908152836020820152a1606a5560805180f35b346102d25761055536612849565b9296919561056595949195612fd1565b868114801590610752575b610726576080515b8181106105855760805180f35b61059861059382848761297c565b612b14565b906105a4818a8c61297c565b356105b082888b61297c565b356105bc83878b61297c565b35916105c885836131df565b61071a57604051906105d982612998565b8152602081019282845267ffffffffffffffff60408301814216815273ffffffffffffffffffffffffffffffffffffffff60608501986080518a521695866080515260766020526040608051208460805152602052604060805120945185555160018501555116916002810154965160028110156106e9576001976106aa947fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff00000000000000006002946080515060401b169216171791015583608051526077602052604060805120613325565b50608051526078602052604060805120907fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790555b01610578565b7f4e487b71000000000000000000000000000000000000000000000000000000006080515260216004526024608051fd5b505050600191506106e3565b7f7db491eb00000000000000000000000000000000000000000000000000000000608051526004608051fd5b5083811415610570565b346102d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d2576024356004356080515260706020526040608051209081548110156102d2576107cb73ffffffffffffffffffffffffffffffffffffffff91602093612935565b90549060031b1c16604051908152f35b346102d25773ffffffffffffffffffffffffffffffffffffffff6107fe366127da565b92909116608051526077602052604060805120906080516080515b8481106108a3575061082a90612f6e565b6080519093815b818110610846576040518061045d88826128fb565b61086b61085482848761297c565b358660019160005201602052604060002054151590565b610878575b600101610831565b9161089b60019161088a85858861297c565b35610895828a612fbd565b52612f29565b929050610870565b6108c86108b182878661297c565b358560019160005201602052604060002054151590565b6108d5575b600101610819565b906108e1600191612f29565b9190506108cd565b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257600435608051526071602052602060406080512054604051908152f35b346102d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25760206024356004356080515260728252604060805120549080608051526074835273ffffffffffffffffffffffffffffffffffffffff60406080512054166109b0575b50604051908152f35b60805152606e82526040608051205480156109a7576109d190600a92612d08565b04826109a7565b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257600435608051526072602052602060406080512054604051908152f35b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257600435608051526079602052602060ff60406080512054166040519015158152f35b346102d2576020610a8e610a88366127da565b91612ecd565b6040519015158152f35b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25760043567ffffffffffffffff81116102d2578060040160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83360301126102d2576024359160028310156102d257604435918260805152606e6020526040608051205492151580610f75575b610f4957803591606a548303610f1d57602073ffffffffffffffffffffffffffffffffffffffff606754169360246040519384927ff17325e70000000000000000000000000000000000000000000000000000000084528460048501528284015201948180610bb2610ba18989612b35565b604060448401526064830190612b74565b0391608051905af18015610df457610eee575b5060018414610c73575b818173ffffffffffffffffffffffffffffffffffffffff948686610bfc610593610c2b9861059398612ae1565b6080519116907f4d13399cf9b2ce187bf69d5c8be7a6a1c7c25dde99375704b19767de32c044f69080a4612ae1565b1660805152606b602052604060805120906080515060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008354169116179055608051608051f35b6065543410610ec25773ffffffffffffffffffffffffffffffffffffffff606854166040517f7282ed14000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa908115610df45760805191610e90575b5015610e64576020604491604051928380927fc2cfb22700000000000000000000000000000000000000000000000000000000825230600483015260805160248301525afa8015610df45760805190610e01575b73ffffffffffffffffffffffffffffffffffffffff91501691610d546105938284612ae1565b92803b156102d25773ffffffffffffffffffffffffffffffffffffffff604051947ff2fde38b0000000000000000000000000000000000000000000000000000000086521660048501528360248160805193608051905af1918215610df45773ffffffffffffffffffffffffffffffffffffffff94610c2b9461059394610de2575b50945091509150610bcf565b608051610dee916129e3565b87610dd6565b6040513d608051823e3d90fd5b506020813d602011610e5c575b81610e1b602093836129e3565b810103126102d2575173ffffffffffffffffffffffffffffffffffffffff811681036102d25773ffffffffffffffffffffffffffffffffffffffff90610d2e565b3d9150610e0e565b7f3eb0e36b00000000000000000000000000000000000000000000000000000000608051526004608051fd5b90506020813d602011610eba575b81610eab602093836129e3565b810103126102d2575186610cda565b3d9150610e9e565b7f356680b700000000000000000000000000000000000000000000000000000000608051526004608051fd5b6020813d602011610f15575b81610f07602093836129e3565b810103126102d25751610bc5565b3d9150610efa565b7f30ccdca100000000000000000000000000000000000000000000000000000000608051526004608051fd5b7f3b19367b00000000000000000000000000000000000000000000000000000000608051526004608051fd5b508215610b2f565b346102d2576020610a8e610f903661271a565b92919091612e3a565b346102d257610fa736612849565b9190939695610fb7959395612fd1565b878114801590611116575b801561110c575b610726576080515b818110610fde5760805180f35b808787877f651043d440c17a6e03014b9a79ac22c5f4923a1b92704df67cc3611cfe0e989260206110848f8f988c73ffffffffffffffffffffffffffffffffffffffff6110606105938f8f9060019f87611076996110418280966110489561297c565b359e61297c565b359d8e8d6080515260728c526040608051205561297c565b1697886110d0575b61107b61107684848461297c565b612e2d565b6110945761297c565b151594604051908152a401610fd1565b8760805152607986526040608051208c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905561297c565b876080515260738652604060805120897fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055611068565b5082811415610fc9565b5081811415610fc2565b346102d2576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257602073ffffffffffffffffffffffffffffffffffffffff60335416604051908152f35b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257600435608051526073602052602073ffffffffffffffffffffffffffffffffffffffff6040608051205416604051908152f35b346102d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25761120c612690565b73ffffffffffffffffffffffffffffffffffffffff602435911660805152606c6020526040608051209081548110156102d25760409160805150608051526020608051209060011b0161127160ff60018354930154168351928352602083019061279e565bf35b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25760043567ffffffffffffffff81116102d257366023820112156102d25780600401359067ffffffffffffffff82116102d25736602483830101116102d25760409160246112ef920161318d565b825191825215156020820152f35b346102d2576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d2576020606654604051908152f35b346102d25761134836612849565b939561135697939297612fd1565b8681148015906114cb575b80156114c1575b610726576080515b81811061137d5760805180f35b80877f59a1bea74dde7ab4a106f2acdf38cf5dab7eebce0ae547c9a58999b2ccab614c6060878a73ffffffffffffffffffffffffffffffffffffffff8f8f986114a06105938f848f8f60019f6110418f89969387948f8f8794906114a79f99611419610593886114999d611477976113f7838f819a61297c565b35611403848d8d61297c565b3560805152606e6020526040608051205561297c565b61142484888861297c565b3560805152607460205273ffffffffffffffffffffffffffffffffffffffff60406080512091167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905561297c565b3561148384848461297c565b356080515260756020526040608051205561297c565b359861297c565b938c61297c565b35916040519384521660208301526040820152a201611370565b5084811415611368565b5087811415611361565b346102d2576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25761150d612fd1565b6033547fffffffffffffffffffffffff0000000000000000000000000000000000000000811660335573ffffffffffffffffffffffffffffffffffffffff60805191167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0608051608051a360805180f35b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d2576004356115b8612fd1565b7fdbe175a90b9dd63ffa6f67725d19e02af8ca87b241226b36ca42dce001efe4ae60406065548151908152836020820152a160655560805180f35b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25773ffffffffffffffffffffffffffffffffffffffff61163f612690565b1660805152606f602052602060406080512054604051908152f35b346102d2576020610a8e61166d366127da565b91612dbb565b346102d2576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257602073ffffffffffffffffffffffffffffffffffffffff60685416604051908152f35b346102d25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25760043573ffffffffffffffffffffffffffffffffffffffff81168091036102d25760643573ffffffffffffffffffffffffffffffffffffffff81168091036102d2576084359073ffffffffffffffffffffffffffffffffffffffff82168092036102d257608051549260ff8460081c161593848095611987575b8015611970575b156118ec578460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831617608051556118bb575b506117c760ff6080515460081c166117c28161322e565b61322e565b6117d0336132b9565b7fffffffffffffffffffffffff00000000000000000000000000000000000000006067541617606755602435606555604435606a557fffffffffffffffffffffffff000000000000000000000000000000000000000060695416176069557fffffffffffffffffffffffff000000000000000000000000000000000000000060685416176068556118615760805180f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff6080515416608051557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1610248565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000061010191161760805155846117ab565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b50303b1580156117765750600160ff821614611776565b50600160ff82161061176f565b346102d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d2576020610a8e6119d0612668565b6004356131df565b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257600435608051526074602052602073ffffffffffffffffffffffffffffffffffffffff6040608051205416604051908152f35b346102d2576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d2576020606554604051908152f35b346102d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25773ffffffffffffffffffffffffffffffffffffffff611ac3612690565b604051611acf81612998565b6080518152608051602082015260805160408201526060608051910152166080515260766020526040608051206024356080515260205260a060406080512060405190611b1b82612998565b80548252611b7f600260018301549260208501938452015467ffffffffffffffff604085018183168152611b5960ff606088019460401c168461298c565b81815116151594604051965187525160208701525116604085015251606084019061279e565b6080820152f35b346102d2576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257602073ffffffffffffffffffffffffffffffffffffffff60695416604051908152f35b346102d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25773ffffffffffffffffffffffffffffffffffffffff611c25612690565b1660805152606b602052602060ff6040608051205416611271604051809261279e565b346102d2576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d257602073ffffffffffffffffffffffffffffffffffffffff60675416604051908152f35b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25760043567ffffffffffffffff81116102d2578060040160e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83360301126102d2576024359060028210156102d257604435928135926024820192611d2d6105938583612ae1565b928560805152607360205273ffffffffffffffffffffffffffffffffffffffff611d6260a48260406080512054169301612b14565b160361253257608051938560805152607960205260ff604060805120541661240a575b73ffffffffffffffffffffffffffffffffffffffff60695416602060405180927f1fccbcf70000000000000000000000000000000000000000000000000000000082528260048301528180611ddd6024820189612c73565b0391608051905af18015610df4576123d1575b508560805152607260205260406080512054918760805152607460205273ffffffffffffffffffffffffffffffffffffffff6040608051205416831515806123c8575b612396575b833410610ec25783341161234c575b88608051526075602052604060805120549084151580612343575b612325575b505060805191846121f75760675473ffffffffffffffffffffffffffffffffffffffff169250611e9691612ae1565b90604051916040830183811067ffffffffffffffff8211176121c65760405287835260c0813603126102d2576040519060c0820182811067ffffffffffffffff8211176121c657604052611ee9816126b3565b8252611ef760208201612705565b6020830152611f0860408201612b67565b604083015260608101356060830152608081013567ffffffffffffffff81116102d25781019036601f830112156102d257611f4f60a0929593953690602081359101612d84565b6080860152013560a0840152602081019283526040519283917ff17325e700000000000000000000000000000000000000000000000000000000835260206004840152516024830152516040604483015273ffffffffffffffffffffffffffffffffffffffff815116606483015267ffffffffffffffff60208201511660848301526040810151151560a4830152606081015160c483015260808101519060c060e4840152815191826101248501526080515b8381106121ad575050610144837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020979560a08496608051878488010152015161010485015201168101030191608051905af1908115610df4576080519161217a575b50600267ffffffffffffffff915b6040519061208382612998565b81526020810196875273ffffffffffffffffffffffffffffffffffffffff604082019684421688526120b960608401978861298c565b1696876080515260766020526040608051208960805152602052604060805120915182555160018201550193511692805492519260028410156106e9577f1f18cca6a026c396776595738716103c584814783bc09bbdb0a3206045e39c42947fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff00000000000000006020966080515060401b1692161717905583608051526077825261216c85604060805120613325565b50604051908152a460805180f35b90506020813d6020116121a5575b81612195602093836129e3565b810103126102d257516002612068565b3d9150612188565b6020828201810151610144898401015287955001612002565b7f4e487b71000000000000000000000000000000000000000000000000000000006080515260416004526024608051fd5b5073ffffffffffffffffffffffffffffffffffffffff60685416916040517f7282ed1400000000000000000000000000000000000000000000000000000000815260208160248173ffffffffffffffffffffffffffffffffffffffff8b16978860048301525afa908115610df457608051916122f3575b50156122c75767ffffffffffffffff927f3f3e6ba858c4c9df691aa8019fa08d48b8d0649e3f26dea83aa9913bb218d1ce6122bf6002946040519182918d8352604060208401526040830190612c73565b0390a2612076565b7fd632ec4500000000000000000000000000000000000000000000000000000000608051526004608051fd5b90506020813d60201161231d575b8161230e602093836129e3565b810103126102d257518a61226e565b3d9150612301565b61271061233561233c9387612d08565b0490613050565b8880611e67565b50811515611e62565b833403348111612365576123609033613050565b611e47565b7f4e487b71000000000000000000000000000000000000000000000000000000006080515260116004526024608051fd5b8860805152606e60205260406080512054806123b3575b50611e38565b6123c090600a9295612d08565b0492896123ad565b50801515611e33565b6020813d602011612402575b816123ea602093836129e3565b810103126102d257518015158114611df05760805180fd5b3d91506123dd565b93506124168482612ae1565b6080810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102d2570180359067ffffffffffffffff82116102d2576020019080360382136102d2576124719161318d565b94908095156125065761248485826131df565b6124da5760805152607860205260406080512073ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055611d85565b7f4c6cd76600000000000000000000000000000000000000000000000000000000608051526004608051fd5b7fb780d61f00000000000000000000000000000000000000000000000000000000608051526004608051fd5b7facec475300000000000000000000000000000000000000000000000000000000608051526004608051fd5b346102d2576020610a8e6125713661271a565b92919091612a24565b346102d2576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d2576020606a54604051908152f35b346102d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102d25760043573ffffffffffffffffffffffffffffffffffffffff612606612668565b61260e612fd1565b1690811561263c5747811561262c578111610ec25761024891613050565b905061263791613050565b610248565b7fe6c4247b00000000000000000000000000000000000000000000000000000000608051526004608051fd5b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361268b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361268b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361268b57565b9181601f8401121561268b5782359167ffffffffffffffff831161268b576020808501948460051b01011161268b57565b359067ffffffffffffffff8216820361268b57565b9060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261268b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361268b57916024359067ffffffffffffffff821161268b57612785916004016126d4565b909160443567ffffffffffffffff8116810361268b5790565b9060028210156127ab5752565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261268b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361268b57916024359067ffffffffffffffff821161268b57612845916004016126d4565b9091565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261268b5760043567ffffffffffffffff811161268b5781612892916004016126d4565b9290929160243567ffffffffffffffff811161268b57816128b5916004016126d4565b9290929160443567ffffffffffffffff811161268b57816128d8916004016126d4565b929092916064359067ffffffffffffffff821161268b57612845916004016126d4565b602060408183019282815284518094520192019060005b81811061291f5750505090565b8251845260209384019390920191600101612912565b805482101561294d5760005260206000200190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561294d5760051b0190565b60028210156127ab5752565b6080810190811067ffffffffffffffff8211176129b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176129b457604052565b9092919260005b848110612a3c575050505050600190565b612a4781868461297c565b3573ffffffffffffffffffffffffffffffffffffffff8416600052607660205260406000209060005260205267ffffffffffffffff6040600020612abd600260405192612a9384612998565b8054845260018101546020850152015491606060ff6040830194868116865260401c16910161298c565b511667ffffffffffffffff851611612ad757600101612a2b565b5050505050600090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff418136030182121561268b570190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361268b5790565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff418236030181121561268b570190565b3590811515820361268b57565b9073ffffffffffffffffffffffffffffffffffffffff612b93836126b3565b16815267ffffffffffffffff612bab60208401612705565b166020820152612bbd60408301612b67565b151560408201526060820135606082015260808201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181121561268b578201916020833593019067ffffffffffffffff841161268b57833603821361268b578360a0601f9260e0967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09560c060808901528160c0890152888801376000878488010152013560a08501520116010190565b9081358152612c99612c886020840184612b35565b60e0602084015260e0830190612b74565b91604081013560ff811680910361268b57612d0160c0809367ffffffffffffffff936040870152606081013560608701526080810135608087015273ffffffffffffffffffffffffffffffffffffffff612cf560a083016126b3565b1660a087015201612705565b1691015290565b81810292918115918404141715612d1b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81116129b457601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612d9082612d4a565b91612d9e60405193846129e3565b82948184528183011161268b578281602093846000960137010152565b9060005b838110612dcf5750505050600090565b73ffffffffffffffffffffffffffffffffffffffff83166000526077602052612e186040600020612e0183878661297c565b359060019160005201602052604060002054151590565b612e2457600101612dbf565b50505050600190565b35801515810361268b5790565b9092919260005b848110612e52575050505050600090565b612e5d81868461297c565b3573ffffffffffffffffffffffffffffffffffffffff8416600052607660205260406000209060005260205267ffffffffffffffff6040600020612ea9600260405192612a9384612998565b511667ffffffffffffffff851610612ec357600101612e41565b5050505050600190565b9060005b838110612ee15750505050600190565b73ffffffffffffffffffffffffffffffffffffffff83166000526077602052612f136040600020612e0183878661297c565b15612f2057600101612ed1565b50505050600090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d1b5760010190565b67ffffffffffffffff81116129b45760051b60200190565b90612f7882612f56565b612f8560405191826129e3565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612fb38294612f56565b0190602036910137565b805182101561294d5760209160051b010190565b73ffffffffffffffffffffffffffffffffffffffff603354163303612ff257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b81471061312f57600080809373ffffffffffffffffffffffffffffffffffffffff8294165af13d1561312a573d61308681612d4a565b9061309460405192836129e3565b8152600060203d92013e5b156130a657565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b61309f565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b9190820160808382031261268b57602083013567ffffffffffffffff811161268b5783019080601f8301121561268b578160206131cc93359101612d84565b506131d960608301612b67565b91359190565b600052607860205273ffffffffffffffffffffffffffffffffffffffff60406000205416801515918261321157505090565b73ffffffffffffffffffffffffffffffffffffffff161415919050565b1561323557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff80603354921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617603355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b60008281526001820160205260409020546133a657805490680100000000000000008210156129b45761335f826001809401835582612935565b81549060031b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86831b921b191617905580549260005201602052604060002055600190565b505060009056fea164736f6c634300081a000a