igneum/tools/reference-apps/oracle/artifacts/IgneumStateOracle.json

656 lines
63 KiB
JSON

{
"name": "IgneumStateOracle",
"solc": "0.8.28+commit.7893614a.Emscripten.clang",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "verifier_",
"type": "address"
},
{
"internalType": "uint64",
"name": "evmChainId_",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "evmChainIdAfterFloor_",
"type": "uint64"
},
{
"internalType": "uint256",
"name": "amountWireLen_",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint64",
"name": "number",
"type": "uint64"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "postRoot",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "blockHash",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint64",
"name": "certIndex",
"type": "uint64"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "carrier",
"type": "bytes32"
}
],
"name": "StateRoot",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "verifier",
"type": "address"
}
],
"name": "VerifierSet",
"type": "event"
},
{
"inputs": [],
"name": "amountWireLen",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "headers",
"type": "bytes[]"
},
{
"internalType": "bytes32",
"name": "checkpoint",
"type": "bytes32"
}
],
"name": "checkHeaderPath",
"outputs": [
{
"internalType": "bytes32",
"name": "carrier",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "merkle",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "evmChainId",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "evmChainIdAfterFloor",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "header",
"type": "bytes"
}
],
"name": "headerHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "leaf",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "siblings",
"type": "bytes32[]"
}
],
"name": "merkleRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "h",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "h",
"type": "bytes"
}
],
"name": "parseHeader",
"outputs": [
{
"internalType": "uint256",
"name": "parentsOff",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "parentCount",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "merkle",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "t",
"type": "bytes"
}
],
"name": "payloadOf",
"outputs": [
{
"internalType": "uint256",
"name": "off",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "len",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "number",
"type": "uint64"
},
{
"internalType": "address",
"name": "a",
"type": "address"
},
{
"internalType": "bytes[]",
"name": "accountProof",
"type": "bytes[]"
}
],
"name": "provenAccount",
"outputs": [
{
"internalType": "bool",
"name": "exists",
"type": "bool"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "storageRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "codeHash",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "number",
"type": "uint64"
},
{
"internalType": "address",
"name": "a",
"type": "address"
},
{
"internalType": "bytes[]",
"name": "accountProof",
"type": "bytes[]"
}
],
"name": "provenBalance",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "number",
"type": "uint64"
},
{
"internalType": "address",
"name": "a",
"type": "address"
},
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
},
{
"internalType": "bytes[]",
"name": "accountProof",
"type": "bytes[]"
},
{
"internalType": "bytes[]",
"name": "storageProof",
"type": "bytes[]"
}
],
"name": "provenStorage",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "t",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "recordIndex",
"type": "uint256"
}
],
"name": "readRecord",
"outputs": [
{
"internalType": "uint64",
"name": "number",
"type": "uint64"
},
{
"internalType": "bytes32",
"name": "blockHash",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "postRoot",
"type": "bytes32"
},
{
"internalType": "uint64",
"name": "chainId",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "t",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "payloadOff",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payloadLen",
"type": "uint256"
}
],
"name": "segmentSection",
"outputs": [
{
"internalType": "uint256",
"name": "off",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "len",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "setVerifier",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "number",
"type": "uint64"
}
],
"name": "stateRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "postRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "blockHash",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "carrier",
"type": "bytes32"
},
{
"internalType": "uint64",
"name": "certIndex",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "certIndex",
"type": "uint64"
},
{
"internalType": "bytes[]",
"name": "headers",
"type": "bytes[]"
},
{
"internalType": "bytes",
"name": "coinbaseTx",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "leafIndex",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "siblings",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "recordIndex",
"type": "uint256"
}
],
"name": "submitStateRoot",
"outputs": [
{
"internalType": "uint64",
"name": "number",
"type": "uint64"
},
{
"internalType": "bytes32",
"name": "postRoot",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "tx_",
"type": "bytes"
}
],
"name": "transactionHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "trust",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "verifier",
"outputs": [
{
"internalType": "contract IIgneumCertificateVerifier",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "certIndex",
"type": "uint64"
},
{
"internalType": "bytes[]",
"name": "headers",
"type": "bytes[]"
},
{
"internalType": "bytes",
"name": "coinbaseTx",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "leafIndex",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "siblings",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "recordIndex",
"type": "uint256"
}
],
"name": "verifyStateRoot",
"outputs": [
{
"internalType": "uint64",
"name": "number",
"type": "uint64"
},
{
"internalType": "bytes32",
"name": "postRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "blockHash",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "carrier",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60e0346100e657601f61345d38819003918201601f19168301916001600160401b038311848410176100ea578084926080946040528339810103126100e65780516001600160a01b03811691908290036100e65761005f602082016100fe565b606061006d604084016100fe565b9201515f80546001600160a01b0319908116909517905560018054909416331790935560805260a052806100e1575060085b60c05260405161334a9081610113823960805181818161055d0152611ac0015260a05181818161099b0152611b06015260c051818181610a8701526117710152f35b61009f565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160401b03821682036100e65756fe60806040526004361015610011575f80fd5b5f3560e01c80632b7ac3f3146101645780632bf5baf51461015f5780634aefb0a11461015a5780634cf83845146101555780635437988d146101505780635bed35da1461014b57806362636ea11461014657806364d42b17146101415780636f9fdd661461013c57806372464ca0146101375780637b8affcd1461013257806389c936881461012d5780638a01db61146101285780638da5cb5b1461012357806397ab40f91461011e578063b378a99714610119578063c60c796414610114578063ecb2c31d1461010f578063f29161041461010a578063f837d413146101055763fa228c7f14610100575f80fd5b610dde565b610d9f565b610d67565b610d24565b610cfc565b610b4f565b610a70565b610a48565b610a15565b61097c565b610961565b610936565b6105ab565b61053e565b61051e565b610490565b610317565b610290565b610230565b6101b9565b3461018b575f36600319011261018b575f546040516001600160a01b039091168152602090f35b5f80fd5b600435906001600160401b038216820361018b57565b35906001600160401b038216820361018b57565b3461018b57602036600319011261018b5760806001600160401b036101e46101df61018f565b610e22565b9160409493945194855260208501526040840152166060820152f35b9181601f8401121561018b578235916001600160401b03831161018b576020808501948460051b01011161018b57565b3461018b57604036600319011261018b576004356001600160401b03811161018b5761026e6102656040923690600401610200565b60243591611029565b82519182526020820152f35b600435906001600160a01b038216820361018b57565b3461018b5760a036600319011261018b576102a961018f565b602435906001600160a01b038216820361018b57604435916064356001600160401b03811161018b576102e0903690600401610200565b60843593916001600160401b03851161018b5760209561030761030f963690600401610200565b9590946110fb565b604051908152f35b3461018b57602036600319011261018b5761033061027a565b6001546001600160a01b0316330361038e575f80546001600160a01b0319166001600160a01b039290921691821790556040519081527f480b37e3d134e44cb444c9703493c7db564c707cb8a18cecea165f340431da1f90602090a1005b60405162461bcd60e51b81526020600482015260126024820152716f7261636c653a206f776e6572206f6e6c7960701b6044820152606490fd5b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b038211176103fd57604052565b6103c8565b604051906104116080836103dc565b565b9061041160405192836103dc565b6001600160401b0381116103fd57601f01601f191660200190565b92919261044882610421565b9161045660405193846103dc565b82948184528183011161018b578281602093845f960137010152565b9080601f8301121561018b5781602061048d9335910161043c565b90565b3461018b57604036600319011261018b576004356001600160401b03811161018b576001600160401b036104d66104cd6080933690600401610472565b6024359061140c565b91846040959495519516855260208501526040840152166060820152f35b602060031982011261018b57600435906001600160401b03821161018b5761048d91600401610472565b3461018b57602061030f610531366104f4565b610539611566565b6120af565b3461018b575f36600319011261018b5760206040516001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b3461018b575f36600319011261018b576109326102e06105ce60405191826103dc565b6102bd81527f436865636b6564206f6e20636861696e3a20746865206365727469666963617460208201527f65207468726f7567682074686520696e7374616c6c656420766572696669657260408201527f2c206865616465722068617368657320616e6420706172656e74206c696e6b7360608201527f20746f207468652063657274696669656420636865636b706f696e742c20746860808201527f6520636f696e62617365206d65726b6c6520706174682c20746865207365676d60a08201527f656e74207265636f7264206c61796f75742c20616e6420746865206163636f7560c08201527f6e7420616e642073746f726167652070726f6f667320756e64657220706f737460e08201527f5f726f6f742e20547275737465642c206e6f7420636865636b6564206f6e20636101008201527f6861696e3a20746865207665726966696572277320766f746572207461626c656101208201527f20616e6420776569676874732061726520696e7374616c6c65642062792069746101408201527f73206465706c6f7965722028612073746174656420696e7075742c206e6f74206101608201527f726561642066726f6d2074686520636861696e293b20746865206167677265676101808201527f61746f72277320424c53207369676e6174757265206f766572207468652073656101a08201527f676d656e74207265636f726420616e6420746865205350312070726f6f6620626101c08201527f6568696e64206974732073746174656d656e7420617265206e6f7420766572696101e08201527f6669656420686572652c20736f206120726f6f74207265737473206f6e2074686102008201527f652061676772656761746f7227732073746174656d656e7420617320746865206102208201527f6e6f64657320636865636b20616e64207061792069742e20412073746f7265646102408201527f20726f6f742069732070726f76656e20737461746520756e6465722074686f736102608201527f6520617373756d7074696f6e733b20612062616c616e636520726561642066726102808201527f6f6d20697420697320657865637574656420616e642066696e616c69736564206102a08201527f73746174652c206e6f742061207061796d656e74206f7574636f6d652e0000006102c082015260405191829182610581565b0390f35b3461018b57606061094e610949366104f4565b611593565b9060405192835260208301526040820152f35b3461018b57602061030f610974366104f4565b61053961165d565b3461018b575f36600319011261018b5760206040516001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b606060031982011261018b576004356001600160401b038116810361018b57916024356001600160a01b038116810361018b5791604435906001600160401b03821161018b57610a1191600401610200565b9091565b3461018b576020610a3b610a33610a2b366109bf565b939092610e22565b50505061234e565b5050915050604051908152f35b3461018b575f36600319011261018b576001546040516001600160a01b039091168152602090f35b3461018b575f36600319011261018b5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b60c060031982011261018b57610ac060046101a5565b916024356001600160401b03811161018b5782610adf91600401610200565b92909291604435916001600160401b03831161018b578060238401121561018b578260040135926001600160401b03841161018b57816024858301011161018b57602401929160643591608435906001600160401b03821161018b57610b4791600401610200565b909160a43590565b3461018b57610b72610b6036610aaa565b968899989691969592959493946119f4565b9091936001600160401b03841692835f52600260205260405f2054868115918215610cf2575b505015610c9757610c787fb650e8bdb81a79cecbd85292ffa6c38212615677fdc7f99f3332f642d3b1ce2d93610c4a610bcf610402565b898152846020820152826040820152610bf48660608301906001600160401b03169052565b610c0f896001600160401b03165f52600260205260405f2090565b606060036001600160401b039284518155602085015160018201556040850151600282015501920151166001600160401b0319825416179055565b6040519384938985909493926001600160401b03906060936080840197845260208401521660408201520152565b0390a2604080516001600160401b039290921682526020820192909252f35b60405162461bcd60e51b815260206004820152602d60248201527f6f7261636c653a20616e6f7468657220726f6f742069732073746f726564206660448201526c6f72207468617420626c6f636b60981b6064820152608490fd5b149050865f610b98565b3461018b57610d12610d0d366104f4565b61171f565b60408051928352602083019190915290f35b3461018b576080610d46610d3736610aaa565b979690969591959492946119f4565b916001600160401b0360405194168452602084015260408301526060820152f35b3461018b5760a0610d7d610a33610a2b366109bf565b9260409291925194151585526020850152604084015260608301526080820152f35b3461018b57606036600319011261018b576004356001600160401b03811161018b57610dd2610d12913690600401610472565b60243560443591611c2c565b3461018b57606036600319011261018b576004356044356024356001600160401b03821161018b57602092610e1a61030f933690600401610200565b929091611d9a565b6001600160401b03165f52600260205260405f2080548015610e5e576001820154926001600160401b0360036002850154940154169193929190565b60405162461bcd60e51b815260206004820152602560248201527f6f7261636c653a206e6f2070726f76656e20726f6f7420666f72207468617420604482015264626c6f636b60d81b6064820152608490fd5b634e487b7160e01b5f52603260045260245ffd5b9015610eff57803590601e198136030182121561018b5701908135916001600160401b03831161018b57602001823603811361018b579190565b610eb1565b9190811015610eff5760051b81013590601e198136030182121561018b5701908135916001600160401b03831161018b57602001823603811361018b579190565b15610f4c57565b60405162461bcd60e51b815260206004820152603c60248201527f686561646572733a20612068656164657220646f6573206e6f74206e616d652060448201527f7468652070726576696f7573206f6e65206173206120706172656e74000000006064820152608490fd5b15610fbe57565b60405162461bcd60e51b815260206004820152603860248201527f686561646572733a20746865206c61737420686561646572206973206e6f742060448201527f7468652063657274696669656420636865636b706f696e7400000000000000006064820152608490fd5b919290925f935f9381156110c6575f915f5b81811061105057505050906104119114610fb7565b61106561105e828486610f04565b369161043c565b9661106f88611593565b92919690841597885f146110a6575050505061108e909761053961165d565b9361109c575b60010161103b565b9296508692611094565b61108e9450916110bc916110c1938d959d611e4b565b610f45565b610974565b60405162461bcd60e51b815260206004820152600d60248201526c686561646572733a206e6f6e6560981b6044820152606490fd5b90610a3361110e94929796959397610e22565b509592915050156111225761048d93611ef7565b5050905061112e575f90565b60405162461bcd60e51b815260206004820152602860248201527f6d70743a2073746f726167652070726f6f6620666f7220616e20616273656e74604482015267081858d8dbdd5b9d60c21b6064820152608490fd5b634e487b7160e01b5f52601160045260245ffd5b90600182018092116111a657565b611184565b90600a82018092116111a657565b90601282018092116111a657565b90607682018092116111a657565b90600882018092116111a657565b90601082018092116111a657565b90609482018092116111a657565b60080190816008116111a657565b90602482018092116111a657565b90600282018092116111a657565b90602282018092116111a657565b60130190816013116111a657565b90601382018092116111a657565b60800190816080116111a657565b919082018092116111a657565b9061024a82029180830461024a14901517156111a657565b600581901b91906001600160fb1b038116036111a657565b908160011b91808304600214901517156111a657565b156112bb57565b606460405162461bcd60e51b815260206004820152602060248201527f7265636f72643a20696e646578206265796f6e64207468652073656374696f6e6044820152fd5b1561130657565b60405162461bcd60e51b815260206004820152603560248201527f7265636f72643a2073746174656d656e74206973206e6f7420666f7220746865604482015274207365676d656e742773206c61737420626c6f636b60581b6064820152608490fd5b1561137057565b60405162461bcd60e51b815260206004820152602960248201527f7265636f72643a20626c6f636b2068617368206973206e6f74207468652073746044820152686174656d656e74277360b81b6064820152608490fd5b156113ce57565b60405162461bcd60e51b81526020600482015260166024820152751c9958dbdc990e881e995c9bc81c1bdcdd17dc9bdbdd60521b6044820152606490fd5b919061142161141a8461171f565b9085611c2c565b61024a8106611514578261144161144d9261144661144161145397611198565b61126e565b11156112b4565b90611261565b61146561145f826111ab565b84611ffd565b9061148161147b611475836111b9565b86612028565b916111c7565b926115096114a761149b6114958789612028565b60c01c90565b6001600160401b031690565b926115026001600160401b036114f06114ce61149b6114956114c88c6111d5565b8d612028565b996114ea6114e46114de8c6111e3565b83612028565b9a6111f1565b90612028565b96166001600160401b038916146112ff565b8514611369565b6104118315156113c7565b60405162461bcd60e51b81526020600482015260166024820152750e4cac6dee4c87440e6cac6e8d2dedc40d8cadccee8d60531b6044820152606490fd5b604051906115616020836103dc565b5f8252565b604051906115756040836103dc565b600f82526e0a8e4c2dce6c2c6e8d2dedc90c2e6d608b1b6020830152565b906001600160401b036115a583611fb7565b169060018210611618576115bb61149b84611fd5565b916012936115d26115cb85611286565b6012611261565b906001925b8084106115e9575061048d9250612028565b909161160e8161144d61160961160461149b60019689611ffd565b611286565b6111ff565b93019291906115d7565b60405162461bcd60e51b815260206004820152601860248201527f6865616465723a206e6f20706172656e74206c6576656c7300000000000000006044820152606490fd5b6040519061166c6040836103dc565b6009825268084d8dec6d690c2e6d60bb1b6020830152565b1561168b57565b60405162461bcd60e51b815260206004820152600f60248201526e18dbda5b98985cd94e881cda1bdc9d608a1b6044820152606490fd5b908151811015610eff570160200190565b156116da57565b60405162461bcd60e51b815260206004820152601a60248201527f636f696e626173653a207061796c6f6164206f76657272756e730000000000006044820152606490fd5b9061ffff61172c83611fe9565b1661173961149b84611fb7565b90600a9060015f91109283159384925b878382106118615761176e9450611768935061149b9250859150611ffd565b916111d5565b907f00000000000000000000000000000000000000000000000000000000000000005f5b8281106117d4575050506117a6915061120d565b906104116117c06117ba61149b8587611ffd565b936111d5565b936117cb8486611261565b905110156116d3565b6117f66117e686949561144d8561121b565b61144d61160961149b838c611ffd565b94611808575b60010193929193611792565b9361184b60019161181b89518210611684565b60ff61184161183b61182d848d6116c2565b516001600160f81b03191690565b60f81c90565b1661185357611198565b9490506117fc565b61185c90611229565b611198565b91611886611890929361144d61160961149b61187f86999a9b61120d565b8094611ffd565b906118b6576111d5565b936118a2575b60010190849291611749565b926118ae60019161121b565b939050611896565b6118bf90611198565b6111d5565b9081602091031261018b575190565b6040513d5f823e3d90fd5b156118e557565b60405162461bcd60e51b8152602060048201526024808201527f6f7261636c653a206e6f206365727469666963617465206174207468617420696044820152630dcc8caf60e31b6064820152608490fd5b1561193d57565b60405162461bcd60e51b815260206004820152603a60248201527f6d65726b6c653a207061746820646f6573206e6f74207265616368207468652060448201527f63617272696572277320686173685f6d65726b6c655f726f6f740000000000006064820152608490fd5b156119af57565b60405162461bcd60e51b815260206004820152601a60248201527f7265636f72643a2073746174656d656e7420636861696e2069640000000000006044820152606490fd5b966020611a4d979493929996959a98611a22611a165f5460018060a01b031690565b6001600160a01b031690565b60405180809b819463b1b0945360e01b8352600483019190916001600160401b036020820193169052565b03915afa938415611b7357611a90611a86611aa896611aa2956104119d611aad9c5f93611b42575b50611a818315156118de565b611029565b95909c369161043c565b95611a9d87610539611566565b611d9a565b14611936565b61140c565b9592939194909493956001600160401b037f000000000000000000000000000000000000000000000000000000000000000016908115918215611b2f575b508115611af9575b506119a8565b90506001600160401b03807f0000000000000000000000000000000000000000000000000000000000000000169116145f611af3565b6001600160401b0382161491505f611aeb565b611b6591935060203d602011611b6c575b611b5d81836103dc565b8101906118c4565b915f611a75565b503d611b53565b6118d3565b15611b7f57565b60405162461bcd60e51b815260206004820152601960248201527f636f696e626173653a20736372697074206f76657272756e73000000000000006044820152606490fd5b15611bcb57565b60405162461bcd60e51b815260206004820152601960248201527f636f696e626173653a206e6f2049474e532073656374696f6e000000000000006044820152606490fd5b6007198101919082116111a657565b919082039182116111a657565b90929160138110611cc05761048d91611c9d611c96611c8f611ca594611c89611c67611c60611c5a8c6111b9565b886116c2565b5160f81c90565b611c7b83611c7483611237565b1115611b78565b611c848b611245565b611261565b98611261565b8784612495565b8683612549565b9485916125a4565b611cb184821415611bc4565b611cbb8194611c10565b611c1f565b60405162461bcd60e51b815260206004820152601b60248201527f636f696e626173653a207061796c6f616420746f6f2073686f727400000000006044820152606490fd5b9190811015610eff5760051b0190565b60405190611d246040836103dc565b601082526f09acae4d6d8ca84e4c2dcc6d090c2e6d60831b6020830152565b15611d4a57565b60405162461bcd60e51b815260206004820152602260248201527f6d65726b6c653a206c65616620696e646578206265796f6e64207468652070616044820152610e8d60f31b6064820152608490fd5b939290915f915b808310611db5575050506104119015611d43565b90919294611e10600191828816155f14611e1957611e0990611e01611ddb888789611d05565b60408051602081019490945290359083015281606081015b03601f1981018352826103dc565b610539611d15565b9660011c90565b93019190611da1565b611e4690611e01611e2b888789611d05565b60408051913560208301528101929092528160608101611df3565b611e09565b909291925f5b848110611e615750505050505f90565b6001600160fb1b03811681036111a6578060051b82018083116111a657611e89859185612028565b14611e9657600101611e51565b5050505050600190565b15611ea757565b60405162461bcd60e51b815260206004820152602260248201527f6d70743a2073746f726167652076616c7565206973206e6f74206120737472696044820152616e6760f01b6064820152608490fd5b611f1f9392916040516020810191825260208152611f166040826103dc565b519020906128d5565b9015611f7657611f2e81612e36565b90815115151580611f57575b91611f4761048d93611ea0565b6060604082015191015191613036565b50604082015191606081015183018093116111a6578151909214611f3a565b505f90565b15611f8257565b60405162461bcd60e51b815260206004820152600d60248201526c1a195859195c8e881cda1bdc9d609a1b6044820152606490fd5b602261048d91611fcb8151600a1115611f7b565b015160c01c6130c4565b602a61048d91611fcb815160121115611f7b565b602061048d91611fcb815160081115611f7b565b9060088101908181116111a6578261201d60209361048d95511015611f7b565b01015160c01c6130c4565b9060208101918282116111a65761204460209382511015611f7b565b01015190565b1561205157565b60405162461bcd60e51b81526020600482015260136024820152720c4d8c2d6ca64c47440d6caf240d8cadccee8d606b1b6044820152606490fd5b604051610100919061209e83826103dc565b60d5815291601f1901366020840137565b6120c4815180151590816122ab575b5061204a565b6120cc61208c565b916120d8610100610413565b676a09e667f3bcc908815267bb67ae8584caa73b6020820152673c6ef372fe94f82b604082015267a54ff53a5f1d36f1606082015267510e527fade682d16080820152679b05688c2b3e6c1f60a0820152671f83d9abfb41bd6b60c0820152675be0cd19137e217960e082015261218d630101002061217161216186516001600160401b031690565b60081b67ffffffffffffff001690565b83516001600160401b0316181882906001600160401b03169052565b600c60238501535f5b600881106122645750508051916121c18460c45f918260648201528260848201528260a48201520152565b80516020606486019201825e6121d8831585613134565b5f5b8381106121ec57505050506024015190565b806121fa61221b9286611c1f565b906080821161225b575b60808210612238575b81602082870101855e611261565b9061223261222883611253565b85841490876131aa565b906121da565b6122568760c45f918260648201528260848201528260a48201520152565b61220d565b60809150612204565b8060051b8201515f905f905b6008821061229057505060c01b600382901b860160240152600101612196565b909160019060ff838560031b1c169060081b17920190612270565b6040915011155f6120be565b156122be57565b60405162461bcd60e51b815260206004820152601a60248201527f6d70743a206163636f756e74206973206e6f742061206c6973740000000000006044820152606490fd5b1561230a57565b606460405162461bcd60e51b815260206004820152602060248201527f6d70743a206163636f756e7420686173206e6f7420666f7572206669656c64736044820152fd5b60405160609290921b6bffffffffffffffffffffffff191660208301908152612380949392611f168160348101611df3565b9190156124885761239082612e36565b90815161239c90151590565b6123a5906122b7565b604082019182516123b69085612f3c565b9160408301948551936060019384516123ce91611261565b6123d89082612f3c565b9460408601958651906060019081516123f091611261565b6123fa9084612f3c565b90604082019687519260600192835161241291611261565b61241c9086612f3c565b93604085019788519560600195865161243491611261565b9151906060015161244491611261565b1461244e90612303565b60019951905161245e9186613036565b9751905161246c9185613036565b9551905161247a91846131c0565b935190519061048d926131c0565b5f91508190819081908190565b60088201908183116111a6578391821061254357016324a3a72360e11b63ffffffff60e01b601c830151160361253e57826007198101116111a657601801516125159060e081901c9061250b9060c81c63ff000000165b62ff0000600884901b161761ff00600884901c16179160181c60ff1690565b1763ffffffff1690565b90612529612522836111d5565b9184611c1f565b1061253a57611cbb61048d92611c10565b5090565b505090565b50505090565b60088201908183116111a65783918210612543570163049474e560e41b63ffffffff60e01b601c830151160361253e57826007198101116111a657601801516125159060e081901c9061250b9060c81c63ff000000166124ec565b60088201908183116111a6578391821061254357016349474e5360e01b63ffffffff60e01b601c830151160361253e57826007198101116111a657601801516125159060e081901c9061250b9060c81c63ff000000166124ec565b1561260657565b60405162461bcd60e51b815260206004820152602260248201527f6d70743a206e6f206e6f64657320666f722061206e6f6e2d656d70747920726f6044820152611bdd60f21b6064820152608490fd5b1561265d57565b60405162461bcd60e51b815260206004820152602360248201527f6d70743a20746865206669727374206e6f6465206973206e6f742074686520726044820152621bdbdd60ea1b6064820152608490fd5b156126b557565b60405162461bcd60e51b815260206004820152601760248201527f6d70743a206e6f6465206973206e6f742061206c6973740000000000000000006044820152606490fd5b6040519061022061270b81846103dc565b368337565b1561271757565b60405162461bcd60e51b81526020600482015260136024820152726d70743a20746f6f206d616e79206974656d7360681b6044820152606490fd5b5f1981146111a65760010190565b906011811015610eff5760051b0190565b60405190608082018281106001600160401b038211176103fd576040525f6060838281528260208201528260408201520152565b156127ac57565b60405162461bcd60e51b815260206004820152600d60248201526c0dae0e87440c4c2c840e0c2e8d609b1b6044820152606490fd5b156127e857565b60405162461bcd60e51b81526020600482015260126024820152716d70743a20626164207265666572656e636560701b6044820152606490fd5b1561282957565b60405162461bcd60e51b815260206004820152602160248201527f6d70743a2061207265666572656e636564206e6f6465206973206d697373696e6044820152606760f81b6064820152608490fd5b1561287f57565b60405162461bcd60e51b815260206004820152602860248201527f6d70743a206e6f646520646f6573206e6f74206861736820746f20697473207260448201526765666572656e636560c01b6064820152608490fd5b939291938215612d3b576129016128f361105e858897969597610ec5565b918251602084012014612656565b5f918290600190825b6050841061294c5760405162461bcd60e51b815260206004820152601260248201527106d70743a207061746820746f6f20646565760741b6044820152606490fd5b6129569085612f3c565b946129696129648751151590565b6126ae565b6129716126fa565b965f986040880197606089519101905b61298e8a51835190611261565b8110156129e957906129dd8c836129cc8e9f9d9e9d61298e968e6129b760116129bc9410612710565b612f3c565b926129c681612752565b9e612760565b526060604082015191015190611261565b9a999b9a909150612981565b50509650979690969491946129fc612771565b5060118103612b1d575060408714612ad057612a38612a31612a3e92612a2b612a258b8b613209565b60ff1690565b90612760565b5183612f3c565b96611198565b955b8051612ac05760608101805115612aac5760209291612a638460409351146127e1565b015101015192612a74818310612822565b612a9c612a8e61105e612a8685612752565b94848c610f04565b948551602087012014612878565b60015f935b01929695949661290a565b505050505050505090505f9061048d611552565b6020600191959295015193612aa1565b93509596505050612aef9250612ae891506102000190565b5182612f3c565b9060608201805115612b10576040612b0b930151905191613230565b600191565b5050505f9061048d611552565b909690600203612cf657612b32875183612f3c565b90612b44612b408351151590565b1590565b80612ce9575b612b53906127a5565b6040820190612b826060612b7a612b7161183b61182d87518a6116c2565b60041c600f1690565b94015161129e565b6001841615801591612b9e91612ce05760ff60015b1690611c1f565b925f5b848110612c0357505050612bc4612bbd600293612bcb93611261565b9960200190565b5184612f3c565b911615612a405796975094925050506040915003612bf7578160606040612b0b94015191015191613230565b50505f9061048d611552565b5f9c979b96999a92939495989c50835f14612cc857896001612c4861183b61182d612c3260ff855b1687611261565b94612c42885161144d8860011c90565b906116c2565b9116612cc05760041c600f165b6040612c618388611261565b1090811591612c9c575b50612c84576001019b97949392919998959a969b612ba1565b50505050505050955050505050505f9061048d611552565b905060ff612cb6612a25612cb0858a611261565b87613209565b911614155f612c6b565b600f16612c55565b896001612c4861183b61182d612c3260ff6002612c2b565b60ff6002612b97565b5060608201511515612b4a565b60405162461bcd60e51b815260206004820181905260248201527f6d70743a206e6f6465207769746820616e206f6464206974656d20636f756e746044820152606490fd5b9050612d6c9293507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4219150146125ff565b5f9061048d611552565b15612d7d57565b60405162461bcd60e51b815260206004820152600a6024820152691c9b1c0e881cda1bdc9d60b21b6044820152606490fd5b60ff60f6199116019060ff82116111a657565b60ff60bf199116019060ff82116111a657565b60ff60b6199116019060ff82116111a657565b60ff607f199116019060ff82116111a657565b15612e0257565b60405162461bcd60e51b815260206004820152600c60248201526b3936381d1037bb32b9393ab760a11b6044820152606490fd5b90610411612e42612771565b92612e4f81511515612d76565b612e5f61183b61182d5f846116c2565b5f602086015260ff81166080811015612e9e5750505f6040850152600160608501525b612e956040850151606086015190611261565b90511015612dfb565b60b8811015612ecc5750612a25612eb491612de8565b6060850152612ec25f611198565b6040850152612e82565b60c0811015612f065750612ee5612a25612ec292612dd5565b612ef881612ef25f611198565b8561326b565b6060870152611c845f611198565b60f81115612f2457612a25612eb491612f1f8760019052565b612dc2565b612f33612a25612ec292612daf565b60018652612ee5565b61041190929192612f4b612771565b93612f5882518210612d76565b612f6861183b61182d83856116c2565b9080602087015260ff8216608081105f14612f99575060408601819052600160608701819052612e95925090611261565b60b8811015612fbc5750612fb2612a25612ec293612de8565b6060870152611198565b60c0811015612ff65750611c84612fd8612a25612ec294612dd5565b91612fec83612fe683611198565b8761326b565b6060890152611198565b60f8111561301257612fb2612a25612ec293612f1f8960019052565b611c84613024612a25612ec294612daf565b6001885291612fec83612fe683611198565b9092915f93602082116130875791905f925b8184106130555750505050565b9091929460081b858201908183116111a65761307c612a2561183b61182d600195896116c2565b179501929190613048565b60405162461bcd60e51b8152602060048201526015602482015274726c703a20696e746567657220746f6f207769646560581b6044820152606490fd5b61313067ff00000000000000603883901b8116600884811b64ff000000001690601886901b65ff00000000001690602887901b66ff000000000000169063ff0000009088901c16931717171762ff0000601885901c161761ff00602885901c1617921660381c60ff1690565b1790565b60409161314160806130c4565b60c01b60e483015261319e575b60d5602060248301920160095afa1561316357565b60405162461bcd60e51b8152602060048201526013602482015272626c616b6532623a20707265636f6d70696c6560681b6044820152606490fd5b600160f482015361314e565b90916131416001600160401b03604094166130c4565b916020036131d057016020015190565b60405162461bcd60e51b8152602060048201526011602482015270726c703a206e6f7420333220627974657360781b6044820152606490fd5b8160011c906020821015610eff57901a9060011661322a5760041c60ff1690565b600f1690565b929190602061323e83610421565b9161324c60405193846103dc565b83835261325884610421565b8284019390601f1901368537950101905e565b9291905f93602083111580613300575b156132c95791905f925b8284106132925750505050565b909192946132a260019160081b90565b6132be612a2561183b61182d6132b88b89611261565b876116c2565b179501929190613285565b60405162461bcd60e51b815260206004820152600f60248201526e0e4d8e07440c4c2c840d8cadccee8d608b1b6044820152606490fd5b508282018083116111a6578151101561327b56fea2646970667358221220e4ae5cc805a406a122db72dda4c6c2319e0a29e0adcdb33303214b856060103164736f6c634300081c0033",
"deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c80632b7ac3f3146101645780632bf5baf51461015f5780634aefb0a11461015a5780634cf83845146101555780635437988d146101505780635bed35da1461014b57806362636ea11461014657806364d42b17146101415780636f9fdd661461013c57806372464ca0146101375780637b8affcd1461013257806389c936881461012d5780638a01db61146101285780638da5cb5b1461012357806397ab40f91461011e578063b378a99714610119578063c60c796414610114578063ecb2c31d1461010f578063f29161041461010a578063f837d413146101055763fa228c7f14610100575f80fd5b610dde565b610d9f565b610d67565b610d24565b610cfc565b610b4f565b610a70565b610a48565b610a15565b61097c565b610961565b610936565b6105ab565b61053e565b61051e565b610490565b610317565b610290565b610230565b6101b9565b3461018b575f36600319011261018b575f546040516001600160a01b039091168152602090f35b5f80fd5b600435906001600160401b038216820361018b57565b35906001600160401b038216820361018b57565b3461018b57602036600319011261018b5760806001600160401b036101e46101df61018f565b610e22565b9160409493945194855260208501526040840152166060820152f35b9181601f8401121561018b578235916001600160401b03831161018b576020808501948460051b01011161018b57565b3461018b57604036600319011261018b576004356001600160401b03811161018b5761026e6102656040923690600401610200565b60243591611029565b82519182526020820152f35b600435906001600160a01b038216820361018b57565b3461018b5760a036600319011261018b576102a961018f565b602435906001600160a01b038216820361018b57604435916064356001600160401b03811161018b576102e0903690600401610200565b60843593916001600160401b03851161018b5760209561030761030f963690600401610200565b9590946110fb565b604051908152f35b3461018b57602036600319011261018b5761033061027a565b6001546001600160a01b0316330361038e575f80546001600160a01b0319166001600160a01b039290921691821790556040519081527f480b37e3d134e44cb444c9703493c7db564c707cb8a18cecea165f340431da1f90602090a1005b60405162461bcd60e51b81526020600482015260126024820152716f7261636c653a206f776e6572206f6e6c7960701b6044820152606490fd5b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b038211176103fd57604052565b6103c8565b604051906104116080836103dc565b565b9061041160405192836103dc565b6001600160401b0381116103fd57601f01601f191660200190565b92919261044882610421565b9161045660405193846103dc565b82948184528183011161018b578281602093845f960137010152565b9080601f8301121561018b5781602061048d9335910161043c565b90565b3461018b57604036600319011261018b576004356001600160401b03811161018b576001600160401b036104d66104cd6080933690600401610472565b6024359061140c565b91846040959495519516855260208501526040840152166060820152f35b602060031982011261018b57600435906001600160401b03821161018b5761048d91600401610472565b3461018b57602061030f610531366104f4565b610539611566565b6120af565b3461018b575f36600319011261018b5760206040516001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b3461018b575f36600319011261018b576109326102e06105ce60405191826103dc565b6102bd81527f436865636b6564206f6e20636861696e3a20746865206365727469666963617460208201527f65207468726f7567682074686520696e7374616c6c656420766572696669657260408201527f2c206865616465722068617368657320616e6420706172656e74206c696e6b7360608201527f20746f207468652063657274696669656420636865636b706f696e742c20746860808201527f6520636f696e62617365206d65726b6c6520706174682c20746865207365676d60a08201527f656e74207265636f7264206c61796f75742c20616e6420746865206163636f7560c08201527f6e7420616e642073746f726167652070726f6f667320756e64657220706f737460e08201527f5f726f6f742e20547275737465642c206e6f7420636865636b6564206f6e20636101008201527f6861696e3a20746865207665726966696572277320766f746572207461626c656101208201527f20616e6420776569676874732061726520696e7374616c6c65642062792069746101408201527f73206465706c6f7965722028612073746174656420696e7075742c206e6f74206101608201527f726561642066726f6d2074686520636861696e293b20746865206167677265676101808201527f61746f72277320424c53207369676e6174757265206f766572207468652073656101a08201527f676d656e74207265636f726420616e6420746865205350312070726f6f6620626101c08201527f6568696e64206974732073746174656d656e7420617265206e6f7420766572696101e08201527f6669656420686572652c20736f206120726f6f74207265737473206f6e2074686102008201527f652061676772656761746f7227732073746174656d656e7420617320746865206102208201527f6e6f64657320636865636b20616e64207061792069742e20412073746f7265646102408201527f20726f6f742069732070726f76656e20737461746520756e6465722074686f736102608201527f6520617373756d7074696f6e733b20612062616c616e636520726561642066726102808201527f6f6d20697420697320657865637574656420616e642066696e616c69736564206102a08201527f73746174652c206e6f742061207061796d656e74206f7574636f6d652e0000006102c082015260405191829182610581565b0390f35b3461018b57606061094e610949366104f4565b611593565b9060405192835260208301526040820152f35b3461018b57602061030f610974366104f4565b61053961165d565b3461018b575f36600319011261018b5760206040516001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b606060031982011261018b576004356001600160401b038116810361018b57916024356001600160a01b038116810361018b5791604435906001600160401b03821161018b57610a1191600401610200565b9091565b3461018b576020610a3b610a33610a2b366109bf565b939092610e22565b50505061234e565b5050915050604051908152f35b3461018b575f36600319011261018b576001546040516001600160a01b039091168152602090f35b3461018b575f36600319011261018b5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b60c060031982011261018b57610ac060046101a5565b916024356001600160401b03811161018b5782610adf91600401610200565b92909291604435916001600160401b03831161018b578060238401121561018b578260040135926001600160401b03841161018b57816024858301011161018b57602401929160643591608435906001600160401b03821161018b57610b4791600401610200565b909160a43590565b3461018b57610b72610b6036610aaa565b968899989691969592959493946119f4565b9091936001600160401b03841692835f52600260205260405f2054868115918215610cf2575b505015610c9757610c787fb650e8bdb81a79cecbd85292ffa6c38212615677fdc7f99f3332f642d3b1ce2d93610c4a610bcf610402565b898152846020820152826040820152610bf48660608301906001600160401b03169052565b610c0f896001600160401b03165f52600260205260405f2090565b606060036001600160401b039284518155602085015160018201556040850151600282015501920151166001600160401b0319825416179055565b6040519384938985909493926001600160401b03906060936080840197845260208401521660408201520152565b0390a2604080516001600160401b039290921682526020820192909252f35b60405162461bcd60e51b815260206004820152602d60248201527f6f7261636c653a20616e6f7468657220726f6f742069732073746f726564206660448201526c6f72207468617420626c6f636b60981b6064820152608490fd5b149050865f610b98565b3461018b57610d12610d0d366104f4565b61171f565b60408051928352602083019190915290f35b3461018b576080610d46610d3736610aaa565b979690969591959492946119f4565b916001600160401b0360405194168452602084015260408301526060820152f35b3461018b5760a0610d7d610a33610a2b366109bf565b9260409291925194151585526020850152604084015260608301526080820152f35b3461018b57606036600319011261018b576004356001600160401b03811161018b57610dd2610d12913690600401610472565b60243560443591611c2c565b3461018b57606036600319011261018b576004356044356024356001600160401b03821161018b57602092610e1a61030f933690600401610200565b929091611d9a565b6001600160401b03165f52600260205260405f2080548015610e5e576001820154926001600160401b0360036002850154940154169193929190565b60405162461bcd60e51b815260206004820152602560248201527f6f7261636c653a206e6f2070726f76656e20726f6f7420666f72207468617420604482015264626c6f636b60d81b6064820152608490fd5b634e487b7160e01b5f52603260045260245ffd5b9015610eff57803590601e198136030182121561018b5701908135916001600160401b03831161018b57602001823603811361018b579190565b610eb1565b9190811015610eff5760051b81013590601e198136030182121561018b5701908135916001600160401b03831161018b57602001823603811361018b579190565b15610f4c57565b60405162461bcd60e51b815260206004820152603c60248201527f686561646572733a20612068656164657220646f6573206e6f74206e616d652060448201527f7468652070726576696f7573206f6e65206173206120706172656e74000000006064820152608490fd5b15610fbe57565b60405162461bcd60e51b815260206004820152603860248201527f686561646572733a20746865206c61737420686561646572206973206e6f742060448201527f7468652063657274696669656420636865636b706f696e7400000000000000006064820152608490fd5b919290925f935f9381156110c6575f915f5b81811061105057505050906104119114610fb7565b61106561105e828486610f04565b369161043c565b9661106f88611593565b92919690841597885f146110a6575050505061108e909761053961165d565b9361109c575b60010161103b565b9296508692611094565b61108e9450916110bc916110c1938d959d611e4b565b610f45565b610974565b60405162461bcd60e51b815260206004820152600d60248201526c686561646572733a206e6f6e6560981b6044820152606490fd5b90610a3361110e94929796959397610e22565b509592915050156111225761048d93611ef7565b5050905061112e575f90565b60405162461bcd60e51b815260206004820152602860248201527f6d70743a2073746f726167652070726f6f6620666f7220616e20616273656e74604482015267081858d8dbdd5b9d60c21b6064820152608490fd5b634e487b7160e01b5f52601160045260245ffd5b90600182018092116111a657565b611184565b90600a82018092116111a657565b90601282018092116111a657565b90607682018092116111a657565b90600882018092116111a657565b90601082018092116111a657565b90609482018092116111a657565b60080190816008116111a657565b90602482018092116111a657565b90600282018092116111a657565b90602282018092116111a657565b60130190816013116111a657565b90601382018092116111a657565b60800190816080116111a657565b919082018092116111a657565b9061024a82029180830461024a14901517156111a657565b600581901b91906001600160fb1b038116036111a657565b908160011b91808304600214901517156111a657565b156112bb57565b606460405162461bcd60e51b815260206004820152602060248201527f7265636f72643a20696e646578206265796f6e64207468652073656374696f6e6044820152fd5b1561130657565b60405162461bcd60e51b815260206004820152603560248201527f7265636f72643a2073746174656d656e74206973206e6f7420666f7220746865604482015274207365676d656e742773206c61737420626c6f636b60581b6064820152608490fd5b1561137057565b60405162461bcd60e51b815260206004820152602960248201527f7265636f72643a20626c6f636b2068617368206973206e6f74207468652073746044820152686174656d656e74277360b81b6064820152608490fd5b156113ce57565b60405162461bcd60e51b81526020600482015260166024820152751c9958dbdc990e881e995c9bc81c1bdcdd17dc9bdbdd60521b6044820152606490fd5b919061142161141a8461171f565b9085611c2c565b61024a8106611514578261144161144d9261144661144161145397611198565b61126e565b11156112b4565b90611261565b61146561145f826111ab565b84611ffd565b9061148161147b611475836111b9565b86612028565b916111c7565b926115096114a761149b6114958789612028565b60c01c90565b6001600160401b031690565b926115026001600160401b036114f06114ce61149b6114956114c88c6111d5565b8d612028565b996114ea6114e46114de8c6111e3565b83612028565b9a6111f1565b90612028565b96166001600160401b038916146112ff565b8514611369565b6104118315156113c7565b60405162461bcd60e51b81526020600482015260166024820152750e4cac6dee4c87440e6cac6e8d2dedc40d8cadccee8d60531b6044820152606490fd5b604051906115616020836103dc565b5f8252565b604051906115756040836103dc565b600f82526e0a8e4c2dce6c2c6e8d2dedc90c2e6d608b1b6020830152565b906001600160401b036115a583611fb7565b169060018210611618576115bb61149b84611fd5565b916012936115d26115cb85611286565b6012611261565b906001925b8084106115e9575061048d9250612028565b909161160e8161144d61160961160461149b60019689611ffd565b611286565b6111ff565b93019291906115d7565b60405162461bcd60e51b815260206004820152601860248201527f6865616465723a206e6f20706172656e74206c6576656c7300000000000000006044820152606490fd5b6040519061166c6040836103dc565b6009825268084d8dec6d690c2e6d60bb1b6020830152565b1561168b57565b60405162461bcd60e51b815260206004820152600f60248201526e18dbda5b98985cd94e881cda1bdc9d608a1b6044820152606490fd5b908151811015610eff570160200190565b156116da57565b60405162461bcd60e51b815260206004820152601a60248201527f636f696e626173653a207061796c6f6164206f76657272756e730000000000006044820152606490fd5b9061ffff61172c83611fe9565b1661173961149b84611fb7565b90600a9060015f91109283159384925b878382106118615761176e9450611768935061149b9250859150611ffd565b916111d5565b907f00000000000000000000000000000000000000000000000000000000000000005f5b8281106117d4575050506117a6915061120d565b906104116117c06117ba61149b8587611ffd565b936111d5565b936117cb8486611261565b905110156116d3565b6117f66117e686949561144d8561121b565b61144d61160961149b838c611ffd565b94611808575b60010193929193611792565b9361184b60019161181b89518210611684565b60ff61184161183b61182d848d6116c2565b516001600160f81b03191690565b60f81c90565b1661185357611198565b9490506117fc565b61185c90611229565b611198565b91611886611890929361144d61160961149b61187f86999a9b61120d565b8094611ffd565b906118b6576111d5565b936118a2575b60010190849291611749565b926118ae60019161121b565b939050611896565b6118bf90611198565b6111d5565b9081602091031261018b575190565b6040513d5f823e3d90fd5b156118e557565b60405162461bcd60e51b8152602060048201526024808201527f6f7261636c653a206e6f206365727469666963617465206174207468617420696044820152630dcc8caf60e31b6064820152608490fd5b1561193d57565b60405162461bcd60e51b815260206004820152603a60248201527f6d65726b6c653a207061746820646f6573206e6f74207265616368207468652060448201527f63617272696572277320686173685f6d65726b6c655f726f6f740000000000006064820152608490fd5b156119af57565b60405162461bcd60e51b815260206004820152601a60248201527f7265636f72643a2073746174656d656e7420636861696e2069640000000000006044820152606490fd5b966020611a4d979493929996959a98611a22611a165f5460018060a01b031690565b6001600160a01b031690565b60405180809b819463b1b0945360e01b8352600483019190916001600160401b036020820193169052565b03915afa938415611b7357611a90611a86611aa896611aa2956104119d611aad9c5f93611b42575b50611a818315156118de565b611029565b95909c369161043c565b95611a9d87610539611566565b611d9a565b14611936565b61140c565b9592939194909493956001600160401b037f000000000000000000000000000000000000000000000000000000000000000016908115918215611b2f575b508115611af9575b506119a8565b90506001600160401b03807f0000000000000000000000000000000000000000000000000000000000000000169116145f611af3565b6001600160401b0382161491505f611aeb565b611b6591935060203d602011611b6c575b611b5d81836103dc565b8101906118c4565b915f611a75565b503d611b53565b6118d3565b15611b7f57565b60405162461bcd60e51b815260206004820152601960248201527f636f696e626173653a20736372697074206f76657272756e73000000000000006044820152606490fd5b15611bcb57565b60405162461bcd60e51b815260206004820152601960248201527f636f696e626173653a206e6f2049474e532073656374696f6e000000000000006044820152606490fd5b6007198101919082116111a657565b919082039182116111a657565b90929160138110611cc05761048d91611c9d611c96611c8f611ca594611c89611c67611c60611c5a8c6111b9565b886116c2565b5160f81c90565b611c7b83611c7483611237565b1115611b78565b611c848b611245565b611261565b98611261565b8784612495565b8683612549565b9485916125a4565b611cb184821415611bc4565b611cbb8194611c10565b611c1f565b60405162461bcd60e51b815260206004820152601b60248201527f636f696e626173653a207061796c6f616420746f6f2073686f727400000000006044820152606490fd5b9190811015610eff5760051b0190565b60405190611d246040836103dc565b601082526f09acae4d6d8ca84e4c2dcc6d090c2e6d60831b6020830152565b15611d4a57565b60405162461bcd60e51b815260206004820152602260248201527f6d65726b6c653a206c65616620696e646578206265796f6e64207468652070616044820152610e8d60f31b6064820152608490fd5b939290915f915b808310611db5575050506104119015611d43565b90919294611e10600191828816155f14611e1957611e0990611e01611ddb888789611d05565b60408051602081019490945290359083015281606081015b03601f1981018352826103dc565b610539611d15565b9660011c90565b93019190611da1565b611e4690611e01611e2b888789611d05565b60408051913560208301528101929092528160608101611df3565b611e09565b909291925f5b848110611e615750505050505f90565b6001600160fb1b03811681036111a6578060051b82018083116111a657611e89859185612028565b14611e9657600101611e51565b5050505050600190565b15611ea757565b60405162461bcd60e51b815260206004820152602260248201527f6d70743a2073746f726167652076616c7565206973206e6f74206120737472696044820152616e6760f01b6064820152608490fd5b611f1f9392916040516020810191825260208152611f166040826103dc565b519020906128d5565b9015611f7657611f2e81612e36565b90815115151580611f57575b91611f4761048d93611ea0565b6060604082015191015191613036565b50604082015191606081015183018093116111a6578151909214611f3a565b505f90565b15611f8257565b60405162461bcd60e51b815260206004820152600d60248201526c1a195859195c8e881cda1bdc9d609a1b6044820152606490fd5b602261048d91611fcb8151600a1115611f7b565b015160c01c6130c4565b602a61048d91611fcb815160121115611f7b565b602061048d91611fcb815160081115611f7b565b9060088101908181116111a6578261201d60209361048d95511015611f7b565b01015160c01c6130c4565b9060208101918282116111a65761204460209382511015611f7b565b01015190565b1561205157565b60405162461bcd60e51b81526020600482015260136024820152720c4d8c2d6ca64c47440d6caf240d8cadccee8d606b1b6044820152606490fd5b604051610100919061209e83826103dc565b60d5815291601f1901366020840137565b6120c4815180151590816122ab575b5061204a565b6120cc61208c565b916120d8610100610413565b676a09e667f3bcc908815267bb67ae8584caa73b6020820152673c6ef372fe94f82b604082015267a54ff53a5f1d36f1606082015267510e527fade682d16080820152679b05688c2b3e6c1f60a0820152671f83d9abfb41bd6b60c0820152675be0cd19137e217960e082015261218d630101002061217161216186516001600160401b031690565b60081b67ffffffffffffff001690565b83516001600160401b0316181882906001600160401b03169052565b600c60238501535f5b600881106122645750508051916121c18460c45f918260648201528260848201528260a48201520152565b80516020606486019201825e6121d8831585613134565b5f5b8381106121ec57505050506024015190565b806121fa61221b9286611c1f565b906080821161225b575b60808210612238575b81602082870101855e611261565b9061223261222883611253565b85841490876131aa565b906121da565b6122568760c45f918260648201528260848201528260a48201520152565b61220d565b60809150612204565b8060051b8201515f905f905b6008821061229057505060c01b600382901b860160240152600101612196565b909160019060ff838560031b1c169060081b17920190612270565b6040915011155f6120be565b156122be57565b60405162461bcd60e51b815260206004820152601a60248201527f6d70743a206163636f756e74206973206e6f742061206c6973740000000000006044820152606490fd5b1561230a57565b606460405162461bcd60e51b815260206004820152602060248201527f6d70743a206163636f756e7420686173206e6f7420666f7572206669656c64736044820152fd5b60405160609290921b6bffffffffffffffffffffffff191660208301908152612380949392611f168160348101611df3565b9190156124885761239082612e36565b90815161239c90151590565b6123a5906122b7565b604082019182516123b69085612f3c565b9160408301948551936060019384516123ce91611261565b6123d89082612f3c565b9460408601958651906060019081516123f091611261565b6123fa9084612f3c565b90604082019687519260600192835161241291611261565b61241c9086612f3c565b93604085019788519560600195865161243491611261565b9151906060015161244491611261565b1461244e90612303565b60019951905161245e9186613036565b9751905161246c9185613036565b9551905161247a91846131c0565b935190519061048d926131c0565b5f91508190819081908190565b60088201908183116111a6578391821061254357016324a3a72360e11b63ffffffff60e01b601c830151160361253e57826007198101116111a657601801516125159060e081901c9061250b9060c81c63ff000000165b62ff0000600884901b161761ff00600884901c16179160181c60ff1690565b1763ffffffff1690565b90612529612522836111d5565b9184611c1f565b1061253a57611cbb61048d92611c10565b5090565b505090565b50505090565b60088201908183116111a65783918210612543570163049474e560e41b63ffffffff60e01b601c830151160361253e57826007198101116111a657601801516125159060e081901c9061250b9060c81c63ff000000166124ec565b60088201908183116111a6578391821061254357016349474e5360e01b63ffffffff60e01b601c830151160361253e57826007198101116111a657601801516125159060e081901c9061250b9060c81c63ff000000166124ec565b1561260657565b60405162461bcd60e51b815260206004820152602260248201527f6d70743a206e6f206e6f64657320666f722061206e6f6e2d656d70747920726f6044820152611bdd60f21b6064820152608490fd5b1561265d57565b60405162461bcd60e51b815260206004820152602360248201527f6d70743a20746865206669727374206e6f6465206973206e6f742074686520726044820152621bdbdd60ea1b6064820152608490fd5b156126b557565b60405162461bcd60e51b815260206004820152601760248201527f6d70743a206e6f6465206973206e6f742061206c6973740000000000000000006044820152606490fd5b6040519061022061270b81846103dc565b368337565b1561271757565b60405162461bcd60e51b81526020600482015260136024820152726d70743a20746f6f206d616e79206974656d7360681b6044820152606490fd5b5f1981146111a65760010190565b906011811015610eff5760051b0190565b60405190608082018281106001600160401b038211176103fd576040525f6060838281528260208201528260408201520152565b156127ac57565b60405162461bcd60e51b815260206004820152600d60248201526c0dae0e87440c4c2c840e0c2e8d609b1b6044820152606490fd5b156127e857565b60405162461bcd60e51b81526020600482015260126024820152716d70743a20626164207265666572656e636560701b6044820152606490fd5b1561282957565b60405162461bcd60e51b815260206004820152602160248201527f6d70743a2061207265666572656e636564206e6f6465206973206d697373696e6044820152606760f81b6064820152608490fd5b1561287f57565b60405162461bcd60e51b815260206004820152602860248201527f6d70743a206e6f646520646f6573206e6f74206861736820746f20697473207260448201526765666572656e636560c01b6064820152608490fd5b939291938215612d3b576129016128f361105e858897969597610ec5565b918251602084012014612656565b5f918290600190825b6050841061294c5760405162461bcd60e51b815260206004820152601260248201527106d70743a207061746820746f6f20646565760741b6044820152606490fd5b6129569085612f3c565b946129696129648751151590565b6126ae565b6129716126fa565b965f986040880197606089519101905b61298e8a51835190611261565b8110156129e957906129dd8c836129cc8e9f9d9e9d61298e968e6129b760116129bc9410612710565b612f3c565b926129c681612752565b9e612760565b526060604082015191015190611261565b9a999b9a909150612981565b50509650979690969491946129fc612771565b5060118103612b1d575060408714612ad057612a38612a31612a3e92612a2b612a258b8b613209565b60ff1690565b90612760565b5183612f3c565b96611198565b955b8051612ac05760608101805115612aac5760209291612a638460409351146127e1565b015101015192612a74818310612822565b612a9c612a8e61105e612a8685612752565b94848c610f04565b948551602087012014612878565b60015f935b01929695949661290a565b505050505050505090505f9061048d611552565b6020600191959295015193612aa1565b93509596505050612aef9250612ae891506102000190565b5182612f3c565b9060608201805115612b10576040612b0b930151905191613230565b600191565b5050505f9061048d611552565b909690600203612cf657612b32875183612f3c565b90612b44612b408351151590565b1590565b80612ce9575b612b53906127a5565b6040820190612b826060612b7a612b7161183b61182d87518a6116c2565b60041c600f1690565b94015161129e565b6001841615801591612b9e91612ce05760ff60015b1690611c1f565b925f5b848110612c0357505050612bc4612bbd600293612bcb93611261565b9960200190565b5184612f3c565b911615612a405796975094925050506040915003612bf7578160606040612b0b94015191015191613230565b50505f9061048d611552565b5f9c979b96999a92939495989c50835f14612cc857896001612c4861183b61182d612c3260ff855b1687611261565b94612c42885161144d8860011c90565b906116c2565b9116612cc05760041c600f165b6040612c618388611261565b1090811591612c9c575b50612c84576001019b97949392919998959a969b612ba1565b50505050505050955050505050505f9061048d611552565b905060ff612cb6612a25612cb0858a611261565b87613209565b911614155f612c6b565b600f16612c55565b896001612c4861183b61182d612c3260ff6002612c2b565b60ff6002612b97565b5060608201511515612b4a565b60405162461bcd60e51b815260206004820181905260248201527f6d70743a206e6f6465207769746820616e206f6464206974656d20636f756e746044820152606490fd5b9050612d6c9293507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4219150146125ff565b5f9061048d611552565b15612d7d57565b60405162461bcd60e51b815260206004820152600a6024820152691c9b1c0e881cda1bdc9d60b21b6044820152606490fd5b60ff60f6199116019060ff82116111a657565b60ff60bf199116019060ff82116111a657565b60ff60b6199116019060ff82116111a657565b60ff607f199116019060ff82116111a657565b15612e0257565b60405162461bcd60e51b815260206004820152600c60248201526b3936381d1037bb32b9393ab760a11b6044820152606490fd5b90610411612e42612771565b92612e4f81511515612d76565b612e5f61183b61182d5f846116c2565b5f602086015260ff81166080811015612e9e5750505f6040850152600160608501525b612e956040850151606086015190611261565b90511015612dfb565b60b8811015612ecc5750612a25612eb491612de8565b6060850152612ec25f611198565b6040850152612e82565b60c0811015612f065750612ee5612a25612ec292612dd5565b612ef881612ef25f611198565b8561326b565b6060870152611c845f611198565b60f81115612f2457612a25612eb491612f1f8760019052565b612dc2565b612f33612a25612ec292612daf565b60018652612ee5565b61041190929192612f4b612771565b93612f5882518210612d76565b612f6861183b61182d83856116c2565b9080602087015260ff8216608081105f14612f99575060408601819052600160608701819052612e95925090611261565b60b8811015612fbc5750612fb2612a25612ec293612de8565b6060870152611198565b60c0811015612ff65750611c84612fd8612a25612ec294612dd5565b91612fec83612fe683611198565b8761326b565b6060890152611198565b60f8111561301257612fb2612a25612ec293612f1f8960019052565b611c84613024612a25612ec294612daf565b6001885291612fec83612fe683611198565b9092915f93602082116130875791905f925b8184106130555750505050565b9091929460081b858201908183116111a65761307c612a2561183b61182d600195896116c2565b179501929190613048565b60405162461bcd60e51b8152602060048201526015602482015274726c703a20696e746567657220746f6f207769646560581b6044820152606490fd5b61313067ff00000000000000603883901b8116600884811b64ff000000001690601886901b65ff00000000001690602887901b66ff000000000000169063ff0000009088901c16931717171762ff0000601885901c161761ff00602885901c1617921660381c60ff1690565b1790565b60409161314160806130c4565b60c01b60e483015261319e575b60d5602060248301920160095afa1561316357565b60405162461bcd60e51b8152602060048201526013602482015272626c616b6532623a20707265636f6d70696c6560681b6044820152606490fd5b600160f482015361314e565b90916131416001600160401b03604094166130c4565b916020036131d057016020015190565b60405162461bcd60e51b8152602060048201526011602482015270726c703a206e6f7420333220627974657360781b6044820152606490fd5b8160011c906020821015610eff57901a9060011661322a5760041c60ff1690565b600f1690565b929190602061323e83610421565b9161324c60405193846103dc565b83835261325884610421565b8284019390601f1901368537950101905e565b9291905f93602083111580613300575b156132c95791905f925b8284106132925750505050565b909192946132a260019160081b90565b6132be612a2561183b61182d6132b88b89611261565b876116c2565b179501929190613285565b60405162461bcd60e51b815260206004820152600f60248201526e0e4d8e07440c4c2c840d8cadccee8d608b1b6044820152606490fd5b508282018083116111a6578151101561327b56fea2646970667358221220e4ae5cc805a406a122db72dda4c6c2319e0a29e0adcdb33303214b856060103164736f6c634300081c0033"
}