0 txs
0 calls
constructor
constructor(address _globalAccessManager, address easAddress, address schemaRegistryAddress)
functions
attestationAttester
viewfunction attestationAttester(bytes32) view returns (address)
attestationHistory
viewfunction attestationHistory(address, bytes32, uint256) view returns (bytes32 uid, uint256 timestamp, bool active)
attestationPaymentAmounts
viewfunction attestationPaymentAmounts(bytes32) view returns (uint256)
attestationRecords
viewfunction attestationRecords(address, bytes32) view returns (bytes32)
ATTESTOR_ROLE
viewfunction ATTESTOR_ROLE() view returns (uint64)
attestorAuthorizationCount
viewfunction attestorAuthorizationCount(address) view returns (uint256)
authority
viewfunction authority() view returns (address)
authorizedDelegators
viewfunction authorizedDelegators(address) view returns (bool)
decodeSignatureWrapper
purefunction decodeSignatureWrapper(bytes signature) pure returns (uint8 sigType, bytes signatureData, bytes ownerData)
decodeWebAuthnAuth
purefunction decodeWebAuthnAuth(bytes data) pure returns (tuple auth)
eas
viewfunction eas() view returns (address)
escrowPayments
viewfunction escrowPayments(address, bytes32) view returns (uint256)
getAttestation
viewfunction getAttestation(bytes32 uid, address subject) view returns (tuple)
getAttestationAtIndex
viewfunction getAttestationAtIndex(bytes32 uid, address subject, uint256 index) view returns (tuple)
getAttestationByName
viewfunction getAttestationByName(string schemaName, address subject) view returns (tuple)
getAttestationByUID
viewfunction getAttestationByUID(bytes32 attestationUID) view returns (tuple)
getAttestationHistory
viewfunction getAttestationHistory(bytes32 uid, address subject) view returns (bytes32[] uids, uint256[] timestamps, bool[] activeFlags)
getDecodedAttestation
viewfunction getDecodedAttestation(bytes32 uid, address subject) view returns (bytes[] values)
getDecodedAttestationAtIndex
viewfunction getDecodedAttestationAtIndex(bytes32 uid, address subject, uint256 index) view returns (bytes[] values)
isAttestationValid
viewfunction isAttestationValid(address subject, bytes32 uid, address issuer) view returns (bool)
isAttestationValidByName
viewfunction isAttestationValidByName(address subject, string schemaName, address issuer) view returns (bool)
isAttestorTrustedByIssuer
viewfunction isAttestorTrustedByIssuer(address issuer, address attestor) view returns (bool)
isAuthorizedDelegator
viewfunction isAuthorizedDelegator(address delegator) view returns (bool)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
isGloballyAuthorizedAttestor
viewfunction isGloballyAuthorizedAttestor(address attestor) view returns (bool)
ISSUER_ROLE
viewfunction ISSUER_ROLE() view returns (uint64)
latestAttestationIndex
viewfunction latestAttestationIndex(address, bytes32) view returns (uint256)
nonces
viewfunction nonces(address) view returns (uint256)
schemaNameToUID
viewfunction schemaNameToUID(string) view returns (bytes32)
schemaRegistry
viewfunction schemaRegistry() view returns (address)
schemas
viewfunction schemas(bytes32 uid) view returns (tuple)
validAttestors
viewfunction validAttestors(address, address) view returns (bool)
authorizeDelegator
nonpayablefunction authorizeDelegator(address delegator)
createAttestation
nonpayablefunction createAttestation(bytes32 uid, address subject, bytes data, uint64 expirationOverride, address attestor, uint64 deadline, bytes signature) returns (bytes32)
deauthorizeDelegator
nonpayablefunction deauthorizeDelegator(address delegator)
deregisterSchema
nonpayablefunction deregisterSchema(bytes32 uid)
reactivateSchema
nonpayablefunction reactivateSchema(bytes32 uid)
registerSchema
nonpayablefunction registerSchema(string name, bytes32 uid, bool revocable, uint64 expirationPeriod, bool isTimeSeries, string[] fieldNames, string[] fieldTypes)
requestAttestation
payablefunction requestAttestation(bytes32 uid) payable returns (bool)
revokeAttestation
nonpayablefunction revokeAttestation(bytes32 uid, address subject, address attestor, uint64 deadline, bytes signature)
setAttestationPaymentAmount
nonpayablefunction setAttestationPaymentAmount(bytes32 uid, uint256 amount)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
setEAS
nonpayablefunction setEAS(address easAddress)
setSchemaRegistry
nonpayablefunction setSchemaRegistry(address schemaRegistryAddress)
setValidAttestor
nonpayablefunction setValidAttestor(address attestor, bool isValid)
updateAttestation
nonpayablefunction updateAttestation(bytes32 uid, address subject, bytes data, uint64 expirationOverride, address attestor, uint64 deadline, bytes signature) returns (bytes32)
withdrawAttestationPayment
nonpayablefunction withdrawAttestationPayment(address subject, bytes32 uid)
events
AttestationCreated
event AttestationCreated(address indexed subject, bytes32 indexed easUID, bytes32 indexed attestationUID, uint256 timestamp)
AttestationPaymentAmountSet
event AttestationPaymentAmountSet(bytes32 indexed easUID, uint256 amount)
AttestationPaymentReceived
event AttestationPaymentReceived(address indexed subject, bytes32 indexed easUID, uint256 amount)
AttestationRegistryDeployed
event AttestationRegistryDeployed(address indexed registryAddress, address admin, address easAddress, address schemaRegistryAddress)
AttestationRevoked
event AttestationRevoked(address indexed subject, bytes32 indexed easUID, bytes32 indexed attestationUID)
AttestationUpdated
event AttestationUpdated(address indexed subject, bytes32 indexed easUID, bytes32 oldUID, bytes32 newUID)
AuthorityUpdated
event AuthorityUpdated(address authority)
DelegatedAttestationCreated
event DelegatedAttestationCreated(address indexed subject, bytes32 indexed easUID, bytes32 indexed attestationUID, address attestor, uint256 timestamp)
DelegatorAuthorized
event DelegatorAuthorized(address indexed delegator)
DelegatorDeauthorized
event DelegatorDeauthorized(address indexed delegator)
EASUpdated
event EASUpdated(address indexed oldEAS, address indexed newEAS)
SchemaRegistered
event SchemaRegistered(bytes32 indexed easUID, string name, bool isTimeSeries)
SchemaUpdated
event SchemaUpdated(bytes32 indexed easUID, string name, bool active)
ValidAttestorSet
event ValidAttestorSet(address indexed issuer, address indexed attestor, bool isValid)
errors
AccessManagedInvalidAuthority
error AccessManagedInvalidAuthority(address authority)
AccessManagedRequiredDelay
error AccessManagedRequiredDelay(address caller, uint32 delay)
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
creation bytecode
0x60803461012457601f615db738819003918201601f19168301916001600160401b0383118484101761012857808492606094604052833981010312610124576100478161013c565b61005f60406100586020850161013c565b930161013c565b5f80546001600160a01b0319166001600160a01b039093169283179055604051828152919290917f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90602090a1600980546001600160a01b039283166001600160a01b03199182168117909255600a8054949093169316831790915560408051938452602084019190915282015230907fd7091562ccc1bb1e0228008b42e6ae5eb4056bb507261dbe58eeb3f0bfba492f90606090a2604051615c6690816101518239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101245756fe60806040526004361015610011575f80fd5b5f3560e01c80630403080f146102ff5780631482387e146102fa57806315babcde146102f55780631f24b2ff146102f057806328c37748146102eb57806333918180146102e6578063370b3e39146102e1578063373ca050146102dc5780633ac37f24146102d75780633b4ec233146102d25780633fc50593146102cd578063404e5687146102c85780634441bbd9146102c357806357d76cf7146102be5780635cf52eff146102b957806362723644146102b4578063686e27dc146102af57806377252e6c146102aa5780637a9e5e4b146102a55780637bbecb1a146102a05780637ecebe001461029b57806380eb1a3b146102965780638150864d1461029157806381cda9d11461028c57806381fa7ec71461028757806382aefa2414610282578063898d13c21461027d578063899a0468146102235780638c2fe9e8146102785780638fb360371461027357806390ebc0a21461026e578063932ef7b414610269578063b01f1da614610264578063b664823c1461025f578063bf7e214f1461025a578063c051f75f14610255578063c2579e7c14610250578063c600eca61461024b578063c645e2ba14610246578063c743c46614610241578063ca2adef61461023c578063d2cae4a014610237578063e52296d514610232578063ea0b97571461022d578063ea8dce2114610228578063f06ebc5c146102235763fedc41001461021e575f80fd5b612355565b611667565b612319565b6122ff565b6121f4565b612185565b61208a565b611ee8565b611ec6565b611dd0565b611da6565b611cd4565b611cad565b611913565b6118ca565b6117ef565b611764565b611721565b6116b0565b611602565b6115e7565b6115c1565b61158f565b611567565b6114e8565b611451565b61136a565b611296565b61116d565b6110c5565b6110aa565b610f88565b610e93565b610e6b565b610e0e565b610be1565b610b4a565b610acc565b6109af565b6107ec565b610768565b61073e565b610661565b61050b565b6103d9565b61034b565b6001600160a01b0381160361031557565b5f80fd5b634e487b7160e01b5f52603260045260245ffd5b8054821015610346575f52600360205f20910201905f90565b610319565b346103155760603660031901126103155760043561036881610304565b6001600160a01b03165f90815260046020908152604080832060243584529091529020805460443590811015610315576103a19161032d565b5080546103d560ff600260018501549401541660405193849384919260409194936060840195845260208401521515910152565b0390f35b34610315576020366003190112610315576004356103f73633614378565b805f52600160205261041661040f60405f2054612423565b1515612465565b805f52600160205260ff600160405f20015460481c16156104c6577fc5c044618b63e6ab5b5eea6de4183731ffac029d956c7044da59b4191e9848616104b161046f61046a845f52600160205260405f2090565b61252a565b6104946001610486865f52600160205260405f2090565b01805460ff60481b19169055565b8361049e82610df1565b54146104b6575b60405191829182612545565b0390a2005b5f6104c082610df1565b556104a5565b60405162461bcd60e51b815260206004820152601760248201527f536368656d6120616c726561647920696e6163746976650000000000000000006044820152606490fd5b346103155760203660031901126103155760043561052881610304565b5f54604080516368fc2b7760e11b81526004808201526001600160a01b03848116602483015290939284916044918391165afa9081156105da576103d5925f926105a8575b508115610588575b5060405190151581529081906020820190565b6001600160a01b03165f908152600e602052604081205415159150610575565b6105cb91925060403d6040116105d3575b6105c38183610d06565b81019061256c565b50905f61056d565b503d6105b9565b612598565b9181601f84011215610315578235916001600160401b038311610315576020838186019501011161031557565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b916106509060ff61065e959316845260606020850152606084019061060c565b91604081840391015261060c565b90565b34610315576020366003190112610315576004356001600160401b038111610315576106919036906004016105df565b810190602081830312610315578035906001600160401b038211610315570160608183031261031557604051916106c783610c95565b81356106d2816125a3565b835260208201356001600160401b03811161031557816106f3918401610dc4565b91602084019283526040810135906001600160401b038211610315576103d59261072f926107219201610dc4565b938460408201525160ff1690565b91519260405193849384610630565b34610315576020366003190112610315576004355f526007602052602060405f2054604051908152f35b346103155760203660031901126103155760043561078581610304565b61078f3633614378565b6001600160a01b03165f818152600c60205260408120805460ff191690557f793201daa8e76fc3824b3693e2c9b441e5c01aecf6b7aed98290d59050e92b599080a2005b8015150361031557565b608435906107ea826107d3565b565b346103155760403660031901126103155760043561080981610304565b602435610815816107d3565b5f546108379061082b906001600160a01b031681565b6001600160a01b031690565b604080516368fc2b7760e11b81526001600482015233602482015291829060449082905afa80156105da57610873915f9161098f575b506125ae565b335f9081526006602052604090206108a8906108a19084905b9060018060a01b03165f5260205260405f2090565b5460ff1690565b335f9081526006602052604090206108d89083906108c790869061088c565b9060ff801983541691151516179055565b8180610987575b1561094857506001600160a01b0382165f908152600e602052604090206109068154612637565b90555b60405190151581526001600160a01b03919091169033907f84abdb760769d144746ad63d3fd9ebf5f61b2502937e55fa1cd9652bc1fdd9db90602090a3005b8115908161097f575b5015610909576001600160a01b0382165f908152600e602052604090206109788154612626565b9055610909565b90505f610951565b5080156108df565b6109a8915060403d6040116105d3576105c38183610d06565b505f61086d565b34610315576020366003190112610315576004356109cc81610304565b6109d63633614378565b6001600160a01b03165f818152600c60205260408120805460ff191660011790557f61fec3459a9d39db04afdb28de9f980334115da7dbb824723884e24e26ba42809080a2005b61016061012061065e93602084528051602085015260208101516040850152610a56604082015160608601906001600160401b03169052565b60608101516001600160401b0316608085015260808101516001600160401b031660a085015260a081015160c0858101919091528101516001600160a01b031660e085015260e08101516001600160a01b031661010085015261010081015115158483015201519161014080820152019061060c565b34610315576040366003190112610315576004356001600160401b03811161031557610b3e610b026103d59236906004016105df565b602060243592610b1184610304565b610b19612645565b508260405193849283378101600281520301902054610b398115156126b9565b6132fb565b60405191829182610a1d565b3461031557604036600319011261031557600435610b6781610304565b6024359060018060a01b03165f52600360205260405f20905f52602052602060405f2054604051908152f35b6001600160401b0381160361031557565b606435906107ea82610b93565b9181601f84011215610315578235916001600160401b038311610315576020808501948460051b01011161031557565b346103155760e0366003190112610315576004356001600160401b03811161031557610c119036906004016105df565b60243591604435610c21816107d3565b610c29610ba4565b90610c326107dd565b60a4356001600160401b03811161031557610c51903690600401610bb1565b93909260c435976001600160401b03891161031557610c77610c7f993690600401610bb1565b989097612705565b005b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610cb057604052565b610c81565b60e081019081106001600160401b03821117610cb057604052565b60c081019081106001600160401b03821117610cb057604052565b608081019081106001600160401b03821117610cb057604052565b90601f801991011681019081106001600160401b03821117610cb057604052565b604051906107ea60e083610d06565b604051906107ea60c083610d06565b604051906107ea61014083610d06565b604051906107ea604083610d06565b604051906107ea606083610d06565b6001600160401b038111610cb057601f01601f191660200190565b929192610d9a82610d73565b91610da86040519384610d06565b829481845281830111610315578281602093845f960137010152565b9080601f830112156103155781602061065e93359101610d8e565b805191908290602001825e015f815290565b6020610e039160405192838092610ddf565b600281520301902090565b34610315576020366003190112610315576004356001600160401b03811161031557610e506020610e4481933690600401610dc4565b60405192838092610ddf565b600281520301902054604051908152f35b5f91031261031557565b34610315575f36600319011261031557600a546040516001600160a01b039091168152602090f35b3461031557602036600319011261031557600435610eb081610304565b60018060a01b03165f52600e602052602060405f2054604051908152f35b90602080835192838152019201905f5b818110610eeb5750505090565b82511515845260209384019390920191600101610ede565b6060808252825190820181905260808201959492602001905f5b818110610f725750505080850360208201526020808451968781520193015f955b808710610f5a57505061065e9394506040818403910152610ece565b90936020806001928751815201950196019590610f3e565b8251885260209788019790920191600101610f1d565b3461031557604036600319011261031557600435602435610fa881610304565b815f526001602052610fd0610fcb6080610fc460405f20612f70565b0151151590565b612ffd565b6001600160a01b0381165f908152600460205260409020610ffb9083905b905f5260205260405f2090565b549061100682613049565b9161101081613049565b9361101a82613049565b925f5b83811061103457604051806103d5878a8a84610f03565b806110a4611093604061106f6110696001966110648a610fee8b60018060a01b03165f52600460205260405f2090565b61032d565b5061307b565b805161107b868d6130b5565b52602081015161108b868e6130b5565b520151151590565b61109d83896130b5565b9015159052565b0161101d565b34610315575f36600319011261031557602060405160048152f35b34610315576040366003190112610315576004356110e281610304565b6024359060018060a01b03165f52600860205260405f20905f52602052602060405f2054604051908152f35b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061114057505050505090565b909192939460208061115e600193603f19868203018752895161060c565b97019301930191939290611131565b34610315576040366003190112610315576103d560043561127461012061125e60243561119981610304565b845f52600160205260405f2094610b3961124d6003604051986111bb8a610cb5565b6040516111d3816111cc81856124a9565b0382610d06565b8a5261123661122d60018301548c602060ff831615159101526112148d6040611206846001600160401b039060081c1690565b6001600160401b0316910152565b60ff604882901c16151560608e01525b60501c60ff1690565b151560808c0152565b61124260028201612f13565b60a08b015201612f13565b9660c0810197885251511515612465565b019161126d83515115156130c9565b5151613115565b905161127f826130a8565b52611289816130a8565b506040519182918261110e565b34610315576020366003190112610315576004356112b381610304565b5f546001600160a01b038116330361133557813b15611314576001600160a01b0319166001600160a01b039091169081175f556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90602090a1005b506361798f2f60e11b5f9081526001600160a01b0391909116600452602490fd5b62d1953b60e31b5f523360045260245ffd5b6060906003190112610315576004359060243561136381610304565b9060443590565b34610315576103d5600361127461012061125e61138636611347565b91805f52600160205261144c610fcb60405f206114466114356040519b8c936113ae85610cb5565b6040516113bf816111cc81856124a9565b855261141d6080611414600184015460ff8116151560208a01526114006113f0826001600160401b039060081c1690565b6001600160401b031660408b0152565b611224604882901c60ff16151560608b0152565b15159601958652565b8d60a061142c60028401612f13565b91015201612f13565b9a60c081019b8c5251511515612465565b51151590565b6141e8565b346103155760203660031901126103155760043561146e81610304565b60018060a01b03165f52600b602052602060405f2054604051908152f35b6020815260c060a06114c26114ac855184602087015260e086019061060c565b6020860151858203601f1901604087015261060c565b936040810151606085015260608101516080850152608081015182850152015191015290565b34610315576020366003190112610315576004356001600160401b0381116103155761155b61151e6103d5923690600401610dc4565b5f60a060405161152d81610cd0565b606081526060602082015282604082015282606082015282608082015201526020808251830101910161315e565b6040519182918261148c565b34610315575f366003190112610315576009546040516001600160a01b039091168152602090f35b34610315576020366003190112610315576004355f52600d602052602060018060a01b0360405f205416604051908152f35b34610315576040366003190112610315576103d5610b3e602435600435610b3982610304565b34610315575f36600319011261031557602060405160018152f35b346103155760203660031901126103155760043561161f81610304565b60018060a01b03165f52600c602052602060ff60405f2054166040519015158152f35b60409060031901126103155760043561165a81610304565b9060243561065e81610304565b3461031557602060ff6116a461167c36611642565b6001600160a01b039182165f9081526006865260408082209290931681526020919091522090565b54166040519015158152f35b34610315576040366003190112610315576004357f9c1a728b5eb5d251d44c1b91b55a4dc1ce81e6e15f277c5f72ceaff41f2ebd1460206024356116f43633614378565b835f526001825261170b61040f60405f2054612423565b835f52600782528060405f2055604051908152a2005b34610315575f366003190112610315575f5460a01c60ff161561175c576020638fb3603760e01b5b6040516001600160e01b03199091168152f35b60205f611749565b346103155760603660031901126103155760043561178181610304565b6024356001600160401b038111610315576103d5916117a76117dd9236906004016105df565b60443592916020906117b885610304565b8260405193849283378101600281520301902054906117d88215156126b9565b6142ca565b60405190151581529081906020820190565b346103155760203660031901126103155760043561180b612645565b506009546040516328c44a9960e21b81526004810183905291905f90839060249082906001600160a01b03165afa9081156105da576103d5925f9261189e575b5061186161186e915f52600d60205260405f2090565b546001600160a01b031690565b6001600160a01b03811661188a575b5060405191829182610a1d565b6001600160a01b031660e08201525f61187d565b61186e9192506118c2611861913d805f833e6118ba8183610d06565b810190613210565b92915061184b565b34610315576040366003190112610315576004356118e781610304565b6024359060018060a01b03165f52600560205260405f20905f52602052602060405f2054604051908152f35b346103155760a03660031901126103155760043560243561193381610304565b60443561193f81610304565b6064359061194c82610b93565b6084356001600160401b0381116103155761196b9036906004016105df565b5f549193916119849061082b906001600160a01b031681565b604080516368fc2b7760e11b815260048082015233602482015291829060449082905afa80156105da576119df915f91611c8d575b50335f908152600c602052604090206119d1906108a1565b908115611c85575b5061354f565b6119f46001600160401b0383164211156135b2565b611a4e6080611a13611a0e895f52600160205260405f2090565b612f70565b611a28611a236060830151151590565b6135f2565b611a3d611a386020830151151590565b613635565b610fc4611a4987614460565b61368f565b15611bfb5790611ae9611af392611a7988610fee8960018060a01b03165f52600560205260405f2090565b5495611aa4611a9c8a610fee8b60018060a01b03165f52600460205260405f2090565b5488106136eb565b611ac6876110648b610fee8c60018060a01b03165f52600460205260405f2090565b50936002850194611ae0611adb875460ff1690565b613737565b5496878b6144e7565b805460ff19169055565b836001600160a01b0384167f8de560566491c39aed5dd4446eb7276aea4b742fe46e55ced758402c076422ab5f80a4611b49611b4384610fee8560018060a01b03165f52600460205260405f2090565b54613783565b8114611b5157005b611b5b5f916137b7565b5f811215611b90575b5015611b6c57005b6001600160a01b03165f9081526005602052604081209091611b8d91610fee565b55005b611bc06002611bb78361106488610fee8960018060a01b03165f52600460205260405f2090565b50015460ff1690565b611bd257611bcd906137c8565b611b5b565b9050611bf283610fee8460018060a01b03165f52600560205260405f2090565b5560015f611b64565b91611c3d610fee9387958794611c295f9a610fee611b8d9b60018060a01b03165f52600360205260405f2090565b5494611c368615156136eb565b85896144e7565b836001600160a01b0383167f8de560566491c39aed5dd4446eb7276aea4b742fe46e55ced758402c076422ab8880a46001600160a01b03165f90815260036020526040902090565b90505f6119d9565b611ca6915060403d6040116105d3576105c38183610d06565b505f6119b9565b34610315575f366003190112610315575f546040516001600160a01b039091168152602090f35b3461031557602036600319011261031557600435611cf181610304565b611cfb3633614378565b600a80546001600160a01b0319166001600160a01b0392909216919091179055005b9060e06003198301126103155760043591602435611d3a81610304565b916044356001600160401b0381116103155782611d59916004016105df565b92909291606435611d6981610b93565b91608435611d7681610304565b9160a435611d8381610b93565b9160c435906001600160401b03821161031557611da2916004016105df565b9091565b34610315576020611dc8611db936611d1d565b979690969591959492946137d9565b604051908152f35b602036600319011261031557600435805f526001602052611df761040f60405f2054612423565b805f52600760205260405f20548015611e7557611e15903414613972565b335f908152600860205260409020611e2e908290610fee565b611e393482546139da565b905560405134815233907fa78ff7466d7f28786bdaa70d72d046c14eef5de3df93a085d4a492ee8d5baa2590602090a360405160018152602090f35b60405162461bcd60e51b815260206004820152602360248201527f4e6f207061796d656e7420726571756972656420666f72207468697320736368604482015262656d6160e81b6064820152608490fd5b34610315576020611dc8611ed936611d1d565b97969096959195949294613bd5565b3461031557604036600319011261031557600435611f0581610304565b602435611f123633614378565b60018060a01b0382165f52600860205260405f20815f5260205260405f2054908115611f67575f80809381611f5c8195610fee8960018060a01b03165f52600860205260405f2090565b553382f1156105da57005b60405162461bcd60e51b81526020600482015260166024820152754e6f207061796d656e7420746f20776974686472617760501b6044820152606490fd5b9080602083519182815201916020808360051b8301019401925f915b838310611fd057505050505090565b9091929394602080611fee600193601f19868203018752895161060c565b97019301930191939290611fc1565b9061065e916020815260c0612075612022845160e0602086015261010085019061060c565b6020850151151560408501526001600160401b0360408601511660608501526120546060860151608086019015159052565b6080850151151560a085015260a0850151848203601f190184860152611fa5565b9201519060e0601f1982850301910152611fa5565b3461031557602036600319011261031557600435606060c06040516120ae81610cb5565b8281525f60208201525f60408201525f838201525f60808201528260a082015201525f5260016020526103d560405f206121746003604051926120f084610cb5565b604051612101816111cc81856124a9565b845261215d612154600183015460ff811615156020880152612140612130826001600160401b039060081c1690565b6001600160401b03166040890152565b611224604882901c60ff1615156060890152565b15156080860152565b61216960028201612f13565b60a085015201612f13565b60c082015260405191829182611ffd565b34610315576020366003190112610315576004356121a281610304565b6121ac3633614378565b600980546001600160a01b039283166001600160a01b0319821681179092559091167f3a023ac647b3654cc3dd42e4bd9212305415a97764ac112fc285ca6f68631e045f80a3005b34610315576020366003190112610315576004356122123633614378565b805f52600160205261222a61040f60405f2054612423565b805f52600160205261225161224c60ff600160405f20015460481c1615151590565b6140c0565b61227561226e612269835f52600160205260405f2090565b614104565b5415612a4d565b6122a6600161228c835f52600160205260405f2090565b01805460ff60481b19166901000000000000000000179055565b806122bc612269825f52600160205260405f2090565b557fc5c044618b63e6ab5b5eea6de4183731ffac029d956c7044da59b4191e9848616104b16122f3835f52600160205260405f2090565b6040519182918261418e565b34610315576103d5610b3e61231336611347565b916141e8565b3461031557606036600319011261031557602061234b60043561233b81610304565b602435604435916117d883610304565b6040519015158152f35b346103155760203660031901126103155760043561237281610304565b5f54604080516368fc2b7760e11b81526004808201526001600160a01b03848116602483015290939284916044918391165afa9081156105da576103d5925f926123f9575b506001600160a01b03165f908152600c602052604090206123d7906108a1565b9081156123f1575060405190151581529081906020820190565b90505f610575565b6123d791925061241a6108a19160403d6040116105d3576105c38183610d06565b509291506123b7565b90600182811c92168015612451575b602083101461243d57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612432565b61065e9054612423565b1561246c57565b60405162461bcd60e51b815260206004820152601560248201527414d8da195b58481b9bdd081c9959da5cdd195c9959605a1b6044820152606490fd5b5f92918154916124b883612423565b808352926001811690811561250d57506001146124d457505050565b5f9081526020812093945091925b8383106124f3575060209250010190565b6001816020929493945483858701015201910191906124e2565b915050602093945060ff929192191683830152151560051b010190565b906107ea61253e92604051938480926124a9565b0383610d06565b9190602061255c5f9260408652604086019061060c565b930152565b51906107ea826107d3565b91908260409103126103155760208251612585816107d3565b92015163ffffffff811681036103155790565b6040513d5f823e3d90fd5b60ff81160361031557565b156125b557565b60405162461bcd60e51b815260206004820152602f60248201527f43616c6c6572206973206e6f7420617574686f72697a656420746f207365742060448201526e76616c6964206174746573746f727360881b6064820152608490fd5b634e487b7160e01b5f52601160045260245ffd5b8015612632575f190190565b612612565b5f1981146126325760010190565b6040519061014082018281106001600160401b03821117610cb0576040526060610120835f81525f60208201525f60408201525f838201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201520152565b6020908260405193849283378101600281520301902090565b156126c057565b60405162461bcd60e51b815260206004820152601a60248201527f536368656d61206e616d65206e6f7420726567697374657265640000000000006044820152606490fd5b959761275391979594929961271a3633614378565b600a545f908c90612733906001600160a01b031661082b565b60405180809781946351753e3760e11b8352600483019190602083019252565b03915afa9283156105da577ffe70e19451f4cc848445b5048f7dd47b599b16ee089c6bea806f1d38324eaeba9a8861280a8c978f6128489a6127ff8f6128609f61226e8e6127e961282c9f6127de8f996128209f6121309b6127ef986127ca846127e3976127d0955f91612865575b50511461294d565b146129a7565b5f52600160205260405f2090565b61245b565b15612a01565b836126a0565b6127f7610d27565b9c3691610d8e565b8b52151560208b0152565b6001606088015288151560808801523691612ab0565b60a08501523691612ab0565b60c0820152612843885f52600160205260405f2090565b612d2e565b8561285385856126a0565b5560405193849384612ef2565b0390a2565b61288191503d805f833e6128798183610d06565b8101906128cb565b5f6127c2565b81601f82011215610315576020815191016128a182610d73565b926128af6040519485610d06565b8284528282011161031557815f926020928386015e8301015290565b602081830312610315578051906001600160401b038211610315570160808183031261031557604051916128fe83610ceb565b81518352602082015161291081610304565b60208401526040820151612923816107d3565b604084015260608201516001600160401b038111610315576129459201612887565b606082015290565b1561295457565b60405162461bcd60e51b815260206004820152602560248201527f536368656d6120646f6573206e6f7420657869737420696e2045415320726567604482015264697374727960d81b6064820152608490fd5b156129ae57565b60405162461bcd60e51b815260206004820152602560248201527f4669656c64206e616d657320616e64207479706573206c656e677468206d69736044820152640dac2e8c6d60db1b6064820152608490fd5b15612a0857565b60405162461bcd60e51b815260206004820152601960248201527f536368656d6120616c72656164792072656769737465726564000000000000006044820152606490fd5b15612a5457565b60405162461bcd60e51b815260206004820152601a60248201527f536368656d61206e616d6520616c726561647920696e207573650000000000006044820152606490fd5b6001600160401b038111610cb05760051b60200190565b929190612abc81612a99565b93612aca6040519586610d06565b602085838152019160051b8101918383116103155781905b838210612af0575050505050565b81356001600160401b03811161031557602091612b108784938701610dc4565b815201910190612ae2565b818110612b26575050565b5f8155600101612b1b565b9190601f8111612b4057505050565b6107ea925f5260205f20906020601f840160051c83019310612b6a575b601f0160051c0190612b1b565b9091508190612b5d565b91909182516001600160401b038111610cb057612b9b81612b958454612423565b84612b31565b6020601f8211600114612bda578190612bcb9394955f92612bcf575b50508160011b915f199060031b1c19161790565b9055565b015190505f80612bb7565b601f19821690612bed845f5260205f2090565b915f5b818110612c2757509583600195969710612c0f575b505050811b019055565b01515f1960f88460031b161c191690555f8080612c05565b9192602060018192868b015181550194019201612bf0565b600281901b91906001600160fe1b0381160361263257565b815191600160401b8311610cb0578154838355808410612cb1575b506020612c849101915f5260205f2090565b5f915b838310612c945750505050565b6001602082612ca583945186612b74565b01920192019190612c87565b825f528360205f2091820191015b818110612ccc5750612c72565b80612cd960019254612423565b80612ce6575b5001612cbf565b601f81118314612cfb57505f81555b5f612cdf565b612d1d9083601f612d0f855f5260205f2090565b920160051c82019101612b1b565b5f8181526020812081835555612cf5565b91909182519283516001600160401b038111610cb057612d5881612d528554612423565b85612b31565b6020601f8211600114612e615791612d8f8260c0936003956107ea98995f92612bcf5750508160011b915f199060031b1c19161790565b84555b612e4760018501612dbb612da96020850151151590565b829060ff801983541691151516179055565b612df6612dd260408501516001600160401b031690565b825468ffffffffffffffff00191660089190911b68ffffffffffffffff0016178255565b612e26612e066060850151151590565b825460ff60481b191690151560481b69ff00000000000000000016178255565b60808301511515815460ff60501b191690151560501b60ff60501b16179055565b612e5860a082015160028601612c57565b01519101612c57565b601f19821695612e74855f5260205f2090565b965f5b818110612eba5750926107ea9697600395936001938360c09710612ea3575b505050811b018455612d92565b01515f1983881b60f8161c191690555f8080612e96565b83830151895560019098019760209384019301612e77565b908060209392818452848401375f828201840152601f01601f1916010190565b91602091612f0b91959495604085526040850191612ed2565b931515910152565b908154612f1f81612a99565b92612f2d6040519485610d06565b81845260208401905f5260205f205f915b838310612f4b5750505050565b600160208192604051612f62816111cc81896124a9565b815201920192019190612f3e565b90604051612f7d81610cb5565b60c0612ff860038395604051612f97816111cc81856124a9565b8552600181015460ff811615156020870152600881901c6001600160401b03166040870152612fe190612fd890611224604882901c60ff16151560608a0152565b15156080870152565b612fed60028201612f13565b60a086015201612f13565b910152565b1561300457565b60405162461bcd60e51b815260206004820152601960248201527f536368656d61206973206e6f742074696d6520736572696573000000000000006044820152606490fd5b9061305382612a99565b6130606040519182610d06565b8281528092613071601f1991612a99565b0190602036910137565b9060405161308881610c95565b604060ff6002839580548552600181015460208601520154161515910152565b8051156103465760200190565b80518210156103465760209160051b010190565b156130d057565b60405162461bcd60e51b815260206004820152601d60248201527f4e6f206174746573746174696f6e206461746120617661696c61626c650000006044820152606490fd5b9061311f82612a99565b61312c6040519182610d06565b828152809261313d601f1991612a99565b01905f5b82811061314d57505050565b806060602080938501015201613141565b602081830312610315578051906001600160401b03821161031557019060c0828203126103155761318d610d36565b9180516001600160401b03811161031557826131aa918301612887565b835260208101516001600160401b0381116103155760a0926131cd918301612887565b6020840152604081015160408401526060810151606084015260808101516080840152015160a082015290565b51906107ea82610b93565b51906107ea82610304565b602081830312610315578051906001600160401b0382116103155701610140818303126103155761323f610d45565b91815183526020820151602084015261325a604083016131fa565b604084015261326b606083016131fa565b606084015261327c608083016131fa565b608084015260a082015160a084015261329760c08301613205565b60c08401526132a860e08301613205565b60e08401526132ba6101008301612561565b6101008401526101208201516001600160401b038111610315576132de9201612887565b61012082015290565b604051906132f6602083610d06565b5f8252565b613303612645565b5061331e6080610fc4611a0e845f52600160205260405f2090565b156134b3576001600160a01b0382165f908152600560205260409020613345908290610fee565b546001600160a01b0383165f908152600460205260409020613368908390610fee565b54156134a85761106461106992610fee6133929560018060a01b03165f52600460205260405f2090565b6133a66133a26040830151151590565b1590565b613459576009546133e991905f906133c6906001600160a01b031661082b565b82519060405180809681946328c44a9960e21b8352600483019190602083019252565b03915afa9182156105da575f92613435575b5061186161341291515f52600d60205260405f2090565b6001600160a01b038116613424575090565b6001600160a01b031660e082015290565b613412919250613451611861913d805f833e6118ba8183610d06565b9291506133fb565b506134626132e7565b61346a610d45565b905f82525f60208301525f60408301525f60608301525f60808301525f60a08301525f60c08301525f60e08301525f61010083015261012082015290565b5050506134626132e7565b610fee6134d09260018060a01b03165f52600360205260405f2090565b546009546134e6906001600160a01b031661082b565b6040516328c44a9960e21b81526004810183905291905f90839060249082905afa9182156105da575f9261352b575b50611861613412915f52600d60205260405f2090565b613412919250613547611861913d805f833e6118ba8183610d06565b929150613515565b1561355657565b60405162461bcd60e51b815260206004820152602e60248201527f4e6f7420617574686f72697a656420746f207375626d69742064656c6567617460448201526d6564207265766f636174696f6e7360901b6064820152608490fd5b156135b957565b60405162461bcd60e51b815260206004820152601160248201527014da59db985d1d5c9948195e1c1a5c9959607a1b6044820152606490fd5b156135f957565b60405162461bcd60e51b8152602060048201526014602482015273536368656d61206973206e6f742061637469766560601b6044820152606490fd5b1561363c57565b60405162461bcd60e51b815260206004820152602560248201527f536368656d61206174746573746174696f6e7320617265206e6f74207265766f6044820152646361626c6560d81b6064820152608490fd5b1561369657565b60405162461bcd60e51b815260206004820152602760248201527f4174746573746f72206e6f7420617574686f72697a656420666f72207468697360448201526620736368656d6160c81b6064820152608490fd5b156136f257565b60405162461bcd60e51b815260206004820152601e60248201527f4e6f206174746573746174696f6e20666f756e6420746f207265766f6b6500006044820152606490fd5b1561373e57565b60405162461bcd60e51b815260206004820152601b60248201527f4174746573746174696f6e20616c7265616479207265766f6b656400000000006044820152606490fd5b5f1981019190821161263257565b5f516020615c115f395f51905f5203905f516020615c115f395f51905f52821161263257565b905f19820191821360011661263257565b600160ff1b8114612632575f190190565b9591969297939490946137f7611a0e885f52600160205260405f2090565b97613808611a2360608b0151151590565b61381660805f9a0151151590565b156138f957988798998761382a9899613bd5565b928361384d611b4385610fee8660018060a01b03165f52600460205260405f2090565b8061389d575b506040805192835260208301919091526001600160a01b03909216917f8126e353858963f606bf595a7a041dbea1a9853e9e6be48277bbda0113f2ae109190819081015b0390a390565b7f8126e353858963f606bf595a7a041dbea1a9853e9e6be48277bbda0113f2ae1092506138f1906138eb6138e587610fee8860018060a01b03165f52600460205260405f2090565b91613783565b9061032d565b505491613853565b9697509061394e9493929186996139458a610fee7f8126e353858963f606bf595a7a041dbea1a9853e9e6be48277bbda0113f2ae109a60018060a01b03165f52600360205260405f2090565b54988b8b613bd5565b604080519384526020840182905290946001600160a01b0316929081908101613897565b1561397957565b60405162461bcd60e51b815260206004820152601860248201527f496e636f7272656374207061796d656e7420616d6f756e7400000000000000006044820152606490fd5b906015820180921161263257565b906002820180921161263257565b9190820180921161263257565b156139ee57565b60405162461bcd60e51b815260206004820152602f60248201527f4e6f7420617574686f72697a656420746f207375626d69742064656c6567617460448201526e6564206174746573746174696f6e7360881b6064820152608490fd5b15613a5257565b60405162461bcd60e51b815260206004820152602f60248201527f5375626a65637420616c7265616479206861732061206e6f6e2d7265766f636160448201526e3136329030ba3a32b9ba30ba34b7b760891b6064820152608490fd5b15613ab657565b60405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606490fd5b90816020910312610315575190565b9060209081835280518284015201519060408082015260018060a01b0382511660608201526001600160401b0360208301511660808201526040820151151560a0820152606082015160c082015261010060a0613b6b608085015160c060e086015261012085019061060c565b93015191015290565b8054600160401b811015610cb057613b919160018201815561032d565b613bc25760026040836107ea94518455602081015160018501550151151591019060ff801983541691151516179055565b634e487b7160e01b5f525f60045260245ffd5b5f54919897909692939291613bf49061082b906001600160a01b031681565b604080516368fc2b7760e11b815260048082015233602482015291829060449082905afa80156105da57613c4f915f916140a0575b50335f908152600c60205260409020613c41906108a1565b908115614098575b506139e7565b613c646001600160401b0383164211156135b2565b85613c7a611a0e895f52600160205260405f2090565b98613c8b611a2360608c0151151590565b613c97611a4983614460565b8a60808b01978b613cab6133a28b51151590565b908161408b575b5061405e575b6001600160401b03811615614016576020909b5b01948b8b8751613cdb90151590565b92613ce7368b8d610d8e565b80519060200120613d088860018060a01b03165f52600b60205260405f2090565b54604080517fba2ff2b6a19f859820ac2a20fffc480ffa3b180c10960dbb56e62d769649ac0460208201908152918101959095526001600160a01b039790971660608501526001600160401b03948516608085015294151560a08401525f60c084015260e08301526101008201939093529116610120808301919091528152613d9361014082610d06565b519020613d9f9061464a565b92613da993614715565b613db290613aaf565b6001600160a01b0385165f908152600b602052604090208054613dd490612637565b9055511515613de1610d36565b6001600160a01b0389168152966001600160401b0316602088015215156040870152606086015f90523690613e1592610d8e565b60808501525f60a0850152613e28610d55565b83815260208101949094526009546001600160a01b03166001600160a01b031660405163f17325e760e01b81529485908190613e679060048301613afe565b03815a6020945f91f19384156105da575f94613fb9575b50613f8e8495613ede7fb3800735a1e43e7d1249a272cfbd1b79127cafafa77c11283ec3779cb36fcc969361144686613ebf8a5f52600d60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b15613f9457613f25613eee610d64565b878152426020820152600160408201526001600160a01b0383165f908152600460205260409020613f20908890610fee565b613b74565b613f46611b4386610fee8460018060a01b03165f52600460205260405f2090565b6001600160a01b0382165f908152600560205260409020613f68908790610fee565b555b604080516001600160a01b0395861681524260208201529490911693918291820190565b0390a490565b85613fb386610fee8460018060a01b03165f52600360205260405f2090565b55613f6a565b7fb3800735a1e43e7d1249a272cfbd1b79127cafafa77c11283ec3779cb36fcc96919450613ede95614005613f8e9260203d60201161400f575b613ffd8183610d06565b810190613aef565b9592509550613e7e565b503d613ff3565b5061403a61402e60408d01516001600160401b031690565b6001600160401b031690565b80156140555761404f61402e602092426139da565b9b613ccc565b5060205f61404f565b61408661407f8c610fee8560018060a01b03165f52600360205260405f2090565b5415613a4b565b613cb8565b602001511590508c613cb2565b90505f613c49565b6140b9915060403d6040116105d3576105c38183610d06565b505f613c29565b156140c757565b60405162461bcd60e51b8152602060048201526015602482015274536368656d6120616c72656164792061637469766560581b6044820152606490fd5b60405190815f82549261411684612423565b9360018116908115614174575060011461413b575b5060209250600281520301902090565b9150505f528160205f205f905b83821061415c57505060209181015f61412b565b60209192508060019154848701520191018391614148565b60ff191684525060209380151502830191505f905061412b565b9190602061255c6001926040865260408601906124a9565b156141ad57565b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606490fd5b6110696142a19361106461426993610fee5f96614203612645565b50614227608061421e611a0e865f52600160205260405f2090565b01511515612ffd565b61425061424884610fee8460018060a01b03165f52600460205260405f2090565b5486106141a6565b6001600160a01b03165f90815260046020526040902090565b60095461427e906001600160a01b031661082b565b90519060405180809581946328c44a9960e21b8352600483019190602083019252565b03915afa9081156105da575f916142b6575090565b61065e91503d805f833e6118ba8183610d06565b6142d3916132fb565b80511561430c5760e001516001600160a01b039182165f908152600660209081526040808320939094168252919091522060ff90541690565b50505f90565b906004116103155790600490565b356001600160e01b031981169291906004821061433b575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160a01b03909116815260406020820181905261065e93910191612ed2565b5f546143a3906001600160a01b031661439a614394855f614312565b90614320565b90833091614783565b90156143ae57505050565b63ffffffff1615614446575f805460ff60a01b1916600160a01b1790555f546143e19061082b906001600160a01b031681565b91823b156103155761440e925f80809460405196879586948593634a63ebf760e11b855260048501614356565b03925af180156105da5761442c575b505f805460ff60a01b19169055565b8061443a5f61444093610d06565b80610e61565b5f61441d565b62d1953b60e31b5f526001600160a01b031660045260245ffd5b5f54604080516368fc2b7760e11b81526004808201526001600160a01b038481166024830152909283916044918391165afa9081156105da575f916144c7575b506144c1576001600160a01b03165f908152600e6020526040902054151590565b50600190565b6144e0915060403d6040116105d3576105c38183610d06565b505f6144a0565b948261459191614596939661458c896145af986145848b61457661451b8960018060a01b03165f52600b60205260405f2090565b549360405194859360208501978892936001600160401b0391959460809360a08601977fad9643cb97141f727e95097f5ad0bb1d368e2d85423ec60bae2f967b5d845cb2875260208701526040860152606085015216910152565b03601f198101835282610d06565b51902061464a565b614715565b613aaf565b6001600160a01b03165f908152600b6020526040902090565b6145b98154612637565b90556145c3610d55565b9081525f60208201526145d4610d55565b91825260208201526009546145f1906001600160a01b031661082b565b803b1561031557604051634692626760e01b815282516004820152602092830151805160248301529092015160448301525f908290606490829084905af180156105da5761463c5750565b8061443a5f6107ea93610d06565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f917bc553989790dcae55916f42ba315f147872a9385c6859b10dccd254acfe3260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a081526146dc60c082610d06565b51902060405161190160f01b6020820190815260228201929092526042808201939093529182529061470f606282610d06565b51902090565b929190604182146147295761065e93614975565b6147399061065e94923691610d8e565b9061483e565b3d15614769573d9061475082610d73565b9161475e6040519384610d06565b82523d5f602084013e565b606090565b90816020910312610315575161065e816107d3565b60405163b700961360e01b602082019081526001600160a01b0393841660248301529290931660448401526001600160e01b031990931660648084019190915282525f9392849283928392916147da608482610d06565b51915afa6147e661473f565b906147f057509190565b805193909160408510614811575050602080611da29394830101910161256c565b9190936020811015614824575b50509190565b614837925060208091830101910161476e565b5f8061481e565b90604181510361490957602081015191606060408301519201515f1a907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116148f557601b821415806148fe575b6148f5576148bf5f93602095604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156105da575f516001600160a01b031680151591826148e657505090565b6001600160a01b031614919050565b50505050505f90565b50601c82141561488d565b5050505f90565b91606083830312610315578251614926816125a3565b9260208101516001600160401b0381116103155783614946918301612887565b9260408201516001600160401b0381116103155761065e9201612887565b91602061065e938181520191612ed2565b929160408110614a2457604051631f24b2ff60e01b8152915f838061499e858560048401614964565b0381305afa92835f915f956149fd575b506149bd575050505050505f90565b60ff16806149e15750505060418151146149d8575050505f90565b61065e9261483e565b600191929350146149f457505050505f90565b61065e93614a4a565b909450614a1c91503d805f833e614a148183610d06565b810190614910565b50935f6149ae565b61065e9391614739913691610d8e565b9190826040910312610315576020825192015190565b929060c88310614ada57604051631f24b2ff60e01b8152925f9184918291614a76919060048401614964565b0381305afa915f835f925f95614ae2575b50614a955750505050505f90565b60ff6001911603614ada57825192604084106148f557614ac3816020806133a297614acd9501019101614a34565b8181969295614b29565b614ada5761065e93614c61565b505050505f90565b91509350614afa91503d805f833e614a148183610d06565b919091935f614a87565b906020828203126103155781516001600160401b0381116103155761065e9201612887565b604051636ca47e9760e11b815290929091906001600160a01b038416602084600481845afa5f9481614c2f575b50614b6557505050503b151590565b90919293505f5b848110614b7c5750505050505f90565b604051638ea6902960e01b815260048101829052849084905f81602481885afa5f9181614c0b575b50614bb6575050506001905b01614b6c565b805160408114614bcd575b50505050600190614bb0565b90602080614bdf938301019101614a34565b92149182614c01575b5050614bf75783835f80614bc1565b5050505050600190565b149050835f614be8565b614c289192503d805f833e614c208183610d06565b810190614b04565b905f614ba4565b614c4991955060203d60201161400f57613ffd8183610d06565b935f614b56565b90602061065e92818152019061060c565b9291906064815110614ada575f614c8c91604051809381926380eb1a3b60e01b835260048301614c50565b0381305afa5f9181614cc9575b50614ca657505050505f90565b614576614cc461065e95604051928391602083019190602083019252565b614d57565b614ce69192503d805f833e614cde8183610d06565b81019061315e565b905f614c99565b906107ea6001614d1d936040519485916c1131b430b63632b733b2911d1160991b6020840152602d830190610ddf565b601160f91b815203601e19810185520183610d06565b8051602010156103465760400190565b614d509060209392610ddf565b9081520190565b92919060a081019384517f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8106148f55760208201907fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634614dc683516060860151614dc0816139be565b91615090565b6020815191012003614f2657614dde614de391614f30565b614ced565b614df882516040850151614dc08451826139da565b602081519101209060208151910120036148f557600160f81b600160f81b614e31614e238551614d33565b516001600160f81b03191690565b16036148f5575f614e4b6020925160405191828092610ddf565b039060025afa156105da5760205f614e808151614e748551614576604051938492888401614d43565b60405191828092610ddf565b039060025afa156105da5760805f519101935f80865185614ed185516145768a60405194859360208501978c899192608093969594919660a084019784526020840152604083015260608201520152565b51906101005afa94614ee161473f565b80519680614f1d575b614efd575061065e955051905191614f97565b600196614f199650810160209081019550019250613aef915050565b1490565b50861515614eea565b5050505050505f90565b60405161065e91614f42606083610d06565b604082527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208301527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f6040830152615131565b939190929383158015615079575b8015615071575b801561505a575b6148f557614fc183866151d8565b156148f55760405191602083526020808401526020604084015260608301527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808301525f516020615c115f395f51905f5260a083015260208260c08160055f19fa15610315575f516020615c115f395f51905f5294615054938661504e9451818189099409916152ac565b91613791565b90081590565b505f516020615c115f395f51905f52821015614fb3565b508115614fac565b505f516020615c115f395f51905f52841015614fa5565b805160609493929083811115615101575b818111156150f9575b508281106150b757505050565b6040519450918290039101601f8201601f19165b8181015185820152601f19019081156150e457906150cb565b505060408184015f6020820152016040528252565b90505f6150aa565b9250826150a1565b9061511382610d73565b6151206040519182610d06565b8281528092613071601f1991610d73565b908151156151ce579061515e61515961515261514d8451612c3f565b6139cc565b6003900490565b615109565b916020830190828051019060208201928351945f85525b83811061518457505050505290565b600360049101916001603f845182828260121c16880101518453828282600c1c16880101518385015382828260061c16880101516002850153168501015160038201530190615175565b505061065e6132e7565b600160601b63ffffffff60c01b03198110801590615294575b8015615283575b61430c57600160601b63ffffffff60c01b0319907f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b908290817fffffffff00000001000000000000000000000000fffffffffffffffffffffffc820990600160601b63ffffffff60c01b0319908181800909080890600160601b63ffffffff60c01b03199080091490565b50801580156151f8575081156151f8565b50600160601b63ffffffff60c01b03198210156151f1565b9092915f925f60ff831580615899575b61588e576152ca87866158a1565b91811580615886575b61584b575b85811c60028660fe1c16015b1561583357600186821c16600286831c60011b1601600181146157e8575b600281146157db575b6003146157ce575b6001985f19919091019694959489949392915b885f19116153a25750505050505050505060405191606083015260208252602080830152602060408301526002600160601b0363ffffffff60c01b03196080830152600163ffffffff60601b0360601b1960a083015260208260c08160055f19fa15610315579051600160601b63ffffffff60c01b0319910990565b909192939495969798600163ffffffff60601b0360601b198660020990600160601b63ffffffff60c01b0319828009600160601b63ffffffff60c01b031981830992600160601b63ffffffff60c01b03199082900991600160601b63ffffffff60c01b03199081908f8281830891600160601b63ffffffff60c01b031991820390080960030998600160601b63ffffffff60c01b03199083099c600160601b63ffffffff60c01b0319910991600160601b63ffffffff60c01b031980826002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b03198b80090898600160601b63ffffffff60c01b031991829081038b08900996600160601b63ffffffff60c01b03199088908290840908968b60028c60018d841c16921c60011b160180156157b15760018114615766575b6002811461575b575b600314615752575b821561573f57600160601b63ffffffff60c01b031990889082908f90090890600160601b63ffffffff60c01b03199089820390829085900908978115615605575b600160601b63ffffffff60c01b031989800998600160601b63ffffffff60c01b0319908a0992600160601b63ffffffff60c01b0319908a90099c600160601b63ffffffff60c01b03199084900998600160601b63ffffffff60c01b03199109600160601b63ffffffff60c01b031980826002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b031985810381868009080897600160601b63ffffffff60c01b03199384910991600160601b63ffffffff60c01b03199182908a82039008090894985b5f19019796959493929190615326565b88615529579a91975090959050600160601b63ffffffff60c01b0319816002600160601b0363ffffffff60c01b0319099a600160601b63ffffffff60c01b03198c8009600160601b63ffffffff60c01b0319818d099c600160601b63ffffffff60c01b0319908290099b600160601b63ffffffff60c01b031990818b8103820890600160601b63ffffffff60c01b0319908c900809600160601b63ffffffff60c01b03199060030991600160601b63ffffffff60c01b0319908d0998600160601b63ffffffff60c01b031991099b600160601b63ffffffff60c01b031980826002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b0319848009089b600160601b63ffffffff60c01b03199384910991600160601b63ffffffff60c01b03199182908e82039008900908946155f5565b60019c50909a8c985090965090506155f5565b505083856154e8565b8592508491506154e0565b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29692507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f591506154d7565b50505099959894600163ffffffff60601b0360601b1903946155f5565b9250809650958192615313565b969750879689945061530b565b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29698507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f59450615302565b5f1901600186821c16600286831c60011b16016152e4565b93945f516020615c115f395f51905f52919582039008935f9385158061587e575b156152d8575050505050505050505f90565b50600161586c565b5082156152d3565b505050505050505f90565b5082156152bc565b91907f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5918015615a555784611da29495831480615a4c575b15615a375750600160601b63ffffffff60c01b0319905082600209600160601b63ffffffff60c01b031981800992600160601b63ffffffff60c01b031984840991600160601b63ffffffff60c01b03199085900992600160601b63ffffffff60c01b0319908190816001820890600160601b63ffffffff60c01b0319907fffffffff00000001000000000000000000000000fffffffffffffffffffffffe900809600309600160601b63ffffffff60c01b031980846002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b03198380090892600160601b63ffffffff60c01b03196001860995600160601b63ffffffff60c01b0319906001900994600160601b63ffffffff60c01b031993849109600160601b63ffffffff60c01b03199081039290918290868203900890090890615b77565b909192615a4393615a5b565b92909190615b77565b508184146158fa565b50925090565b9193908015615b6e57600160601b63ffffffff60c01b03199081039384908290600190090893600160601b63ffffffff60c01b031990838203908290600190090892600160601b63ffffffff60c01b031984800993600160601b63ffffffff60c01b031990850992600160601b63ffffffff60c01b03199085900994600160601b63ffffffff60c01b031980876002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b031986810381858009080895600160601b63ffffffff60c01b031992839086900991600160601b63ffffffff60c01b03199182908982039008090892600160601b63ffffffff60c01b03199060010991600160601b63ffffffff60c01b03199060010990565b50600191508190565b91909260405190602082526020808301526020604083015260608201526002600160601b0363ffffffff60c01b03196080820152600163ffffffff60601b0360601b1960a082015260208160c08160055f19fa15610315575192600160601b63ffffffff60c01b03199084900992600160601b63ffffffff60c01b03199109600160601b63ffffffff60c01b031991908290800990099156feffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551a2646970667358221220abb49b079b67608411326cdd51abd16fca12abb32d4dd61ff93da41d8809c2ea64736f6c634300081c0033000000000000000000000000d2cc3486caad797d39999cd4b216260ed39abd4200000000000000000000000042000000000000000000000000000000000000210000000000000000000000004200000000000000000000000000000000000020